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

news2025/2/1 9:56:07

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 viewer
		m_pOccViewer->SetLightOn();
		// set background color to black
		m_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);

		//显示一个box
		TopoDS_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开发库中的目录
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1329380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】IO流相关操作

目录 常见的文件操作 创建文件 得到文件信息 目录操作 IO流 FileInputStream FileOutputStream FileReader FileWriter BufferedReader BufferedWriter ObjectOutputStream ObjectInputStream InputStreamReader OutputStreamReader PrintStream PrintWriter Properties prope…

【JAVA面试题】基本类型的强制类型转换是否会丢失精度?引用类型的强制类型转换需要注意什么?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 思路 1、继承关系 2、运行时类型检查 结语 我的其他博客 前言 在Java编程中&#xff0c;强制类型转换是一个常见的操作&#xf…

鸿蒙应用开发ArkTS容器组件的使用

线性布局——Column/Row 线性布局是应用中最常用的布局&#xff0c;通过线性容器 Row 和 Column 构建 线性布局是其他布局的基础&#xff0c;其子元素在水平方向和垂直方向依次排列 线性布局的排列方向由所选容器组件决定&#xff0c;Column 容器内子元素按照垂直方向排列&a…

CSS-计数器 counter-reset、counter-increment、counter-reset

计数器 CSS的计数器通过在 content 上应用 counter() 或 counters()函数来显示计数的。其中计数器是由counter-reset和counter-increment 来进行操作的。 counter-increment 语法 counter-increment参数1&#xff1a;计算器名称 该标识符由不区分大小写的字母 a 到 z&#xf…

服务熔断(Hystrix)

服务雪崩 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服务B和微服务C又调用其他的微服务&#xff0c;这就是所谓的“扇出”&#xff0c;如果扇出的链路上某个微服务的调用响应时间过长&#xff0c;或者不可用&#xff0c;对微服务A的…

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.骑手优化算法4.实验参数设定5.算法结果6.…

Open3D 入门教程

文章目录 1、概述2、安装3、点云读写4、点云可视化 4.1、可视化单个点云4.2、同一窗口可视化多个点云4.3、 可视化的属性设置 5、k-d tree 与 Octree 5.1、k-d tree5.2、Octree 5.2.1、从点云中构建Octree5.2.2、从体素栅格中构建 Octree 6、点云滤波 6.1、体素下采样6.2、统计…

java.lang.IllegalStateException: Duplicate key

序言 最近监控扫描出我们项目的某些异常信息&#xff0c;报错java.lang.IllegalStateException: Duplicate key xxx&#xff0c;看到异常来自stream流&#xff0c;然后定位看了一下是某位同事的代码使用stream流把List转Map集合出现重复的key异常信息。List集合A对象来源于某个…

Python命名规范中的[单/双][前导/后缀]下划线小结

如图所示 出处 Single and Double Underscores in Python Names

「C/C++ 01」 深拷贝和浅拷贝

目录 一、概念 1. 浅拷贝 2. 深拷贝 3. 深浅拷贝问题 4. 总结 二、在C的类中实现深拷贝 1. 拷贝构造函数 中实现深拷贝 a. 自己开辟一个新空间&#xff0c;然后将内容拷贝到新空间 b. 借助构造函数来实现深拷贝 2. operator 中实现深拷贝 a. 自己开辟一个新空间&#xff0c;…

JAVA版的鸿鹄云商B2B2C:多商家入驻直播商城系统特性解析 商城免 费搭建

鸿鹄云商 b2b2c产品概述 【b2b2c平台】&#xff0c;以传统电商行业为基石&#xff0c;鸿鹄云商支持“商家入驻平台自营”多运营模式&#xff0c;积极打造“全新市场&#xff0c;全新 模式”企业级b2b2c电商平台&#xff0c;致力干助力各行/互联网创业腾飞并获取更多的收益。从消…

pyqt5实现wget下载视频文件的进度条显示

简介&#xff1a; 最近在写一个项目&#xff0c;用到了wget下载视频&#xff0c;为了更好的视觉效果&#xff0c;所以使用pyqt5中QProgressBar来实现下载进度条。当视频开始下载就会弹出下载进度条&#xff0c;下载完成后进度条消失。效果如下图; 具体代码实现 &#xff1a; …

Sobit:将BRC20资产桥接到Solana ,加速铭文市场的火热

2023 年 1 月份后&#xff0c;比特币 Ordinals 协议出现后为铭文赛道的出现奠定了基础&#xff0c;它以聪为单位将比特币分成份&#xff0c;并在每一聪上攥刻不同的信息以达到非同质化资产的效果&#xff0c;而此后包括 BRC20 在内的诸多采用了 Ordinals 方案的应用不断面向市场…

生成式AI大模型对人类进化的影响

你是不是发现每天的工作都离不开ChatGPT之类的语言生成模型&#xff1f;离不开类似Midjourney的图像生成模型&#xff1f;离不开一些设计类的AI辅助工具&#xff1f;如果是&#xff0c;那说明你已经逐步被AI侵蚀了&#xff0c;你的创造力也正在逐渐下降&#xff0c;大模型正在剥…

使用通道和模式

通过通道、选择语句和最佳实践掌握 Go 中的并发编程 并发编程是构建高效和响应迅速的软件的强大范例。Go&#xff0c;也被称为 Golang&#xff0c;通过通道提供了一种健壮且优雅的解决方案来进行并发通信。在这篇文章中&#xff0c;我们将探讨通道的概念、它们在并发编程中的作…

Qt配置opencv,cmake编译参考笔记,已成功

Qt版本&#xff1a;Qt5.14.2 opencv&#xff1a;4.5.4&#xff08;不要用4.5.5&#xff01;&#xff01;很坑别问我为什么知道&#xff09; cmake&#xff1a;下的最新版本 前言&#xff1a;为什么非得要用cmake编译呢&#xff1f;跳过cmake不好吗&#xff1f; 之前用的opencv…

pickle反序列化

文章目录 基础知识pickle简介可序列化对象object.__reduce__() 函数 pickle过程详细解读opcode简介pickletools 漏洞利用利用思路如何手写opcode 工具pker实战例题[MTCTF 2022]easypickle[HZNUCTF 2023 preliminary]pickle 基础知识 pickle简介 与PHP类似&#xff0c;python也…

内存管理学习

内存管理 在计算系统中&#xff0c;通常存储空间分为两种&#xff1a;内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快&#xff0c;能够按照变量地址随机访问&#xff0c;也就是我们通常所说的RAM&#xff08;随机存储器&#xff09;&#xff0c;可以把它理解为…

两种方法解决win10开机慢,经验分享

方法一&#xff1a; 1、按快捷键“winR”打开 运行窗口。 2、这时候输入“msconfig”后 &#xff0c;点击“确定”或者按“ENTER”键。 3、这时候会打开一个名为“系统配置”的窗口&#xff0c; 在“常规”选项框下 勾选“有选择的启动”下的“加载系统服务”和“加载启动项”。…

Python的环境搭建环境配置()

Python 环境搭建 一,下载Python 1.去官网 www.python.org 下载环境 2.如图点击Download 3.选择Windows 4.如图直接下载 5.直接勾选 6.后面就一直默认选项 Win11 安装目录 不能放在C盘的ProgramFIle路径下 二,测试环境是否安装成功 1.winR 输入cmd 2.输入python --versio…