基于Qt5+osg3.4+opencascade7.0开发的三维CAD,目前软件支持主流的3D...

基于Qt5+osg3.4+opencascade7.0开发的三维CAD,目前软件支持主流的3D格式文件(比如igs,stop,stl,obj,3ds等),文件可以另存为obj,stl,osg等,软件整体采用Qt MDI多文档结构,支持模型放大缩小,拖动,旋转,渲染!支持视图切换,已经视觉样式切换(目前实现四种显示样式)!

最近在搞一个三维CAD软件,用到了Qt5、OpenSceneGraph和OpenCASCADE这三个重量级库。这玩意儿能同时打开十几个模型文件不卡顿,全靠Qt的MDI多文档框架撑着。新建子窗口的代码其实特简单:

QMdiSubWindow* subWindow = mdiArea->addSubWindow(new ModelViewer); subWindow->setWindowTitle("Untitled"); connect(subWindow->widget(), &ModelViewer::modelLoaded, [=](const QString& name){ subWindow->setWindowTitle(name); });

这段代码最有意思的是信号槽连接,模型加载完成后自动更新窗口标题。不过实际开发时被OSG的线程同步坑惨了——当多个子窗口同时加载大模型时,得用QMutex锁住OSG的渲染操作,不然分分钟崩溃给你看。

模型操作是三维软件的核心,这里用OSG的事件处理器实现得挺巧妙。旋转功能的核心代码长这样:

