博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Opencascade6.5.3+VS2010的使用初步
阅读量:4071 次
发布时间:2019-05-25

本文共 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 
#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

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

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图形设备头文件:

#include 
#include
 
 
在类中添加成员变量和引用方法。
 
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://ooeji.baihongyu.com/

你可能感兴趣的文章
Android自定义View绘制真正的居中文本
查看>>
Android贝塞尔曲线实现加入购物车抛物线动画
查看>>
Android自定义View实现商品评价星星评分控件
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
postgresql查看表的和索引的情况,判断是否膨胀
查看>>
postgresql中根据oid和filenode去找表的物理文件的位置
查看>>
postgresql中wal日志什么时候会触发归档
查看>>
Centos 6.8 上 DRBD安装和使用
查看>>
history查看历史操作记录,并显示操作时间
查看>>
postgresql修改完端口后直接psql连接数据库报错
查看>>
pl/proxy-2.5安装在postgresql9.6上无法编译
查看>>
postgresql遇到“Connection refused”和“No route to host”大概的解决方法
查看>>
postgresql上安装sysbench-0.5
查看>>
pgpool3.2.9中编译 pgpool-walrecrunning函数出错
查看>>
benchmarksql在postgresql上的安装、使用
查看>>
使用yum安装postgresql 10 dev
查看>>
postgresql减少wal日志生成量的方法
查看>>
postgresql使用RHCS套件搭建HA高可用集群
查看>>
postgresql initdb过程中大体做了什么
查看>>
linux下的mysql源码安装
查看>>