Opencascade6.5.3+VS2010的使用初步
2012-10-19 09:22
645 查看
这几天开始学习OpenCascade,很迷茫,不知道从哪儿开始!下载了软件装上之后就百度+google一下,发现很多文章都是说要编译啊神马的,搞得我很不知所措!
后来才知道,我如果只是简单的使用这个库去编程的话那就不需要去编译了。
我认为,这个OpenCascade跟OpenCv是差不多的,是一个第三方的库,只需要把一些头文件了,库啊神马的包含进去就可以使用了。那我就开始试试喽,发现有很多稀奇古怪的错误,不过现在都忘了是什么了,现在自己弄出来了,贴出来分享一下,高手勿喷啊!
首先,创建一个单文档应用程序
头文件加入OpenCascade的目录:
D:\OpenCASCADE6.5.3\ros\inc是我的安装目录。
库文件同样加入OpenCascade的目录:
D:\OpenCASCADE6.5.3\ros\win32\vc9\lib是我的安装目录。
然后,修改stdafx.h直接在后面加上
打开工程属性,在链接器选项卡中的输入项的附加依赖项中添加OpenCascade库文件
**APP类中OpenCascade图形设备环境变量添加和设置
在App头文件中添加标准宏定义和Windows图形设备头文件:
在类中添加成员变量和引用方法。
在APP的源文件中的构造函数中对设备环境生成并初始化:
此时,需要将
//#ifdef _DEBUG
//#define new DEBUG_NEW
//#endif
注释掉,原因是因为OpenCascade对New操作符进行了重载,与VS中的定义存在冲突。
**Document类中添加OpenCascade间接设备环境和图形接口
在Doc头文件中添加OpenCascade成员变量和引用方法
Doc类源文件中构造函数中对OpenCascade变量初始化设置
此时还需要注释New的那段代码!!!
**View类Opencascade变量设置和图形显示设置
在View头文件中添加OpenCascade变量
添加OnInitialUpdate虚函数设置OpenCascade显示,在OnInitialUpdate函数中添加以下代码
在View的析构函数中删除OpenCascade的Viewer,清理内存。
在OnDraw()函数添加:
OK!此时应该能够运行成功了,如果你想要显示一个瓶子,那么应该添加一个菜单或者工具栏,然后添加消息响应函数:
这样你就能看到显示的瓶子了!
然后就是自己往下深究Opencascade的其他功能了!
参考:
http://blog.csdn.net/Augusdi/article/details/5642368
http://blog.csdn.net/astrosky
http://blog.csdn.net/dandanCool
后来才知道,我如果只是简单的使用这个库去编程的话那就不需要去编译了。
我认为,这个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图形设备头文件:
#include <Standard_Macro.hxx> #include <wnt_graphicdevice.hxx>
在类中添加成员变量和引用方法。
protected: Handle_Graphic3d_WNTGraphicDevice m_GraphicDevice; public: Handle_Graphic3d_WNTGraphicDevice GetGraphicDevice() const { return m_GraphicDevice; } ;
在APP的源文件中的构造函数中对设备环境生成并初始化:
try { m_GraphicDevice = new Graphic3d_WNTGraphicDevice(); } catch (Standard_Failure) { ExitProcess(1); }
此时,需要将
//#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
相关文章推荐
- C#如何使用VS2010与SQL2008建立链接及初步调用(转)
- C#如何使用VS2010与SQL2008建立链接及初步调用
- 初步认识dll,在VS2010平台上创建并使用dll
- 初步认识dll,在VS2010平台上创建并使用dll
- .天轰穿C# -vs2010 - 04面向对象的编程之类的使用【原创】 2012-12-17 10:55阅读(0).
- 关于Vs2010 C#使用DirectX的问题
- 在VS2010中使用Git
- C++开源日志库Glog的使用(VS2010)
- Spring-data-mongodb初步使用
- SQLite3数据库Native C++封装类(Unicode)CppSQLite3U的初步认识与使用
- Metasploit的armitage初步使用
- VS2010使用存在的问题
- kindeditor富文本编辑器初步使用教程
- Ajax使用初步
- 在VS2010中使用$err,hr快速查看当前GetLastError()的值
- VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)
- BeautifulSoup4的初步使用
- EventBus使用详解(一)——初步使用EventBus
- Qt简介以及如何配置Qt使用VS2010进行开发
- 码云的初步使用