docs: 移除 ai.memory 目录,统一以 CODEBUDDY.md 为唯一项目说明 #20
No files matched your search
+62
-58
@@ -2,16 +2,15 @@
|
||||
|
||||
This file provides guidance to CodeBuddy Code when working with code in this repository.
|
||||
|
||||
> 另见 `ai.memory/`:随仓库提交的跨机器项目记忆(概览 / 构建 / 模块 / 工作日志 / 约定)。开始工作前建议先阅读。本文件与其保持一致,冲突时以 `ai.memory/` 与当前构建脚本为准。
|
||||
> 本文件是仓库内唯一的项目说明(原 `ai.memory/` 已合并至此)。与代码不一致时以 `cmake/` 脚本和当前代码为准。
|
||||
|
||||
## 项目概览
|
||||
|
||||
- **产品**:上海华软 **Envi3D 2026(环境设计)** —— CAD/BIM **机电(MEP)插件套件**。
|
||||
- **形态**:ObjectARX / ZRX 插件(DLL,后缀 `.arx` / `.zrx`),运行在 CAD 宿主内,含大量 MFC 界面与自定义图元实体。
|
||||
- **CMake 项目名**:`SHS_Code2026`(version 1.0.0)。
|
||||
- **主代码目录**:`SourceCode/Code2026/`(C++ 约 2888 `.cpp` + 3104 `.h`;另有天正 `tg_shs/` 系列库)。
|
||||
- **远端**:`origin` = `ssh://git@39.107.55.179:222/gjm/envi-code.git`,主分支 `main`。提交信息用中文。
|
||||
- **SSH**:远端走 SSH 222 端口,需在本机 `~/.ssh/config` 或 ssh-agent 中指定可用私钥(各机器私钥不同,**不要把私钥文件名写进仓库**)。
|
||||
- **主代码目录**:`SourceCode/Code2026/`(约 2900 `.cpp` + 3100 `.h`;另有天正 `tg_shs/` 系列库)。
|
||||
- **远端**:`origin` = `ssh://git@39.107.55.179:222/gjm/envi-code.git`(Gitea),主分支 `main`。
|
||||
|
||||
目标平台(由 preset 与编译宏区分):
|
||||
|
||||
@@ -24,33 +23,35 @@ This file provides guidance to CodeBuddy Code when working with code in this rep
|
||||
|
||||
**统一使用 CMake,不再使用 Visual Studio 工程文件(`.vcxproj` / `.sln` 已全部删除)。唯一例外:`SourceCode/Code2026/StartApp/StartApp.sln`(C# 启动器,独立于 CMake)。**
|
||||
|
||||
所有构建命令均在 `SourceCode/Code2026/` 目录下执行(preset 与 `cmakepresets.json` 同目录):
|
||||
所有命令在 `SourceCode/Code2026/` 下执行(`cmakelists.txt` 与 `cmakepresets.json` 同目录):
|
||||
|
||||
```bash
|
||||
cd SourceCode/Code2026
|
||||
|
||||
# 配置 + 编译(示例:AutoCAD 2025-2026)
|
||||
cmake --preset R250
|
||||
cmake --build --preset R250
|
||||
cmake --preset R250 # 配置(AutoCAD 2025-2026)
|
||||
cmake --build --preset R250 --config Release # 编译
|
||||
cmake --build --preset R250 --config Debug
|
||||
|
||||
# 只构建单个目标(例如某个模块)
|
||||
cmake --build --preset R250 --target HvacCmd
|
||||
cmake --build --preset R250 --config Release --target HvacCmd # 单模块
|
||||
cmake --build --preset R250 --config Release --target Build_SH_CORE # 聚合目标
|
||||
```
|
||||
|
||||
- 要求 CMake ≥ 3.21;生成器固定 `Visual Studio 18 2026`,架构 `x64`。
|
||||
- 工具集(toolset)由 preset 指定,随 CAD 版本变化:`v143 / v142 / v141 / v140 / v110 / v100 / v90`。
|
||||
- C++ 标准自动切换:ARX 26 → C++20;ARX 20~25 与 ZRX → C++14;ARX 20 → C++03;更老 → C++98。
|
||||
- 输出目录:`bin/Code2026/{Debug|Release}-x64-<标签>` 与 `lib/Code2026/...`,标签形如 `R250` / `Z2026`。
|
||||
- Debug 构建会通过 post-build 调用 `copyarx.exe`,按 `sh_output_path.json`(ACAD)/ `zw_output_path.json`(中望)把产物部署到 `c:\ShangHuaSoft\Envi3D-2026-M`。
|
||||
- 要求 CMake ≥ 3.21;生成器 `Visual Studio 18 2026`,架构 `x64`,`/MP` 多进程编译。
|
||||
- preset 文件名是小写 `cmakepresets.json`(Windows 文件系统大小写不敏感,等价 `CMakePresets.json`)。
|
||||
- 工具集随 CAD 版本变化:`v143`(R24x/R25x/R26x、Z202x)、`v142`、`v141`、`v140`、`v110`、`v100`、`v90`。
|
||||
- C++ 标准在顶层 `cmakelists.txt` 中按 SDK 版本自动切换:ARX >25 → C++20;ARX 20~25 与 ZRX >2021 → C++14;ARX >19 → C++03;更老 → C++98。
|
||||
- 输出目录:`bin/Code2026/{Debug|Release}-x64-<标签>`、`lib/Code2026/...`,标签为 `R<版本><子版本>` 或 `Z<版本>`。
|
||||
- 加密模块的产物再落到子目录 `<PRODUCT>-<MODE>`(如 `ENV_2025_V6_S0-BAL_REMOTE`)。
|
||||
- Debug 构建通过 post-build 调用 `copyarx.exe`,按 `sh_output_path.json`(ACAD)/ `zw_output_path.json`(中望)把产物部署到 `c:\ShangHuaSoft\Envi3D-2026-M`。**Release 不部署**。
|
||||
|
||||
### 预设(`SourceCode/Code2026/cmakepresets.json`,共 13 套)
|
||||
### 预设(`cmakepresets.json`,13 套 + 3 个 base)
|
||||
|
||||
| 分组 | preset |
|
||||
| --- | --- |
|
||||
| AutoCAD | `R180 R190 R200 R210 R220 R230 R240 R243 R250 R260` |
|
||||
| 中望CAD | `Z2023 Z2024 Z2025 Z2026` |
|
||||
|
||||
关键 cache 变量:`CAD_SDK_ROOT`(`arx/` 或 `zrx/`)、`DEP_LIB_ROOT`/`DEP_INC_ROOT`(`../dep_lib` / `../dep_inc`)、`PRODUCT=ENV_2025_V6_S0`、`TRIAL_YEAR=2026`、`GENERATE_BIN_DIR`/`GENERATE_LIB_DIR`。
|
||||
继承链:`base` → `acad_base` / `zwcad_base` → 各版本 preset。关键 cache 变量:`CAD_SDK_ROOT`(`../../arx/` 或 `../../zrx/`)、`DEP_LIB_ROOT` / `DEP_INC_ROOT`(`../dep_lib` / `../dep_inc`)、`PRODUCT=ENV_2025_V6_S0`、`TRIAL_YEAR=2026`、`GENERATE_BIN_DIR` / `GENERATE_LIB_DIR`。
|
||||
|
||||
### 顶层聚合目标
|
||||
|
||||
@@ -60,25 +61,27 @@ cmake --build --preset R250 --target HvacCmd
|
||||
|
||||
### 批量编译与打包(`autoCompile/WF2026/`)
|
||||
|
||||
- `batch_build.bat` → 调用 `cmake_batch_build.py` 批量编译多个 preset。
|
||||
- 打包脚本:Inno Setup(`*.iss`)+ Python(`SHSCompile.py`)+ 多个 `.bat`,覆盖 ACAD/中望、1 年期/加密版,以及客户专版(中广核、国能集团等)。如 `环境设计-ACAD-加密自动打包.bat`、`环境设计-中望-1年期自动打包.bat`。
|
||||
- `batch_build.bat` → `python cmake_batch_build.py`,读 `cmake_batch_build.json` 中的包定义,逐 preset 执行 `cmake --preset` + `cmake --build --preset --config release -j 8`,日志写 `<preset>.log`。
|
||||
- 打包:Inno Setup(`*.iss`)+ Python(`SHSCompile.py`)+ 多个 `.bat`,覆盖 ACAD/中望、1 年期/加密版,以及客户专版(中广核、国能集团)。如 `环境设计-ACAD-加密自动打包.bat`、`环境设计-中望-1年期自动打包.bat`。
|
||||
|
||||
### CMake 构建体系(`cmake/`)
|
||||
### CMake 封装(`cmake/functions.cmake`)
|
||||
|
||||
- `cmake/functions.cmake`:核心封装
|
||||
- `add_custom_module(dir folder)`:注册子模块(自动 `add_subdirectory` + 设 FOLDER);`add_custom_module_2(dir target folder)` 用于目录名≠目标名的情况。
|
||||
- `target_link_objectarx(target EXT)`:链接 CAD SDK、全局头 `ShsGlobalIncludes`、定义 `CMAKE` 与 `ARX=<版本>`。
|
||||
- `simple_link_cad_sdk`:按 `IsZWCAD()` 自动选择 `ThirdParty::ARX` / `ThirdParty::ZRX`。
|
||||
- `set_encryption_definitions_and_output_path(target MODE)`:**授权模式**,见下。
|
||||
- `set_debug_post_build`:调用 `copyarx.exe` 部署。
|
||||
- `cmake/ThirdPartyDeps.cmake`:定义 `ThirdParty::ARX` / `ZRX` / `SQLite3` / `cURL` / `TG` / `modernGlue` / `BitAnswer` 等接口目标;按 SDK 版本条件追加库(如 `acdrawbridge` 需 >19,`acpal`/`acgeoment` 需 >23)。
|
||||
- 顶层 `cmakelists.txt`:`add_custom_module` 注册全部模块并组织 `FOLDER`(`SH/Core`、`SH/Pipe` …)。
|
||||
- `add_custom_module(dir folder)`:`add_subdirectory` + 以目录名作为 target 名并设 FOLDER;`add_custom_module_2(dir target folder)` 用于目录名 ≠ target 名(如 `ISODraft` → `ISODraftCmd`、`tg_shs/shs_kernal` → `wfK`)。
|
||||
- `target_link_objectarx(target EXT)`:链接 CAD SDK + 全局头 `ShsGlobalIncludes`(`inc/`、`inc/implement/`),定义 `CMAKE`、`ARX=<版本>` 与模块导出宏(如 `HVACCMD_EXPORT`)。
|
||||
- `simple_link_cad_sdk`:按 `IsZWCAD()` 选择 `ThirdParty::ARX` / `ThirdParty::ZRX`。
|
||||
- `add_def_file_name(SOURCES <Name>)`:向源列表追加 `<Name>.def` / `<Name>_zrx.def`(导出 `acrxEntryPoint`、`acrxGetApiVersion`)。
|
||||
- `target_set_name_and_suffix(target <Name> ".arx")`:设置 `OUTPUT_NAME`/`SUFFIX`,中望平台自动改 `.zrx`。
|
||||
- `set_encryption_definitions_and_output_path(target MODE)`:**授权模式**,见下节。
|
||||
- `set_debug_post_build`:调用 `copyarx.exe` 部署(仅 Debug)。
|
||||
- `cmake/ThirdPartyDeps.cmake`:定义 `ShsGlobalIncludes` 与 `ThirdParty::ARX` / `ZRX` / `SQLite3` / `cURL` / `TG` / `modernGlue` / `BitAnswer` 等接口目标;按 SDK 版本条件追加库(`acdrawbridge` 需 >19,`acpal`/`acgeoment` 需 >23)。
|
||||
- 顶层 `cmakelists.txt` 用 `add_custom_module` 注册全部模块并组织 `FOLDER`(`SH/Core`、`SH/Pipe` …);`CoreLibrary`、`CoreCommand` 走各自的 `add_subdirectory`(因内部有双版本逻辑)。
|
||||
|
||||
## 授权 / 加密
|
||||
|
||||
- `CoreCommand`、`CoreLibrary` 通过 `get_encryption_modes()` 由**同一套源码编译出两个目标**:
|
||||
- `BAL_REMOTE`(网络锁 / 正式版)
|
||||
- `TRIAL_YEAR`(1 年期试用版,定义 `TRIAL_YEAR=<年份>`)
|
||||
- `CoreLibrary`、`CoreCommand` 通过 `get_encryption_modes()` 由**同一套源码编译出两个目标**:
|
||||
- `CoreCommand_BAL_REMOTE` / `CoreLibrary_BAL_REMOTE`(网络锁 / 正式版)
|
||||
- `CoreCommand_TRIAL_YEAR` / `CoreLibrary_TRIAL_YEAR`(1 年期试用版,Release 下定义 `TRIAL_YEAR=<年份>`)
|
||||
- 其它业务模块**只链接 `CoreCommand_BAL_REMOTE`**;`CoreLibrary_${MODE}` 由加密模块内部引用。
|
||||
- 依赖 **BitAnswer**(加密狗库);加密表由 `utility/generateEncryptionTable` 生成。
|
||||
|
||||
## 架构
|
||||
@@ -86,7 +89,7 @@ cmake --build --preset R250 --target HvacCmd
|
||||
分三层:
|
||||
|
||||
1. **实体层**:`CoreLibrary` 定义海量自定义图元 `AecDbXxx`(继承 `AcDbEntity`),是数据模型核心;同时含绘图/分解/布尔等基础能力。
|
||||
2. **命令层**:各 `*Cmd` 模块实现 MFC 对话框 + Jig 交互 + ARX 命令注册。
|
||||
2. **命令层**:各 `*Cmd` 模块实现 MFC 对话框 + Jig 交互 + ARX 命令注册(`acrxEntryPoint` → `acedRegCmds->addCommand`,命令组名各模块自定)。
|
||||
3. **链接关系**:业务模块 → `AecRxBase` / `CoreCommand` / `sqliteserver` / `MFCCtrl`。
|
||||
|
||||
模块在顶层 `cmakelists.txt` 中按 FOLDER 分组:
|
||||
@@ -96,46 +99,30 @@ cmake --build --preset R250 --target HvacCmd
|
||||
| `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/Pipe` | `PipelineCmd`, `PipelineSpecCmd`, `PIDLineCmd`, `ISODraft`(→`ISODraftCmd`), `PipeHanger`(→`PipeHangerCmd`), `PlumbingCmd`, `pool3dcmd` | 管道/工艺/ISO 图/支吊架/给排水/水池 |
|
||||
| `SH/Structures` | `ArchCmd`, `ElecCmd`, `HvacCmd`, `SPLDCmd` | 建筑/电气/暖通/道路 |
|
||||
| `SH/Other` | `shsTK`, `Dimension`, `EarthWormMain`, `EarthWormCmd` | 通用工具、标注、主程序 |
|
||||
| `TG/*` | `tg_shs/*` | 天正系列库 |
|
||||
|
||||
关键模块:
|
||||
|
||||
- **CoreLibrary**:数据模型核心(自定义实体 `AecDbXxx`)。
|
||||
- **CoreLibrary**:数据模型核心(自定义实体 `AecDbXxx`),头文件在 `inc/` 与 `inc/implement/`,被所有模块共享。
|
||||
- **AecRxBase**:ARX 基类库(`AecDbEntityBase`、`AecDbCurveBase`、Grip、双击编辑等)。
|
||||
- **CoreCommand**:主命令集 + MFC 主界面/面板(BIM 面板、AI 助手面板等);**生成两种加密版本**。
|
||||
- **CoreImplement**:仅在 Debug 下有效(自定义实体的实现层)。
|
||||
- **CoreCommand**:主命令集 + MFC 主界面/面板(BIM 面板、AI 助手 `sh_ai.cpp` / `askaipaletteset.cpp`)、PCF 导入导出(`pcf.cpp`、`PcfIso.cpp`);**生成两种加密版本**。
|
||||
- **CoreImplement**:仅在 Debug 下链接(自定义实体的实现层)。
|
||||
- **StartApp**:C# (.NET WinForms) 启动器,不走 CMake,保留独立 `StartApp.sln`。
|
||||
- **tg_shs/**:天正系列(`shs_kernal`/wfK、`shs_twtkernal`/wfKernal、`shs_GeLib`、`shs_annotate`/wfA、`shs_twtanotate`/wfAnnotate、`shs_blklib`/wfB、`shs_siteplan`/wfS、`shs_pipewire`/wfpipew、`shs_outdoor`/wfoutdoor、`shs_ximage/*` 图像库、`shs_dbf`、`shs_sqlite` 等)。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
envi-code/
|
||||
├── Arx/ # AutoCAD ObjectARX SDK(R19.0~R26.0,gitignore)
|
||||
├── ZRX/ # 中望 ZRX SDK(Z2023~Z2026,gitignore)
|
||||
├── SourceCode/
|
||||
│ ├── dep_inc/ # 第三方头:modernGlue、rapidjson、curl
|
||||
│ ├── dep_lib/ # 第三方库:modernGlue、pub(含 sqlite3/BitAnswer)
|
||||
│ └── Code2026/ # ★ 主代码 + cmakelists.txt + cmakepresets.json + cmake/
|
||||
├── bin/, lib/ # 编译产物(按 SDK 版本分子目录,gitignore)
|
||||
├── cmake_output/ # CMake 生成目录(gitignore)
|
||||
├── autoCompile/ # 打包/加密/发布脚本(.bat/.py/.iss)
|
||||
├── utility/ # generateEncryptionTable(授权加密表生成)
|
||||
└── ai.memory/ # 跨机器项目记忆
|
||||
```
|
||||
- **tg_shs/**:天正系列(`shs_kernal`→`wfK`、`shs_twtkernal`→`wfKernal`、`shs_GeLib`、`shs_annotate`→`wfA`、`shs_twtanotate`→`wfAnotate`、`shs_blklib`→`wfB`、`shs_siteplan`→`wfS`、`shs_pipewire`→`wfpipew`、`shs_outdoor`→`wfoutdoor`、`shs_ximage/*` 图像库、`shs_dbf`、`shs_sqlite` 等)。
|
||||
|
||||
## 新增模块约定
|
||||
|
||||
在模块目录放 `CMakeLists.txt`,并在顶层 `SourceCode/Code2026/cmakelists.txt` 用 `add_custom_module(<相对目录> <FOLDER分组>)` 注册。模块 `CMakeLists.txt` 参考 `HvacCmd/CMakeLists.txt`:
|
||||
在模块目录放 `CMakeLists.txt`,并在顶层 `SourceCode/Code2026/cmakelists.txt` 用 `add_custom_module(<相对目录> <FOLDER分组>)` 注册。模板参考 `HvacCmd/CMakeLists.txt`:
|
||||
|
||||
```cmake
|
||||
add_library(<target> SHARED ${SOURCES})
|
||||
add_def_file_name(SOURCES "<Name>")
|
||||
target_set_name_and_suffix(<target> "<Name>" ".arx")
|
||||
target_link_objectarx(<target> <XXX_EXPORT>)
|
||||
target_precompile_headers(<target> PRIVATE StdAfx.h)
|
||||
set_debug_post_build(<target> "<Name>" ".arx")
|
||||
```
|
||||
|
||||
@@ -144,8 +131,25 @@ set_debug_post_build(<target> "<Name>" ".arx")
|
||||
## 平台差异与注意事项
|
||||
|
||||
- 用 `IsZWCAD()` 判断目标平台;ZRX 产物后缀自动变 `.zrx`,链接 `ThirdParty::ZRX`;ARX 链接 `ThirdParty::ARX`。
|
||||
- 编译宏:`ARX=<版本号>` 或 `ZWCAD`。
|
||||
- **源码编码为 GBK/ANSI(无 BOM)**:新增或修改的 `.cpp/.h` 必须保存为 GBK。若存成 UTF-8,MSVC 会按 GBK 误读其中的中文,导致 `C2001: newline in constant`(中文全角标点如 `。` 紧跟字符串结尾引号时尤其容易触发)。提交前可用 `python -c "open('f.cpp','rb').read().decode('gbk')"` 校验。
|
||||
- 编译宏:`ARX=<版本号>` 或 `ZWCAD`;模块导出宏(`*_EXPORT`)由 `target_link_objectarx` 注入。
|
||||
- 部分库仅在特定 SDK 版本可用(如 `acdrawbridge` 需 >19,`acpal`/`acgeoment` 需 >23),已在 `ThirdPartyDeps.cmake` 处理。
|
||||
- **禁止**新增或依赖 `.vcxproj` / `.sln`(`StartApp` 除外)。`cmake_output/` 下 CMake 生成的临时 `*.vcxproj` 是构建产物、已被 gitignore,**不要**误提交。
|
||||
- `.gitignore` 忽略:`Arx/`、`cmake_output/`、`bin/`、`lib/`,以及 `*.obj/*.pdb/*.user/.vs/` 等 VS 中间产物。
|
||||
- `.gitignore` 忽略:`Arx/`、`ZRX/`、`cmake_output/`、`bin/`、`lib/`,以及 `*.obj/*.pdb/*.user/.vs/` 等 VS 中间产物。
|
||||
|
||||
## 源码编码(重要)
|
||||
|
||||
**全部 `SourceCode/Code2026/**/*.cpp|*.h` 已统一为 UTF-8 with BOM**(2026-10 一次性重编码,约 6000 个文件)。新增或修改的 `.cpp/.h` 必须保存为 **UTF-8 BOM**:
|
||||
|
||||
- 例外:`cmakelists.txt` / `CMakeLists.txt` 保持 ASCII、无 BOM。
|
||||
- 改完自检:`python -c "print(open('f.cpp','rb').read(3))"` 应为 `b'\xef\xbb\xbf'`;再查 `raw.count(b'\xef\xbf\xbd')`,非 0 说明中文已被写坏(不可逆),用 `git checkout HEAD -- <file>` 还原重做。
|
||||
- 若遇到仍是 GBK/UTF-16 的老文件(从旧分支检出),先探明编码再改,不要假设。
|
||||
|
||||
## 测试 / 静态检查
|
||||
|
||||
本仓库**没有单元测试框架**(无 gtest/Catch2),也没有 lint 配置。验证方式是编译对应 preset,并在 CAD 中加载 `.arx` / `.zrx` 实测。
|
||||
|
||||
## Git 协作
|
||||
|
||||
- 提交信息用中文。
|
||||
- 远端是 Gitea,走 222 端口 SSH;各机器私钥不同,在本机 `~/.ssh/config` 指定,**不要把私钥文件名写进仓库**。
|
||||
- 推送到 `main` 需经 PR:`git push origin HEAD:refs/for/main/<分支名>` 触发评审,不要直接推 `main`。
|
||||
@@ -1,48 +0,0 @@
|
||||
# 工程概览
|
||||
|
||||
## 是什么
|
||||
|
||||
- **产品**:上海华软 **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://git@39.107.55.179:222/gjm/envi-code.git`(origin,主分支 `main`)。
|
||||
- 访问方式:SSH 222 端口。各机器私钥不同,需在本机 `~/.ssh/config` 指定自己的私钥,**不要把私钥文件名提交到仓库**。
|
||||
@@ -1,57 +0,0 @@
|
||||
# 构建系统
|
||||
|
||||
**结论:现在统一用 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` 等)。
|
||||
@@ -1,32 +0,0 @@
|
||||
# 业务模块划分
|
||||
|
||||
模块在顶层 `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`
|
||||
@@ -1,17 +0,0 @@
|
||||
# 决策与变更记录(按时间倒序)
|
||||
|
||||
## 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**:重要决策写入本目录并随仓库提交。
|
||||
@@ -1,35 +0,0 @@
|
||||
# 约定与注意事项
|
||||
|
||||
## 构建
|
||||
|
||||
- **统一使用 CMake**,禁止再新增/依赖 `.vcxproj`、`.sln`(`StartApp` 除外,见下)。
|
||||
- 新增业务模块:在模块目录放 `CMakeLists.txt`,并在顶层 `SourceCode/Code2026/cmakelists.txt` 用 `add_custom_module(<相对目录> <FOLDER分组>)` 注册。
|
||||
- 新增模块的 `CMakeLists.txt` 参考现有模块(如 `HvacCmd/CMakeLists.txt`)的模板:
|
||||
- `add_library(... SHARED ${SOURCES})`
|
||||
- `add_def_file_name(SOURCES "<Name>")`
|
||||
- `target_set_name_and_suffix(<t> "<Name>" ".arx")`
|
||||
- `target_link_objectarx(<t> <XXX_EXPORT>)`
|
||||
- `set_debug_post_build(<t> "<Name>" ".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://git@39.107.55.179:222/gjm/envi-code.git`,主分支 `main`。
|
||||
- 提交信息使用中文描述。
|
||||
- SSH 走 222 端口;**各机器私钥不同**,在本机 `~/.ssh/config` 里指定即可,不要把私钥文件名写进仓库。
|
||||
@@ -1,28 +0,0 @@
|
||||
# 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)**,方便日后判断是否仍然有效。
|
||||
Reference in new issue
Block a user