OCC:第一个程序,对话框中显示一个BOX

2023-12-23 00:20

本文主要是介绍OCC:第一个程序,对话框中显示一个BOX,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. OCC库的获取

  1. 从github上获取 git@github.com:tpaviot/oce.git,自己编译
  2. 官网获取二进制包(获取下来的只有release 版本的,而且VS版本不一定适合自己)
  3. 官网源码,然后自己编译(稍微折腾点,建议按步骤1的方法,github上整理好的,用CMake直接编译,很方便)
  4. 本人编译好的,vs2013的win32及x64版本
    occ-vs2013-x64-debug-release
    occ-vs2013-win32-debug-release

2. MFC对话框程序,使用OCC显示BOX

  1. 头文件OCC相关代码
#include "V3d_Viewer.hxx"
#include "AIS_InteractiveContext.hxx"// COccDialogDemoDlg dialog
class COccDialogDemoDlg : public CDialogEx
{//其余代码,略//...
private:Handle(V3d_Viewer) m_pOccViewer;Handle(V3d_View) m_pOccView;Handle(AIS_InteractiveContext) m_pOccAISContext;
}
  1. Cpp文件OCC相关代码
BOOL COccDialogDemoDlg::OnInitDialog()
{CDialogEx::OnInitDialog();//其他代码,略//....try{//使用OpenGL来显示Handle(Aspect_DisplayConnection) aDisplayConnection;Handle(OpenGl_GraphicDriver) aGraphicDriver = new OpenGl_GraphicDriver(aDisplayConnection);//创建3D视图器TCollection_ExtendedString myViewerName("MyOccViewer");m_pOccViewer = new V3d_Viewer(aGraphicDriver, myViewerName.ToExtString());// set parameters for V3d_Viewer// defines default lights -// positional-light 0.3 0.0 0.0// directional-light V3d_XnegYposZpos// directional-light V3d_XnegYneg// ambient-light//设置默认灯光并开启灯光m_pOccViewer->SetDefaultLights();// activates all the lights defined in this viewerm_pOccViewer->SetLightOn();// set background color to blackm_pOccViewer->SetDefaultBackgroundColor(Quantity_NOC_BLACK);//创建3d视图Handle(WNT_Window) aWNTWindow = new WNT_Window(GetSafeHwnd());m_pOccView = m_pOccViewer->CreateView();m_pOccView->SetWindow(aWNTWindow);//创建交互上下文m_pOccAISContext = new AIS_InteractiveContext(m_pOccViewer);//显示一个boxTopoDS_Shape aShape = BRepPrimAPI_MakeBox(100, 200, 300);Handle(AIS_Shape) anAISShape = new AIS_Shape(aShape);m_pOccAISContext->Display(anAISShape);}catch (Standard_Failure const& anException){Standard_SStream aSStream;aSStream << "An exception was caught: " << anException.GetMessageString() << ends;CString aMsg(aSStream.str().c_str());AfxMessageBox(aMsg);}catch (...){AfxMessageBox(_T("unkonwn exception"));}return TRUE;  // return TRUE  unless you set the focus to a control
}void COccDialogDemoDlg::OnPaint()
{if (m_pOccView){m_pOccView->Redraw();}
}
  1. 依赖的occ库
TKPrimd.lib
TKV3dd.lib
TKerneld.lib
TKBRepd.lib
TKMathd.lib
TKOpenGld.lib
TKTopAlgod.lib
TKServiced.lib

3. 运行截图

在这里插入图片描述

4. 额外说明

因为OCC使用OpenGL显示用到了着色器,根据OCC抛出异常提示可知,需要指示OCC程序找到着色器相关文件,最简单的是设置环境变量CSF_ShadersDirectory或CASROOT,详细可参看代码,如下部分截图。
在这里插入图片描述

要成功运行以上程序,必须设置好任意一个环境变量,本地测试可以直接修改系统变量,本人的做法是用个批处理文件启动vs,在启动前设置好CSF_ShadersDirectory,后续通过vs运行的程序,就自动继承了次环境变量了,如下:

@echo off
set CSF_ShadersDirectory=E:\OCCTest\Third-Party\OCE-0.18\share\oce\src\Shaders
"D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe" 

其中OCE-0.18\share\oce\src\Shaders为occ开发库中的目录
在这里插入图片描述

这篇关于OCC:第一个程序,对话框中显示一个BOX的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526042

相关文章

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作