Opencascade6.5.3+VS2010的使用初步

这几天开始学习OpenCascade,很迷茫,不知道从哪儿开始!下载了软件装上之后就百度+google一下,发现很多文章都是说要编译啊神马的,搞得我很不知所措!

后来才知道,我如果只是简单的使用这个库去编程的话那就不需要去编译了。

我认为,这个OpenCascade跟OpenCv是差不多的,是一个第三方的库,只需要把一些头文件了,库啊神马的包含进去就可以使用了。那我就开始试试喽,发现有很多稀奇古怪的错误,不过现在都忘了是什么了,现在自己弄出来了,贴出来分享一下,高手勿喷啊!

 

 首先,创建一个单文档应用程序

头文件加入OpenCascade的目录:

D:\OpenCASCADE6.5.3\ros\inc是我的安装目录。

库文件同样加入OpenCascade的目录:

D:\OpenCASCADE6.5.3\ros\win32\vc9\lib是我的安装目录。

 

然后,修改stdafx.h直接在后面加上

[cpp]  view plain  copy
  1. #pragma warning(  disable : 4244 )        // Issue warning 4244  
  2. #include "Standard_ShortReal.hxx"  
  3. #pragma warning(  default : 4244 )        // Issue warning 4244  
  4.   
  5. #include <V2d_Viewer.hxx>  
  6. #include <V2d_View.hxx>  
  7. #include <AIS2D_InteractiveContext.hxx>  
  8. #include <WNT_WDriver.hxx>  
  9.   
  10. #include <Standard.hxx>  
  11. #include <AIS_InteractiveContext.hxx>  
  12. #include <AIS_Shape.hxx>  
  13. #include <Graphic3d_WNTGraphicDevice.hxx>  
  14. #include <V3d_Viewer.hxx>  
  15. #include <V3d_View.hxx>  
  16. #include <WNT_Window.hxx>  
  17.   
  18. #include <AIS2D_InteractiveObject.hxx>  
  19. #include <Graphic2d_SetOfCurves.hxx>  
  20. #include <Geom2d_TrimmedCurve.hxx>  
  21. #include <Prs2d_AspectLine.hxx>  
  22. #include <Graphic2d_Array1OfVertex.hxx>  
  23. #include <Graphic2d_Polyline.hxx>  
  24. #include <Graphic2d_Text.hxx>  
  25.   
  26. #include <Prs3d_Drawer.hxx>  
  27. #include <Prs3d_IsoAspect.hxx>  
  28. #include <Prs3d_ShadingAspect.hxx>  
  29.   
  30. #include <BRepPrimAPI_MakeCylinder.hxx>  
  31. #include <AIS_Drawer.hxx>  
  32. #include <StdPrs_ShadedShape.hxx>  
  33. #include <StdPrs_HLRPolyShape.hxx>  
  34. #include <StdSelect_BRepSelectionTool.hxx>  
  35. #include <StdPrs_WFDeflectionShape.hxx>  
  36. #include <TopExp_Explorer.hxx>  
  37. #include <BRep_Tool.hxx>  
  38. #include <TopoDS.hxx>  
  39. #include <Geom_Surface.hxx>  
  40. #include <Geom_Plane.hxx>  
  41.   
  42. #include <TopTools_HSequenceOfShape.hxx>  
  43. #include <BRepTools.hxx>  
  44.   
  45. #include <BRepBuilderAPI_NurbsConvert.hxx>  
  46. #include <Graphic3d_AspectFillArea3d.hxx>  
  47. #include <Aspect_PolygonOffsetMode.hxx>  
  48. #include <Graphic3d_Group.hxx>  


打开工程属性,在链接器选项卡中的输入项的附加依赖项中添加OpenCascade库文件

[cpp]  view plain  copy
  1. TKVrml.lib  
  2. TKStl.lib  
  3. TKBrep.lib  
  4. TKIGES.lib  
  5. TKShHealing.lib  
  6. TKStep.lib  
  7. TKXSBase.lib  
  8. TKShapeSchema.lib  
  9. FWOSPlugin.lib  
  10. PTKernel.lib  
  11. TKBool.lib  
  12. TKCAF.lib  
  13. TKCDF.lib  
  14. TKDraw.lib  
  15. TKernel.lib  
  16. TKFeat.lib  
  17. TKFillet.lib  
  18. TKG2d.lib  
  19. TKG3d.lib  
  20. TKGeomAlgo.lib  
  21. TKGeomBase.lib  
  22. TKHLR.lib  
  23. TKMath.lib  
  24. TKOffset.lib  
  25. TKPCAF.lib  
  26. TKPrim.lib  
  27. TKPShape.lib  
  28. TKService.lib  
  29. TKTopAlgo.lib  
  30. TKMesh.lib  
  31. TKV2d.lib  
  32. TKV3d.lib  
  33. TKBO.lib//千万别忘了这个啊  

