行业知识
OpenCASCADE+Qt创建建模平台
2026-11-12 10:01:26
来源:互联网转载
1、建模平台效果
2、三维控件OCCWidget
将V3d_View视图与控件句柄绑定即可实现3d视图嵌入Qt中,为了方便也可以基于QOpenGLWidget控件进行封装,方便嵌入各种窗体使用并自由缩放。
#ifndef OCCTWIDGET_H#define OCCTWIDGET_H#include #include #include #include #include #include #include #include #include #include #include #include #include //三维显示窗口class OCCTWidget : public QOpenGLWidget{ Q_OBJECTpublic: explicit OCCTWidget(QWidget *parent = nullptr); // 获取三维环境交互对象 Handle(AIS_InteractiveContext) getInteractiveContext(){return m_InteractiveContext;} // 获取三维显示界面 Handle(V3d_View) get3dView(){return m_3dView;}private: // 初始化交互环境 void initializeInteractiveContext(); // 交互式上下文能够管理一个或多个查看器(viewer)中的图形行为和交互式对象的选择 Handle(AIS_InteractiveContext) m_InteractiveContext; // 定义查看器(viewer)类型对象上的服务 Handle(V3d_Viewer) m_3dViewer; // 创建一个视图 Handle(V3d_View) m_3dView; // 创建3d接口定义图形驱动程序 Handle(Graphic3d_GraphicDriver) m_graphicDriver;protected: // 覆写绘图事件 void paintEvent(QPaintEvent *); // 覆写窗口尺寸变化事件 void resizeEvent(QResizeEvent *); // 覆写鼠标按键按下事件 void mousePressEvent(QMouseEvent *event); // 覆写鼠标按键释放事件 void mouseReleaseEvent(QMouseEvent *event); // 覆写鼠标移动事件 void mouseMoveEvent(QMouseEvent *event); // 覆写鼠标滚轮事件 void wheelEvent(QWheelEvent *event);private: Standard_Integer m_xValue; // 记录鼠标平移坐标X Standard_Integer m_yValue; // 记录鼠标平移坐标Y CurrentAction3d m_currentMode; // 三维场景转换模式};#endif // OCCTWIDGET_H void OCCTWidget::initializeInteractiveContext(){ //若交互式上下文为空,则创建对象 if (m_InteractiveContext.IsNull()) { //此对象提供与X server的连接,在Windows和Mac OS中不起作用 Handle(Aspect_DisplayConnection) m_display_donnection = new Aspect_DisplayConnection(); //创建OpenGl图形驱动 if (m_graphicDriver.IsNull()) { m_graphicDriver = new OpenGl_GraphicDriver(m_display_donnection); } //获取QWidget的窗口系统标识符 WId window_handle = (WId) winId(); // 创建Windows NT 窗口 Handle(WNT_Window) wind = new WNT_Window((Aspect_Handle) window_handle); //创建3D查看器 m_3dViewer = new V3d_Viewer(m_graphicDriver); //创建视图 m_3dView = m_3dViewer->CreateView(); m_3dView->SetWindow(wind); //打开窗口 if (!wind->IsMapped()) { wind->Map(); } //创建交互式上下文 m_InteractiveContext = new AIS_InteractiveContext(m_3dViewer); …………………………………… …………………………………… }} 3、三维建模类OCCModeling
对OCC提供的各种建模函数进行验证,并实现较为复杂的水瓶建模。
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class OCCTModeling{public:// 生成立方体static TopoDS_Shape CreateBoxModel(Standard_Real _dx = 1.0, Standard_Real _dy = 1.0, Standard_Real _dz = 1.0);// 生成圆柱static TopoDS_Shape CreateCylinder(Standard_Real _R = 0.5, Standard_Real _H = 2.0);// 球体static TopoDS_Shape CreateSphere(Standard_Real _R = 1.0);// 生成圆锥static TopoDS_Shape CreateCone(Standard_Real _R1 = 1.0, Standard_Real _R2 = 0.0, Standard_Real _H = 2.0);// 生成圆环体static TopoDS_Shape CreateTorus(Standard_Real _R1 = 2.0, Standard_Real _R2 = 0.5);// 生成水瓶 static TopoDS_Shape CreateBottle(Standard_Real _Width = 60.0, Standard_Real _Height = 40.0, Standard_Real _Thickness = 20.0);// 生成直管static TopoDS_Shape CreatePipe(const Standard_Real dRadius = 20.0, const Standard_Real dThickness = 2.0, const Standard_Real dLength = 100.0);};