作者简介:
有将近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服务器对外提供服务。
- 桌面交互设计端
- 采用Visual Studio2019作为集成开发环境,CMake作为项目管理和编译工具。
- 使用C++开发语言,采用C++17标准库,Pybind11支持Python二次开发接口。
- Qt6.3开发库和SARibbon开源库UI框架库.
- 采用gTest的单元测试框架,采用sqlite作为本地数据存储,采用boost.aiso通讯库对接前后端通讯。
- 显示渲染可以使用VTK,几何内核采用OCC,网格处理采用OpenMesh或借鉴Blender的网格处理算法。
- 数据存储
本地文件采用二进制流文件压缩包,结构化数据采用MySQL或PostgreSQL,非结构化数据采用MongoDB数据库。
- 开发工具
Visual Studio2019集成开发工具,Git版本控制,CMake项目管理和编译,Jenkins持续集成/持续部署(CI/CD)。
2.软件功能
2.1 软件登入
2.2 项目打开及工作区的设置选择
2.3 功能界面
(1)视图
(2)通用操作
(3)草图绘制
(4)明细表
(5)构件编辑器
支持自定义参数化构件库以及构件库的管理,支持本地和云端存储。
(6)建筑结构
(7)MEP管道
(8)碰撞检查
(9)协同设计
(10)开发测试
(11)自动化测试
后面会陆续介绍各个功能。
欢迎转发。