分享一下我老师大神的人工智能教程!零基础,通俗易懂!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头文件:

[cpp] view plain copy print ?
  1. //
  2. #pragma warning(  disable : 4244 )        // Issue warning 4244
  3. #pragma warning(  disable : 4312 )        // Issue warning 4312
  4. #pragma warning(  disable : 4267 )        // Issue warning 4312
  5. #include "Standard_ShortReal.hxx"
  6. #pragma warning(  default : 4244 )        // Issue warning 4244
  7. #include <V2d_Viewer.hxx>
  8. #include <V2d_View.hxx>
  9. #include <AIS2D_InteractiveContext.hxx>
  10. #include <WNT_WDriver.hxx>
  11. #include <Standard.hxx>
  12. #include <AIS_InteractiveContext.hxx>
  13. #include <AIS_Shape.hxx>
  14. #include <Graphic3d_WNTGraphicDevice.hxx>
  15. #include <V3d_Viewer.hxx>
  16. #include <V3d_View.hxx>
  17. #include <WNT_Window.hxx>
  18. #include <AIS2D_InteractiveObject.hxx>
  19. #include <Graphic2d_SetOfCurves.hxx>
  20. #include <Geom2d_TrimmedCurve.hxx>
  21. #include <Prs2d_AspectLine.hxx>
  22. #include <Graphic2d_Array1OfVertex.hxx>
  23. #include <Graphic2d_Polyline.hxx>
  24. #include <Graphic2d_Text.hxx>
  25. #include <Prs3d_Drawer.hxx>
  26. #include <Prs3d_IsoAspect.hxx>
  27. #include <Prs3d_ShadingAspect.hxx>
  28. #include <BRepPrimAPI_MakeCylinder.hxx>
  29. #include <AIS_Drawer.hxx>
  30. #include <StdPrs_ShadedShape.hxx>
  31. #include <StdPrs_HLRPolyShape.hxx>
  32. #include <StdSelect_BRepSelectionTool.hxx>
  33. #include <StdPrs_WFDeflectionShape.hxx>
  34. #include <TopExp_Explorer.hxx>
  35. #include <BRep_Tool.hxx>
  36. #include <TopoDS.hxx>
  37. #include <Geom_Surface.hxx>
  38. #include <Geom_Plane.hxx>
  39. #include <TopTools_HSequenceOfShape.hxx>
  40. #include <BRepTools.hxx>
  41. #include <BRepBuilderAPI_NurbsConvert.hxx>
  42. #include <Graphic3d_AspectFillArea3d.hxx>
  43. #include <Aspect_PolygonOffsetMode.hxx>
  44. #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库文件

[cpp] view plain copy print ?
  1. TKVrml.lib
  2. TKStl.lib
  3. TKBrep.lib
  4. TKIGES.lib
  5. TKShHealing.lib
  6. TKStep.lib
  7. TKXSBase.lib
  8. TKShapeSchema.lib
  9. FWOSPlugin.lib
  10. PTKernel.lib
  11. TKBool.lib
  12. TKCAF.lib
  13. TKCDF.lib
  14. TKDraw.lib
  15. TKernel.lib
  16. TKFeat.lib
  17. TKFillet.lib
  18. TKG2d.lib
  19. TKG3d.lib
  20. TKGeomAlgo.lib
  21. TKGeomBase.lib
  22. TKHLR.lib
  23. TKMath.lib
  24. TKOffset.lib
  25. TKPCAF.lib
  26. TKPrim.lib
  27. TKPShape.lib
  28. TKService.lib
  29. TKTopAlgo.lib
  30. TKMesh.lib
  31. TKV2d.lib
  32. 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图形设备头文件:

[cpp] view plain copy print ?
  1. #include <Standard_Macro.hxx>
  2. #include <wnt_graphicdevice.hxx>

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

[cpp] view plain copy print ?
  1. protected:
  2. Handle_WNT_GraphicDevice m_GraphicDevice;
  3. public:
  4. Handle_WNT_GraphicDevice& GetGraphicDevice()
  5. {
  6. return m_GraphicDevice;
  7. }

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

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

[cpp] view plain copy print ?
  1. try
  2. {
  3. m_GraphicDevice = new WNT_GraphicDevice();
  4. }
  5. catch (Standard_Failure)
  6. {
  7. ExitProcess(1);
  8. }

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中的定义存在冲突,屏蔽文件前面的以下代码就可以解决了。

[cpp] view plain copy print ?
  1. // #ifdef _DEBUG
  2. // #define new DEBUG_NEW
  3. // #endif

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

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

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

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

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

[cpp] view plain copy print ?
  1. protected:
  2. Handle_AIS2D_InteractiveContext m_AISInteractiveContext2D;
  3. Handle_V2d_Viewer m_2dViewer;
  4. public:
  5. Handle_V2d_Viewer Get2dViewer()
  6. {
  7. return m_2dViewer;
  8. }

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

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

[cpp] view plain copy print ?
  1. Handle(WNT_GraphicDevice)& hGD = ((COCMfcSdi1App*)AfxGetApp())->GetGraphicDevice();
  2. TCollection_ExtendedString strName("2D Viewer");
  3. TCollection_AsciiString strDomain("My Domain");
  4. m_2dViewer = new V2d_Viewer(hGD, strName.ToExtString(), strDomain.ToCString());
  5. m_2dViewer->SetCircularGridValues(0, 0, 10, 8, 0);
  6. m_2dViewer->SetRectangularGridValues(0, 0, 10, 10, 0);
  7. 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变量

[c-sharp] view plain copy print ?
  1. private:
  2. Handle_V2d_View m_2dView;

