OpenCascade学习笔记-创建一个简单的OpenCascade单文档
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
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>
//#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
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.lib
三、APP类中OpenCascade图形设备环境变量添加和设置
在App头文件中添加标准宏定义和Windows图形设备头文件:
- #include <Standard_Macro.hxx>
- #include <wnt_graphicdevice.hxx>
#include <Standard_Macro.hxx>#include <wnt_graphicdevice.hxx>
在类中添加成员变量和引用方法。
- protected:
- Handle_WNT_GraphicDevice m_GraphicDevice;
- public:
- Handle_WNT_GraphicDevice& GetGraphicDevice()
- {
- return m_GraphicDevice;
- }
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);
- }
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
// #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;
- }
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);
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;
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);
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);
Handle(V2d_Viewer) viewer2D = m_2dView->Viewer(); viewer2D->RemoveView(m_2dView);
同样屏蔽前面的New代码部分。
六、运行观察
到此为止,OpenCascade的初始化和设置已经完成,运行程序,就可以看到OpenCascade的紫色界面了。
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
OpenCascade学习笔记-创建一个简单的OpenCascade单文档相关推荐
- MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结
MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结 1.MFC单文档程序运行流程 1.首先利用全局变量对象 theApp 启动应用程序 (这是因为这个全局对象,基类CWinApp中 this ...
- golang游戏开发学习笔记-开发一个简单的2D游戏(基础篇)
此文写在golang游戏开发学习笔记-创建一个能自由探索的3D世界之后,感兴趣可以先去那篇文章了解一些基础知识,在这篇文章里我们要创建一个简单的2D游戏场景以及配套的人物,并实现人物运动和碰撞检测功能 ...
- Flutter学习笔记 —— 完成一个简单的新闻展示页
Flutter学习笔记 -- 完成一个简单的新闻展示页 前言 思路分析 案例代码 结束语 上图 前言 刚学Flutter不久,今天我们来看看如何使用 Container & ListView实 ...
- iText创建一个含有中文的pdf文档
有朋友问我pdfbox支不支持向pdf文档中写入中文.然后试了好多遍都是有乱码,也找了好多资料没有找到解决办法. 但是在查找资料的过程中发现了另一个处理pdf的开源库iText.官方介绍 http:/ ...
- golang游戏开发学习笔记-创建一个能自由探索的3D世界
此文写在golang游戏开发学习笔记-用golang画一个随时间变化颜色的正方形之后,感兴趣可以先去那篇文章了解一些基础知识,在这篇文章里,我们将创建一个非常简单(只有三个方块)但能自由探索的的3D世 ...
- 日志库 winston 的学习笔记 - 创建一个使用 winston 的 Node.js 应用
winston 被设计为一个简单且通用的日志库,支持多种传输. 传输本质上是日志的存储设备. 每个 winston 记录器都可以在不同级别配置多个存储渠道.例如,人们可能希望将错误日志存储在持久的远程 ...
- Java学习笔记整理-知识梳理+JDK1.8详细文档
链接:java开发手册 提取码:kes8 链接:JDK1.8详细文档 提取码:n9zo JavaSE 面向对象编程(Object-oriented programming) 封装 类(class) 类 ...
- Redis个人学习笔记 参考B站视频以及CSDN文档 2万多字 非常全面
参考内容: B站尚硅谷Redis视频教程 <Redis 6 入门到精通 超详细 教程> B张黑马程序员Redis视频教程 <黑马程序员Redis入门到实战教程,全面透析redis底层 ...
- 【转载】Redis个人学习笔记 参考B站视频以及CSDN文档 2万多字 非常全面
参考内容: B站尚硅谷Redis视频教程 <Redis 6 入门到精通 超详细 教程> B张黑马程序员Redis视频教程 <黑马程序员Redis入门到实战教程,全面透析redis底层 ...
最新文章
- python yield 和 return 对比分析
- Windows Server 2016-活动目录NTP时间同步
- AVL,B,B+,红黑
- biti_rainy的面试题
- [BUUCTF-pwn]——[BJDCTF 2nd]test
- Using KernelShark to analyze the real-time scheduler【转】
- C#通用类库--短信猫操作类1(原始AT命令)
- Android WatchDog正解
- jsp、servlet、tomcat中都设置了编码为UTF-8,依然报错:java.io.CharConversionException: Not an ISO 8859-1 character:
- 如何看待NLP领域最近比较火的prompt,能否借鉴到CV领域?
- LaTex安装及快速入门使用
- 浅谈CDN技术的发展历程
- 《你的灯亮着吗》开始解决问题前,得先知道“真问题”是什么
- 不装oracle连接,不安装Oracle客户端连接Oracle
- python 中文分析句子成分_中文句子结构分析
- JZOJ 4809. 挖金矿
- SSM服装销售商城,毕业论文+源码+包运行
- ORA-01950: 对表空间 USERS无权限
- 【navicat】navicat数据连接存放位置
- 【PID优化】基于正余弦算法 (SCA)优化PID实现微型机器人系统位置控制附simulink模型和matlab代码
热门文章
- 我,是一个培训班出来的程序员
- 2020CCPC绵阳站 D-Defuse the Bombs (二分答案)
- arch firefox
- bat 格式化年月日时分秒
- Unable to preventDefault inside passive event listener due to target being treated as passive.
- 一天一个机器学习小知识——Lasso、Ridge以及ElasticNet
- python自动获取号码归属地_Python批量获取并保存手机号归属地和运营商的示例
- PaddlePaddle课程学习第一周笔记
- Image Manipulation with StyleGAN
- resource.h