【OCC】opencascade中RWMesh_CoordinateSystemConverter类应用(坐标轴转换器)

博客指出用OCC中RWObj_CafWriter类导出的obj数模在Three.js里显示错误,经对比发现可能是两个引擎显示的源坐标轴不一致。通过在Three.js官方文档搜索关键字,找到CoordinateSystemConverter,按文档要求设置输入输出坐标系,最终解决显示问题。

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

问题

three.js是JavaScript编写的WebGL第三方库,可以用来显示数模
现在发现一个问题
用OCC中RWObj_CafWriter类导出的obj数模放到threejs里显示,结果是错误的
OCC
对比两张图发现不是导出错了,而是这两个引擎显示的源坐标轴不太对(大概是吧)

解决

抱着试一试的心态,就去官方文档里搜了一下关键字CoordinateSystem
没想到真有叫某某CoordinateSystemConverter的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
那就按照它文档里的敲一下

代码

首先从RWObj_CafWriter的对象里拿到当前转换器的地址(即使它是空的,之前没用)

RWMesh_CoordinateSystemConverter r = writer.CoordinateSystemConverter();

然后上面文档里说要明确定义输入输出坐标系,再到文档里找有没有设置的方法
在这里插入图片描述
发现他要传进去一个指定yz方向的这么一个变量,再往下摸
在这里插入图片描述
这俩正好作为输入输出

	gp_Ax3 g_in = r.StandardCoordinateSystem(RWMesh_CoordinateSystem_posYfwd_posZup);
	gp_Ax3 g_out = r.StandardCoordinateSystem(RWMesh_CoordinateSystem_negZfwd_posYup);
	r.SetInputCoordinateSystem(g_in);
	r.SetOutputCoordinateSystem(g_out);
	writer.SetCoordinateSystemConverter(r);

这下坐标系对上了

### 将 OpenCASCADE 与 Qt 集成用于 CAD 开发 #### 安装配置 为了使 OpenCASCADE (OCC) 和 Qt 成功集成并应用于计算机辅助设计(CAD),需先确保两者都已正确安装于开发环境中[^1]。 对于 OCC 的安装,推荐访问官方网站获取最新版本的源码包或是二进制文件,并按照官方指南完成部署。同样地,Qt 可通过其官网提供的在线或离线安装器来安装,选择适合目标平台的组件即可[^2]。 #### 创建项目结构 创建一个新的 CMake 或 qmake 工程,在工程设置里指定包含路径和链接库位置以便编译器能找到 OCC 提供的数据型定义及其实现函数;同时也要引入必要的 Qt 模块比如 `Widgets` 来构建图形界面。 ```cmake # 示例 cmake 文件片段 find_package(OpenCASCADE REQUIRED COMPONENTS TKernel TKG2d TKG3d ... ) include_directories(${OPENCASCADE_INCLUDE_DIRS}) add_executable(MyApp main.cpp) target_link_libraries(MyApp ${OPENCASCADE_LIBRARIES} Qt5::Widgets ...) ``` #### 初始化显示窗口 利用 OCC 中视图管理(如 V3d_View)配合 Qt Widget 实现自定义控件,该控件可以作为 OpenGL 渲染上下文的一部分嵌入到应用程序主窗体中[^3]。 ```cpp // cpp代码示例 #include <QMainWindow> #include <AIS_Shape.hxx> class MyMainWindow : public QMainWindow { Q_OBJECT public: MyMainWindow(QWidget *parent = nullptr); private slots: void on_actionLoad_triggered(); }; MyMainWindow::MyMainWindow(QWidget *parent): QMainWindow(parent){ Handle(AIS_InteractiveContext) aCtx; //...初始化其他成员变量... } ``` 上述代码展示了如何继承自 `QMainWindow` 创建应用主框架,并实例化了一个 AIS 上下文对象准备用来加载模型实体。 #### 加载几何形状 当用户触发相应事件时(例如点击菜单项),可以通过调用 OCC API 导入外部 STL/STEP 等格式文件或将内部构造好的拓扑元素注册给交互场景,从而实现在界面上呈现三维物体的效果。 ```cpp void MyMainWindow::on_actionLoad_triggered(){ TopoDS_Shape myShape; //假设这里已经有了具体的shape数据 Handle_AIS_Shape anAisShape(new AIS_Shape(myShape)); theAISContext->Display(anAisShape); } ``` 这段逻辑说明了怎样响应用户的输入动作去展示预先准备好的几何形体,其中涉及到了将顶点坐标转换为屏幕像素的过程由底层渲染引擎自动处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值