作者简介:
有将近20年的软件开发经验,包括15年CAD(7年船舶和8年建筑CAD软件)软件开发和5年高性能服务器开发。熟悉了解Tribon、Aveva Marine、Foran、SPD、AutoCAD AEC/MEP 和Revit等CAD设计软件,精通CAD建模平台底层技术原理及架构和服务器开发技术,包括对象存储管理及拷贝、图形对象渲染、文件保存及升级、事务管理、对象交互框架、对象捕捉框架、夹点编辑框架、动态尺寸显示及编辑、自动化测试框架、基于脚本的构件编辑器及构件级协同设计,对协同设计有自己的理解。
ShipMaker是一款基于Qt、OCC、MySQL、SQLite、Redis、Nginx、QPID、SARibbon和Lua等技术,个人独立开发的三维设计的协同设计软件(个人业余爱好),支持Linux(Ubuntu)和Windows平台和国产信创 操作系统 。从2015年开始,经过10年的积累开发(近20万行代码),已经完成基础建模平台及基础能力,以及部分通用应用的开发,功能会逐步完善。由于个人精力有限,可能会考虑开源。
后期会考虑 切换 渲染引擎会到OSG或Coin3D,ShipMaker的软件架构设计支持渲染引擎及建模引擎的无感切换,而不会影响上层应用。
下面对ShipMaker的软件架构设计和软件功能做一个简单的介绍,软件详细设计可以参见博客其他技术文章。
1.架构设计
1.1 产品架构

1.1 技术架构
整体架构

详细架构

1.2 设计目标
(1)可扩展性
提供灵活的扩展接口和机制,允许用户根据需求定制和扩展功能,同时保持平台的稳定 和高性能。
(2)国际化版本
能够灵活支持多语言版本。
(3)兼容性
保持向后兼容性,包括数据兼容和API的兼容性,确保扩展的稳定性和可迁移性,防止扩展对原有功能的冲突和破坏。
(4)支持跨平台
支持Windows和Linux平台,能够适配国产操作系统。
(5)安全性
保证数据不能丢失,用户信息不能泄露。
1.3 技术实现
整体采用C++开发语言,Qt6.3和 C++ 17标准库,支持跨平台开发和适配国产操作系统。采用增量更新存储机制,提高保存性能。
另外,显示渲染使用VTK(OSG或Coin3d),几何内核采用OCC,网格处理采用OpenMesh或借鉴Blender的网格处理算法。
它能够支持参数化设计,数据存储,Redo/Undo,交互编辑,显示渲染,二次开发Python接口,插件开发机制等.主要采用机制实现设计目标。
(1)采用平台+插件机制
接口模块和实现模块分离,事件订阅机制,减少系统耦合,增强可扩展性。
(2)采用分层架构
明确各层的职责,底层模块不能使用高层模块,模块间不能跨层调用。例如业务模块只能使用数据层,基础Builder业务模块,基础设施模块,不能使用UI模块。
(3)跨平台开发库
采用Qt6.3跨平台UI库,C++11标准库,避免选用非快平台的三方库。采用CMake管理编译项目。
(4)基于版本号升级机制
使用灵活的基于版本号控制数据和行为升级机制和基于Impl模式的API接口。
(5)资源和代码模块分离
将资源模块和代码模块分离,通过动态加载切换资源模块实现多语言版本。
(6)加密传输和日志机制
采用OpenSSL网络 加密 传输,用户敏感信息加密保存。采用日志机制可以确保程序崩溃时数据的恢复问题
(7)模型存储
除采用自定义文件格式进行存储,亦可考虑数据库。例如,点云等非结构化数据采用MongoDB,用户管理等数据采用MySQL数据库存储。数据库存储采用Master/Slave架构。
对于自定义文件格式存储实现方案:
(1)建立自己的对象结构体系模型
(2)OM反射框架
(3)模型数据和业务数据存储分离
(4)各专业模型独立存储,利于多线程操作。
(5)恢复备份和定时保存机制,防止数据丢失
(6)项目文件采用压缩包成一个项目文件,各种数据文件:族文件,模型文件,专业数据文件,项目配置文件等。考虑多线程文件打开和保存,对象访问考虑同步情况。
1.4 技术选型
采用开源Nginx服务器对外提供服务。
本地文件采用二进制流文件压缩包,结构化数据采用MySQL或PostgreSQL,非结构化数据采用MongoDB数据库。
Visual Studio2019集成开发工具, Git 版本控制,CMake项目管理和编译,Jenkins持续集成/持续部署(CI/CD)。
2.软件功能
2.1 软件登入

2.2 项目打开及工作区的设置选择

2.3 功能界面
(1)视图

(2)通用操作

(3)草图绘制
包括草图线、草图轮廓、基础三维实体、几何约束和尺寸约束等。
详细功能介绍:
https://blog.csdn.net/ljemailbox/article/details/139467832?spm=1001.2014.3001.5501

(4)明细表

(5)构件编辑器
支持自定义参数化构件库以及构件库的管理,支持本地和云端存储。
详细功能介绍:https://blog.csdn.net/ljemailbox/article/details/139469178?spm=1001.2014.3001.5501

(6)低代码建模(类似GrassHopper)
支持内置几何节点和自定义节点

自定义节点的输入参数和输入参数,以及节点计算逻辑

(7)建筑结构

(8)MEP管道



自动布管算法演示:
https://blog.csdn.net/ljemailbox/article/details/106161042?spm=1001.2014.3001.5502
(9)碰撞检查

(10)协同设计

(11)开发测试

(12)自动化测试

后面会陆续介绍各个功能。
欢迎转发。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删