From 5993d6bda4e543ae468c9bdd08108aeac6d20f7c Mon Sep 17 00:00:00 2001 From: DESKTOP-8BA9KEAgjm Date: Mon, 28 Sep 2026 15:58:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20ai.memory=20=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E8=AE=B0=E5=BF=86=E7=9B=AE=E5=BD=95=EF=BC=8C=E4=BE=9B?= =?UTF-8?q?=E8=B7=A8=E6=9C=BA=E5=99=A8=20CodeBuddy=20CLI=20=E8=AF=BB?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 包含工程概览、构建系统、模块划分、决策记录与约定, 随仓库同步以便在不同电脑上保持上下文连续性。 --- ai.memory/00-overview.md | 47 ++++++++++++++++++++++++++++++ ai.memory/01-build.md | 57 +++++++++++++++++++++++++++++++++++++ ai.memory/02-modules.md | 32 +++++++++++++++++++++ ai.memory/03-worklog.md | 17 +++++++++++ ai.memory/04-conventions.md | 34 ++++++++++++++++++++++ ai.memory/README.md | 28 ++++++++++++++++++ 6 files changed, 215 insertions(+) create mode 100644 ai.memory/00-overview.md create mode 100644 ai.memory/01-build.md create mode 100644 ai.memory/02-modules.md create mode 100644 ai.memory/03-worklog.md create mode 100644 ai.memory/04-conventions.md create mode 100644 ai.memory/README.md diff --git a/ai.memory/00-overview.md b/ai.memory/00-overview.md new file mode 100644 index 0000000..783e356 --- /dev/null +++ b/ai.memory/00-overview.md @@ -0,0 +1,47 @@ +# 工程概览 + +## 是什么 + +- **产品**:上海华软 **Envi3D 2026(环境设计)** —— CAD/BIM **机电(MEP)插件套件**。 +- **CMake 项目名**:`SHS_Code2026`(版本 1.0.0)。 +- **形态**:ObjectARX / ZRX 插件(DLL),运行在 CAD 宿主内,含大量 MFC 界面与自定义图元实体。 + +## 目标平台 + +| 平台 | SDK | 版本 | 对应 CAD | +| --- | --- | --- | --- | +| AutoCAD | ObjectARX | R18 ~ R26 | CAD 2010 ~ 2027 | +| 中望CAD | ZRX | 2023 ~ 2026 | ZWCAD 2023 ~ 2026 | + +通过编译宏区分:`ARX=<版本>` / `ZWCAD`;ZRX 产物后缀为 `.zrx`,ARX 为 `.arx`。 + +## 目录结构 + +``` +envi-code/ +├── Arx/ # AutoCAD ObjectARX SDK(R19.0~R26.0,已 gitignore) +├── SourceCode/ +│ ├── dep_inc/ # 第三方头:modernGlue、rapidjson +│ ├── dep_lib/ # 第三方库:modernGlue、pub(含 sqlite3) +│ └── Code2026/ # ★ 主要代码 +├── bin/, lib/ # 编译产物(按 SDK 版本分子目录,已 gitignore) +├── cmake_output/ # CMake 生成目录(已 gitignore) +├── autoCompile/ # 打包/加密/发布脚本(.bat/.py/.iss) +└── utility/ # generateEncryptionTable(授权加密表生成) +``` + +## 代码规模 + +- `SourceCode/Code2026/` 下 C++ 约 **2888 个 .cpp + 3104 个 .h**。 +- `tg_shs/`(天正系列库)另约 2871 个 cpp/h。 +- 大量 BMP/ICO 资源(540 bmp / 118 ico)。 + +## 分层架构 + +1. **实体层**:`CoreLibrary` 定义自定义图元 `AecDbXxx`(继承 AcDbEntity),是数据模型核心。 +2. **命令层**:各 `*Cmd` 模块实现 MFC 对话框 + Jig 交互 + ARX 命令注册。 +3. **链接关系**:业务模块 → `AecRxBase` / `CoreCommand` / `sqliteserver` / `MFCCtrl`。 + +## 仓库 + +- 远端:`ssh://gjm@47.93.46.28:1216/srv/git/new-start.git`(origin,主分支 `main`)。 diff --git a/ai.memory/01-build.md b/ai.memory/01-build.md new file mode 100644 index 0000000..6a7ea10 --- /dev/null +++ b/ai.memory/01-build.md @@ -0,0 +1,57 @@ +# 构建系统 + +**结论:现在统一用 CMake 构建,不再使用 Visual Studio 工程文件(`.vcxproj`/`.sln` 已删除)。** + +## 基本命令 + +```bash +# 在 SourceCode/Code2026 目录 +cmake --preset R250 # 配置(示例:AutoCAD 2025-2026) +cmake --build --preset R250 # 编译 +``` + +- CMake ≥ 3.21,生成器 `Visual Studio 18 2026`,架构 `x64`。 +- 工具集按 preset 指定(如 `v143` / `v142` / `v141` …)。 +- 启用 `/MP` 多进程编译;Release 默认 `_NDEBUG`。 + +## 配置预设(`cmakepresets.json`,13 套) + +| 分组 | preset | 说明 | +| --- | --- | --- | +| AutoCAD | `R180 R190 R200 R210 R220 R230 R240 R243 R250 R260` | ARX 18~26(CAD 2010~2027) | +| 中望CAD | `Z2023 Z2024 Z2025 Z2026` | ZRX 2023~2026 | + +关键 cache 变量: +- `CAD_SDK_ROOT`:`arx/` 或 `zrx/`(相对 `SourceCode/Code2026` 上一级的上一级)。 +- `DEP_LIB_ROOT` / `DEP_INC_ROOT`:`../dep_lib` / `../dep_inc`。 +- `PRODUCT=ENV_2025_V6_S0`、`TRIAL_YEAR=2026`。 +- `GENERATE_BIN_DIR` / `GENERATE_LIB_DIR`:输出到 `bin/Code2026`、`lib/Code2026`。 + +C++ 标准自动切换:ARX 26→C++20;ARX 25/24 与 ZRX→C++14;更老版本→C++03/98。 + +## 构建脚本 + +- `cmake/functions.cmake`:核心封装 + - `add_custom_module(dir folder)`:注册子模块(自动 `add_subdirectory` + 设置 FOLDER)。 + - `target_link_objectarx(target EXT)`:链接 CAD SDK 与全局头。 + - `simple_link_cad_sdk`:自动区分 ARX / ZRX。 + - `set_encryption_definitions_and_output_path`:**授权模式**,生成 `BAL_REMOTE` 与 `TRIAL_YEAR` 两种版本。 + - `set_debug_post_build`:调用 `copyarx.exe` 做 post-build 部署。 +- `cmake/ThirdPartyDeps.cmake`:定义 `ThirdParty::ARX` / `ZRX` / `SQLite3` / `cURL` / `TG` / `modernGlue` / `BitAnswer` 等接口目标。 +- 顶层 `cmakelists.txt`:注册所有模块并组织 `FOLDER`(`SH/Core`、`SH/Pipe` …)。 + +## 授权 / 加密 + +- `CoreCommand` 通过 `get_encryption_modes()` 生成两种产物: + - `BAL_REMOTE`(网络锁 / 正式版) + - `TRIAL_YEAR`(1 年期试用版) +- 依赖 **BitAnswer**(加密狗库),加密表由 `utility/generateEncryptionTable` 生成。 + +## 部署与打包 + +- **部署**:`sh_output_path.json`(ACAD)/ `zw_output_path.json`(中望)定义从 `bin/Code2026` 拷贝到安装目录 `c:\ShangHuaSoft\Envi3D-2026-M`;由 `copyarx.exe` 执行。 +- **打包**:`autoCompile/` 内含 Inno Setup(`*.iss`) + Python(`SHSCompile.py`) + 多个 `.bat`,覆盖 ACAD/中望、1年期/加密版、以及客户专版(中广核、国能集团等)。 + +## .gitignore 要点 + +忽略:`Arx/`、`cmake_output/`、`bin/`、`lib/`,以及所有 VS 中间产物(`*.obj/*.pdb/*.user/.vs` 等)。 diff --git a/ai.memory/02-modules.md b/ai.memory/02-modules.md new file mode 100644 index 0000000..2353459 --- /dev/null +++ b/ai.memory/02-modules.md @@ -0,0 +1,32 @@ +# 业务模块划分 + +模块在顶层 `SourceCode/Code2026/cmakelists.txt` 中通过 `add_custom_module` 注册,并按 FOLDER 分组。 + +| 分组 (FOLDER) | 模块 | 职责 | +| --- | --- | --- | +| `SH/Global_Libraries` | `MFCCtrl`, `sqliteserver` | MFC 控件库;SQLite 数据服务 | +| `SH/ThunderProof` | `AdsXRx`, `ThunderProof` | 防雷接地设计 | +| `SH/Core` | `AecRxBase`, `CoreImplement`, `CoreLibrary`, `CoreCommand` | 核心基类、自定义实体、主命令 | +| `SH/Pipe` | `PipelineCmd`, `PipelineSpecCmd`, `PIDLineCmd`, `ISODraft`, `PipeHanger`, `PlumbingCmd`, `Pool3dCmd` | 管道/工艺/ISO 图/支吊架/给排水/水池 | +| `SH/Structures` | `ArchCmd`, `ElecCmd`, `HvacCmd`, `SPLDCmd` | 建筑/电气/暖通/道路 | +| `SH/Other` | `shsTK`, `Dimension`, `EarthWormMain`, `EarthWormCmd` | 通用工具、标注、主程序 | +| `TG/*` | `tg_shs/*` | 天正系列库 | + +## 关键模块说明 + +- **CoreLibrary**:定义海量自定义图元实体 `AecDbXxx`(继承 AcDbEntity),是数据模型核心;同时含绘图/分解/布尔等基础能力。 +- **AecRxBase**:ARX 基类库(`AecDbEntityBase`、`AecDbCurveBase`、Grip、双击编辑等)。 +- **CoreCommand**:主命令集 + MFC 主界面/面板(BIM 面板、AI 助手面板等);**生成两种加密版本**(见 `01-build.md`)。 +- **CoreImplement**:仅在 Debug 下有效(自定义实体的实现层)。 +- **StartApp**:C# (.NET WinForms) **启动器**,不属于 CMake 构建,保留独立 `StartApp.sln`。 +- **tg_shs/**:天正系列(kernal/annotate/blklib/siteplan/pipewire/outdoor/ximage 图像库等)。 + +## 天正子库(TG) + +`tg_shs/` 下主要子目录:`shs_kernal`(wfK)、`shs_twtkernal`(wfKernal)、`shs_GeLib`、`shs_subgeLib`、`shs_annotate`(wfA)、`shs_twtanotate`(wfAnnotate)、`shs_blklib`(wfB)、`shs_siteplan`(wfS)、`shs_pipewire`(wfpipew)、`shs_outdoor`(wfoutdoor)、`shs_ximage/*`(图像库: zlib/tiff/png/jpeg/jasper/...)、`shs_dbf`、`shs_sqlite` 等。 + +## 顶层自定义构建目标 + +- `Build_TG`:构建 `wfA wfB wfS wfAnotate wfoutdoor` +- `Build_SH_CORE`:构建 `AecRxBase` + `CoreCommand_TRIAL_YEAR` + `CoreCommand_BAL_REMOTE` +- `Build_SH_GLOBAL`:构建 `MFCCtrl sqliteserver AdsXRx ThunderProof` diff --git a/ai.memory/03-worklog.md b/ai.memory/03-worklog.md new file mode 100644 index 0000000..9b2cbf5 --- /dev/null +++ b/ai.memory/03-worklog.md @@ -0,0 +1,17 @@ +# 决策与变更记录(按时间倒序) + +## 2026-09-28 + +### 删除全部旧 Visual Studio 工程文件,统一到 CMake + +- **动作**:删除 **527 个 `*.vcxproj` + 1 个 `*.vcxproj.filters` + 2 个旧版 `*.vcproj` + 8 个 `shs_image*.sln`**,共 538 个文件(227,205 行删除)。 +- **保留**:`SourceCode/Code2026/StartApp/StartApp.sln`(C# 启动器,不走 CMake)。 +- **提交**:`086bb1c`,已推送 `origin/main`。 +- **Why**:工程正从旧的逐版本 VS 工程(每个模块对每个 SDK 版本各一份 vcxproj,共 526 个)迁移到统一 CMake 构建,减少维护成本。 +- **How to apply**:**不要再新增或依赖 `.vcxproj` / `.sln`**;构建/新增模块一律走 CMake。`cmake_output/` 下仍会出现 CMake 生成的临时 vcxproj,那是构建产物、已被 gitignore,无需理会。 + +### 建立 ai.memory 记忆目录 + +- **动作**:在仓库根目录创建 `ai.memory/`,用于跨机器保持 AI 上下文。 +- **Why**:用户会在**多台电脑/多环境**修改本工程,需要让另一台机器的 CodeBuddy CLI 能读取记忆接续工作。 +- **How to apply**:重要决策写入本目录并随仓库提交。 diff --git a/ai.memory/04-conventions.md b/ai.memory/04-conventions.md new file mode 100644 index 0000000..6298e34 --- /dev/null +++ b/ai.memory/04-conventions.md @@ -0,0 +1,34 @@ +# 约定与注意事项 + +## 构建 + +- **统一使用 CMake**,禁止再新增/依赖 `.vcxproj`、`.sln`(`StartApp` 除外,见下)。 +- 新增业务模块:在模块目录放 `CMakeLists.txt`,并在顶层 `SourceCode/Code2026/cmakelists.txt` 用 `add_custom_module(<相对目录> )` 注册。 +- 新增模块的 `CMakeLists.txt` 参考现有模块(如 `HvacCmd/CMakeLists.txt`)的模板: + - `add_library(... SHARED ${SOURCES})` + - `add_def_file_name(SOURCES "")` + - `target_set_name_and_suffix( "" ".arx")` + - `target_link_objectarx( )` + - `set_debug_post_build( "" ".arx")` +- 若模块需要授权双版本,参考 `CoreCommand/cmakelists.txt` 的 `get_encryption_modes` + `set_encryption_definitions_and_output_path` 写法。 + +## 平台差异 + +- 用 `IsZWCAD()` 判断目标平台;ZRX 产物后缀 `.zrx`,链接 `ThirdParty::ZRX`;ARX 链接 `ThirdParty::ARX`。 +- 编译宏:`ARX=<版本号>` 或 `ZWCAD`。 +- 部分 SDK 版本才有特定库(如 `acdrawbridge` 需 >19,`acpal`/`acgeoment` 需 >23)——已由 `ThirdPartyDeps.cmake` 处理。 + +## 授权 / 加密 + +- 正式版走 `BAL_REMOTE`(网络锁),试用版走 `TRIAL_YEAR`;二者由同一套源码编译出两个目标。 +- 加密依赖 **BitAnswer**;相关表由 `utility/generateEncryptionTable` 生成。 + +## 不要提交的内容 + +`.gitignore` 已忽略:`Arx/`、`cmake_output/`、`bin/`、`lib/`、`*.obj/*.pdb/*.user/.vs/` 等。 +`cmake_output/` 里 CMake 生成的 `*.vcxproj` 属于构建产物,**不要**误提交。 + +## Git + +- 远端 `origin`:`ssh://gjm@47.93.46.28:1216/srv/git/new-start.git`,主分支 `main`。 +- 提交信息使用中文描述。 diff --git a/ai.memory/README.md b/ai.memory/README.md new file mode 100644 index 0000000..6c10dc9 --- /dev/null +++ b/ai.memory/README.md @@ -0,0 +1,28 @@ +# ai.memory — AI 记忆目录 + +本目录是 **CodeBuddy CLI 的项目记忆**,随仓库一起提交,用于在**不同电脑/环境**之间保持上下文连续性。 + +## 使用方法(在新电脑上) + +1. `git clone` 本仓库。 +2. 让 CodeBuddy CLI 读取本目录: + ``` + 请阅读 ai.memory/ 目录下的所有文件,了解这个工程后再开始工作。 + ``` +3. 工作结束后,把新的决策/进展写回本目录并提交,保证下一台机器能接续。 + +## 文件清单 + +| 文件 | 内容 | +| --- | --- | +| `00-overview.md` | 工程是什么、目录结构、技术栈 | +| `01-build.md` | 构建系统(CMake)与编译/发布方式 | +| `02-modules.md` | 业务模块划分 | +| `03-worklog.md` | 重要决策与变更记录(按时间倒序) | +| `04-conventions.md` | 约定、注意事项、常见坑 | + +## 维护规则 + +- **有意义的决策必须记录**:构建方式变更、删除文件、目录重构、授权/发布方式调整等。 +- **只记非显而易见的信息**:代码本身能看出来的(文件路径、函数名)不必重复记。 +- 记录时带**日期**和**原因(Why)**,方便日后判断是否仍然有效。