**APP类中OpenCascade图形设备环境变量添加和设置

在App头文件中添加标准宏定义和Windows图形设备头文件:

[cpp]  view plain  copy
  1. #include <Standard_Macro.hxx>  
  2. #include <wnt_graphicdevice.hxx>  
 
 
在类中添加成员变量和引用方法。
 
[cpp]  view plain  copy
  1. protected:  
  2.   Handle_Graphic3d_WNTGraphicDevice m_GraphicDevice;  
  3. public:  
  4.  Handle_Graphic3d_WNTGraphicDevice GetGraphicDevice() const { return m_GraphicDevice; } ;  
 
 
在APP的源文件中的构造函数中对设备环境生成并初始化:
 
 
[cpp]  view plain  copy
  1. try  
  2.  {  
  3.   m_GraphicDevice = new Graphic3d_WNTGraphicDevice();  
  4.  }  
  5.  catch (Standard_Failure)  
  6.  {  
  7.   ExitProcess(1);  
  8.  }  
 

 此时,需要将

//#ifdef _DEBUG
//#define new DEBUG_NEW
//#endif

注释掉,原因是因为OpenCascade对New操作符进行了重载,与VS中的定义存在冲突。

**Document类中添加OpenCascade间接设备环境和图形接口

在Doc头文件中添加OpenCascade成员变量和引用方法

[cpp]  view plain  copy
  1. Handle_AIS_InteractiveContext& GetAISContext(){ return myAISContext; };  
  2. Handle_V3d_Viewer GetViewer()  { return myViewer; };  
  3. Handle_V3d_Viewer myViewer;  
  4. Handle_AIS_InteractiveContext myAISContext;  


Doc类源文件中构造函数中对OpenCascade变量初始化设置

[cpp]  view plain  copy
  1. Handle(Graphic3d_WNTGraphicDevice) theGraphicDevice =   
  2.   ((COpenCascadeApp*)AfxGetApp())->GetGraphicDevice();  
  3.    
  4.  myViewer = new V3d_Viewer(theGraphicDevice,(short *) "Visu3D");  
  5.  myViewer->SetDefaultLights();  
  6.  myViewer->SetLightOn();  
  7.  myAISContext =new AIS_InteractiveContext(myViewer);  

 

此时还需要注释New的那段代码!!!


**View类Opencascade变量设置和图形显示设置

在View头文件中添加OpenCascade变量

[cpp]  view plain  copy
  1. public:  
  2.     Handle_V3d_View& GetView() { return myView; }  


添加OnInitialUpdate虚函数设置OpenCascade显示,在OnInitialUpdate函数中添加以下代码

[cpp]  view plain  copy
  1. myView =GetDocument()->myViewer->CreateView();  
  2. myView->SetDegenerateModeOn();  
  3. myView->SetBackgroundColor(Quantity_TOC_RGB,0.1,0.,0.1);  
  4. Handle(Graphic3d_WNTGraphicDevice) theGraphicDevice = ((COpenCascadeApp*)AfxGetApp())->GetGraphicDevice();  
  5. Handle(WNT_Window) aWNTWindow = new WNT_Window(theGraphicDevice,GetSafeHwnd ());  
  6. myView->SetWindow(aWNTWindow);  
  7. if (!aWNTWindow->IsMapped()) aWNTWindow->Map();  

 

在View的析构函数中删除OpenCascade的Viewer,清理内存。

[cpp]  view plain  copy
  1. if (myView)  
  2.    myView->Remove();  


 

在OnDraw()函数添加:

[cpp]  view plain  copy
  1. if ( !myView.IsNull() )//别人的代码没加这个判断,我的不加就不对   
  2.    myView->Redraw();    


OK!此时应该能够运行成功了,如果你想要显示一个瓶子,那么应该添加一个菜单或者工具栏,然后添加消息响应函数:

[cpp]  view plain  copy
  1. TopoDS_Shape aBottle = MakeBottle(50,70,30);  
  2. Handle(AIS_Shape) AISBottle=new AIS_Shape(aBottle);  
  3. GetDocument()->myAISContext->SetMaterial(AISBottle,Graphic3d_NOM_GOLD);  
  4. GetDocument()->myAISContext->SetDisplayMode(AISBottle,1,Standard_True);  
  5. GetDocument()->myAISContext->Display(AISBottle,1, Standard_True);  
  6. GetDocument()->myAISContext->SetCurrentObject(AISBottle,Standard_False);  
  7.   
  8. Quantity_Color CSFColor ;  
  9. CSFColor = Quantity_Color (0.3,0.5,0.2,Quantity_TOC_RGB);   
  10. GetDocument()->myAISContext->SetColor(AISBottle,CSFColor.Name());  
  11.   
  12. 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

猜你喜欢

转载自blog.csdn.net/eric_e/article/details/80721029