private: Handle_V2d_View m_2dView;

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

[cpp] view plain copy print ?
  1. Handle(WNT_Window) hWindow;
  2. hWindow = new WNT_Window(((COCMfcSdi1App*)AfxGetApp())->GetGraphicDevice(), GetSafeHwnd());
  3. hWindow->SetBackground(Quantity_NOC_SLATEBLUE2);
  4. Handle(WNT_WDriver) hDriver = new WNT_WDriver(hWindow);
  5. m_2dView = new V2d_View(hDriver, GetDocument()->Get2dViewer(), 0, 0, 50);
  6. Standard_Integer nWidth = 100, nHeight = 100;
  7. hWindow->Size(nWidth, nHeight);
  8. ::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,清理内存。

[cpp] view plain copy print ?
  1. Handle(V2d_Viewer) viewer2D = m_2dView->Viewer();
  2. 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单文档相关推荐

  1. MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结

    MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结 1.MFC单文档程序运行流程 1.首先利用全局变量对象 theApp 启动应用程序 (这是因为这个全局对象,基类CWinApp中 this ...

  2. golang游戏开发学习笔记-开发一个简单的2D游戏(基础篇)

    此文写在golang游戏开发学习笔记-创建一个能自由探索的3D世界之后,感兴趣可以先去那篇文章了解一些基础知识,在这篇文章里我们要创建一个简单的2D游戏场景以及配套的人物,并实现人物运动和碰撞检测功能 ...

  3. Flutter学习笔记 —— 完成一个简单的新闻展示页

    Flutter学习笔记 -- 完成一个简单的新闻展示页 前言 思路分析 案例代码 结束语 上图 前言 刚学Flutter不久,今天我们来看看如何使用 Container & ListView实 ...

  4. iText创建一个含有中文的pdf文档

    有朋友问我pdfbox支不支持向pdf文档中写入中文.然后试了好多遍都是有乱码,也找了好多资料没有找到解决办法. 但是在查找资料的过程中发现了另一个处理pdf的开源库iText.官方介绍 http:/ ...

  5. golang游戏开发学习笔记-创建一个能自由探索的3D世界

    此文写在golang游戏开发学习笔记-用golang画一个随时间变化颜色的正方形之后,感兴趣可以先去那篇文章了解一些基础知识,在这篇文章里,我们将创建一个非常简单(只有三个方块)但能自由探索的的3D世 ...

  6. 日志库 winston 的学习笔记 - 创建一个使用 winston 的 Node.js 应用

    winston 被设计为一个简单且通用的日志库,支持多种传输. 传输本质上是日志的存储设备. 每个 winston 记录器都可以在不同级别配置多个存储渠道.例如,人们可能希望将错误日志存储在持久的远程 ...

  7. Java学习笔记整理-知识梳理+JDK1.8详细文档

    链接:java开发手册 提取码:kes8 链接:JDK1.8详细文档 提取码:n9zo JavaSE 面向对象编程(Object-oriented programming) 封装 类(class) 类 ...

  8. Redis个人学习笔记 参考B站视频以及CSDN文档 2万多字 非常全面

    参考内容: B站尚硅谷Redis视频教程 <Redis 6 入门到精通 超详细 教程> B张黑马程序员Redis视频教程 <黑马程序员Redis入门到实战教程,全面透析redis底层 ...

  9. 【转载】Redis个人学习笔记 参考B站视频以及CSDN文档 2万多字 非常全面

    参考内容: B站尚硅谷Redis视频教程 <Redis 6 入门到精通 超详细 教程> B张黑马程序员Redis视频教程 <黑马程序员Redis入门到实战教程,全面透析redis底层 ...

最新文章

  1. python yield 和 return 对比分析
  2. Windows Server 2016-活动目录NTP时间同步
  3. AVL,B,B+,红黑
  4. biti_rainy的面试题
  5. [BUUCTF-pwn]——[BJDCTF 2nd]test
  6. Using KernelShark to analyze the real-time scheduler【转】
  7. C#通用类库--短信猫操作类1(原始AT命令)
  8. Android WatchDog正解
  9. jsp、servlet、tomcat中都设置了编码为UTF-8,依然报错:java.io.CharConversionException: Not an ISO 8859-1 character:
  10. 如何看待NLP领域最近比较火的prompt,能否借鉴到CV领域?
  11. LaTex安装及快速入门使用
  12. 浅谈CDN技术的发展历程
  13. 《你的灯亮着吗》开始解决问题前,得先知道“真问题”是什么
  14. 不装oracle连接,不安装Oracle客户端连接Oracle
  15. python 中文分析句子成分_中文句子结构分析
  16. JZOJ 4809. 挖金矿
  17. SSM服装销售商城,毕业论文+源码+包运行
  18. ORA-01950: 对表空间 USERS无权限
  19. 【navicat】navicat数据连接存放位置
  20. 【PID优化】基于正余弦算法 (SCA)优化PID实现微型机器人系统位置控制附simulink模型和matlab代码

热门文章

  1. 我,是一个培训班出来的程序员
  2. 2020CCPC绵阳站 D-Defuse the Bombs (二分答案)
  3. arch firefox
  4. bat 格式化年月日时分秒
  5. Unable to preventDefault inside passive event listener due to target being treated as passive.
  6. 一天一个机器学习小知识——Lasso、Ridge以及ElasticNet
  7. python自动获取号码归属地_Python批量获取并保存手机号归属地和运营商的示例
  8. PaddlePaddle课程学习第一周笔记
  9. Image Manipulation with StyleGAN
  10. resource.h