Files
envi-code/SourceCode/Code2026/CoreCommand/PcfIso.h
T
gjm cb38f5071b 新增 PCF→ISO 图(DWG)模块 PcfIso:P3D 一致的分图分层与图面样式
- 新增 PcfIso.h/.cpp:PCF 解析、等轴测投影(朝向与 Plant 3D 一致)、
  A3 图框/标题栏/材料表/切割表/尺寸/标高/焊口气泡/北针/跨图续接。
- 分图 4 级:模型连通性 → 断点(法兰/现场焊口) → 管段尺寸 → 图幅/拥塞。
- 新增命令 EW_PCFISO(单图)、EW_PCFISOSPLIT(分图,运行时选层级 1/2/3/4)。
- 注册到 EarthWorm.cpp、StdArx.h,并接入 cmakelists.txt。
- 附《PCF-ISO分图规则说明.md》。
2026-10-08 08:29:49 +08:00

63 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#pragma once
/*
PCF -> ISO 图(DWG) 导出
================================================================
把 EW_PCF / EW_PCFSPLIT 导出的 PCF 中间文件解析后,按等轴测(30°)投影,
生成带图框/标题栏/材料表/切割表/尺寸/标高/焊口气泡/北针的 ISO 图并保存为 DWG。
本文件与主代码(pcf.cpp)分离,算法自包含,便于后续单独修改/替换。
坐标约定:PCF 用 3D 模型坐标(单位 mm),Z 向上。
等轴测投影(与 Plant 3D / Isogen 一致):
u = (x - y) * cos30 (+X 指向右上 30°)
v = (x + y) * sin30 + z (+Y 指向左上 30°,+Z 向上)
分图层级(与 P3D 的 IsoConfig.xml <Split> 对应):
1) 模型级 Model —— 连通性断开(含"缺少中心点的三通"支管断开)
2) 断点级 Break —— 法兰/现场焊口/焊口处切开
3) 管段级 Spool —— 尺寸超过 SizeLimits 时切开
4) 图幅级 Sheet —— 一张图放不下/过密时续接
*/
namespace PcfIso
{
// 分图选项。默认与 P3D 默认工程一致:只做"模型级"连通性分图。
struct SplitOptions
{
bool modelSplit; // 1) 连通性分图(默认 true)
bool breakPointSplit; // 2) 断点分图(法兰/现场焊口) 默认 false
bool spoolSplit; // 3) 管段尺寸分图 默认 false
bool sheetSplit; // 4) 图幅/拥塞分图 默认 true
double spoolMaxX; // 管段尺寸上限 X(mm)
double spoolMaxY; // 管段尺寸上限 Y(mm)
double spoolMaxZ; // 管段尺寸上限 Z(mm)
int maxDirChanges; // 最大转向次数
int maxCompPerSheet; // 单张图最大元件数(拥塞控制)
SplitOptions();
};
// 把一个 PCF 文件渲染为单张 ISO 图(带图面样式)并存成 DWG。
// pcfPath : 输入 PCF 文件路径
// dwgPath : 输出 DWG 文件路径(含 .dwg 扩展名)
// 返回是否成功。
bool makeIsoDwg(LPCTSTR pcfPath, LPCTSTR dwgPath);
// 输入可以是单个 .pcf 文件,也可以是一个目录(处理目录下所有 *.pcf)。
// outDir 为空时,输出到各 PCF 所在目录。
// 返回成功生成的 DWG 个数。
int makeIsoDwgFromPath(LPCTSTR inPath, LPCTSTR outDir);
// 分图(按 P3D 规则把一个 PCF 拆成多张 ISO 图),使用默认选项。
// 每个连通子网输出一个 DWG,命名为 <文件名>-N.dwg;只有一个子网时输出 <文件名>.dwg。
// outDir 为空时输出到 PCF 所在目录。返回成功生成的 DWG 个数。
int makeIsoDwgSplit(LPCTSTR pcfPath, LPCTSTR outDir);
// 分图(可指定分层选项)。
int makeIsoDwgSplitEx(LPCTSTR pcfPath, LPCTSTR outDir, const SplitOptions &opt);
// 输入单个 .pcf 或目录,逐个按上面的规则分图。
// 返回成功生成的 DWG 个数。
int makeIsoDwgSplitFromPath(LPCTSTR inPath, LPCTSTR outDir);
}