void RotateHandler::handleMovement(osgGA::GUIEventAdapter& ea) { if(_dragging) { float dx = ea.getXnormalized() - _lastX; float dy = ea.getYnormalized() - _lastY; _camera->rotate(-dx*2.0, dy*2.0, 0.0); // 这个系数2.0调了三天才找到手感最佳的数值... } }

为了让操作更顺滑,给旋转加了惯性效果。用osg::AnimationPathCallback实现的缓动动画,结果测试时被吐槽像在玩旋转寿司游戏,最后改成了线性插值才正常。

基于Qt5+osg3.4+opencascade7.0开发的三维CAD,目前软件支持主流的3D格式文件(比如igs,stop,stl,obj,3ds等),文件可以另存为obj,stl,osg等,软件整体采用Qt MDI多文档结构,支持模型放大缩小,拖动,旋转,渲染!支持视图切换,已经视觉样式切换(目前实现四种显示样式)!

说到文件格式支持,OpenCASCADE处理STEP文件时有个坑点:必须显式初始化字体库,否则中文注释全变方块。正确姿势是加载前执行:

Handle(Resource_Manager) res = new Resource_Manager(""); res->SetValue("font.name", "SimSun"); res->SetValue("font.file", "/usr/share/fonts/windows/");

渲染样式切换倒是简单粗暴,直接改OSG的状态集。比如线框模式就是:

osg::PolygonMode* pm = new osg::PolygonMode; pm->setMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::LINE); _stateset->setAttributeAndModes(pm, osg::StateAttribute::OVERRIDE);

不过实现半透明效果时栽了个跟头——必须按深度排序绘制,否则透明物体渲染顺序错乱。最后在场景根节点加了osg::Depth节点才解决,这招是从老外的论坛里扒出来的偏方。

导出功能最头疼的是STL文件生成,用OpenCASCADE的API导出的二进制STL总有几个面方向错误。后来换成手动遍历三角面片,边导出边检查法线方向才搞定。代码里现在还有这么一段:

TopExp_Explorer exp(shape, TopAbs_FACE); while (exp.More()) { TopoDS_Face face = TopoDS::Face(exp.Current()); // 手动计算法线方向的代码块 if (normal.Z() < 0) normal.Reverse(); // YY出来的修复方案 // ...写入STL }

现在软件能流畅处理10万+三角面片的模型,不过遇到复杂的NURBS曲面还是有点吃力。下一步打算上LevelOfDetail优化,但OSG的LOD节点和Qt的视图缩放事件还没打通,估计又得掉不少头发。

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

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

相关文章

Java毕设项目:基于SpringBoot+vue的高校学生实习综合服务平台设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

AI应用架构师揭秘AI驱动的元宇宙金融的合规性问题

AI应用架构师揭秘&#xff1a;AI驱动的元宇宙金融的合规性困局与破局之道 一、引言&#xff1a;当元宇宙金融撞上合规“墙” 1.1 一个真实的“元宇宙金融合规事故” 2023年11月&#xff0c;某海外元宇宙平台推出“AI数字人贷款”服务&#xff1a;用户通过虚拟形象提交身份信息&…

直接上干货,这个旋转编码器记米模块我在纺织机械和包装设备上用过不下十次。核心就俩字——抗造!先看PLC程序,再聊触摸屏怎么配

三菱plcFX3U结合旋转编码器记米数万能模块程序&#xff0c;本人已实际项目中应用多次&#xff0c;现单独编写一段通用模块出来&#xff0c;其中难点在于如何处理计数器溢出&#xff0c;及相关数据运算&#xff01;算是非常实用的程序块&#xff01; 内容包括&#xff1a; 1.三菱…

【课程设计/毕业设计】基于SpringBoot+vue的高校学生实习综合服务平台设计与实现【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java毕设项目推荐-基于vue的高校学生实习综合服务平台设计与实现基于SpringBoot+vue的高校学生实习综合服务平台设计与实现【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java计算机毕设之基于Spring Boot的高校应届生实习综合管理系统设计与实现基于SpringBoot+vue的高校学生实习综合服务平台设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

搭建 FreeIPA Server 实现统一认证

FreeIPA(Free Identity Policy and Audit)是 Linux/Unix 世界的 "Active Directory",一个开源的、一体化的身份管理与集中式策略控制解决方案。它旨在简化并统一在混合环境中管理 Linux 系统和用户的复杂…

Java组合

Java组合组合Composition和组合和继承的关系: 另一种 实现“代码复用”——组合。 相较于继承,组合更加灵活。继承一个子类只有一个直接父类,而组合就可以解决这个问题。 组合是区别于继承的另一种代码复用机制。 本…

Java毕设项目推荐-基于Springboot+Vue的在线招聘平台设计与实现基于SpringBoot+Vue的中青年人员招聘平台【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

全网最全本科生必用TOP8AI论文写作软件测评

全网最全本科生必用TOP8AI论文写作软件测评 2026年本科生论文写作工具测评&#xff1a;为什么你需要这份指南 随着AI技术的不断进步&#xff0c;越来越多的本科生开始依赖AI论文写作软件来提升写作效率、优化内容结构并确保格式规范。然而&#xff0c;面对市场上琳琅满目的工具…

Java毕设项目推荐-基于SpringBoot和Vue的电影售票管理系统设计与实现基于SpringBoot+Vue的影视购票平台的设计与实现【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【毕业设计】基于SpringBoot+vue的高校学生实习综合服务平台设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

3D打印原理解析

3D打印原理解析3D打印&#xff0c;又称增材制造&#xff0c;是一种通过逐层堆积材料来构建三维物体的技术。它与传统减材制造&#xff08;如切割、雕刻&#xff09;相反&#xff0c;是一种自下而上、逐层累积的制造方式。 下面我将从核心原理、工作流程、主要技术类型以及特点与…

【计算机毕业设计案例】基于SpringBoot+Vue的中青年人员就业招聘平台(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java毕设选题推荐:基于java的高校学生综合服务平台基于SpringBoot+vue的高校学生实习综合服务平台设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【计算机毕业设计案例】基于SpringBoot和Vue电影购票管理系统的设计与实现基于SpringBoot+Vue的影视购票平台的设计与实现(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

昇腾服务器大模型量化方法

昇腾服务器大模型量化方法 本文介绍如何使用量化工具在昇腾服务器上做量化&#xff0c;量化工具使用msModelSlim&#xff0c;推理框架使用MindIE&#xff0c;昇腾卡为Atlas300I Duo卡&#xff0c;以量化多模型模型Qwen2.5-VL-7B-Instruct为例。 准备mindie镜像 镜像版本&#x…

【计算机毕业设计案例】基于SpringBoot+vue的山区特色农产品供销服务系统的设计与实现(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

时序数据库选型指南:Apache IoTDB为何成大数据场景优选

前言 在万物互联与数字化转型的浪潮下&#xff0c;工业传感器、车联网终端、智慧能源设备等每秒产生海量时序数据&#xff0c;其“写多读少、只增不删、规模庞大、查询复杂”的特性&#xff0c;对数据存储与管理系统提出了极致要求。传统关系型数据库早已难以承载&#xff0c;而…

搭建 FreeIPA 服务器

FreeIPA(Free Identity Policy and Audit)是 Linux/Unix 世界的 "Active Directory",一个开源的、一体化的身份管理与集中式策略控制解决方案。它旨在简化并统一在混合环境中管理 Linux 系统和用户的复杂…