ice-entity-designer 0.12.3 → 0.12.4

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.
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 线段 × 轴对齐矩形(纯几何)。
3
+ *
4
+ * 用途:给排水符号的"**过路折线压字**"判定 —— 别人的管线从我的位号 / 名称文字带经过。
5
+ * 用 Liang–Barsky 的裁剪判据:把线段参数化后用四个半平面依次夹逼,夹完还有交集就算相交。
6
+ * 不分配对象、不做开方,几十万次调用也不心疼(设计器只在增删管线 / 载入 / 松手时跑)。
7
+ */
8
+ export interface SegmentPoint {
9
+ x: number;
10
+ y: number;
11
+ }
12
+ export interface SegmentBox {
13
+ minX: number;
14
+ minY: number;
15
+ maxX: number;
16
+ maxY: number;
17
+ }
18
+ /** 线段 `a→b` 与矩形 `box` 是否相交(含"贴边""端点落在矩形内")。 */
19
+ export declare function segmentHitsBox(a: SegmentPoint, b: SegmentPoint, box: SegmentBox): boolean;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 线段 × 轴对齐矩形(纯几何)。
3
+ *
4
+ * 用途:给排水符号的"**过路折线压字**"判定 —— 别人的管线从我的位号 / 名称文字带经过。
5
+ * 用 Liang–Barsky 的裁剪判据:把线段参数化后用四个半平面依次夹逼,夹完还有交集就算相交。
6
+ * 不分配对象、不做开方,几十万次调用也不心疼(设计器只在增删管线 / 载入 / 松手时跑)。
7
+ */
8
+ export interface SegmentPoint {
9
+ x: number;
10
+ y: number;
11
+ }
12
+ export interface SegmentBox {
13
+ minX: number;
14
+ minY: number;
15
+ maxX: number;
16
+ maxY: number;
17
+ }
18
+ /** 线段 `a→b` 与矩形 `box` 是否相交(含"贴边""端点落在矩形内")。 */
19
+ export declare function segmentHitsBox(a: SegmentPoint, b: SegmentPoint, box: SegmentBox): boolean;
@@ -87,7 +87,22 @@ export default class WaterProcessDesigner extends FlowDesigner {
87
87
  * 谁需要调用:增删管线与载入快照都由本类内部调了;**交互式改接**(把端点拖到另一个端口)
88
88
  * 由构造期挂的 `mouseup` 兜住;宿主自己搬动组件树之后也可以显式调一次。
89
89
  */
90
+ /**
91
+ * 重算**标签排版**:① 端口占用(自己的线上来压字);② **过路折线**穿过文字带
92
+ * (别人的管线从我的位号 / 名称上方经过 —— 那根线跟我没有连接关系)。
93
+ *
94
+ * 两类都由设计器算,因为**边是唯一真相**、而且折线也在它手里(`edge.state.points`)。
95
+ * 判据是纯几何:逐条折线与符号的两个文字带做**线段 × 矩形**相交。
96
+ *
97
+ * 代价量级:78 符号 × 100 管线 × 几段 ≈ 十万次整数级判定,只在增删管线 / 载入 / 松手时跑,
98
+ * 可忽略。别把它挂到逐帧路径上。
99
+ */
100
+ refreshLabelPlacement(): void;
101
+ /** 一条边的折线顶点(**世界坐标**:局部点 + 边的 left/top)。 */
102
+ private __edgeWorldPoints;
103
+ /** @deprecated 用 `refreshLabelPlacement()` —— 标签让位的判据已经从"端口被占"扩到"过路折线压字"。 */
90
104
  refreshPortOccupancy(): void;
105
+ private __refreshPortOccupancy;
91
106
  /**
92
107
  * 删除之后重算端口占用:基类的 `remove()` 会**级联删掉**挂在被删图元上的连线,
93
108
  * 所以这里必须整体重算,而不是只盯"被删的那条边"。
@@ -87,7 +87,22 @@ export default class WaterProcessDesigner extends FlowDesigner {
87
87
  * 谁需要调用:增删管线与载入快照都由本类内部调了;**交互式改接**(把端点拖到另一个端口)
88
88
  * 由构造期挂的 `mouseup` 兜住;宿主自己搬动组件树之后也可以显式调一次。
89
89
  */
90
+ /**
91
+ * 重算**标签排版**:① 端口占用(自己的线上来压字);② **过路折线**穿过文字带
92
+ * (别人的管线从我的位号 / 名称上方经过 —— 那根线跟我没有连接关系)。
93
+ *
94
+ * 两类都由设计器算,因为**边是唯一真相**、而且折线也在它手里(`edge.state.points`)。
95
+ * 判据是纯几何:逐条折线与符号的两个文字带做**线段 × 矩形**相交。
96
+ *
97
+ * 代价量级:78 符号 × 100 管线 × 几段 ≈ 十万次整数级判定,只在增删管线 / 载入 / 松手时跑,
98
+ * 可忽略。别把它挂到逐帧路径上。
99
+ */
100
+ refreshLabelPlacement(): void;
101
+ /** 一条边的折线顶点(**世界坐标**:局部点 + 边的 left/top)。 */
102
+ private __edgeWorldPoints;
103
+ /** @deprecated 用 `refreshLabelPlacement()` —— 标签让位的判据已经从"端口被占"扩到"过路折线压字"。 */
90
104
  refreshPortOccupancy(): void;
105
+ private __refreshPortOccupancy;
91
106
  /**
92
107
  * 删除之后重算端口占用:基类的 `remove()` 会**级联删掉**挂在被删图元上的连线,
93
108
  * 所以这里必须整体重算,而不是只盯"被删的那条边"。
@@ -89,6 +89,19 @@ export declare const WATER_STYLE: {
89
89
  * 8px 是让文字避开那条线(连同箭头)的余量,与线宽 / 箭头半宽同量级。
90
90
  */
91
91
  export declare const WATER_LABEL_PORT_GAP = 8;
92
+ /** 位号文字带:符号顶边**外侧**居中,top = 形状盒顶边 - 18,高度按字号行高算。 */
93
+ export declare const TAG_TOP_OFFSET = 18;
94
+ export declare const TAG_BOX_HEIGHT: number;
95
+ /** 名称文字带:形状盒底边外侧,top = 底边 + 14。 */
96
+ export declare const NAME_TOP_PAD = 14;
97
+ export declare const NAME_BOX_HEIGHT: number;
98
+ /** 一段文字带的世界矩形(`WaterSymbol.labelBands()` 用)。 */
99
+ export interface LabelBand {
100
+ minX: number;
101
+ minY: number;
102
+ maxX: number;
103
+ maxY: number;
104
+ }
92
105
  /**
93
106
  * 估算一段文字占多宽(世界像素,不给 ctx 也能算)。
94
107
  *
@@ -141,11 +154,46 @@ export default class WaterSymbol extends ICEGroup {
141
154
  * 由 `WaterProcessDesigner.__syncPortOccupancy()` 在增删连线 / 载入快照之后推进来。
142
155
  */
143
156
  private occupiedPorts;
157
+ /**
158
+ * 位号 / 名称的**文字带被别的折线穿过**(不是"自己的端口被占",见 `setLabelBlocked`)。
159
+ *
160
+ * 与 `occupiedPorts` 同性质:派生数据、不进 state,由设计器推过来。
161
+ */
162
+ private labelBlocked;
144
163
  hasDerivedChildren(): boolean;
145
164
  /** 设计器把"这个符号的哪几条边上有连线"推过来;变了才重建(避免无谓重绘)。 */
146
165
  setOccupiedPorts(ports: string[]): void;
147
166
  /** 当前被占用的端口(测试 / 属性面板用)。 */
148
167
  getOccupiedPorts(): string[];
168
+ /**
169
+ * 设计器把"有没有**过路折线**穿过我的位号 / 名称文字带"推过来。
170
+ *
171
+ * 为什么需要它(与端口占用分开):端口占用管的是"**我自己**的线上来压我的字",
172
+ * 而图纸里还有另一类 —— **别人的管线从我的标签上方 / 下方经过**(那根线跟我没有连接关系)。
173
+ * 实测下游(ice-agent-console)线上残留 4 处就属于这一类,且放大图元间距无效
174
+ * (折线与符号的相对位置是尺度无关的)。判据是纯几何,由设计器算(它手里有全部折线)。
175
+ */
176
+ setLabelBlocked(blocked: {
177
+ tag?: boolean;
178
+ name?: boolean;
179
+ }): void;
180
+ /** 当前的两个标签带判定(测试 / 诊断用)。 */
181
+ getLabelBlocked(): {
182
+ tag: boolean;
183
+ name: boolean;
184
+ };
185
+ /**
186
+ * 位号 / 名称**文字带的世界矩形**(没有那行文字时为 null)。
187
+ *
188
+ * 用途:设计器拿它跟折线做"过路管线压字"的几何判定(见 `setLabelBlocked`)。
189
+ * 口径与 `syncShape()` 的排版**同源**(同一批常量),别在别处再抄一份。
190
+ * 为什么从 `getMinBoundingBox(true)` 取形状盒:它是**世界坐标**且**不含子节点**
191
+ * (位号 / 名称就在子节点里),正好是文字带的对齐基准。
192
+ */
193
+ labelBands(): {
194
+ tag: LabelBand | null;
195
+ name: LabelBand | null;
196
+ };
149
197
  getSerializableChildren(): any[];
150
198
  constructor(props?: any);
151
199
  protected static arrangeParam(props?: any): any;
@@ -89,6 +89,19 @@ export declare const WATER_STYLE: {
89
89
  * 8px 是让文字避开那条线(连同箭头)的余量,与线宽 / 箭头半宽同量级。
90
90
  */
91
91
  export declare const WATER_LABEL_PORT_GAP = 8;
92
+ /** 位号文字带:符号顶边**外侧**居中,top = 形状盒顶边 - 18,高度按字号行高算。 */
93
+ export declare const TAG_TOP_OFFSET = 18;
94
+ export declare const TAG_BOX_HEIGHT: number;
95
+ /** 名称文字带:形状盒底边外侧,top = 底边 + 14。 */
96
+ export declare const NAME_TOP_PAD = 14;
97
+ export declare const NAME_BOX_HEIGHT: number;
98
+ /** 一段文字带的世界矩形(`WaterSymbol.labelBands()` 用)。 */
99
+ export interface LabelBand {
100
+ minX: number;
101
+ minY: number;
102
+ maxX: number;
103
+ maxY: number;
104
+ }
92
105
  /**
93
106
  * 估算一段文字占多宽(世界像素,不给 ctx 也能算)。
94
107
  *
@@ -141,11 +154,46 @@ export default class WaterSymbol extends ICEGroup {
141
154
  * 由 `WaterProcessDesigner.__syncPortOccupancy()` 在增删连线 / 载入快照之后推进来。
142
155
  */
143
156
  private occupiedPorts;
157
+ /**
158
+ * 位号 / 名称的**文字带被别的折线穿过**(不是"自己的端口被占",见 `setLabelBlocked`)。
159
+ *
160
+ * 与 `occupiedPorts` 同性质:派生数据、不进 state,由设计器推过来。
161
+ */
162
+ private labelBlocked;
144
163
  hasDerivedChildren(): boolean;
145
164
  /** 设计器把"这个符号的哪几条边上有连线"推过来;变了才重建(避免无谓重绘)。 */
146
165
  setOccupiedPorts(ports: string[]): void;
147
166
  /** 当前被占用的端口(测试 / 属性面板用)。 */
148
167
  getOccupiedPorts(): string[];
168
+ /**
169
+ * 设计器把"有没有**过路折线**穿过我的位号 / 名称文字带"推过来。
170
+ *
171
+ * 为什么需要它(与端口占用分开):端口占用管的是"**我自己**的线上来压我的字",
172
+ * 而图纸里还有另一类 —— **别人的管线从我的标签上方 / 下方经过**(那根线跟我没有连接关系)。
173
+ * 实测下游(ice-agent-console)线上残留 4 处就属于这一类,且放大图元间距无效
174
+ * (折线与符号的相对位置是尺度无关的)。判据是纯几何,由设计器算(它手里有全部折线)。
175
+ */
176
+ setLabelBlocked(blocked: {
177
+ tag?: boolean;
178
+ name?: boolean;
179
+ }): void;
180
+ /** 当前的两个标签带判定(测试 / 诊断用)。 */
181
+ getLabelBlocked(): {
182
+ tag: boolean;
183
+ name: boolean;
184
+ };
185
+ /**
186
+ * 位号 / 名称**文字带的世界矩形**(没有那行文字时为 null)。
187
+ *
188
+ * 用途:设计器拿它跟折线做"过路管线压字"的几何判定(见 `setLabelBlocked`)。
189
+ * 口径与 `syncShape()` 的排版**同源**(同一批常量),别在别处再抄一份。
190
+ * 为什么从 `getMinBoundingBox(true)` 取形状盒:它是**世界坐标**且**不含子节点**
191
+ * (位号 / 名称就在子节点里),正好是文字带的对齐基准。
192
+ */
193
+ labelBands(): {
194
+ tag: LabelBand | null;
195
+ name: LabelBand | null;
196
+ };
149
197
  getSerializableChildren(): any[];
150
198
  constructor(props?: any);
151
199
  protected static arrangeParam(props?: any): any;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "author": "大漠穷秋",
3
3
  "name": "ice-entity-designer",
4
- "version": "0.12.3",
4
+ "version": "0.12.4",
5
5
  "description": "An entity designer based on ice-render.",
6
6
  "repository": {
7
7
  "type": "git",