OpenCascade学习笔记-创建一个简单的OpenCascade单文档

OpenCascade是源代码公开,功能强大的3D建模仿真工具,以下是在VS2005中设置和创建OpenCascade程序的基本过程。

一、环境设置

    启动VS2005,选择Tools/Options.../Projects & Solutions下的VC++Directories项,

头文件加入OpenCascade的目录:

    C:/OpenCASCADE6.3.0/ros/inc是我的安装目录。

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

    C:/OpenCASCADE6.3.0/ros/win32/lib是我的安装目录。

二、产生VS工程项目和设定

    创建VC++单文档工程项目,其余保持默认属性。

    在StdAfx.h头文件中添加OpenCascade头文件:

////////////////////////////////////////////////////////////////////////// #pragma warning( disable : 4244 ) // Issue warning 4244 #pragma warning( disable : 4312 ) // Issue warning 4312 #pragma warning( disable : 4267 ) // Issue warning 4312 #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>

    打开工程属性,在Link/Input选项卡中的Additional Dependencies中田间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

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

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

#include <Standard_Macro.hxx> #include <wnt_graphicdevice.hxx>
在类中添加成员变量和引用方法。

protected: Handle_WNT_GraphicDevice m_GraphicDevice; public: Handle_WNT_GraphicDevice& GetGraphicDevice() { return m_GraphicDevice; }

    在APP的源文件中的构造函数中对设备环境生成并初始化:

try { m_GraphicDevice = new WNT_GraphicDevice(); } catch (Standard_Failure) { ExitProcess(1); }

    此时编译提示错误信息:

error C2661: 'Standard_Transient::operator new' : no overloaded function takes 3 arguments

原因是因为OpenCascade对New操作符进行了重载,与VS中的定义存在冲突,屏蔽文件前面的以下代码就可以解决了。

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

后面OpenCascade使用new操作符的地方,都需同样的方法解决,不再赘述。具体可以参考OpenCascade官方放站的以下链接,有详细说明:

http://www.opencascade.org/org/forum/thread_14858/

 

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

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

protected: Handle_AIS2D_InteractiveContext m_AISInteractiveContext2D; Handle_V2d_Viewer m_2dViewer; public: Handle_V2d_Viewer Get2dViewer() { return m_2dViewer; }

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

Handle(WNT_GraphicDevice)& hGD = ((COCMfcSdi1App*)AfxGetApp())->GetGraphicDevice(); TCollection_ExtendedString strName("2D Viewer"); TCollection_AsciiString strDomain("My Domain"); m_2dViewer = new V2d_Viewer(hGD, strName.ToExtString(), strDomain.ToCString()); m_2dViewer->SetCircularGridValues(0, 0, 10, 8, 0); m_2dViewer->SetRectangularGridValues(0, 0, 10, 10, 0); m_AISInteractiveContext2D = new AIS2D_InteractiveContext(m_2dViewer);

  呵呵,不要忘记了屏蔽前面的NEW代码^_^

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

   在View头文件中添加OpenCascade变量

   private: Handle_V2d_View m_2dView;

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

Handle(WNT_Window) hWindow; hWindow = new WNT_Window(((COCMfcSdi1App*)AfxGetApp())->GetGraphicDevice(), GetSafeHwnd()); hWindow->SetBackground(Quantity_NOC_SLATEBLUE2); Handle(WNT_WDriver) hDriver = new WNT_WDriver(hWindow); m_2dView = new V2d_View(hDriver, GetDocument()->Get2dViewer(), 0, 0, 50); Standard_Integer nWidth = 100, nHeight = 100; hWindow->Size(nWidth, nHeight); ::PostMessage(GetSafeHwnd(), WM_SIZE, SIZE_RESTORED, nWidth + nHeight * 65536);

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

Handle(V2d_Viewer) viewer2D = m_2dView->Viewer(); viewer2D->RemoveView(m_2dView);    

   同样屏蔽前面的New代码部分。

 

六、运行观察

   到此为止,OpenCascade的初始化和设置已经完成,运行程序,就可以看到OpenCascade的紫色界面了。

 

  

你可能感兴趣的:(function,Integer,文档,domain,图形,dependencies)