本文共 3885 字,大约阅读时间需要 12 分钟。
这几天开始学习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打开工程属性,在链接器选项卡中的输入项的附加依赖项中添加OpenCascade库文件#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
TKVrml.libTKStl.libTKBrep.libTKIGES.libTKShHealing.libTKStep.libTKXSBase.libTKShapeSchema.libFWOSPlugin.libPTKernel.libTKBool.libTKCAF.libTKCDF.libTKDraw.libTKernel.libTKFeat.libTKFillet.libTKG2d.libTKG3d.libTKGeomAlgo.libTKGeomBase.libTKHLR.libTKMath.libTKOffset.libTKPCAF.libTKPrim.libTKPShape.libTKService.libTKTopAlgo.libTKMesh.libTKV2d.libTKV3d.libTKBO.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://ooeji.baihongyu.com/