@fmsim/machine 1.0.10 → 1.0.12
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/dist/index.js +2 -4
- package/dist/index.js.map +1 -1
- package/dist/mcs-carrier-holder.js +47 -21
- package/dist/mcs-carrier-holder.js.map +1 -1
- package/dist/mcs-machine.js.map +1 -1
- package/dist/mcs-unit.js +3 -2
- package/dist/mcs-unit.js.map +1 -1
- package/dist/port-flow.js +165 -0
- package/dist/port-flow.js.map +1 -0
- package/dist/templates/index.js +2 -4
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/port-flow.js +15 -0
- package/dist/templates/port-flow.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/zone-capacity-bar.js +2 -0
- package/dist/zone-capacity-bar.js.map +1 -1
- package/icons/port-flow.png +0 -0
- package/package.json +3 -3
- package/src/index.ts +2 -5
- package/src/mcs-carrier-holder.ts +61 -22
- package/src/mcs-machine.ts +0 -1
- package/src/mcs-unit.ts +3 -2
- package/src/port-flow.ts +203 -0
- package/src/templates/index.ts +2 -6
- package/src/templates/port-flow.ts +15 -0
- package/src/zone-capacity-bar.ts +2 -0
- package/translations/en.json +2 -0
- package/translations/ja.json +2 -0
- package/translations/ko.json +2 -0
- package/translations/ms.json +2 -0
- package/translations/zh.json +2 -0
package/dist/index.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
export { default as MachineGroups } from './groups';
|
|
2
|
-
// export { default as DataSubscription } from './data-subscription'
|
|
3
2
|
export { default as MCSMachine } from './mcs-machine';
|
|
4
3
|
export { default as MCSUnit } from './mcs-unit';
|
|
5
4
|
export { default as MCSCarrierHolder } from './mcs-carrier-holder';
|
|
6
5
|
export { default as MCSVehicle } from './mcs-vehicle';
|
|
7
6
|
export { default as MCSTransport } from './mcs-transport';
|
|
8
|
-
// export { default as MCSGauge } from './mcs-gauge-capacity-circle'
|
|
9
|
-
export { default as StockerCapacityBar } from './stocker-capacity-bar';
|
|
10
7
|
export { default as ZoneCapacityBar } from './zone-capacity-bar';
|
|
8
|
+
export { default as StockerCapacityBar } from './stocker-capacity-bar';
|
|
9
|
+
export { default as PortFlow } from './port-flow';
|
|
11
10
|
export { default as AGVLine } from './agv-line';
|
|
12
11
|
export { default as Buffer } from './buffer';
|
|
13
12
|
export { default as Conveyor } from './conveyor';
|
|
@@ -17,7 +16,6 @@ export { default as OHTLine } from './oht-line';
|
|
|
17
16
|
export { default as Stocker } from './stocker';
|
|
18
17
|
export { default as AGV } from './agv';
|
|
19
18
|
export { default as OHT } from './oht';
|
|
20
|
-
// export { default as RTV } from './rtv'
|
|
21
19
|
export { default as Shuttle } from './shuttle';
|
|
22
20
|
export { default as Port } from './port';
|
|
23
21
|
export { default as Crane } from './crane';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,UAAU,CAAA;AAEnD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,UAAU,CAAA;AAEnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAA","sourcesContent":["export { default as MachineGroups } from './groups'\n\nexport { default as MCSMachine } from './mcs-machine'\nexport { default as MCSUnit } from './mcs-unit'\nexport { default as MCSCarrierHolder } from './mcs-carrier-holder'\nexport { default as MCSVehicle } from './mcs-vehicle'\nexport { default as MCSTransport } from './mcs-transport'\nexport { default as ZoneCapacityBar } from './zone-capacity-bar'\nexport { default as StockerCapacityBar } from './stocker-capacity-bar'\nexport { default as PortFlow } from './port-flow'\n\nexport { default as AGVLine } from './agv-line'\nexport { default as Buffer } from './buffer'\nexport { default as Conveyor } from './conveyor'\nexport { default as ConveyorJoin } from './conveyor-join'\nexport { default as Equipment } from './equipment'\nexport { default as OHTLine } from './oht-line'\nexport { default as Stocker } from './stocker'\n\nexport { default as AGV } from './agv'\nexport { default as OHT } from './oht'\nexport { default as Shuttle } from './shuttle'\n\nexport { default as Port } from './port'\nexport { default as Crane } from './crane'\nexport { default as Shelf } from './shelf'\n"]}
|
|
@@ -27,51 +27,66 @@ export class Carrier extends MCSStatusMixin(Object) {
|
|
|
27
27
|
}
|
|
28
28
|
calculateShrunkRectangle(originalRect) {
|
|
29
29
|
const shrunkRect = Object.assign({}, originalRect);
|
|
30
|
-
shrunkRect.left += originalRect.width * 0.
|
|
31
|
-
shrunkRect.width *= 0.
|
|
32
|
-
shrunkRect.top += originalRect.height * 0.
|
|
33
|
-
shrunkRect.height *= 0.
|
|
30
|
+
shrunkRect.left += originalRect.width * 0.1;
|
|
31
|
+
shrunkRect.width *= 0.8;
|
|
32
|
+
shrunkRect.top += originalRect.height * 0.1;
|
|
33
|
+
shrunkRect.height *= 0.8;
|
|
34
34
|
return shrunkRect;
|
|
35
35
|
}
|
|
36
|
+
isPointOnCarrier(x, y, { left, top, width, height }) {
|
|
37
|
+
const rect = this.calculateShrunkRectangle({ left, top, width, height });
|
|
38
|
+
x -= rect.left;
|
|
39
|
+
y -= rect.top;
|
|
40
|
+
if (x < 0 || y < 0 || x > rect.width || y > rect.height) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
// 윗변 중앙 좌표
|
|
44
|
+
const topCenterX = rect.width / 2;
|
|
45
|
+
const topCenterY = 0;
|
|
46
|
+
// 오른쪽 변 중앙 좌표
|
|
47
|
+
const rightCenterX = rect.width;
|
|
48
|
+
const rightCenterY = rect.height / 2;
|
|
49
|
+
// 기울기 m = (y2 - y1) / (x2 - x1)
|
|
50
|
+
const m = (rightCenterY - topCenterY) / (rightCenterX - topCenterX);
|
|
51
|
+
// y 절편 b = y - mx
|
|
52
|
+
const b = topCenterY - m * topCenterX;
|
|
53
|
+
// 점(px, py)이 선 아래(좌하부)에 있는지 확인
|
|
54
|
+
return y > m * x + b;
|
|
55
|
+
}
|
|
36
56
|
render(ctx) {
|
|
37
57
|
if (!this.emptyType) {
|
|
38
58
|
return;
|
|
39
59
|
}
|
|
40
60
|
const { left, top, width, height } = this.calculateShrunkRectangle(this.host.bounds);
|
|
41
|
-
const radius = Math.round(Math.min(width, height) * 0.
|
|
61
|
+
const radius = Math.round(Math.min(width, height) * 0.1);
|
|
42
62
|
// 시작점 설정
|
|
43
63
|
ctx.beginPath();
|
|
44
64
|
ctx.moveTo(left + radius, top);
|
|
45
65
|
// 상단 가로선 그리기
|
|
46
|
-
ctx.lineTo(left + width
|
|
47
|
-
ctx.arcTo(left + width, top, left + width, top + radius, radius);
|
|
66
|
+
ctx.lineTo(left + width / 2, top);
|
|
48
67
|
// 우측 세로선 그리기
|
|
49
|
-
ctx.lineTo(left + width, top + height
|
|
50
|
-
ctx.
|
|
68
|
+
ctx.lineTo(left + width, top + height / 2);
|
|
69
|
+
ctx.lineTo(left + width, top + height);
|
|
51
70
|
// 하단 가로선 그리기
|
|
52
|
-
ctx.lineTo(left
|
|
53
|
-
ctx.arcTo(left, top + height, left, top + height - radius, radius);
|
|
71
|
+
ctx.lineTo(left, top + height);
|
|
54
72
|
// 좌측 세로선 그리기
|
|
55
|
-
ctx.lineTo(left, top
|
|
56
|
-
ctx.arcTo(left, top, left + radius, top, radius);
|
|
73
|
+
ctx.lineTo(left, top);
|
|
57
74
|
// 경로 닫기 및 그리기
|
|
58
75
|
ctx.closePath();
|
|
59
|
-
ctx.
|
|
60
|
-
ctx.lineWidth = radius > 10 ? 2 : 1;
|
|
76
|
+
ctx.lineWidth = radius > 5 ? 1 : 0.5;
|
|
61
77
|
ctx.fillStyle = this.statusColor || 'transparent';
|
|
62
78
|
ctx.strokeStyle = this.auxColor || 'transparent';
|
|
63
79
|
ctx.fill();
|
|
64
80
|
ctx.stroke();
|
|
65
81
|
ctx.beginPath();
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (count > 1) {
|
|
82
|
+
const text = this.emptyType == 'Full' ? 'F' : this.emptyType == 'Empty' ? 'E' : this.emptyType == 'EmptyEmpty' ? 'X' : '';
|
|
83
|
+
if (text) {
|
|
69
84
|
const { x: cx, y: cy } = this.host.center;
|
|
70
|
-
ctx.fillStyle = '
|
|
71
|
-
ctx.font = `
|
|
85
|
+
ctx.fillStyle = 'black';
|
|
86
|
+
ctx.font = `normal ${Math.round(radius * 8)}px Arial`;
|
|
72
87
|
ctx.textAlign = 'center';
|
|
73
88
|
ctx.textBaseline = 'middle';
|
|
74
|
-
ctx.fillText(
|
|
89
|
+
ctx.fillText(text, cx - width / 8, cy + height / 8);
|
|
75
90
|
}
|
|
76
91
|
}
|
|
77
92
|
}
|
|
@@ -104,5 +119,16 @@ export default class MCSCarrierHolder extends MCSUnit {
|
|
|
104
119
|
this.carrier.data = this.data;
|
|
105
120
|
super.onchangeData(after, before);
|
|
106
121
|
}
|
|
122
|
+
isPointOnCarrier(x, y) {
|
|
123
|
+
const { CARRIERID } = this.data || {};
|
|
124
|
+
if (!CARRIERID) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
const point = this.transcoordC2S(x, y);
|
|
128
|
+
const { left, top, width, height } = this.bounds;
|
|
129
|
+
point.x -= left;
|
|
130
|
+
point.y -= top;
|
|
131
|
+
return this.carrier.isPointOnCarrier(point.x, point.y, { left: 0, top: 0, width, height });
|
|
132
|
+
}
|
|
107
133
|
}
|
|
108
134
|
//# sourceMappingURL=mcs-carrier-holder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcs-carrier-holder.js","sourceRoot":"","sources":["../src/mcs-carrier-holder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAU,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,OAAO,MAAM,YAAY,CAAA;AAEhC,MAAM,OAAO,OAAQ,SAAQ,cAAc,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"mcs-carrier-holder.js","sourceRoot":"","sources":["../src/mcs-carrier-holder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAU,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,OAAO,MAAM,YAAY,CAAA;AAEhC,MAAM,OAAO,OAAQ,SAAQ,cAAc,CAAC,MAAM,CAAC;IAQjD,YAAY,IAAe;QACzB,KAAK,EAAE,CAAA;QALT,SAAI,GAAwE,EAAE,CAAA;QAM5E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,IAAS;QAChB,MAAM,EAAE,SAAS,EAAE,WAAW,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,IAAI,IAAI,EAAE,CAAA;QAE7D,IAAI,CAAC,EAAE,GAAG,SAAS,CAAA;QACnB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,IAAI,MAAM;;QACR,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;QAE7C,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,MAAC,IAAI,CAAC,IAAI,CAAC,IAAY,0CAAE,KAAK,CAAC,iBAAiB,CAAC,CAAA;QAC1D,CAAC;QAED,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,wBAAwB,CAAC,YAAoB;QAC3C,MAAM,UAAU,qBAAgB,YAAY,CAAE,CAAA;QAE9C,UAAU,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,GAAG,GAAG,CAAA;QAC3C,UAAU,CAAC,KAAK,IAAI,GAAG,CAAA;QAEvB,UAAU,CAAC,GAAG,IAAI,YAAY,CAAC,MAAM,GAAG,GAAG,CAAA;QAC3C,UAAU,CAAC,MAAM,IAAI,GAAG,CAAA;QAExB,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QACxE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAA;QACd,CAAC,IAAI,IAAI,CAAC,GAAG,CAAA;QAEb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,WAAW;QACX,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;QACjC,MAAM,UAAU,GAAG,CAAC,CAAA;QAEpB,cAAc;QACd,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAA;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QAEpC,gCAAgC;QAChC,MAAM,CAAC,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,CAAA;QAEnE,kBAAkB;QAClB,MAAM,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,CAAA;QAErC,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;IAED,MAAM,CAAC,GAA6B;QAClC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAM;QACR,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEpF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAA;QAExD,SAAS;QACT,GAAG,CAAC,SAAS,EAAE,CAAA;QACf,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,GAAG,CAAC,CAAA;QAE9B,aAAa;QACb,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;QAEjC,aAAa;QACb,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,CAAA;QAC1C,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,CAAA;QAEtC,aAAa;QACb,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,CAAA;QAE9B,aAAa;QACb,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAErB,cAAc;QACd,GAAG,CAAC,SAAS,EAAE,CAAA;QAEf,GAAG,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QACpC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,IAAI,aAAa,CAAA;QACjD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAA;QAEhD,GAAG,CAAC,IAAI,EAAE,CAAA;QACV,GAAG,CAAC,MAAM,EAAE,CAAA;QAEZ,GAAG,CAAC,SAAS,EAAE,CAAA;QAEf,MAAM,IAAI,GACR,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAE9G,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA;YAEzC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAA;YACvB,GAAG,CAAC,IAAI,GAAG,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAA;YACrD,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAA;YACxB,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAA;YAE3B,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IAArD;;QAeE,YAAO,GAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAgCtC,CAAC;IA9CC,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,OAAO,CAAC,UAAU;YACrB;gBACE,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,qBAAqB;gBAC5B,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE;oBACR,OAAO,EAAE,cAAc;iBACxB;aACF;SACF,CAAA;IACH,CAAC;IAID,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IAC/B,CAAC;IAED,UAAU,CAAC,GAA6B;QACtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAExB,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IAED,YAAY,CAAC,KAAU,EAAE,MAAW;QAClC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QAE7B,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAED,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACtC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QAEhD,KAAK,CAAC,CAAC,IAAI,IAAI,CAAA;QACf,KAAK,CAAC,CAAC,IAAI,GAAG,CAAA;QAEd,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5F,CAAC;CACF","sourcesContent":["import { BOUNDS, Component } from '@hatiolab/things-scene'\nimport { themesColorMap } from '@fmsim/api'\nimport { LEGEND_CARRIER, Legend } from './features/mcs-status-default'\nimport { MCSStatusMixin } from './features/mcs-status-mixin'\nimport MCSUnit from './mcs-unit'\n\nexport class Carrier extends MCSStatusMixin(Object) {\n host: Component\n\n id?: string\n type: ('ALL' | 'BOBIN' | 'MAGAZINE' | 'PALLET' | 'REEL_TRAY' | 'PLATE')[] = []\n // emptyType?: '5000' | '5001' | '5002' // 'Full' | 'Empty' | 'EmptyEmpty'\n emptyType?: 'Full' | 'Empty' | 'EmptyEmpty'\n\n constructor(host: Component) {\n super()\n this.host = host\n }\n\n set data(data: any) {\n const { CARRIERID, CARRIERTYPE = '', EMPTYTYPE } = data || {}\n\n this.id = CARRIERID\n this.type = CARRIERTYPE.split(';')\n this.emptyType = EMPTYTYPE\n }\n\n get status() {\n return this.emptyType\n }\n\n get legend(): Legend {\n const { carrierLegendName } = this.host.state\n\n if (carrierLegendName) {\n return (this.host.root as any)?.style[carrierLegendName]\n }\n\n return LEGEND_CARRIER\n }\n\n calculateShrunkRectangle(originalRect: BOUNDS): BOUNDS {\n const shrunkRect: BOUNDS = { ...originalRect }\n\n shrunkRect.left += originalRect.width * 0.1\n shrunkRect.width *= 0.8\n\n shrunkRect.top += originalRect.height * 0.1\n shrunkRect.height *= 0.8\n\n return shrunkRect\n }\n\n isPointOnCarrier(x, y, { left, top, width, height }) {\n const rect = this.calculateShrunkRectangle({ left, top, width, height })\n x -= rect.left\n y -= rect.top\n\n if (x < 0 || y < 0 || x > rect.width || y > rect.height) {\n return false\n }\n\n // 윗변 중앙 좌표\n const topCenterX = rect.width / 2\n const topCenterY = 0\n\n // 오른쪽 변 중앙 좌표\n const rightCenterX = rect.width\n const rightCenterY = rect.height / 2\n\n // 기울기 m = (y2 - y1) / (x2 - x1)\n const m = (rightCenterY - topCenterY) / (rightCenterX - topCenterX)\n\n // y 절편 b = y - mx\n const b = topCenterY - m * topCenterX\n\n // 점(px, py)이 선 아래(좌하부)에 있는지 확인\n return y > m * x + b\n }\n\n render(ctx: CanvasRenderingContext2D) {\n if (!this.emptyType) {\n return\n }\n\n const { left, top, width, height } = this.calculateShrunkRectangle(this.host.bounds)\n\n const radius = Math.round(Math.min(width, height) * 0.1)\n\n // 시작점 설정\n ctx.beginPath()\n ctx.moveTo(left + radius, top)\n\n // 상단 가로선 그리기\n ctx.lineTo(left + width / 2, top)\n\n // 우측 세로선 그리기\n ctx.lineTo(left + width, top + height / 2)\n ctx.lineTo(left + width, top + height)\n\n // 하단 가로선 그리기\n ctx.lineTo(left, top + height)\n\n // 좌측 세로선 그리기\n ctx.lineTo(left, top)\n\n // 경로 닫기 및 그리기\n ctx.closePath()\n\n ctx.lineWidth = radius > 5 ? 1 : 0.5\n ctx.fillStyle = this.statusColor || 'transparent'\n ctx.strokeStyle = this.auxColor || 'transparent'\n\n ctx.fill()\n ctx.stroke()\n\n ctx.beginPath()\n\n const text =\n this.emptyType == 'Full' ? 'F' : this.emptyType == 'Empty' ? 'E' : this.emptyType == 'EmptyEmpty' ? 'X' : ''\n\n if (text) {\n const { x: cx, y: cy } = this.host.center\n\n ctx.fillStyle = 'black'\n ctx.font = `normal ${Math.round(radius * 8)}px Arial`\n ctx.textAlign = 'center'\n ctx.textBaseline = 'middle'\n\n ctx.fillText(text, cx - width / 8, cy + height / 8)\n }\n }\n}\n\nexport default class MCSCarrierHolder extends MCSUnit {\n static get properties(): any {\n return [\n ...MCSUnit.properties,\n {\n type: 'select',\n label: 'carrier-legend-name',\n name: 'carrierLegendName',\n property: {\n options: themesColorMap\n }\n }\n ]\n }\n\n carrier: Carrier = new Carrier(this)\n\n ready() {\n this.carrier.data = this.data\n }\n\n postrender(ctx: CanvasRenderingContext2D) {\n this.carrier.render(ctx)\n\n super.postrender(ctx)\n }\n\n onchangeData(after: any, before: any) {\n this.carrier.data = this.data\n\n super.onchangeData(after, before)\n }\n\n isPointOnCarrier(x, y) {\n const { CARRIERID } = this.data || {}\n if (!CARRIERID) {\n return false\n }\n\n const point = this.transcoordC2S(x, y)\n const { left, top, width, height } = this.bounds\n\n point.x -= left\n point.y -= top\n\n return this.carrier.isPointOnCarrier(point.x, point.y, { left: 0, top: 0, width, height })\n }\n}\n"]}
|
package/dist/mcs-machine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcs-machine.js","sourceRoot":"","sources":["../src/mcs-machine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AAEtF,OAAO,EAAE,cAAc,EAAU,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"mcs-machine.js","sourceRoot":"","sources":["../src/mcs-machine.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ContainerAbstract } from '@hatiolab/things-scene'\nimport { getPopupData } from '@fmsim/api'\n\nimport { MCSStatusMixin, MCSStatusMixinProperties } from './features/mcs-status-mixin'\n\nimport { LEGEND_MACHINE, Legend } from './features/mcs-status-default'\n\n/**\n * MCS Machine의 공통 속성을 정의한 최상위 오브젝트\n * - Container\n * -\n */\nexport default class MCSMachine extends MCSStatusMixin(ContainerAbstract) {\n static get properties(): any {\n return [\n ...MCSStatusMixinProperties,\n {\n type: 'number',\n name: 'round',\n label: 'round'\n }\n ]\n }\n\n get showMoveHandle() {\n return false\n }\n\n containable(component: Component) {\n return ['rect', 'ellipse'].includes(component.state.type)\n }\n\n get reactionDecorators() {\n return ['bouncing-arrow']\n }\n\n get decorators() {\n return ['decotag']\n }\n\n getTheme() {\n const { legendName } = this.state\n\n if (legendName) {\n return (this.root as any)?.style?.[legendName]\n }\n }\n\n get hasTextProperty() {\n return true\n }\n\n get status() {\n return this.data?.STATUS\n }\n\n get auxStatus() {\n return this.data?.STATUS\n }\n\n get legend(): Legend {\n return this.getTheme() || this.getLegendFallback()\n }\n\n get auxLegend() {\n return LEGEND_MACHINE\n }\n\n get auxColor() {\n return this.state.strokeStyle\n }\n\n getLegendFallback() {\n return LEGEND_MACHINE\n }\n\n render(ctx) {\n var { round = 0, lineWidth } = this.state\n var { left, top, width, height } = this.bounds\n\n ctx.beginPath()\n\n ctx.strokeStyle = this.auxColor\n ctx.fillStyle = this.statusColor!\n ctx.lineWidth = lineWidth || 1\n ctx.lineCap = 'round'\n ctx.setLineDash([])\n\n if (round > 0) {\n ctx.roundRect(left, top, width, height, round)\n } else {\n ctx.rect(left, top, width, height)\n }\n\n ctx.fill()\n ctx.stroke()\n }\n\n // get text() {\n // if (this.data?.LOCALENAME) {\n // // TODO 왜 LOCALENAME 데이타는 문자열인가 ? 오브젝트로 보내달라.\n // return JSON.parse(this.data.LOCALENAME)[getLocaleLanguage()]\n // }\n\n // return super.text\n // }\n\n // set text(text) {\n // super.text = text\n // }\n\n async detailInfo() {\n const { type, id } = this.state\n\n if (!id) {\n return\n }\n\n return await getPopupData(type, id)\n }\n}\n"]}
|
package/dist/mcs-unit.js
CHANGED
|
@@ -2,12 +2,13 @@ import { Component } from '@hatiolab/things-scene';
|
|
|
2
2
|
import { getPopupData } from '@fmsim/api';
|
|
3
3
|
import { MCSStatusMixin, MCSStatusMixinProperties } from './features/mcs-status-mixin';
|
|
4
4
|
import { LEGEND_UNIT } from './features/mcs-status-default';
|
|
5
|
+
import { ParentObjectMixin, ParentObjectMixinProperties } from './features/parent-object-mixin';
|
|
5
6
|
/**
|
|
6
7
|
* MCS용 Unit들의 공통 속성을 정의한 오브젝트
|
|
7
8
|
*/
|
|
8
|
-
export default class MCSUnit extends MCSStatusMixin(Component) {
|
|
9
|
+
export default class MCSUnit extends MCSStatusMixin(ParentObjectMixin(Component)) {
|
|
9
10
|
static get properties() {
|
|
10
|
-
return [...MCSStatusMixinProperties];
|
|
11
|
+
return [...MCSStatusMixinProperties, ...ParentObjectMixinProperties];
|
|
11
12
|
}
|
|
12
13
|
get hasTextProperty() {
|
|
13
14
|
return true;
|
package/dist/mcs-unit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcs-unit.js","sourceRoot":"","sources":["../src/mcs-unit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AACtF,OAAO,EAAE,WAAW,EAAU,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"mcs-unit.js","sourceRoot":"","sources":["../src/mcs-unit.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '@hatiolab/things-scene'\nimport { getPopupData } from '@fmsim/api'\n\nimport { MCSStatusMixin, MCSStatusMixinProperties } from './features/mcs-status-mixin'\nimport { LEGEND_UNIT, Legend } from './features/mcs-status-default'\nimport { ParentObjectMixin, ParentObjectMixinProperties } from './features/parent-object-mixin'\n\n/**\n * MCS용 Unit들의 공통 속성을 정의한 오브젝트\n */\nexport default class MCSUnit extends MCSStatusMixin(ParentObjectMixin(Component)) {\n static get properties(): any {\n return [...MCSStatusMixinProperties, ...ParentObjectMixinProperties]\n }\n\n get hasTextProperty() {\n return true\n }\n\n get reactionDecorators() {\n return ['bouncing-arrow']\n }\n\n get decorators() {\n return ['decotag']\n }\n\n getTheme() {\n const { legendName } = this.state\n\n if (legendName) {\n return (this.root as any)?.style?.[legendName]\n }\n }\n\n get status() {\n return this.data?.STATUS\n }\n\n get auxStatus() {\n return this.data?.STATUS\n }\n\n get legend(): Legend {\n return this.getTheme() || this.getLegendFallback()\n }\n\n get auxLegend() {\n return this.legend\n }\n\n getLegendFallback() {\n return LEGEND_UNIT\n }\n\n contains(x, y) {\n var { left, top, width, height, lineWidth = 0 } = this.state\n var extend = lineWidth / 2\n\n return (\n x < Math.max(left + width, left) + extend &&\n x > Math.min(left + width, left) - extend &&\n y < Math.max(top + height, top) + extend &&\n y > Math.min(top + height, top) - extend\n )\n }\n\n set path(path) {\n var left_top = path[0]\n var right_bottom = path[2]\n\n this.set({\n left: left_top.x,\n top: left_top.y,\n width: right_bottom.x - left_top.x,\n height: right_bottom.y - left_top.y\n })\n }\n\n get path() {\n var { left = 0, top = 0, width = 0, height = 0 } = this.state\n\n return [\n {\n x: left,\n y: top\n },\n {\n x: left + width,\n y: top\n },\n {\n x: left + width,\n y: top + height\n },\n {\n x: left,\n y: top + height\n }\n ]\n }\n\n async detailInfo() {\n const { type, id } = this.state\n\n if (!id) {\n return\n }\n\n return await getPopupData(type, id)\n }\n}\n"]}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { Component, RectPath, Shape } from '@hatiolab/things-scene';
|
|
2
|
+
import { ParentObjectMixin, ParentObjectMixinProperties } from './features/parent-object-mixin';
|
|
3
|
+
const NATURE = {
|
|
4
|
+
mutable: false,
|
|
5
|
+
resizable: true,
|
|
6
|
+
rotatable: true,
|
|
7
|
+
properties: [
|
|
8
|
+
...ParentObjectMixinProperties,
|
|
9
|
+
{
|
|
10
|
+
type: 'select',
|
|
11
|
+
name: 'orientation',
|
|
12
|
+
label: 'orientation',
|
|
13
|
+
property: {
|
|
14
|
+
options: ['left-right', 'right-left', 'top-bottom', 'bottom-top']
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
type: 'select',
|
|
19
|
+
name: 'labelPosition',
|
|
20
|
+
label: 'label-position',
|
|
21
|
+
property: {
|
|
22
|
+
options: ['left', 'right', 'top', 'bottom']
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
type: 'select',
|
|
27
|
+
name: 'direction',
|
|
28
|
+
label: 'direction',
|
|
29
|
+
property: {
|
|
30
|
+
options: ['in', 'out', 'inout']
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
};
|
|
35
|
+
export default class PortFlow extends ParentObjectMixin(RectPath(Shape)) {
|
|
36
|
+
static get nature() {
|
|
37
|
+
return NATURE;
|
|
38
|
+
}
|
|
39
|
+
get textBounds() {
|
|
40
|
+
const { left, top, width, height } = this.bounds;
|
|
41
|
+
const { labelPosition = 'top' } = this.state;
|
|
42
|
+
switch (labelPosition) {
|
|
43
|
+
case 'top':
|
|
44
|
+
return Object.assign(Object.assign({}, this.bounds), { top: top - 24, height: 24 });
|
|
45
|
+
case 'bottom':
|
|
46
|
+
return Object.assign(Object.assign({}, this.bounds), { top: top + height, height: 24 });
|
|
47
|
+
case 'left':
|
|
48
|
+
return Object.assign(Object.assign({}, this.bounds), { left: left - 60, width: 60 });
|
|
49
|
+
case 'right':
|
|
50
|
+
return Object.assign(Object.assign({}, this.bounds), { left: left + width, width: 60 });
|
|
51
|
+
default:
|
|
52
|
+
return Object.assign(Object.assign({}, this.bounds), { top: top - 24, height: 24 });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
get text() {
|
|
56
|
+
const { direction = 'in' } = this.state;
|
|
57
|
+
return direction.toUpperCase();
|
|
58
|
+
}
|
|
59
|
+
render(ctx) {
|
|
60
|
+
const { left, top, width, height } = this.bounds;
|
|
61
|
+
const { orientation = 'left-right', direction = 'in' } = this.state;
|
|
62
|
+
ctx.beginPath();
|
|
63
|
+
const arrowSize = Math.min(width, height) * 0.3;
|
|
64
|
+
const bodyWidth = orientation === 'left-right' || orientation === 'right-left' ? height * 0.2 : width * 0.2;
|
|
65
|
+
const centerX = left + width / 2;
|
|
66
|
+
const centerY = top + height / 2;
|
|
67
|
+
let startX, startY, endX, endY;
|
|
68
|
+
let reverse = 1;
|
|
69
|
+
switch (orientation) {
|
|
70
|
+
case 'left-right':
|
|
71
|
+
startX = left;
|
|
72
|
+
endX = left + width;
|
|
73
|
+
startY = centerY;
|
|
74
|
+
endY = centerY;
|
|
75
|
+
break;
|
|
76
|
+
case 'right-left':
|
|
77
|
+
startX = left + width;
|
|
78
|
+
endX = left;
|
|
79
|
+
startY = centerY;
|
|
80
|
+
endY = centerY;
|
|
81
|
+
reverse = -1;
|
|
82
|
+
break;
|
|
83
|
+
case 'top-bottom':
|
|
84
|
+
startX = centerX;
|
|
85
|
+
endX = centerX;
|
|
86
|
+
startY = top;
|
|
87
|
+
endY = top + height;
|
|
88
|
+
break;
|
|
89
|
+
case 'bottom-top':
|
|
90
|
+
startX = centerX;
|
|
91
|
+
endX = centerX;
|
|
92
|
+
startY = top + height;
|
|
93
|
+
endY = top;
|
|
94
|
+
reverse = -1;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
ctx.lineTo(startX, startY);
|
|
98
|
+
if (orientation.includes('left')) {
|
|
99
|
+
if (direction === 'out' || direction === 'inout') {
|
|
100
|
+
ctx.lineTo(startX + arrowSize * reverse, startY - bodyWidth * reverse * 2);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
ctx.lineTo(startX, startY - bodyWidth * reverse);
|
|
104
|
+
}
|
|
105
|
+
ctx.lineTo(startX + arrowSize * reverse, startY - bodyWidth * reverse);
|
|
106
|
+
ctx.lineTo(endX - arrowSize * reverse, endY - bodyWidth * reverse);
|
|
107
|
+
if (direction === 'in' || direction === 'inout') {
|
|
108
|
+
ctx.lineTo(endX - arrowSize * reverse, endY - bodyWidth * 2 * reverse);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
ctx.lineTo(endX, endY - bodyWidth * reverse);
|
|
112
|
+
}
|
|
113
|
+
ctx.lineTo(endX, endY);
|
|
114
|
+
if (direction === 'in' || direction === 'inout') {
|
|
115
|
+
ctx.lineTo(endX - arrowSize * reverse, endY + bodyWidth * 2 * reverse);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
ctx.lineTo(endX, endY + bodyWidth * reverse);
|
|
119
|
+
}
|
|
120
|
+
ctx.lineTo(endX - arrowSize * reverse, endY + bodyWidth * reverse);
|
|
121
|
+
ctx.lineTo(startX + arrowSize * reverse, startY + bodyWidth * reverse);
|
|
122
|
+
if (direction === 'out' || direction === 'inout') {
|
|
123
|
+
ctx.lineTo(startX + arrowSize * reverse, startY + bodyWidth * 2 * reverse);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
ctx.lineTo(startX, startY + bodyWidth * reverse);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
if (direction === 'out' || direction === 'inout') {
|
|
131
|
+
ctx.lineTo(startX - bodyWidth * reverse * 2, startY + arrowSize * reverse);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
ctx.lineTo(startX - bodyWidth * reverse, startY);
|
|
135
|
+
}
|
|
136
|
+
ctx.lineTo(startX - bodyWidth * reverse, startY + arrowSize * reverse);
|
|
137
|
+
ctx.lineTo(endX - bodyWidth * reverse, endY - arrowSize * reverse);
|
|
138
|
+
if (direction === 'in' || direction === 'inout') {
|
|
139
|
+
ctx.lineTo(endX - bodyWidth * 2 * reverse, endY - arrowSize * reverse);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
ctx.lineTo(endX - bodyWidth * reverse, endY);
|
|
143
|
+
}
|
|
144
|
+
ctx.lineTo(endX, endY);
|
|
145
|
+
if (direction === 'in' || direction === 'inout') {
|
|
146
|
+
ctx.lineTo(endX + bodyWidth * 2 * reverse, endY - arrowSize * reverse);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
ctx.lineTo(endX + bodyWidth * reverse, endY);
|
|
150
|
+
}
|
|
151
|
+
ctx.lineTo(endX + bodyWidth * reverse, endY - arrowSize * reverse);
|
|
152
|
+
ctx.lineTo(startX + bodyWidth * reverse, startY + arrowSize * reverse);
|
|
153
|
+
if (direction === 'out' || direction === 'inout') {
|
|
154
|
+
ctx.lineTo(startX + bodyWidth * 2 * reverse, startY + arrowSize * reverse);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
ctx.lineTo(startX + bodyWidth * reverse, startY);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
ctx.closePath();
|
|
161
|
+
this.drawStroke(ctx);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
Component.register('PortFlow', PortFlow);
|
|
165
|
+
//# sourceMappingURL=port-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-flow.js","sourceRoot":"","sources":["../src/port-flow.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ComponentNature, RectPath, Shape } from '@hatiolab/things-scene'\nimport { ParentObjectMixin, ParentObjectMixinProperties } from './features/parent-object-mixin'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n ...ParentObjectMixinProperties,\n {\n type: 'select',\n name: 'orientation',\n label: 'orientation',\n property: {\n options: ['left-right', 'right-left', 'top-bottom', 'bottom-top']\n }\n },\n {\n type: 'select',\n name: 'labelPosition',\n label: 'label-position',\n property: {\n options: ['left', 'right', 'top', 'bottom']\n }\n },\n {\n type: 'select',\n name: 'direction',\n label: 'direction',\n property: {\n options: ['in', 'out', 'inout']\n }\n }\n ]\n}\n\nexport default class PortFlow extends ParentObjectMixin(RectPath(Shape)) {\n static get nature() {\n return NATURE\n }\n\n get textBounds() {\n const { left, top, width, height } = this.bounds\n const { labelPosition = 'top' } = this.state\n\n switch (labelPosition) {\n case 'top':\n return {\n ...this.bounds,\n top: top - 24,\n height: 24\n }\n case 'bottom':\n return {\n ...this.bounds,\n top: top + height,\n height: 24\n }\n case 'left':\n return {\n ...this.bounds,\n left: left - 60,\n width: 60\n }\n case 'right':\n return {\n ...this.bounds,\n left: left + width,\n width: 60\n }\n default:\n return {\n ...this.bounds,\n top: top - 24,\n height: 24\n }\n }\n }\n\n get text() {\n const { direction = 'in' } = this.state\n\n return direction.toUpperCase()\n }\n\n render(ctx) {\n const { left, top, width, height } = this.bounds\n const { orientation = 'left-right', direction = 'in' }: { orientation?: string; direction?: string } = this.state\n\n ctx.beginPath()\n\n const arrowSize = Math.min(width, height) * 0.3\n const bodyWidth = orientation === 'left-right' || orientation === 'right-left' ? height * 0.2 : width * 0.2\n const centerX = left + width / 2\n const centerY = top + height / 2\n\n let startX, startY, endX, endY\n let reverse = 1\n\n switch (orientation) {\n case 'left-right':\n startX = left\n endX = left + width\n startY = centerY\n endY = centerY\n break\n case 'right-left':\n startX = left + width\n endX = left\n startY = centerY\n endY = centerY\n reverse = -1\n break\n case 'top-bottom':\n startX = centerX\n endX = centerX\n startY = top\n endY = top + height\n break\n case 'bottom-top':\n startX = centerX\n endX = centerX\n startY = top + height\n endY = top\n reverse = -1\n break\n }\n\n ctx.lineTo(startX, startY)\n\n if (orientation.includes('left')) {\n if (direction === 'out' || direction === 'inout') {\n ctx.lineTo(startX + arrowSize * reverse, startY - bodyWidth * reverse * 2)\n } else {\n ctx.lineTo(startX, startY - bodyWidth * reverse)\n }\n\n ctx.lineTo(startX + arrowSize * reverse, startY - bodyWidth * reverse)\n ctx.lineTo(endX - arrowSize * reverse, endY - bodyWidth * reverse)\n\n if (direction === 'in' || direction === 'inout') {\n ctx.lineTo(endX - arrowSize * reverse, endY - bodyWidth * 2 * reverse)\n } else {\n ctx.lineTo(endX, endY - bodyWidth * reverse)\n }\n\n ctx.lineTo(endX, endY)\n\n if (direction === 'in' || direction === 'inout') {\n ctx.lineTo(endX - arrowSize * reverse, endY + bodyWidth * 2 * reverse)\n } else {\n ctx.lineTo(endX, endY + bodyWidth * reverse)\n }\n\n ctx.lineTo(endX - arrowSize * reverse, endY + bodyWidth * reverse)\n ctx.lineTo(startX + arrowSize * reverse, startY + bodyWidth * reverse)\n\n if (direction === 'out' || direction === 'inout') {\n ctx.lineTo(startX + arrowSize * reverse, startY + bodyWidth * 2 * reverse)\n } else {\n ctx.lineTo(startX, startY + bodyWidth * reverse)\n }\n } else {\n if (direction === 'out' || direction === 'inout') {\n ctx.lineTo(startX - bodyWidth * reverse * 2, startY + arrowSize * reverse)\n } else {\n ctx.lineTo(startX - bodyWidth * reverse, startY)\n }\n\n ctx.lineTo(startX - bodyWidth * reverse, startY + arrowSize * reverse)\n ctx.lineTo(endX - bodyWidth * reverse, endY - arrowSize * reverse)\n\n if (direction === 'in' || direction === 'inout') {\n ctx.lineTo(endX - bodyWidth * 2 * reverse, endY - arrowSize * reverse)\n } else {\n ctx.lineTo(endX - bodyWidth * reverse, endY)\n }\n\n ctx.lineTo(endX, endY)\n\n if (direction === 'in' || direction === 'inout') {\n ctx.lineTo(endX + bodyWidth * 2 * reverse, endY - arrowSize * reverse)\n } else {\n ctx.lineTo(endX + bodyWidth * reverse, endY)\n }\n\n ctx.lineTo(endX + bodyWidth * reverse, endY - arrowSize * reverse)\n ctx.lineTo(startX + bodyWidth * reverse, startY + arrowSize * reverse)\n\n if (direction === 'out' || direction === 'inout') {\n ctx.lineTo(startX + bodyWidth * 2 * reverse, startY + arrowSize * reverse)\n } else {\n ctx.lineTo(startX + bodyWidth * reverse, startY)\n }\n }\n\n ctx.closePath()\n\n this.drawStroke(ctx)\n }\n}\n\nComponent.register('PortFlow', PortFlow)\n"]}
|
package/dist/templates/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// import StockerCapacityCircle from './stocker-capacity-circle'
|
|
2
1
|
import StockerCapacityBar from './stocker-capacity-bar';
|
|
3
2
|
import ZoneCapacityBar from './zone-capacity-bar';
|
|
3
|
+
import PortFlow from './port-flow';
|
|
4
4
|
import AGV from './agv';
|
|
5
5
|
import Buffer from './buffer';
|
|
6
6
|
import Equipment from './equipment';
|
|
@@ -13,12 +13,10 @@ import Shelf from './shelf';
|
|
|
13
13
|
import agvLine from './agv-line';
|
|
14
14
|
import ohtLine from './oht-line';
|
|
15
15
|
import conveyor from './conveyor';
|
|
16
|
-
import DataSubscription from './data-subscription';
|
|
17
16
|
export default [
|
|
18
|
-
DataSubscription,
|
|
19
|
-
// StockerCapacityCircle,
|
|
20
17
|
StockerCapacityBar,
|
|
21
18
|
ZoneCapacityBar,
|
|
19
|
+
PortFlow,
|
|
22
20
|
Buffer,
|
|
23
21
|
Stocker,
|
|
24
22
|
Equipment,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,wBAAwB,CAAA;AACvD,OAAO,eAAe,MAAM,qBAAqB,CAAA;AACjD,OAAO,QAAQ,MAAM,aAAa,CAAA;AAElC,OAAO,GAAG,MAAM,OAAO,CAAA;AACvB,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,GAAG,MAAM,OAAO,CAAA;AACvB,OAAO,OAAO,MAAM,WAAW,CAAA;AAE/B,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,OAAO,OAAO,MAAM,YAAY,CAAA;AAChC,OAAO,OAAO,MAAM,YAAY,CAAA;AAChC,OAAO,QAAQ,MAAM,YAAY,CAAA;AAEjC,eAAe;IACb,kBAAkB;IAClB,eAAe;IACf,QAAQ;IAER,MAAM;IACN,OAAO;IACP,SAAS;IAET,OAAO;IACP,OAAO;IACP,QAAQ;IAER,GAAG;IACH,GAAG;IACH,OAAO;IACP,KAAK;IACL,KAAK;IACL,IAAI;CACL,CAAA","sourcesContent":["import StockerCapacityBar from './stocker-capacity-bar'\nimport ZoneCapacityBar from './zone-capacity-bar'\nimport PortFlow from './port-flow'\n\nimport AGV from './agv'\nimport Buffer from './buffer'\nimport Equipment from './equipment'\nimport OHT from './oht'\nimport Stocker from './stocker'\n\nimport Shuttle from './shuttle'\nimport Port from './port'\nimport Crane from './crane'\nimport Shelf from './shelf'\n\nimport agvLine from './agv-line'\nimport ohtLine from './oht-line'\nimport conveyor from './conveyor'\n\nexport default [\n StockerCapacityBar,\n ZoneCapacityBar,\n PortFlow,\n\n Buffer,\n Stocker,\n Equipment,\n\n agvLine,\n ohtLine,\n conveyor,\n\n AGV,\n OHT,\n Shuttle,\n Crane,\n Shelf,\n Port\n]\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const port = new URL('../../icons/port-flow.png', import.meta.url).href;
|
|
2
|
+
export default {
|
|
3
|
+
type: 'PortFlow',
|
|
4
|
+
description: 'port flow',
|
|
5
|
+
icon: port,
|
|
6
|
+
group: ['etc'],
|
|
7
|
+
model: {
|
|
8
|
+
type: 'PortFlow',
|
|
9
|
+
left: 100,
|
|
10
|
+
top: 100,
|
|
11
|
+
width: 80,
|
|
12
|
+
height: 20
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=port-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-flow.js","sourceRoot":"","sources":["../../src/templates/port-flow.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;AAEvE,eAAe;IACb,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,WAAW;IACxB,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,CAAC,KAAK,CAAC;IACd,KAAK,EAAE;QACL,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,GAAG;QACR,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;KACX;CACF,CAAA","sourcesContent":["const port = new URL('../../icons/port-flow.png', import.meta.url).href\n\nexport default {\n type: 'PortFlow',\n description: 'port flow',\n icon: port,\n group: ['etc'],\n model: {\n type: 'PortFlow',\n left: 100,\n top: 100,\n width: 80,\n height: 20\n }\n}\n"]}
|