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这套组合。为什么?稳定,社区活跃,遇到问题百度一下基本都有答案。

搭建步骤(我建议你按这个顺序来):

  1. 安装VS2019 —— 记得勾选「使用C++的桌面开发」工作负载
  2. 安装Qt 5.15 —— 我推荐装msvc2017_64版本,兼容性最好
  3. 安装Qt VS Tools插件 —— 在VS的扩展管理中搜索安装
  4. 配置Qt版本 —— VS菜单栏:扩展 → Qt VS Tools → Qt Versions,添加你的Qt安装路径
  5. 创建测试项目 —— 新建一个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系统,你会把「规则引擎」放在哪个模块里?为什么?想好了告诉我,下节课我们讨论。