1. EPS软件架构概览
各位同学,欢迎来到《从零搭建EPS软件功能模块》的第一课。
说实话,每次带新人入门,我都要先问一个问题:你理解的EPS是什么? 有人说是画图的,有人说是做设计的,还有人说是用来出工程图的。嗯,都对,但都不全面。
1.1 什么是EPS
EPS,全称是Engineering Publishing System,工程出版系统。说白了,就是一套帮工程师把设计数据变成规范文档的工具。
我当年刚入行时,觉得这玩意儿不就是个高级画图软件吗?直到有一次,我手动改了200多张图纸的标题栏,改到凌晨三点...第二天领导说格式又变了。那一刻我才明白,EPS的核心不是画图,而是自动化。
EPS的本质: 将工程数据(模型、参数、属性)按照预设规则,自动生成符合标准的工程文档(图纸、报表、清单)。
1.2 EPS软件的核心功能
一个成熟的EPS系统,通常包含以下五大核心模块。我按实际开发顺序列出来,你想想看,是不是这个理:
| 功能模块 | 核心职责 | 我踩过的坑 |
|---|---|---|
| 数据管理 | 读取、解析、存储工程数据 | 曾经用XML存数据,结果一个项目文件300MB,打开要5分钟... |
| 图形引擎 | 2D/3D视图渲染、交互操作 | OpenGL和Qt的坐标系统搞混,画出来的图是倒的 |
| 规则引擎 | 自动标注、尺寸检查、合规校验 | 规则写得太死,换个标准就得改代码 |
| 输出模块 | 导出PDF/DWG/图片等格式 | PDF字体嵌入没处理好,客户打开乱码 |
| 用户界面 | 菜单、工具栏、属性面板、向导 | 功能做完了才发现用户根本找不到入口 |
这里我要特别强调一点:数据管理是地基。我见过太多团队一上来就搞炫酷的3D渲染,结果数据格式没想清楚,后面改得死去活来。嗯,这个坑我替你们踩过了。
1.3 模块化设计思想
为什么要模块化?我直接说结论:为了让你能活到项目上线。
你想想看,一个EPS系统少说几十万行代码。如果不做模块化,改一个地方崩一片,那画面太美我不敢看。
我的模块化原则(血泪总结):
- 高内聚: 一个模块只做一件事,做好它
- 低耦合: 模块之间通过接口通信,别直接调内部函数
- 可替换: 哪天想换图形引擎了,换个模块就行,不用重写整个系统
举个例子。我负责过一个项目,客户要求支持多种数据源:Excel、SQLite、甚至CSV。如果我把数据读取逻辑散落在各个界面代码里,那改起来就是噩梦。但如果我们抽象出一个IDataProvider接口:
// 数据提供者接口
class IDataProvider {
public:
virtual ~IDataProvider() = default;
virtual bool Open(const QString& source) = 0;
virtual QVariantList Query(const QString& sql) = 0;
virtual bool Close() = 0;
};
// 具体实现:Excel版
class ExcelDataProvider : public IDataProvider {
// 实现细节...
};
// 具体实现:SQLite版
class SQLiteDataProvider : public IDataProvider {
// 实现细节...
};
你看,这样不管后面加什么数据源,主程序代码一行都不用改。这就是模块化的魅力。
1.4 开发环境搭建(VS2019 + Qt)
好,理论说完了,咱们来点实际的。我个人习惯用VS2019 + Qt 5.15这套组合。为什么?稳定,社区活跃,遇到问题百度一下基本都有答案。
搭建步骤(我建议你按这个顺序来):
- 安装VS2019 —— 记得勾选「使用C++的桌面开发」工作负载
- 安装Qt 5.15 —— 我推荐装msvc2017_64版本,兼容性最好
- 安装Qt VS Tools插件 —— 在VS的扩展管理中搜索安装
- 配置Qt版本 —— VS菜单栏:扩展 → Qt VS Tools → Qt Versions,添加你的Qt安装路径
- 创建测试项目 —— 新建一个Qt Widgets Application,跑起来看看
⚠️ 避坑指南:
我曾经在配置环境时卡了整整一天,原因是Qt安装路径里有中文。VS死活识别不到。所以:路径不要有中文!路径不要有空格!
配置完成后,写个简单的Hello World验证一下:
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel label("Hello EPS World!");
label.setWindowTitle("我的第一个EPS模块");
label.resize(400, 300);
label.show();
return app.exec();
}
如果能看到窗口弹出来,恭喜你,环境搭好了。如果没看到...嗯,检查一下上面说的路径问题。
1.5 本章小结
这一章我们聊了:
- EPS是什么 —— 工程数据自动化的工具
- 五大核心功能 —— 数据、图形、规则、输出、界面
- 模块化设计 —— 高内聚低耦合,让你少加班
- 环境搭建 —— VS2019 + Qt 5.15,稳就一个字
下一章,我们会正式开始写代码,搭建EPS的数据管理模块。到时候我会手把手带你实现一个能用的数据读取器。准备好了吗?
课后思考: 如果你来设计一个EPS系统,你会把「规则引擎」放在哪个模块里?为什么?想好了告诉我,下节课我们讨论。