ice-entity-designer 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -4
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.mjs +1 -1
- package/dist/types/index.d.mts +4 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/theme/designerTheme.d.mts +22 -0
- package/dist/types/theme/designerTheme.d.ts +22 -0
- package/dist/types/utils/label-style.d.mts +11 -0
- package/dist/types/utils/label-style.d.ts +11 -0
- package/dist/types/water/WaterProcessDesigner.d.mts +82 -0
- package/dist/types/water/WaterProcessDesigner.d.ts +82 -0
- package/dist/types/water/water_shapes.d.mts +149 -0
- package/dist/types/water/water_shapes.d.ts +149 -0
- package/package.json +3 -3
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2022 大漠穷秋.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 给水排水工艺流程图应用层。
|
|
10
|
+
*
|
|
11
|
+
* 复用流程图应用层的选择 / 增删改 / 连线 / 历史 / 快照 / 导出 / 适应视图,
|
|
12
|
+
* 只补三件这一行特有的东西:
|
|
13
|
+
* 1. **管线带介质与管径**(污水 / 出水 / 混合液回流 / 回流污泥 / 剩余污泥 / 空气 / 药剂),
|
|
14
|
+
* 并按介质着色与定线型 —— 给排水图纸靠这个把水线、泥线、空气线分开;
|
|
15
|
+
* 2. **工艺校验** `validateWater()`:位号唯一、单元要有进出线、管线要标介质与管径、
|
|
16
|
+
* 出水路径上必须有在线监测(排污许可要求联网)、剩余污泥要有出路、AAO 要有内回流;
|
|
17
|
+
* 3. **流径分析** `traceFlow()`:从进水沿管线走到出水,阀门关断即视为断流 ——
|
|
18
|
+
* 相当于电力一次图里的「带电分析」,用来看运行工况(关掉某条超越管之后还通不通)。
|
|
19
|
+
*/
|
|
20
|
+
import FlowDesigner from '../flow/FlowDesigner.mjs';
|
|
21
|
+
import FlowEdge from '../flow/FlowEdge.mjs';
|
|
22
|
+
import type { WaterMedium, WaterSymbolKind, WaterValveState } from './water_shapes.mjs';
|
|
23
|
+
export type WaterIssue = {
|
|
24
|
+
level: 'error' | 'warning';
|
|
25
|
+
code: string;
|
|
26
|
+
message: string;
|
|
27
|
+
id?: string;
|
|
28
|
+
};
|
|
29
|
+
export type WaterFlowTrace = {
|
|
30
|
+
/** 从进水能否走到出水 */
|
|
31
|
+
connected: boolean;
|
|
32
|
+
/** 途经符号 id(连不上时为空) */
|
|
33
|
+
path: string[];
|
|
34
|
+
/** 到达的出水符号 id */
|
|
35
|
+
outletId?: string;
|
|
36
|
+
/** 卡在哪个关断的阀门上(连不上时给出) */
|
|
37
|
+
blockedAt?: string;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* 介质线型 → 虚线数组(点划线 = 长划 + 点)。
|
|
41
|
+
*
|
|
42
|
+
* 为什么不让引擎认 `'dashdot'`:`ICEPolyLine` 只把 `'dashed'` 映射成默认虚线,
|
|
43
|
+
* 其它取值会被当成实线 —— 那"信号线"就与水管画得一模一样了。
|
|
44
|
+
*/
|
|
45
|
+
export declare function dashPatternOf(lineType: 'solid' | 'dashed' | 'dashdot', lineWidth: number): number[];
|
|
46
|
+
/** 管线标注:`DN400 污水` 这种「管径 + 介质」是给排水图纸的通行写法 */
|
|
47
|
+
export declare function composePipeLabel(medium: WaterMedium, dn: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* @class WaterPipe 工艺管线(污水 / 污泥 / 空气 / 药剂…)
|
|
50
|
+
*
|
|
51
|
+
* 一条线 = 一段管线,介质与管径写在线上;线型与颜色跟介质走。
|
|
52
|
+
*/
|
|
53
|
+
export declare class WaterPipe extends FlowEdge {
|
|
54
|
+
static readonly typeId = "ice-entity-designer:WaterPipe";
|
|
55
|
+
/** 按当前介质刷新线型、颜色与标注 */
|
|
56
|
+
applyMediumStyle(): void;
|
|
57
|
+
/** 改介质(属性面板 / 运行工况用) */
|
|
58
|
+
setMedium(medium: WaterMedium, dn?: string): void;
|
|
59
|
+
}
|
|
60
|
+
export default class WaterProcessDesigner extends FlowDesigner {
|
|
61
|
+
constructor(ice: any);
|
|
62
|
+
get nodes(): any[];
|
|
63
|
+
get edges(): any[];
|
|
64
|
+
/** 建一个符号(处理单元 / 设备 / 边界) */
|
|
65
|
+
createSymbol(kind: WaterSymbolKind, props?: any): any;
|
|
66
|
+
/** 建一段管线(要标介质;管径缺了会给 warning) */
|
|
67
|
+
createPipe(props?: any): any;
|
|
68
|
+
/** 阀门开 / 闭(运行工况:关阀 → 流径断开) */
|
|
69
|
+
setValveState(id: string, valveState: WaterValveState): any;
|
|
70
|
+
/**
|
|
71
|
+
* 流径分析:从进水(`inlet`)沿管线走到出水(`outlet`),**关断的阀门不通行**。
|
|
72
|
+
* 相当于电力一次图的「带电分析」,用来回答「这个工况下还通不通」。
|
|
73
|
+
*/
|
|
74
|
+
traceFlow(fromId?: string): WaterFlowTrace;
|
|
75
|
+
/**
|
|
76
|
+
* 工艺校验。规则都是"图上可判定"的,不涉及水力计算(那是专业水力软件的事)。
|
|
77
|
+
*/
|
|
78
|
+
validateWater(): WaterIssue[];
|
|
79
|
+
private __linkId;
|
|
80
|
+
private __adjacency;
|
|
81
|
+
private __symbolById;
|
|
82
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2022 大漠穷秋.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 给水排水工艺流程图应用层。
|
|
10
|
+
*
|
|
11
|
+
* 复用流程图应用层的选择 / 增删改 / 连线 / 历史 / 快照 / 导出 / 适应视图,
|
|
12
|
+
* 只补三件这一行特有的东西:
|
|
13
|
+
* 1. **管线带介质与管径**(污水 / 出水 / 混合液回流 / 回流污泥 / 剩余污泥 / 空气 / 药剂),
|
|
14
|
+
* 并按介质着色与定线型 —— 给排水图纸靠这个把水线、泥线、空气线分开;
|
|
15
|
+
* 2. **工艺校验** `validateWater()`:位号唯一、单元要有进出线、管线要标介质与管径、
|
|
16
|
+
* 出水路径上必须有在线监测(排污许可要求联网)、剩余污泥要有出路、AAO 要有内回流;
|
|
17
|
+
* 3. **流径分析** `traceFlow()`:从进水沿管线走到出水,阀门关断即视为断流 ——
|
|
18
|
+
* 相当于电力一次图里的「带电分析」,用来看运行工况(关掉某条超越管之后还通不通)。
|
|
19
|
+
*/
|
|
20
|
+
import FlowDesigner from '../flow/FlowDesigner';
|
|
21
|
+
import FlowEdge from '../flow/FlowEdge';
|
|
22
|
+
import type { WaterMedium, WaterSymbolKind, WaterValveState } from './water_shapes';
|
|
23
|
+
export type WaterIssue = {
|
|
24
|
+
level: 'error' | 'warning';
|
|
25
|
+
code: string;
|
|
26
|
+
message: string;
|
|
27
|
+
id?: string;
|
|
28
|
+
};
|
|
29
|
+
export type WaterFlowTrace = {
|
|
30
|
+
/** 从进水能否走到出水 */
|
|
31
|
+
connected: boolean;
|
|
32
|
+
/** 途经符号 id(连不上时为空) */
|
|
33
|
+
path: string[];
|
|
34
|
+
/** 到达的出水符号 id */
|
|
35
|
+
outletId?: string;
|
|
36
|
+
/** 卡在哪个关断的阀门上(连不上时给出) */
|
|
37
|
+
blockedAt?: string;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* 介质线型 → 虚线数组(点划线 = 长划 + 点)。
|
|
41
|
+
*
|
|
42
|
+
* 为什么不让引擎认 `'dashdot'`:`ICEPolyLine` 只把 `'dashed'` 映射成默认虚线,
|
|
43
|
+
* 其它取值会被当成实线 —— 那"信号线"就与水管画得一模一样了。
|
|
44
|
+
*/
|
|
45
|
+
export declare function dashPatternOf(lineType: 'solid' | 'dashed' | 'dashdot', lineWidth: number): number[];
|
|
46
|
+
/** 管线标注:`DN400 污水` 这种「管径 + 介质」是给排水图纸的通行写法 */
|
|
47
|
+
export declare function composePipeLabel(medium: WaterMedium, dn: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* @class WaterPipe 工艺管线(污水 / 污泥 / 空气 / 药剂…)
|
|
50
|
+
*
|
|
51
|
+
* 一条线 = 一段管线,介质与管径写在线上;线型与颜色跟介质走。
|
|
52
|
+
*/
|
|
53
|
+
export declare class WaterPipe extends FlowEdge {
|
|
54
|
+
static readonly typeId = "ice-entity-designer:WaterPipe";
|
|
55
|
+
/** 按当前介质刷新线型、颜色与标注 */
|
|
56
|
+
applyMediumStyle(): void;
|
|
57
|
+
/** 改介质(属性面板 / 运行工况用) */
|
|
58
|
+
setMedium(medium: WaterMedium, dn?: string): void;
|
|
59
|
+
}
|
|
60
|
+
export default class WaterProcessDesigner extends FlowDesigner {
|
|
61
|
+
constructor(ice: any);
|
|
62
|
+
get nodes(): any[];
|
|
63
|
+
get edges(): any[];
|
|
64
|
+
/** 建一个符号(处理单元 / 设备 / 边界) */
|
|
65
|
+
createSymbol(kind: WaterSymbolKind, props?: any): any;
|
|
66
|
+
/** 建一段管线(要标介质;管径缺了会给 warning) */
|
|
67
|
+
createPipe(props?: any): any;
|
|
68
|
+
/** 阀门开 / 闭(运行工况:关阀 → 流径断开) */
|
|
69
|
+
setValveState(id: string, valveState: WaterValveState): any;
|
|
70
|
+
/**
|
|
71
|
+
* 流径分析:从进水(`inlet`)沿管线走到出水(`outlet`),**关断的阀门不通行**。
|
|
72
|
+
* 相当于电力一次图的「带电分析」,用来回答「这个工况下还通不通」。
|
|
73
|
+
*/
|
|
74
|
+
traceFlow(fromId?: string): WaterFlowTrace;
|
|
75
|
+
/**
|
|
76
|
+
* 工艺校验。规则都是"图上可判定"的,不涉及水力计算(那是专业水力软件的事)。
|
|
77
|
+
*/
|
|
78
|
+
validateWater(): WaterIssue[];
|
|
79
|
+
private __linkId;
|
|
80
|
+
private __adjacency;
|
|
81
|
+
private __symbolById;
|
|
82
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2022 大漠穷秋.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 给水排水工艺流程图(水厂 / 污水厂)符号库。
|
|
10
|
+
*
|
|
11
|
+
* **记法依据**:
|
|
12
|
+
* - GB/T 50106《建筑给水排水制图标准》—— 管道、阀门、仪表等通用图例(第 3 章「图例」);
|
|
13
|
+
* - 工艺单元(格栅、沉砂池、初沉池、生物池、二沉池、浓缩池、脱水机…)按工艺专业通行画法自绘,
|
|
14
|
+
* 本包只用**构成要素**表达可辨识特征(例如格栅=矩形+斜栅条、曝气池=矩形+曝气盘排列)。
|
|
15
|
+
* - 文字:给排水图纸以「设备名称 + 位号」为主,不像电力有 QF/QS 那样的强制性文字符号体系。
|
|
16
|
+
* 本包给每个 kind 一个**行业习惯代号**(P/B/V/FIT/AIT…)作默认值,可自由覆盖。
|
|
17
|
+
*
|
|
18
|
+
* **外观统一**(与其它域包同一条铁律):全部符号共用一套描边色、线宽、字号与基准尺寸,
|
|
19
|
+
* 并且**不可变换**(只能拖动)—— 符号的比例与朝向是记法的一部分。
|
|
20
|
+
* 配色约定:**蓝色系=水线单元,黄色系=污泥线单元**,全图一眼能分清水与泥。
|
|
21
|
+
*/
|
|
22
|
+
import { ICEGroup } from 'ice-render';
|
|
23
|
+
export declare const WATER_SYMBOL_KINDS: readonly ["barScreen", "gritChamber", "primaryClarifier", "anaerobicTank", "anoxicTank", "aerobicTank", "secondaryClarifier", "coagulationTank", "filterBed", "disinfectionTank", "storageTank", "deodorizer", "sludgeThickener", "dewateringMachine", "sludgeSilo", "pump", "submersiblePump", "screwPump", "blower", "vfd", "dosingUnit", "valve", "motorValve", "checkValve", "flowMeter", "levelGauge", "pressureGauge", "analyzer", "inlet", "outlet", "sludgeOut"];
|
|
24
|
+
export type WaterSymbolKind = (typeof WATER_SYMBOL_KINDS)[number];
|
|
25
|
+
/** 处理单元:参与工艺链、需要进出管线 */
|
|
26
|
+
export declare const WATER_UNIT_KINDS: WaterSymbolKind[];
|
|
27
|
+
/** 设备与仪表:只参与连接,不要求"进出各一条" */
|
|
28
|
+
export declare const WATER_EQUIPMENT_KINDS: WaterSymbolKind[];
|
|
29
|
+
/** 边界符号:进水 / 出水 / 污泥外运 */
|
|
30
|
+
export declare const WATER_BOUNDARY_KINDS: WaterSymbolKind[];
|
|
31
|
+
/** 会产出剩余污泥的单元(校验「污泥有没有出路」用) */
|
|
32
|
+
export declare const WATER_SLUDGE_SOURCE_KINDS: WaterSymbolKind[];
|
|
33
|
+
export type WaterMedium = 'sewage' | 'sludge' | 'returnSludge' | 'recycle' | 'air' | 'chemical' | 'effluent'
|
|
34
|
+
/** 仪表信号线(点划线):在线仪表 / 液位计 / 压力表与 PLC 的连线 */
|
|
35
|
+
| 'signal'
|
|
36
|
+
/** 动力线(点划线、更粗):变频器等电气回路 */
|
|
37
|
+
| 'power';
|
|
38
|
+
/**
|
|
39
|
+
* 介质样式:**颜色与线型区分介质**,是给排水图纸的通行做法(具体色值各院略有差异,可覆盖)。
|
|
40
|
+
* - 污水 / 出水 / 回流:实线,颜色区分;
|
|
41
|
+
* - 剩余污泥 / 回流污泥:两个色阶的棕黄(一条是排泥、一条是回流,专业上是两回事);
|
|
42
|
+
* - 空气 / 药剂:虚线(不是水流);
|
|
43
|
+
* - 信号 / 动力:点划线(`lineType: 'dashdot'`)—— 这两条不是管道,是电气与信号回路,
|
|
44
|
+
* 画出来才能解释"仪表装在哪、变频器控的是哪台设备"。
|
|
45
|
+
*/
|
|
46
|
+
export declare const WATER_MEDIUM_STYLES: Record<WaterMedium, {
|
|
47
|
+
label: string;
|
|
48
|
+
color: string;
|
|
49
|
+
lineType: 'solid' | 'dashed' | 'dashdot';
|
|
50
|
+
}>;
|
|
51
|
+
export type WaterSymbolPreset = {
|
|
52
|
+
label: string;
|
|
53
|
+
/** 行业习惯代号(可覆盖;给排水不像电力有强制文字符号体系) */
|
|
54
|
+
tag: string;
|
|
55
|
+
width: number;
|
|
56
|
+
height: number;
|
|
57
|
+
/** 画法分组:矩形单元 / 圆形单元 / 小设备 / 边界 */
|
|
58
|
+
shape: 'tank' | 'round' | 'device' | 'boundary';
|
|
59
|
+
/** 是否串联在管线上(阀门、流量计这类) */
|
|
60
|
+
inline: boolean;
|
|
61
|
+
};
|
|
62
|
+
export declare const WATER_SYMBOL_PRESETS: Record<WaterSymbolKind, WaterSymbolPreset>;
|
|
63
|
+
/** 全局外观基准:所有符号共用,保证「一张图上不花」 */
|
|
64
|
+
export declare const WATER_STYLE: {
|
|
65
|
+
strokeStyle: string;
|
|
66
|
+
lineWidth: number;
|
|
67
|
+
/** 栅条、折流板、搅拌器这类内部线更细 */
|
|
68
|
+
detailLineWidth: number;
|
|
69
|
+
/** 水线单元的填充(浅蓝) */
|
|
70
|
+
waterFill: string;
|
|
71
|
+
/** 污泥线单元的填充(浅黄) */
|
|
72
|
+
sludgeFill: string;
|
|
73
|
+
tagFontSize: number;
|
|
74
|
+
tagColor: string;
|
|
75
|
+
nameFontSize: number;
|
|
76
|
+
nameColor: string;
|
|
77
|
+
/** 圆形单元里的罗马数字/字母(G/M 那类) */
|
|
78
|
+
letterFontSize: number;
|
|
79
|
+
/** 空心符号的填充(必须是合法色值:fillStyle=false/'none' 会退化成实色) */
|
|
80
|
+
hollowFill: string;
|
|
81
|
+
/** 明确停用/旁通时的颜色 */
|
|
82
|
+
idleColor: string;
|
|
83
|
+
};
|
|
84
|
+
/** 污泥线单元(配色与校验都要用) */
|
|
85
|
+
export declare const WATER_SLUDGE_KINDS: WaterSymbolKind[];
|
|
86
|
+
export type WaterValveState = 'open' | 'closed';
|
|
87
|
+
/**
|
|
88
|
+
* **可开闭的阀门类图元**:手动阀与电动阀。
|
|
89
|
+
*
|
|
90
|
+
* 流径分析(关阀即断流)与开 / 闭操作都按这个集合判 —— 电动阀只是驱动方式不同,
|
|
91
|
+
* 在"通不通"这件事上和手动阀完全等价;漏了它就会出现"电动阀关着,流径却报通"。
|
|
92
|
+
* 图纸上要表达"能远程联锁的阀"就用 `motorValve`,不要因为它长得不一样就当成设备。
|
|
93
|
+
*/
|
|
94
|
+
export declare const WATER_VALVE_KINDS: WaterSymbolKind[];
|
|
95
|
+
export declare function isWaterValveKind(kind: string): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* @class WaterSymbol 给水排水工艺流程图图元(复合组件)
|
|
98
|
+
*
|
|
99
|
+
* 与其它域包同一套做法:内部形状按 `kind` 派生(`hasDerivedChildren() === true`),
|
|
100
|
+
* 不进文档、载入时按 state 重建;`getSerializableChildren()` 声明真实子节点(本包目前没有,
|
|
101
|
+
* 但保留钩子,后续做「单元里嵌设备」时不用改序列化契约)。
|
|
102
|
+
*/
|
|
103
|
+
export default class WaterSymbol extends ICEGroup {
|
|
104
|
+
/** 稳定的类型标识(判型与序列化都用它,不要用类名) */
|
|
105
|
+
static readonly typeId = "ice-entity-designer:WaterSymbol";
|
|
106
|
+
/** 派生部件(形状 / 文字),测试与属性面板可以按角色取用 */
|
|
107
|
+
parts: Array<{
|
|
108
|
+
role: string;
|
|
109
|
+
component: any;
|
|
110
|
+
}>;
|
|
111
|
+
/**
|
|
112
|
+
* 本次绘制的原点(= 符号中心在组内坐标系里的位置)。
|
|
113
|
+
*
|
|
114
|
+
* 组内坐标系原点在**左上角**(`ICERect` 的 left/top 是盒子左上角),而所有形状都是围绕中心
|
|
115
|
+
* 画的,所以绘图辅助统一按「中心相对坐标」收参、在这里加一次原点偏移。
|
|
116
|
+
*/
|
|
117
|
+
private __originX;
|
|
118
|
+
private __originY;
|
|
119
|
+
hasDerivedChildren(): boolean;
|
|
120
|
+
getSerializableChildren(): any[];
|
|
121
|
+
constructor(props?: any);
|
|
122
|
+
protected static arrangeParam(props?: any): any;
|
|
123
|
+
private static readonly __shapeKeys;
|
|
124
|
+
setState(patch: any): void;
|
|
125
|
+
applyPatch(patch?: any): void;
|
|
126
|
+
/** 取某个角色的派生部件(测试 / 属性面板用) */
|
|
127
|
+
part(role: string): any;
|
|
128
|
+
/** 按 `kind` 重建内部形状与文字 */
|
|
129
|
+
protected syncShape(): void;
|
|
130
|
+
private __box;
|
|
131
|
+
private __circle;
|
|
132
|
+
/**
|
|
133
|
+
* 闭合图形:**先画开放折线,再单独补一条闭合边**。
|
|
134
|
+
*
|
|
135
|
+
* 不用 `closePath` / 首尾重复点:那种写法会让首帧的包围盒退化,离屏缓存拿 0 尺寸画布去
|
|
136
|
+
* `drawImage` 而报错(引擎侧已记录此坑,见 13-gap-analysis)。拆成两段开放折线后,
|
|
137
|
+
* 每条边都走 `__poly`(含轴对齐直线兜底),盒子永远不退化,渲染结果完全一致。
|
|
138
|
+
*/
|
|
139
|
+
private __closedPoly;
|
|
140
|
+
private __poly;
|
|
141
|
+
/**
|
|
142
|
+
* 文本部件:**显式给文字盒(width/height)+ textAlign/textBaseline 居中**。
|
|
143
|
+
*
|
|
144
|
+
* 这是电力域包验证过的写法:不给盒、靠自己估算宽度去挪 left,实测会又偏又挤。
|
|
145
|
+
*/
|
|
146
|
+
private __text;
|
|
147
|
+
private __add;
|
|
148
|
+
private __clearParts;
|
|
149
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2022 大漠穷秋.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 给水排水工艺流程图(水厂 / 污水厂)符号库。
|
|
10
|
+
*
|
|
11
|
+
* **记法依据**:
|
|
12
|
+
* - GB/T 50106《建筑给水排水制图标准》—— 管道、阀门、仪表等通用图例(第 3 章「图例」);
|
|
13
|
+
* - 工艺单元(格栅、沉砂池、初沉池、生物池、二沉池、浓缩池、脱水机…)按工艺专业通行画法自绘,
|
|
14
|
+
* 本包只用**构成要素**表达可辨识特征(例如格栅=矩形+斜栅条、曝气池=矩形+曝气盘排列)。
|
|
15
|
+
* - 文字:给排水图纸以「设备名称 + 位号」为主,不像电力有 QF/QS 那样的强制性文字符号体系。
|
|
16
|
+
* 本包给每个 kind 一个**行业习惯代号**(P/B/V/FIT/AIT…)作默认值,可自由覆盖。
|
|
17
|
+
*
|
|
18
|
+
* **外观统一**(与其它域包同一条铁律):全部符号共用一套描边色、线宽、字号与基准尺寸,
|
|
19
|
+
* 并且**不可变换**(只能拖动)—— 符号的比例与朝向是记法的一部分。
|
|
20
|
+
* 配色约定:**蓝色系=水线单元,黄色系=污泥线单元**,全图一眼能分清水与泥。
|
|
21
|
+
*/
|
|
22
|
+
import { ICEGroup } from 'ice-render';
|
|
23
|
+
export declare const WATER_SYMBOL_KINDS: readonly ["barScreen", "gritChamber", "primaryClarifier", "anaerobicTank", "anoxicTank", "aerobicTank", "secondaryClarifier", "coagulationTank", "filterBed", "disinfectionTank", "storageTank", "deodorizer", "sludgeThickener", "dewateringMachine", "sludgeSilo", "pump", "submersiblePump", "screwPump", "blower", "vfd", "dosingUnit", "valve", "motorValve", "checkValve", "flowMeter", "levelGauge", "pressureGauge", "analyzer", "inlet", "outlet", "sludgeOut"];
|
|
24
|
+
export type WaterSymbolKind = (typeof WATER_SYMBOL_KINDS)[number];
|
|
25
|
+
/** 处理单元:参与工艺链、需要进出管线 */
|
|
26
|
+
export declare const WATER_UNIT_KINDS: WaterSymbolKind[];
|
|
27
|
+
/** 设备与仪表:只参与连接,不要求"进出各一条" */
|
|
28
|
+
export declare const WATER_EQUIPMENT_KINDS: WaterSymbolKind[];
|
|
29
|
+
/** 边界符号:进水 / 出水 / 污泥外运 */
|
|
30
|
+
export declare const WATER_BOUNDARY_KINDS: WaterSymbolKind[];
|
|
31
|
+
/** 会产出剩余污泥的单元(校验「污泥有没有出路」用) */
|
|
32
|
+
export declare const WATER_SLUDGE_SOURCE_KINDS: WaterSymbolKind[];
|
|
33
|
+
export type WaterMedium = 'sewage' | 'sludge' | 'returnSludge' | 'recycle' | 'air' | 'chemical' | 'effluent'
|
|
34
|
+
/** 仪表信号线(点划线):在线仪表 / 液位计 / 压力表与 PLC 的连线 */
|
|
35
|
+
| 'signal'
|
|
36
|
+
/** 动力线(点划线、更粗):变频器等电气回路 */
|
|
37
|
+
| 'power';
|
|
38
|
+
/**
|
|
39
|
+
* 介质样式:**颜色与线型区分介质**,是给排水图纸的通行做法(具体色值各院略有差异,可覆盖)。
|
|
40
|
+
* - 污水 / 出水 / 回流:实线,颜色区分;
|
|
41
|
+
* - 剩余污泥 / 回流污泥:两个色阶的棕黄(一条是排泥、一条是回流,专业上是两回事);
|
|
42
|
+
* - 空气 / 药剂:虚线(不是水流);
|
|
43
|
+
* - 信号 / 动力:点划线(`lineType: 'dashdot'`)—— 这两条不是管道,是电气与信号回路,
|
|
44
|
+
* 画出来才能解释"仪表装在哪、变频器控的是哪台设备"。
|
|
45
|
+
*/
|
|
46
|
+
export declare const WATER_MEDIUM_STYLES: Record<WaterMedium, {
|
|
47
|
+
label: string;
|
|
48
|
+
color: string;
|
|
49
|
+
lineType: 'solid' | 'dashed' | 'dashdot';
|
|
50
|
+
}>;
|
|
51
|
+
export type WaterSymbolPreset = {
|
|
52
|
+
label: string;
|
|
53
|
+
/** 行业习惯代号(可覆盖;给排水不像电力有强制文字符号体系) */
|
|
54
|
+
tag: string;
|
|
55
|
+
width: number;
|
|
56
|
+
height: number;
|
|
57
|
+
/** 画法分组:矩形单元 / 圆形单元 / 小设备 / 边界 */
|
|
58
|
+
shape: 'tank' | 'round' | 'device' | 'boundary';
|
|
59
|
+
/** 是否串联在管线上(阀门、流量计这类) */
|
|
60
|
+
inline: boolean;
|
|
61
|
+
};
|
|
62
|
+
export declare const WATER_SYMBOL_PRESETS: Record<WaterSymbolKind, WaterSymbolPreset>;
|
|
63
|
+
/** 全局外观基准:所有符号共用,保证「一张图上不花」 */
|
|
64
|
+
export declare const WATER_STYLE: {
|
|
65
|
+
strokeStyle: string;
|
|
66
|
+
lineWidth: number;
|
|
67
|
+
/** 栅条、折流板、搅拌器这类内部线更细 */
|
|
68
|
+
detailLineWidth: number;
|
|
69
|
+
/** 水线单元的填充(浅蓝) */
|
|
70
|
+
waterFill: string;
|
|
71
|
+
/** 污泥线单元的填充(浅黄) */
|
|
72
|
+
sludgeFill: string;
|
|
73
|
+
tagFontSize: number;
|
|
74
|
+
tagColor: string;
|
|
75
|
+
nameFontSize: number;
|
|
76
|
+
nameColor: string;
|
|
77
|
+
/** 圆形单元里的罗马数字/字母(G/M 那类) */
|
|
78
|
+
letterFontSize: number;
|
|
79
|
+
/** 空心符号的填充(必须是合法色值:fillStyle=false/'none' 会退化成实色) */
|
|
80
|
+
hollowFill: string;
|
|
81
|
+
/** 明确停用/旁通时的颜色 */
|
|
82
|
+
idleColor: string;
|
|
83
|
+
};
|
|
84
|
+
/** 污泥线单元(配色与校验都要用) */
|
|
85
|
+
export declare const WATER_SLUDGE_KINDS: WaterSymbolKind[];
|
|
86
|
+
export type WaterValveState = 'open' | 'closed';
|
|
87
|
+
/**
|
|
88
|
+
* **可开闭的阀门类图元**:手动阀与电动阀。
|
|
89
|
+
*
|
|
90
|
+
* 流径分析(关阀即断流)与开 / 闭操作都按这个集合判 —— 电动阀只是驱动方式不同,
|
|
91
|
+
* 在"通不通"这件事上和手动阀完全等价;漏了它就会出现"电动阀关着,流径却报通"。
|
|
92
|
+
* 图纸上要表达"能远程联锁的阀"就用 `motorValve`,不要因为它长得不一样就当成设备。
|
|
93
|
+
*/
|
|
94
|
+
export declare const WATER_VALVE_KINDS: WaterSymbolKind[];
|
|
95
|
+
export declare function isWaterValveKind(kind: string): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* @class WaterSymbol 给水排水工艺流程图图元(复合组件)
|
|
98
|
+
*
|
|
99
|
+
* 与其它域包同一套做法:内部形状按 `kind` 派生(`hasDerivedChildren() === true`),
|
|
100
|
+
* 不进文档、载入时按 state 重建;`getSerializableChildren()` 声明真实子节点(本包目前没有,
|
|
101
|
+
* 但保留钩子,后续做「单元里嵌设备」时不用改序列化契约)。
|
|
102
|
+
*/
|
|
103
|
+
export default class WaterSymbol extends ICEGroup {
|
|
104
|
+
/** 稳定的类型标识(判型与序列化都用它,不要用类名) */
|
|
105
|
+
static readonly typeId = "ice-entity-designer:WaterSymbol";
|
|
106
|
+
/** 派生部件(形状 / 文字),测试与属性面板可以按角色取用 */
|
|
107
|
+
parts: Array<{
|
|
108
|
+
role: string;
|
|
109
|
+
component: any;
|
|
110
|
+
}>;
|
|
111
|
+
/**
|
|
112
|
+
* 本次绘制的原点(= 符号中心在组内坐标系里的位置)。
|
|
113
|
+
*
|
|
114
|
+
* 组内坐标系原点在**左上角**(`ICERect` 的 left/top 是盒子左上角),而所有形状都是围绕中心
|
|
115
|
+
* 画的,所以绘图辅助统一按「中心相对坐标」收参、在这里加一次原点偏移。
|
|
116
|
+
*/
|
|
117
|
+
private __originX;
|
|
118
|
+
private __originY;
|
|
119
|
+
hasDerivedChildren(): boolean;
|
|
120
|
+
getSerializableChildren(): any[];
|
|
121
|
+
constructor(props?: any);
|
|
122
|
+
protected static arrangeParam(props?: any): any;
|
|
123
|
+
private static readonly __shapeKeys;
|
|
124
|
+
setState(patch: any): void;
|
|
125
|
+
applyPatch(patch?: any): void;
|
|
126
|
+
/** 取某个角色的派生部件(测试 / 属性面板用) */
|
|
127
|
+
part(role: string): any;
|
|
128
|
+
/** 按 `kind` 重建内部形状与文字 */
|
|
129
|
+
protected syncShape(): void;
|
|
130
|
+
private __box;
|
|
131
|
+
private __circle;
|
|
132
|
+
/**
|
|
133
|
+
* 闭合图形:**先画开放折线,再单独补一条闭合边**。
|
|
134
|
+
*
|
|
135
|
+
* 不用 `closePath` / 首尾重复点:那种写法会让首帧的包围盒退化,离屏缓存拿 0 尺寸画布去
|
|
136
|
+
* `drawImage` 而报错(引擎侧已记录此坑,见 13-gap-analysis)。拆成两段开放折线后,
|
|
137
|
+
* 每条边都走 `__poly`(含轴对齐直线兜底),盒子永远不退化,渲染结果完全一致。
|
|
138
|
+
*/
|
|
139
|
+
private __closedPoly;
|
|
140
|
+
private __poly;
|
|
141
|
+
/**
|
|
142
|
+
* 文本部件:**显式给文字盒(width/height)+ textAlign/textBaseline 居中**。
|
|
143
|
+
*
|
|
144
|
+
* 这是电力域包验证过的写法:不给盒、靠自己估算宽度去挪 left,实测会又偏又挤。
|
|
145
|
+
*/
|
|
146
|
+
private __text;
|
|
147
|
+
private __add;
|
|
148
|
+
private __clearParts;
|
|
149
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"author": "大漠穷秋",
|
|
3
3
|
"name": "ice-entity-designer",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.8",
|
|
5
5
|
"description": "An entity designer based on ice-render.",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"types:watch": "npm run types:check -- --watch"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
|
62
|
-
"ice-render": "^2.1
|
|
62
|
+
"ice-render": "^2.4.1",
|
|
63
63
|
"react": "^18 || ^19",
|
|
64
64
|
"react-dom": "^18 || ^19"
|
|
65
65
|
},
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"eslint-plugin-react-hooks": "4.6.0",
|
|
102
102
|
"http-server": "14.1.1",
|
|
103
103
|
"husky": "8.0.3",
|
|
104
|
-
"ice-render": "^2.
|
|
104
|
+
"ice-render": "^2.4.1",
|
|
105
105
|
"jest": "29.7.0",
|
|
106
106
|
"jest-environment-jsdom": "29.7.0",
|
|
107
107
|
"lint-staged": "15.5.2",
|