这几天开始学习OpenCascade,很迷茫,不知道从哪儿开始!下载了软件装上之后就百度+google一下,发现很多文章都是说要编译啊神马的,搞得我很不知所措!
后来才知道,我如果只是简单的使用这个库去编程的话那就不需要去编译了。
我认为,这个OpenCascade跟OpenCv是差不多的,是一个第三方的库,只需要把一些头文件了,库啊神马的包含进去就可以使用了。那我就开始试试喽,发现有很多稀奇古怪的错误,不过现在都忘了是什么了,现在自己弄出来了,贴出来分享一下,高手勿喷啊!
首先,创建一个单文档应用程序
头文件加入OpenCascade的目录:
D:\OpenCASCADE6.5.3\ros\inc是我的安装目录。
库文件同样加入OpenCascade的目录:
D:\OpenCASCADE6.5.3\ros\win32\vc9\lib是我的安装目录。
然后,修改stdafx.h直接在后面加上
- #pragma warning( disable : 4244 ) // Issue warning 4244
- #include "Standard_ShortReal.hxx"
- #pragma warning( default : 4244 ) // Issue warning 4244
- #include <V2d_Viewer.hxx>
- #include <V2d_View.hxx>
- #include <AIS2D_InteractiveContext.hxx>
- #include <WNT_WDriver.hxx>
- #include <Standard.hxx>
- #include <AIS_InteractiveContext.hxx>
- #include <AIS_Shape.hxx>
- #include <Graphic3d_WNTGraphicDevice.hxx>
- #include <V3d_Viewer.hxx>
- #include <V3d_View.hxx>
- #include <WNT_Window.hxx>
- #include <AIS2D_InteractiveObject.hxx>
- #include <Graphic2d_SetOfCurves.hxx>
- #include <Geom2d_TrimmedCurve.hxx>
- #include <Prs2d_AspectLine.hxx>
- #include <Graphic2d_Array1OfVertex.hxx>
- #include <Graphic2d_Polyline.hxx>
- #include <Graphic2d_Text.hxx>
- #include <Prs3d_Drawer.hxx>
- #include <Prs3d_IsoAspect.hxx>
- #include <Prs3d_ShadingAspect.hxx>
- #include <BRepPrimAPI_MakeCylinder.hxx>
- #include <AIS_Drawer.hxx>
- #include <StdPrs_ShadedShape.hxx>
- #include <StdPrs_HLRPolyShape.hxx>
- #include <StdSelect_BRepSelectionTool.hxx>
- #include <StdPrs_WFDeflectionShape.hxx>
- #include <TopExp_Explorer.hxx>
- #include <BRep_Tool.hxx>
- #include <TopoDS.hxx>
- #include <Geom_Surface.hxx>
- #include <Geom_Plane.hxx>
- #include <TopTools_HSequenceOfShape.hxx>
- #include <BRepTools.hxx>
- #include <BRepBuilderAPI_NurbsConvert.hxx>
- #include <Graphic3d_AspectFillArea3d.hxx>
- #include <Aspect_PolygonOffsetMode.hxx>
- #include <Graphic3d_Group.hxx>
打开工程属性,在链接器选项卡中的输入项的附加依赖项中添加OpenCascade库文件
- TKVrml.lib
- TKStl.lib
- TKBrep.lib
- TKIGES.lib
- TKShHealing.lib
- TKStep.lib
- TKXSBase.lib
- TKShapeSchema.lib
- FWOSPlugin.lib
- PTKernel.lib
- TKBool.lib
- TKCAF.lib
- TKCDF.lib
- TKDraw.lib
- TKernel.lib
- TKFeat.lib
- TKFillet.lib
- TKG2d.lib
- TKG3d.lib
- TKGeomAlgo.lib
- TKGeomBase.lib
- TKHLR.lib
- TKMath.lib
- TKOffset.lib
- TKPCAF.lib
- TKPrim.lib
- TKPShape.lib
- TKService.lib
- TKTopAlgo.lib
- TKMesh.lib
- TKV2d.lib
- TKV3d.lib
- TKBO.lib//千万别忘了这个啊
**APP类中OpenCascade图形设备环境变量添加和设置
在App头文件中添加标准宏定义和Windows图形设备头文件:
//#ifdef _DEBUG
//#define new DEBUG_NEW
//#endif
注释掉,原因是因为OpenCascade对New操作符进行了重载,与VS中的定义存在冲突。
**Document类中添加OpenCascade间接设备环境和图形接口
在Doc头文件中添加OpenCascade成员变量和引用方法
- Handle_AIS_InteractiveContext& GetAISContext(){ return myAISContext; };
- Handle_V3d_Viewer GetViewer() { return myViewer; };
- Handle_V3d_Viewer myViewer;
- Handle_AIS_InteractiveContext myAISContext;
Doc类源文件中构造函数中对OpenCascade变量初始化设置
- Handle(Graphic3d_WNTGraphicDevice) theGraphicDevice =
- ((COpenCascadeApp*)AfxGetApp())->GetGraphicDevice();
- myViewer = new V3d_Viewer(theGraphicDevice,(short *) "Visu3D");
- myViewer->SetDefaultLights();
- myViewer->SetLightOn();
- myAISContext =new AIS_InteractiveContext(myViewer);
此时还需要注释New的那段代码!!!
**View类Opencascade变量设置和图形显示设置
在View头文件中添加OpenCascade变量
- public:
- Handle_V3d_View& GetView() { return myView; }
添加OnInitialUpdate虚函数设置OpenCascade显示,在OnInitialUpdate函数中添加以下代码
- myView =GetDocument()->myViewer->CreateView();
- myView->SetDegenerateModeOn();
- myView->SetBackgroundColor(Quantity_TOC_RGB,0.1,0.,0.1);
- Handle(Graphic3d_WNTGraphicDevice) theGraphicDevice = ((COpenCascadeApp*)AfxGetApp())->GetGraphicDevice();
- Handle(WNT_Window) aWNTWindow = new WNT_Window(theGraphicDevice,GetSafeHwnd ());
- myView->SetWindow(aWNTWindow);
- if (!aWNTWindow->IsMapped()) aWNTWindow->Map();
在View的析构函数中删除OpenCascade的Viewer,清理内存。
- if (myView)
- myView->Remove();
在OnDraw()函数添加:
- if ( !myView.IsNull() )//别人的代码没加这个判断,我的不加就不对
- myView->Redraw();
OK!此时应该能够运行成功了,如果你想要显示一个瓶子,那么应该添加一个菜单或者工具栏,然后添加消息响应函数:
- TopoDS_Shape aBottle = MakeBottle(50,70,30);
- Handle(AIS_Shape) AISBottle=new AIS_Shape(aBottle);
- GetDocument()->myAISContext->SetMaterial(AISBottle,Graphic3d_NOM_GOLD);
- GetDocument()->myAISContext->SetDisplayMode(AISBottle,1,Standard_True);
- GetDocument()->myAISContext->Display(AISBottle,1, Standard_True);
- GetDocument()->myAISContext->SetCurrentObject(AISBottle,Standard_False);
- Quantity_Color CSFColor ;
- CSFColor = Quantity_Color (0.3,0.5,0.2,Quantity_TOC_RGB);
- GetDocument()->myAISContext->SetColor(AISBottle,CSFColor.Name());
- myView->FitAll();//使瓶子最大化;
这样你就能看到显示的瓶子了!
然后就是自己往下深究Opencascade的其他功能了!
参考:
http://blog.csdn.net/Augusdi/article/details/5642368
http://blog.csdn.net/astrosky
http://blog.csdn.net/dandanCool
转:https://blog.csdn.net/shlkl99/article/details/8086825