新增管道ISO图PCF导出(EW_PCF/EW_PCFSPLIT),完善ITEM-CODE与WELD
CoreCommand 新增管道 ISO 图 PCF 导出功能: - EW_PCF:整个管道系统导出为单个 PCF 文件。 - EW_PCFSPLIT:按管道系统/连通子网拆分为多张 PCF。 内容完善: - 组件齐全:直管、管件(弯头/三通/变径/管帽等)、法兰、阀门、设备、支吊架。 - ITEM-CODE:按 等级+管径(+类型/类别) 查规格库,写出 ITEM-CODE/ITEM-DESCRIPTION/PIPING-SPEC; 弯头按实测夹角区分 90°/45°,阀门按 VLVTYPE 映射类别过滤。 - WELD:两侧接口连接类型均为焊接(0) 时生成焊口;法兰螺栓面不计焊口。 构建:cmakelists.txt 加入 pcf.cpp;StdArx.h 声明 EW_PCF/EW_PCFSPLIT 命令。
This commit is contained in:
1 parent
851c67b5f7
commit
2b0c2055ff
7 files changed
+2734
-256
No files matched your search
+150
@@ -0,0 +1,150 @@
|
||||
# CODEBUDDY.md
|
||||
|
||||
This file provides guidance to CodeBuddy Code when working with code in this repository.
|
||||
|
||||
> 另见 `ai.memory/`:随仓库提交的跨机器项目记忆(概览 / 构建 / 模块 / 工作日志 / 约定)。开始工作前建议先阅读。本文件与其保持一致,冲突时以 `ai.memory/` 与当前构建脚本为准。
|
||||
|
||||
## 项目概览
|
||||
|
||||
- **产品**:上海华软 **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://gjm@47.93.46.28:1216/srv/git/new-start.git`,主分支 `main`。提交信息用中文。
|
||||
|
||||
目标平台(由 preset 与编译宏区分):
|
||||
|
||||
| 平台 | SDK | 版本 | 对应 CAD |
|
||||
| --- | --- | --- | --- |
|
||||
| AutoCAD | ObjectARX | R18 ~ R26 | CAD 2010 ~ 2027 |
|
||||
| 中望CAD | ZRX | Z2023 ~ Z2026 | ZWCAD 2023 ~ 2026 |
|
||||
|
||||
## 构建
|
||||
|
||||
**统一使用 CMake,不再使用 Visual Studio 工程文件(`.vcxproj` / `.sln` 已全部删除)。唯一例外:`SourceCode/Code2026/StartApp/StartApp.sln`(C# 启动器,独立于 CMake)。**
|
||||
|
||||
所有构建命令均在 `SourceCode/Code2026/` 目录下执行(preset 与 `cmakepresets.json` 同目录):
|
||||
|
||||
```bash
|
||||
cd SourceCode/Code2026
|
||||
|
||||
# 配置 + 编译(示例:AutoCAD 2025-2026)
|
||||
cmake --preset R250
|
||||
cmake --build --preset R250
|
||||
|
||||
# 只构建单个目标(例如某个模块)
|
||||
cmake --build --preset R250 --target HvacCmd
|
||||
```
|
||||
|
||||
- 要求 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`。
|
||||
|
||||
### 预设(`SourceCode/Code2026/cmakepresets.json`,共 13 套)
|
||||
|
||||
| 分组 | 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`。
|
||||
|
||||
### 顶层聚合目标
|
||||
|
||||
- `Build_TG` → `wfA wfB wfS wfAnotate wfoutdoor`
|
||||
- `Build_SH_CORE` → `AecRxBase` + `CoreCommand_TRIAL_YEAR` + `CoreCommand_BAL_REMOTE`
|
||||
- `Build_SH_GLOBAL` → `MFCCtrl sqliteserver AdsXRx ThunderProof`
|
||||
|
||||
### 批量编译与打包(`autoCompile/WF2026/`)
|
||||
|
||||
- `batch_build.bat` → 调用 `cmake_batch_build.py` 批量编译多个 preset。
|
||||
- 打包脚本:Inno Setup(`*.iss`)+ Python(`SHSCompile.py`)+ 多个 `.bat`,覆盖 ACAD/中望、1 年期/加密版,以及客户专版(中广核、国能集团等)。如 `环境设计-ACAD-加密自动打包.bat`、`环境设计-中望-1年期自动打包.bat`。
|
||||
|
||||
### CMake 构建体系(`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` …)。
|
||||
|
||||
## 授权 / 加密
|
||||
|
||||
- `CoreCommand`、`CoreLibrary` 通过 `get_encryption_modes()` 由**同一套源码编译出两个目标**:
|
||||
- `BAL_REMOTE`(网络锁 / 正式版)
|
||||
- `TRIAL_YEAR`(1 年期试用版,定义 `TRIAL_YEAR=<年份>`)
|
||||
- 依赖 **BitAnswer**(加密狗库);加密表由 `utility/generateEncryptionTable` 生成。
|
||||
|
||||
## 架构
|
||||
|
||||
分三层:
|
||||
|
||||
1. **实体层**:`CoreLibrary` 定义海量自定义图元 `AecDbXxx`(继承 `AcDbEntity`),是数据模型核心;同时含绘图/分解/布尔等基础能力。
|
||||
2. **命令层**:各 `*Cmd` 模块实现 MFC 对话框 + Jig 交互 + ARX 命令注册。
|
||||
3. **链接关系**:业务模块 → `AecRxBase` / `CoreCommand` / `sqliteserver` / `MFCCtrl`。
|
||||
|
||||
模块在顶层 `cmakelists.txt` 中按 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`)。
|
||||
- **AecRxBase**:ARX 基类库(`AecDbEntityBase`、`AecDbCurveBase`、Grip、双击编辑等)。
|
||||
- **CoreCommand**:主命令集 + MFC 主界面/面板(BIM 面板、AI 助手面板等);**生成两种加密版本**。
|
||||
- **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/ # 跨机器项目记忆
|
||||
```
|
||||
|
||||
## 新增模块约定
|
||||
|
||||
在模块目录放 `CMakeLists.txt`,并在顶层 `SourceCode/Code2026/cmakelists.txt` 用 `add_custom_module(<相对目录> <FOLDER分组>)` 注册。模块 `CMakeLists.txt` 参考 `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>)
|
||||
set_debug_post_build(<target> "<Name>" ".arx")
|
||||
```
|
||||
|
||||
需要授权双版本时,参考 `CoreCommand/cmakelists.txt` 的 `get_encryption_modes` + `foreach(MODE ...)` + `set_encryption_definitions_and_output_path` 写法。
|
||||
|
||||
## 平台差异与注意事项
|
||||
|
||||
- 用 `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')"` 校验。
|
||||
- 部分库仅在特定 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 中间产物。
|
||||
@@ -722,6 +722,12 @@ void InitApplication()
|
||||
ADD_CMD(EW_DWGO, EW_PDWGOUTCmdFnc);
|
||||
ADD_CMD(EW_IGSO, EW_IGSOUTCmdFnc);
|
||||
|
||||
//ISO图: 按管线号导出 PCF 中间文件
|
||||
ADD_CMD(EW_PCF, EW_PCFCmdFnc);
|
||||
|
||||
//ISO图: 自动分图(按管号/连通性/图幅把一个管道系统拆成多张 PCF)
|
||||
ADD_CMD(EW_PCFSPLIT, EW_PCFSPLITCmdFnc);
|
||||
|
||||
//管廊漫游
|
||||
ADD_CMD(EW_GLMY, EW_GLMYCmdFnc);
|
||||
|
||||
|
||||
@@ -128,6 +128,8 @@ void EW_STLOUTCmdFnc();
|
||||
void EW_SALOUTCmdFnc();
|
||||
void EW_PDWGOUTCmdFnc();
|
||||
void EW_IGSOUTCmdFnc();
|
||||
void EW_PCFCmdFnc();
|
||||
void EW_PCFSPLITCmdFnc();
|
||||
void EW_GLMYCmdFnc();
|
||||
void EW_ENODECmdFnc();
|
||||
void EW_CTRLVIEWCmdFnc();
|
||||
|
||||
@@ -99,6 +99,7 @@ set(SOURCES
|
||||
"aecuicontextmenu.cpp"
|
||||
"sortedmenuitemdlg.cpp"
|
||||
"collisiondetection.cpp"
|
||||
"pcf.cpp"
|
||||
"EarthWorm.rc"
|
||||
# CoreCommand.def
|
||||
)
|
||||
|
||||
+2544
-256
File diff suppressed because it is too large.
Load diff
@@ -1,6 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
// PCF (Piping Component File) 导出。
|
||||
// 当前阶段:按“管道系统”收集 管道/管件/设备 并输出 PCF 中间文件,
|
||||
// 供 Isogen / 自研 isoAlgo / 第三方软件生成 ISO 图使用。
|
||||
class PCF
|
||||
{
|
||||
public:
|
||||
// 按管道系统(PIPE_PSYSTEM)导出 PCF 文件。
|
||||
// pszFile : 输出的 .pcf 文件完整路径
|
||||
// pszSystem : 管道系统名,对应实体专业数据里的 PIPE_SYS;
|
||||
// 传入空(NULL 或空串)时自动选取图纸中的第一个管道系统。
|
||||
static bool makePCF(LPCTSTR pszFile, LPCTSTR pszSystem);
|
||||
|
||||
// 自动分图:把一个管道系统拆成多张 ISO 图,每张图导出一个 PCF 文件。
|
||||
//
|
||||
// 拆分规则(按专业出图惯例):
|
||||
// 1) 先按"管号"分组,同一管号归一组(管号取不到时整系统作为一组);
|
||||
// 2) 组内按管道连通性(接口相接)再拆成若干连通子网;
|
||||
// 3) 子网若仍超过 nMaxNodes 个组件、或空间跨度超过 dMaxSpan,
|
||||
// 沿管线走向累加组件,超限时回退到最近的"优先切点"再切:
|
||||
// 优先切点 = 法兰面(eFlange) > 现场焊缝(两管件焊接相连) > 普通接口
|
||||
// 只在组件之间的接口处切,因此绝不会切在弯头/三通内部;
|
||||
// 4) 每个切点两侧互相写入"接图纸 <对方图号>"的接续标识,便于施工拼图。
|
||||
//
|
||||
// pszDir : 输出目录,空时用图纸所在目录
|
||||
// pszSystem : 管道系统名,空时取图纸中第一个管道系统
|
||||
// nMaxNodes : 单张图最大组件数,<=0 表示不限制
|
||||
// dMaxSpan : 单张图最大空间跨度(图纸单位),<=0 表示不限制
|
||||
static bool makePCFSplit(LPCTSTR pszDir, LPCTSTR pszSystem, int nMaxNodes, double dMaxSpan);
|
||||
};
|
||||
@@ -0,0 +1,6 @@
|
||||
现在需要在corecommand工程添加一个新功能:管道的ISO图,具体你可以参考网络上的isogen软件.
|
||||
这个功能最主要的是实现isoAlgo (piping Isometric Algorithm) 算法. 现在国内的pipeCAD实现了一个 isoAlgo算法.
|
||||
我现在有方案:
|
||||
1.自己开发isoalgo算法,结合现有的管道系统,实现iso图功能
|
||||
2.把管道,管件,设备数据,保存为 pcf 文件,用 AutoCAD Plant 3D 内的 PNPIso.exe 来生成.据说这个exe可以免费用.
|
||||
你的看法是什么?
|
||||
Reference in new issue
Block a user