Opencascade6.5.3+VS2010的使用初步

本文详细介绍如何在Visual Studio环境中配置OpenCascade库,实现三维图形的显示与操作,包括库文件的引入、常见错误解决方法及简单实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天开始学习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 <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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值