@enervance/insight-cim-model 0.0.140 → 0.0.141

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.
Files changed (60) hide show
  1. package/dist/converter/integral7/converter.integral7.d.ts +2 -2
  2. package/dist/converter/integral7/converter.integral7.js +111 -63
  3. package/dist/converter/integral7/converter.integral7.js.map +1 -1
  4. package/dist/converter/integral7/dl-convert/data-manager.d.ts +33 -0
  5. package/dist/converter/integral7/dl-convert/data-manager.js +97 -0
  6. package/dist/converter/integral7/dl-convert/data-manager.js.map +1 -0
  7. package/dist/converter/integral7/dl-convert/db/{data.types.d.ts → data-types.d.ts} +7 -0
  8. package/dist/converter/integral7/dl-convert/db/{data.types.js → data-types.js} +1 -1
  9. package/dist/converter/integral7/dl-convert/db/{data.types.js.map → data-types.js.map} +1 -1
  10. package/dist/converter/integral7/dl-convert/db/database.interface.types.d.ts +133 -4
  11. package/dist/converter/integral7/dl-convert/dl-converter-i7-2.d.ts +56 -0
  12. package/dist/converter/integral7/dl-convert/dl-converter-i7-2.js +2039 -0
  13. package/dist/converter/integral7/dl-convert/dl-converter-i7-2.js.map +1 -0
  14. package/dist/converter/integral7/dl-convert/dl-converter-i7-function.types.d.ts +1 -1
  15. package/dist/converter/integral7/dl-convert/dl-converter-i7.js +9 -6
  16. package/dist/converter/integral7/dl-convert/dl-converter-i7.js.map +1 -1
  17. package/dist/converter/integral7/dl-convert/dl-converter-i7.types.d.ts +3 -0
  18. package/dist/converter/integral7/dl-convert/dl-converter-i7.types.js +3 -0
  19. package/dist/converter/integral7/dl-convert/dl-converter-i7.types.js.map +1 -0
  20. package/dist/converter/integral7/dl-convert/dl-graphs/cim-model-graph.d.ts +21 -0
  21. package/dist/converter/integral7/dl-convert/dl-graphs/cim-model-graph.js +49 -0
  22. package/dist/converter/integral7/dl-convert/dl-graphs/cim-model-graph.js.map +1 -0
  23. package/dist/converter/integral7/dl-convert/dl-graphs/convert-graph-keys.d.ts +119 -0
  24. package/dist/converter/integral7/dl-convert/dl-graphs/convert-graph-keys.js +84 -0
  25. package/dist/converter/integral7/dl-convert/dl-graphs/convert-graph-keys.js.map +1 -0
  26. package/dist/converter/integral7/dl-convert/dl-graphs/db-object-graph.d.ts +40 -0
  27. package/dist/converter/integral7/dl-convert/dl-graphs/db-object-graph.js +229 -0
  28. package/dist/converter/integral7/dl-convert/dl-graphs/db-object-graph.js.map +1 -0
  29. package/dist/converter/integral7/dl-convert/executor.d.ts +35 -0
  30. package/dist/converter/integral7/dl-convert/executor.js +263 -0
  31. package/dist/converter/integral7/dl-convert/executor.js.map +1 -0
  32. package/dist/converter/integral7/model/dl-utils/constants.js +1 -1
  33. package/dist/converter/integral7/model/dl-utils/util-functions.d.ts +8 -4
  34. package/dist/converter/integral7/model/dl-utils/util-functions.js +134 -6
  35. package/dist/converter/integral7/model/dl-utils/util-functions.js.map +1 -1
  36. package/dist/converter/integral7/model/integral/Point.d.ts +3 -0
  37. package/dist/converter/integral7/model/integral/Point.js +33 -0
  38. package/dist/converter/integral7/model/integral/Point.js.map +1 -1
  39. package/dist/model/core/ConnectivityNode.js +2 -0
  40. package/dist/model/core/ConnectivityNode.js.map +1 -1
  41. package/dist/model/core/Terminal.d.ts +3 -0
  42. package/dist/model/core/Terminal.js +18 -0
  43. package/dist/model/core/Terminal.js.map +1 -1
  44. package/dist/model/dc/DCLine.js +17 -17
  45. package/dist/model/dc/DCLineSegment.js +25 -25
  46. package/dist/model/extensions/enervance/core/EVTerminal.js +20 -15
  47. package/dist/model/extensions/enervance/core/EVTerminal.js.map +1 -1
  48. package/dist/model/loadmodel/ConformLoad.js +33 -33
  49. package/dist/model/loadmodel/ConformLoadGroup.js +22 -22
  50. package/dist/model/loadmodel/LoadArea.js +21 -21
  51. package/dist/model/loadmodel/SubLoadArea.js +22 -22
  52. package/dist/model/wires/BusbarSection.d.ts +4 -1
  53. package/dist/model/wires/BusbarSection.js +21 -1
  54. package/dist/model/wires/BusbarSection.js.map +1 -1
  55. package/dist/model/wires/PowerTransformer.js +124 -33
  56. package/dist/model/wires/PowerTransformer.js.map +1 -1
  57. package/dist/util/database/mysql-controller.d.ts +6 -0
  58. package/dist/util/database/mysql-controller.js +36 -1
  59. package/dist/util/database/mysql-controller.js.map +1 -1
  60. package/package.json +1 -1
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Executor = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const perf_hooks_1 = require("perf_hooks");
6
+ const convert_graph_keys_1 = require("./dl-graphs/convert-graph-keys.js");
7
+ const cim_model_graph_1 = require("./dl-graphs/cim-model-graph.js");
8
+ const db_object_graph_1 = require("./dl-graphs/db-object-graph.js");
9
+ const data_manager_1 = require("./data-manager.js");
10
+ const dl_converter_i7_2_1 = require("./dl-converter-i7-2.js");
11
+ class Executor {
12
+ constructor(mySQLController, logger) {
13
+ this.logger = logger;
14
+ this.mySQLController = mySQLController;
15
+ this.dbObjectGraph = new db_object_graph_1.DbObjectGraph(convert_graph_keys_1.i7SchemaKeyDefinitions);
16
+ this.dbObjectGraph.mySQLController = this.mySQLController;
17
+ this.dbObjectKeyCimModelUuidGraph = new cim_model_graph_1.DbObjectKey2CimModelUUIDGraph(convert_graph_keys_1.i7SchemaKeyDefinitions);
18
+ this.cimModelGraph = new cim_model_graph_1.CimModelGraph();
19
+ this.dlConverter = new dl_converter_i7_2_1.DLConverterI7(logger);
20
+ this.dlConverter.setDbObjectGraph(this.dbObjectGraph);
21
+ this.dlConverter.setDbObjectKeyCimModelUuidGraph(this.dbObjectKeyCimModelUuidGraph);
22
+ this.dlConverter.setCimModelGraph(this.cimModelGraph);
23
+ this.dataManager = new data_manager_1.DataManager(logger);
24
+ this.dataManager.setDbObjectGraph(this.dbObjectGraph);
25
+ this.dataManager.setDbObjectKeyCimModelUuidGraph(this.dbObjectKeyCimModelUuidGraph);
26
+ this.dataManager.setCimModelGraph(this.cimModelGraph);
27
+ }
28
+ mergeDataFromFrame(frame) {
29
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
30
+ for (const objectEntry of frame.cimModel.objects.entries()) {
31
+ this.cimModelGraph.addUnspecifiedObject(objectEntry[0], objectEntry[1]);
32
+ }
33
+ });
34
+ }
35
+ mergeDataFromIntegralID2UUID(integralID2UUID) {
36
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
37
+ for (const entry of integralID2UUID.entries()) {
38
+ this.dbObjectKeyCimModelUuidGraph.addRelation(convert_graph_keys_1.i7SchemaKeyNames.IdOnlyKey, { id: entry[0] }, entry[1]);
39
+ }
40
+ });
41
+ }
42
+ loadAllSchemaVariants() {
43
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
44
+ yield this.dataManager.loadFromMySQL(this.mySQLController, {
45
+ allg_netzvarianten: { art: { eq: [2] } }
46
+ });
47
+ });
48
+ }
49
+ loadElementsForSchemaVariant(idOfVariant, options) {
50
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
51
+ yield this.dataManager.loadFromMySQL(this.mySQLController, {
52
+ nsg_nsgstandort: {
53
+ variantennr: { eq: [idOfVariant] }, standort: {
54
+ in: options.only.netz_standortIds ? options.only.netz_knotensoIds.map(arg => arg.id) : undefined
55
+ }
56
+ },
57
+ nsg_nsgschaltanlage: {
58
+ variantennr: { eq: [idOfVariant] }, schaltanlage: {
59
+ in: options.only.netz_schaltanlagenIds ? options.only.netz_schaltanlagenIds.map(arg => arg.id) : undefined
60
+ }
61
+ },
62
+ nsg_nsgsaabschnitt: {
63
+ variantennr: { eq: [idOfVariant] }, saabschnitt: {
64
+ in: options.only.netz_saabschnittIds ? options.only.netz_saabschnittIds.map(arg => arg.id) : undefined
65
+ }
66
+ },
67
+ nsg_nsgknotenso: {
68
+ variantennr: { eq: [idOfVariant] }, knotenso: {
69
+ in: options.only.netz_knotensoIds ? options.only.netz_knotensoIds.map(arg => arg.id) : undefined
70
+ }
71
+ },
72
+ nsg_nsgschaltfeld: {
73
+ variantennr: { eq: [idOfVariant] }, schaltfeld: {
74
+ in: options.only.netz_schaltfeldIds ? options.only.netz_schaltfeldIds.map(arg => arg.id) : undefined
75
+ }
76
+ },
77
+ nsg_nsgkpfeld: { variantennr: { eq: [idOfVariant] } },
78
+ nsg_nsglkupplung: { variantennr: { eq: [idOfVariant] } },
79
+ nsg_nsgtrafo2w: { variantennr: { eq: [idOfVariant] } },
80
+ nsg_nsgtrafo3w: { variantennr: { eq: [idOfVariant] } },
81
+ nsg_nsgleitung: {
82
+ variantennr: { eq: [idOfVariant] }, leitung: {
83
+ in: options.only.netz_leitungIds ? options.only.netz_leitungIds.map(arg => arg.id) : undefined
84
+ }
85
+ },
86
+ nsg_nsgltgpunkt: { variantennr: { eq: [idOfVariant] } },
87
+ nsg_nsgquerzweig: { variantennr: { eq: [idOfVariant] } }
88
+ });
89
+ const relevantSchaltanlageIds = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgschaltanlage))
90
+ .map(arg => arg.schaltanlage);
91
+ yield this.dataManager.loadFromMySQL(this.mySQLController, {
92
+ netz_lkupplung: { schaltanlage: { in: relevantSchaltanlageIds } }
93
+ });
94
+ const relevantQuerzweigIds = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgquerzweig))
95
+ .map(arg => arg.querzweig);
96
+ yield this.dataManager.loadFromMySQL(this.mySQLController, {
97
+ netz_belastung: { id: { in: relevantQuerzweigIds } },
98
+ netz_generator: { id: { in: relevantQuerzweigIds } },
99
+ netz_netzeinspeisung: { id: { in: relevantQuerzweigIds } }
100
+ });
101
+ const relevantNsgSaabschnitt = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgsaabschnitt))
102
+ .map(arg => arg.saabschnitt);
103
+ const relevantSelisteIds = [];
104
+ relevantSelisteIds.push(...(yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgschaltfeld)).map(arg => arg.schaltfeld));
105
+ relevantSelisteIds.push(...(yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgkpfeld)).map(arg => arg.kpfeld));
106
+ relevantSelisteIds.push(...(yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.netz_lkupplung)).map(arg => arg.id));
107
+ yield this.dataManager.loadFromMySQL(this.mySQLController, {
108
+ netz_ssab: { saabschnitt: { in: relevantNsgSaabschnitt } },
109
+ netz_leistungsschalter: { seliste: { in: relevantSelisteIds } },
110
+ netz_trenner3p: { seliste: { in: relevantSelisteIds } },
111
+ netz_trennerfi3p: { seliste: { in: relevantSelisteIds } },
112
+ netz_sestarr3p: { seliste: { in: relevantSelisteIds } }
113
+ });
114
+ // read all those netz_schlaufe entries, which are accessible via the knotenso's
115
+ const relevantNetzKnotenSoIds = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgknotenso))
116
+ .map(arg => arg.knotenso);
117
+ yield this.dataManager.loadFromMySQL(this.mySQLController, {
118
+ netz_schlaufe: { eknoten: { in: relevantNetzKnotenSoIds } }
119
+ });
120
+ const relevantNetzKnotenzwIds = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.netz_schlaufe))
121
+ .map(arg => arg.knotenzw);
122
+ yield this.dataManager.loadFromMySQL(this.mySQLController, {
123
+ netz_knotenzw: { id: { in: relevantNetzKnotenzwIds } }
124
+ });
125
+ // read all relevant netz_{kabel|freileitungs}abschnitte
126
+ const relevantNetzLeitungIds = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgleitung))
127
+ .map(arg => arg.leitung);
128
+ yield this.dataManager.loadFromMySQL(this.mySQLController, {
129
+ netz_freileitungabschnitt: { leitung: { in: relevantNetzLeitungIds } },
130
+ netz_kabelabschnitt: { leitung: { in: relevantNetzLeitungIds } }
131
+ });
132
+ });
133
+ }
134
+ convert(options) {
135
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
136
+ try {
137
+ const nsgVarianten = yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.allg_netzvarianten);
138
+ const resultingObjects = [];
139
+ for (const nsgVariante of nsgVarianten) {
140
+ yield this.loadElementsForSchemaVariant(nsgVariante.id, options);
141
+ this.log(`Schema ${nsgVariante.id} hat ${this.dbObjectGraph.size} Elemente!`);
142
+ const resultingDiagramObjects = [];
143
+ const diagram = yield this.runAndLogPerformance(this.dlConverter.convertNsgVariante, nsgVariante);
144
+ // const relevantNsgKnotenSo = await this.dbObjectGraph.findByAttributes(i7TableNames.nsg_nsgknotenso, {
145
+ // knotenso: { in: [...frame.integral7Modell.integralKnotenSo.keys()] }
146
+ // });
147
+ const relevantNsgKnotenSo = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgknotenso));
148
+ // .filter(arg => frame.integral7Modell.integralKnotenSo.has(arg.knotenso));
149
+ for (const nsgKnotenSo of relevantNsgKnotenSo) {
150
+ const result = yield this.runAndLogPerformance(this.dlConverter.convertSchemaKnotenStandort, nsgKnotenSo);
151
+ if (result)
152
+ resultingDiagramObjects.push(result);
153
+ }
154
+ const relevantNsgSaabschnitt = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgsaabschnitt));
155
+ // .filter(arg => frame.integral7Modell.integralSchaltanlagenAbschnitte.has(arg.saabschnitt));
156
+ for (const nsgSaabschnitt of relevantNsgSaabschnitt) {
157
+ const results = yield this.runAndLogPerformance(this.dlConverter.convertSchemaSammelschienenAbschnitte, nsgSaabschnitt);
158
+ if (results)
159
+ resultingDiagramObjects.push(...results);
160
+ }
161
+ const relevantNsgSchaltfeld = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgschaltfeld));
162
+ // .filter(arg => frame.integral7Modell.integralSchaltfelder.has(arg.schaltfeld));
163
+ for (const nsgSchaltfeld of relevantNsgSchaltfeld) {
164
+ const results = yield this.runAndLogPerformance(this.dlConverter.convertSchemaSchaltfeldElemente, nsgSchaltfeld);
165
+ if (results)
166
+ resultingDiagramObjects.push(...results);
167
+ }
168
+ const relevantNsgLeitung = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgleitung));
169
+ // .filter(arg => frame.integral7Modell.integralSchaltanlagenAbschnitte.has(arg.saabschnitt));
170
+ for (const nsgLeitung of relevantNsgLeitung) {
171
+ const results = yield this.runAndLogPerformance(this.dlConverter.convertSchemaLeitung, nsgLeitung);
172
+ if (results)
173
+ resultingDiagramObjects.push(...results);
174
+ }
175
+ const relevantNsgTrafo2W = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgtrafo2w));
176
+ // .filter(arg => frame.integral7Modell.integralSchaltanlagenAbschnitte.has(arg.saabschnitt));
177
+ for (const nsgTrafo2W of relevantNsgTrafo2W) {
178
+ const results = yield this.runAndLogPerformance(this.dlConverter.convertSchemaTransformer2W, nsgTrafo2W);
179
+ if (results)
180
+ resultingDiagramObjects.push(...results);
181
+ }
182
+ const relevantNsgTrafo3W = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgtrafo3w));
183
+ // .filter(arg => frame.integral7Modell.integralSchaltanlagenAbschnitte.has(arg.saabschnitt));
184
+ for (const nsgTrafo3W of relevantNsgTrafo3W) {
185
+ const results = yield this.runAndLogPerformance(this.dlConverter.convertSchemaTransformer3W, nsgTrafo3W);
186
+ if (results)
187
+ resultingDiagramObjects.push(...results);
188
+ }
189
+ const relevantNsgQuerzweig = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgquerzweig));
190
+ // .filter(arg => frame.integral7Modell.integralSchaltanlagenAbschnitte.has(arg.saabschnitt));
191
+ for (const nsgQuerzweig of relevantNsgQuerzweig) {
192
+ const results = yield this.runAndLogPerformance(this.dlConverter.convertSchemaQuerzweig, nsgQuerzweig);
193
+ if (results)
194
+ resultingDiagramObjects.push(...results);
195
+ }
196
+ const relevantNsgKpfeld = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsgkpfeld));
197
+ // .filter(arg => frame.integral7Modell.integralSchaltanlagenAbschnitte.has(arg.saabschnitt));
198
+ for (const nsgKpfeld of relevantNsgKpfeld) {
199
+ const results = yield this.runAndLogPerformance(this.dlConverter.convertSchemaKpfeld, nsgKpfeld);
200
+ if (results)
201
+ resultingDiagramObjects.push(...results);
202
+ }
203
+ const relevantNsgLKupplung = (yield this.dbObjectGraph.getAllObjectsOfTable(convert_graph_keys_1.i7TableNames.nsg_nsglkupplung));
204
+ for (const nsgLKupplung of relevantNsgLKupplung) {
205
+ const nsgSaabschnitt = yield this.dbObjectGraph.findObjectByKey(convert_graph_keys_1.i7TableNames.nsg_nsgsaabschnitt, convert_graph_keys_1.i7SchemaKeyNames.VariantenNrIdKey, { variantennr: nsgLKupplung.variantennr, id: nsgLKupplung.nsgsaa }, false);
206
+ if (nsgSaabschnitt) {
207
+ const relevantNetzLKupplung = (yield this.dbObjectGraph.findByAttributes(convert_graph_keys_1.i7TableNames.netz_lkupplung, {
208
+ saa_end: { in: [nsgSaabschnitt.saabschnitt] }
209
+ }));
210
+ for (const netzLKupplung of relevantNetzLKupplung) {
211
+ const results = yield this.runAndLogPerformance(this.dlConverter.convertSchemaLKupplung, nsgLKupplung, netzLKupplung);
212
+ if (results)
213
+ resultingDiagramObjects.push(...results);
214
+ }
215
+ }
216
+ }
217
+ // await this.runAndLogPerformance(this.dlConverter.convertSchemaTerminals);
218
+ for (const resultingDiagramObject of resultingDiagramObjects) {
219
+ resultingDiagramObject.diagram = diagram;
220
+ diagram.diagramObjects.push(resultingDiagramObject);
221
+ }
222
+ resultingObjects.push(diagram, ...resultingDiagramObjects);
223
+ this.dbObjectGraph.forgetByTableNames([
224
+ convert_graph_keys_1.i7TableNames.nsg_nsgstandort,
225
+ convert_graph_keys_1.i7TableNames.nsg_nsgschaltanlage,
226
+ convert_graph_keys_1.i7TableNames.nsg_nsgsaabschnitt,
227
+ convert_graph_keys_1.i7TableNames.nsg_nsgknotenso,
228
+ convert_graph_keys_1.i7TableNames.nsg_nsgschaltfeld,
229
+ convert_graph_keys_1.i7TableNames.nsg_nsgkpfeld,
230
+ convert_graph_keys_1.i7TableNames.nsg_nsglkupplung,
231
+ convert_graph_keys_1.i7TableNames.nsg_nsgtrafo2w,
232
+ convert_graph_keys_1.i7TableNames.nsg_nsgtrafo3w,
233
+ convert_graph_keys_1.i7TableNames.nsg_nsgleitung,
234
+ convert_graph_keys_1.i7TableNames.nsg_nsgltgpunkt,
235
+ convert_graph_keys_1.i7TableNames.nsg_nsgquerzweig
236
+ ]);
237
+ }
238
+ return resultingObjects;
239
+ }
240
+ catch (e) {
241
+ console.log(e);
242
+ return [];
243
+ }
244
+ });
245
+ }
246
+ log(msg) {
247
+ var _a;
248
+ (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug(msg);
249
+ console.log(msg);
250
+ }
251
+ runAndLogPerformance(func, ...args) {
252
+ var _a;
253
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
254
+ const startTime = perf_hooks_1.performance.now();
255
+ const returnValueFunc = yield func.apply(this.dlConverter, args);
256
+ (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug(`${func.name} ${(perf_hooks_1.performance.now() - startTime) / 1000} seconds`);
257
+ console.log(`${func.name} ${(perf_hooks_1.performance.now() - startTime) / 1000} seconds`);
258
+ return returnValueFunc;
259
+ });
260
+ }
261
+ }
262
+ exports.Executor = Executor;
263
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../src/converter/integral7/dl-convert/executor.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ NsgConstants.onlyEingeblendet = true;
12
12
  * Mögliche Werte für DEFAULT_ROTATION sind 0, 90, 180, 270 (clockwise)
13
13
  */
14
14
  NsgConstants.DEFAULT_ROTATION = 0;
15
- NsgConstants.KNOTENSO_WIDTH = 16;
15
+ NsgConstants.KNOTENSO_WIDTH = 32;
16
16
  NsgConstants.KNOTENSO_HEIGHT = 32;
17
17
  NsgConstants.HGUE_KNOTENSO_WIDTH = 32;
18
18
  NsgConstants.HGUE_KNOTENSO_HEIGHT = 32;
@@ -5,7 +5,7 @@ import { DiagramObjectPoint } from '../../../../model/diagram/DiagramObjectPoint
5
5
  import { NsgKnotenSo, NsgLeitungsPunkt } from '../interfaces.js';
6
6
  import { I7ExportFrame } from '../../interface-i7/export-frame-i7.js';
7
7
  import { ISchemaDatabaseKey } from './ISchemaDatabaseKey.js';
8
- import { NsgObject, NsgSAAB, NsgSchaltanlage, NsgSSAB, NsgStandort } from '../../dl-convert/db/database.interface.types.js';
8
+ import { NsgObject, NsgSaabschnitt, NsgSchaltanlage, NsgSSAB, NsgStandort } from '../../dl-convert/db/database.interface.types.js';
9
9
  import { DiagramObjectWithPointParams } from '../../dl-convert/dl-converter-i7-function.types.js';
10
10
  import { IIdentifiedObject } from '../../../../interfaces/model/core/IIdentifiedObject.js';
11
11
  import { IUUIDObject } from '../../../../interfaces/IUUIDObject.js';
@@ -18,7 +18,7 @@ export declare class DLUtilFunctions {
18
18
  static dot(v1: number[], v2: number[]): number;
19
19
  static mutliplyScalar(v: number[], scalar: number): number[];
20
20
  static divideScalar(v: number[], scalar: number): number[];
21
- static add(v1: number[], v2: number[]): number[];
21
+ static add(v: number[], ...v_args: number[][]): number[];
22
22
  static subtract(v1: number[], v2: number[]): number[];
23
23
  static vec2(lStart: number[], lEnd: number[], v: number[]): number[];
24
24
  static isNegativeOrZero(v: number): boolean;
@@ -28,6 +28,7 @@ export declare class DLUtilFunctions {
28
28
  * Der Winkel wird dabei in Grad angegeben und es wird am Ende auf eine bestimmte Anzahl an Nachkommastellen gerundet
29
29
  */
30
30
  static rotateDiagramObjectPoint(point: DiagramObjectPoint, angle: number): void;
31
+ static rotatePoint(point: number[], angle: number): void;
31
32
  static shiftAddBasedOnNsgSo(cimModel: ModelContainer, integral7: Integral7Model, variantenNr: number, nsgSoID: number, uuidPointsMap: Map<string, DiagramObject>): void;
32
33
  /**
33
34
  * Basierend auf der Ausrichtung der Schaltanlage wird die Rotation in Grad berechnet.
@@ -39,20 +40,23 @@ export declare class DLUtilFunctions {
39
40
  static getRotationBasedOnTrafo2W(orientationTrafo2w: number): number;
40
41
  static getRotationBasedOnQuerzweig(orientationQuerzweig: number): number;
41
42
  static getRotationBasedOnNsgSaNsgSf(orientationNsgSa: number, orientationNsgSf: number): number;
42
- static rotateAndShiftBasedOnNsgSAA(nsgSo: NsgStandort, nsgSa: NsgSchaltanlage, nsgSaab: NsgSAAB, diagramObjects: DiagramObject[], useLeftOffset?: boolean): void;
43
+ static rotateAndShiftBasedOnNsgSAA(nsgSo: NsgStandort, nsgSa: NsgSchaltanlage, nsgSaab: NsgSaabschnitt, diagramObjects: DiagramObject[], useLeftOffset?: boolean): void;
43
44
  static rotateShiftAddBasedOnNsgSAA(cimModel: ModelContainer, integral7: Integral7Model, variantenNr: number, nsgSaaID: number, uuidPointsMap: Map<string, DiagramObject>, useLeftOffset?: boolean): void;
44
45
  static cloneDiagramObject(other: DiagramObject): DiagramObject;
45
46
  static addi7ObjectToCIMModel(uuidPointsMap: Map<string, DiagramObject>, cimModel: ModelContainer, integral7: Integral7Model, variantenNr: number): void;
46
47
  static placeKupplung(i7KnotenBeziehungen: I7KnotenBeziehung[], relevantSSabIDs: Set<number>, nsgSSABs: Map<number, NsgSSAB>, integralID2UUID: Map<number, string>, placedCIMObjectUUIDs: Set<string>, kpFeldDeltaausrichtung: number, kpFeldLeftOffset: number, isLKupplung: boolean, objects: ReadonlyMap<string, IUUIDObject>): Map<number, DiagramObject>;
47
48
  static exportTerminals(nodeRelation: I7KnotenBeziehung, nodePointMap: Map<number, DiagramObject>, integralID2UUID: Map<number, string>, objects: ReadonlyMap<string, IIdentifiedObject>, aKnotenPos?: DiagramObjectPoint, eKnotenPos?: DiagramObjectPoint): void;
48
49
  static adjustTerminalCEPosition(ceDiagramObject: DiagramObject, cnPoint: DiagramObjectPoint, terminalDiagramObjectPoint: any): void;
49
- static copyAndPushDiagramObjectPoint(diagramObject: DiagramObject, diagramObjectPoint2Copy: DiagramObjectPoint): void;
50
+ static copyAndPushDiagramObjectPoint(diagramObject: DiagramObject, diagramObjectPoint2Copy: DiagramObjectPoint, unshift?: boolean): void;
51
+ static copyAndPushXYCoordinates(diagramObject: DiagramObject, xy: number[], unshift?: boolean): void;
50
52
  static createDiagramObjectWithPoint2(args: DiagramObjectWithPointParams): DiagramObject;
51
53
  static createDiagramObjectWithPoint(x: number, y: number, rotation?: number, sequenceNumber?: number): DiagramObject;
54
+ static createDiagramObjectWithPoints(xy_s: number[][], rotation?: number): DiagramObject;
52
55
  static createDiagramObjectWithPointArrayBased(xy: number[], rotation?: number): DiagramObject;
53
56
  static filterByVariantenNrOnlyEingeblendet<T extends NsgObject>(result: T[], variantenNr: number, onlyEingeblendet: boolean): T[];
54
57
  static getXYOffsetFromRelCM(type: string, nsgObject: NsgObject, anschlussID: number, nsgLeitungspkt: NsgLeitungsPunkt): number[];
55
58
  static convertNsgKnoten(cimModel: ModelContainer, integral7: Integral7Model, data: NsgKnotenSo, refCimObjectUUID: string, width: number, height: number, xParentRel: number, yParentRel: number): void;
59
+ static splitLineIntoLineSegments(segmentPercentages: number[], linePoints: number[][]): number[][][];
56
60
  static convertACLineSegment(completeLength: number, segmentPercentages: number[], eqUUIDs: string[], i7LineBasePoints: {
57
61
  xPosition: number;
58
62
  yPosition: number;
@@ -53,8 +53,14 @@ class DLUtilFunctions {
53
53
  }
54
54
  return resV;
55
55
  }
56
- static add(v1, v2) {
57
- return [v1[0] + v2[0], v1[1] + v2[1]];
56
+ static add(v, ...v_args) {
57
+ const v_return = [...v];
58
+ for (let a = 0; a < v_args.length; ++a) {
59
+ for (let b = 0; b < v_args[a].length; ++b) {
60
+ v_return[b] += v_args[a][b];
61
+ }
62
+ }
63
+ return v_return;
58
64
  }
59
65
  static subtract(v1, v2) {
60
66
  return [v1[0] - v2[0], v1[1] - v2[1]];
@@ -107,6 +113,24 @@ class DLUtilFunctions {
107
113
  point.xPosition = Math.round(resultCoords[0] * amountOfDecimals) / amountOfDecimals;
108
114
  point.yPosition = Math.round(resultCoords[1] * amountOfDecimals) / amountOfDecimals;
109
115
  }
116
+ static rotatePoint(point, angle) {
117
+ // negate the angle to rotate clockwise
118
+ const radiansAngle = -angle * (Math.PI / 180);
119
+ const coords = [point[0], point[1]];
120
+ const rotMat = [
121
+ [Math.cos(radiansAngle), -Math.sin(radiansAngle)],
122
+ [Math.sin(radiansAngle), Math.cos(radiansAngle)]
123
+ ];
124
+ const resultCoords = [0, 0];
125
+ for (let a = 0; a < rotMat.length; a++) {
126
+ for (let b = 0; b < rotMat[a].length; b++) {
127
+ resultCoords[a] += rotMat[a][b] * coords[b];
128
+ }
129
+ }
130
+ const amountOfDecimals = 100; // Die Anzahl der Nullen entspricht der Anzahl an Nachkommastellen
131
+ point[0] = Math.round(resultCoords[0] * amountOfDecimals) / amountOfDecimals;
132
+ point[1] = Math.round(resultCoords[1] * amountOfDecimals) / amountOfDecimals;
133
+ }
110
134
  static shiftAddBasedOnNsgSo(cimModel, integral7, variantenNr, nsgSoID, uuidPointsMap) {
111
135
  const nsgSo = integral7.integralNSGStandorte.get(nsgSoID);
112
136
  uuidPointsMap.forEach((entryDiagramObject, key) => {
@@ -148,7 +172,7 @@ class DLUtilFunctions {
148
172
  // }
149
173
  static rotateAndShiftBasedOnNsgSAA(nsgSo, nsgSa, nsgSaab, diagramObjects, useLeftOffset = false) {
150
174
  let saabShiftOffset = 0;
151
- for (const tempNsgSaab of nsgSa.nsgSaabs) {
175
+ for (const tempNsgSaab of nsgSa.nsgSaabschnitt) {
152
176
  saabShiftOffset = saabShiftOffset < (tempNsgSaab.nslots + tempNsgSaab.laenge) ? (tempNsgSaab.nslots + tempNsgSaab.laenge) : saabShiftOffset;
153
177
  }
154
178
  for (const diagramObject of diagramObjects) {
@@ -540,18 +564,37 @@ class DLUtilFunctions {
540
564
  terminalDiagramObjectPoint.xPosition += (isLeft ? -1 : 1) * constants_1.NsgConstants.TERMINAL_CE_OFFSET;
541
565
  }
542
566
  }
543
- static copyAndPushDiagramObjectPoint(diagramObject, diagramObjectPoint2Copy) {
567
+ static copyAndPushDiagramObjectPoint(diagramObject, diagramObjectPoint2Copy, unshift) {
544
568
  const sequenceNumber = diagramObject.diagramObjectPoints.length + 1;
545
569
  const diagramObjectPoint = new DiagramObjectPoint_1.DiagramObjectPoint(diagramObjectPoint2Copy.xPosition, diagramObjectPoint2Copy.yPosition, sequenceNumber);
546
570
  diagramObjectPoint.mrid = common_utils_1.CommonUtils.generateUUID();
547
571
  diagramObjectPoint.diagramObject = diagramObject;
548
- diagramObject.diagramObjectPoints.push(diagramObjectPoint);
572
+ if (unshift) {
573
+ diagramObject.diagramObjectPoints.unshift(diagramObjectPoint);
574
+ }
575
+ else {
576
+ diagramObject.diagramObjectPoints.push(diagramObjectPoint);
577
+ }
578
+ }
579
+ static copyAndPushXYCoordinates(diagramObject, xy, unshift) {
580
+ const diagramObjectPoint = new DiagramObjectPoint_1.DiagramObjectPoint(xy[0], xy[1]);
581
+ diagramObjectPoint.mrid = common_utils_1.CommonUtils.generateUUID();
582
+ diagramObjectPoint.diagramObject = diagramObject;
583
+ if (unshift) {
584
+ diagramObject.diagramObjectPoints.unshift(diagramObjectPoint);
585
+ }
586
+ else {
587
+ diagramObject.diagramObjectPoints.push(diagramObjectPoint);
588
+ }
589
+ for (let a = 0; a < diagramObject.diagramObjectPoints.length; ++a) {
590
+ diagramObject.diagramObjectPoints[a].sequenceNumber = (a + 1);
591
+ }
549
592
  }
550
593
  static createDiagramObjectWithPoint2(args) {
551
594
  const diagramObject = new DiagramObject_1.DiagramObject(common_utils_1.CommonUtils.generateUUID(), args.diagramObjectName);
552
595
  diagramObject.diagramUUID = args.diagramUUID;
553
596
  diagramObject.identifiedObjectUUID = args.identifiedObjectUUID;
554
- diagramObject.rotation = args.rotation;
597
+ diagramObject.rotation = args.rotation !== undefined ? args.rotation : null;
555
598
  const diagramObjectPoint = new DiagramObjectPoint_1.DiagramObjectPoint(args.xPosition, args.yPosition);
556
599
  diagramObjectPoint.mrid = common_utils_1.CommonUtils.generateUUID();
557
600
  diagramObjectPoint.sequenceNumber = args.sequenceNumber !== undefined ? args.sequenceNumber : 1;
@@ -569,6 +612,18 @@ class DLUtilFunctions {
569
612
  diagramObject.diagramObjectPoints.push(diagramObjectPoint);
570
613
  return diagramObject;
571
614
  }
615
+ static createDiagramObjectWithPoints(xy_s, rotation) {
616
+ const diagramObject = new DiagramObject_1.DiagramObject(common_utils_1.CommonUtils.generateUUID(), 'DiagramObject');
617
+ diagramObject.rotation = rotation;
618
+ for (let a = 0; a < xy_s.length; ++a) {
619
+ const diagramObjectPoint = new DiagramObjectPoint_1.DiagramObjectPoint(xy_s[a][0], xy_s[a][1]);
620
+ diagramObjectPoint.mrid = common_utils_1.CommonUtils.generateUUID();
621
+ diagramObjectPoint.sequenceNumber = (a + 1);
622
+ diagramObjectPoint.diagramObject = diagramObject;
623
+ diagramObject.diagramObjectPoints.push(diagramObjectPoint);
624
+ }
625
+ return diagramObject;
626
+ }
572
627
  static createDiagramObjectWithPointArrayBased(xy, rotation) {
573
628
  const diagramObject = new DiagramObject_1.DiagramObject();
574
629
  diagramObject.rotation = rotation;
@@ -685,6 +740,79 @@ class DLUtilFunctions {
685
740
  integral7.placedCIMObjectsForDLProfil.set(diagramObject.getUUID(), diagramObject);
686
741
  }
687
742
  }
743
+ static splitLineIntoLineSegments(segmentPercentages, linePoints) {
744
+ // const resultDiagramObjects: DiagramObject[] = [];
745
+ const resultSegments = [];
746
+ // Bestimme komplette 'Pixellänge' der Leitung
747
+ let completePixelLength = 0;
748
+ for (let a = 1; a < linePoints.length; ++a) {
749
+ const tempX = linePoints[a][0] - linePoints[a - 1][0];
750
+ const tempY = linePoints[a][1] - linePoints[a - 1][1];
751
+ completePixelLength += Math.sqrt((tempX * tempX) + (tempY * tempY));
752
+ }
753
+ // Der Leitungsabschnitt zwischen 'lastB' und 'b' wird mit der Leitung 'eqIdx' verknüpft
754
+ let lastB = 0;
755
+ let b = 1;
756
+ for (let segmentIndex = 0; segmentIndex < segmentPercentages.length; ++segmentIndex) {
757
+ let crtPixelPercentageSize = 0;
758
+ let lastPixelPercentageSize;
759
+ const epsilon = 0.00001;
760
+ let crtPixelLength = 0;
761
+ for (let idx = 1; idx < b; ++idx) {
762
+ const tempX = linePoints[idx][0] - linePoints[idx - 1][0];
763
+ const tempY = linePoints[idx][1] - linePoints[idx - 1][1];
764
+ crtPixelLength += Math.sqrt((tempX * tempX) + (tempY * tempY));
765
+ }
766
+ do {
767
+ // Nehme weitere DiagramObjectPoint zum aktuellen LineSegment hinzu
768
+ const tempX = linePoints[b][0] - linePoints[b - 1][0];
769
+ const tempY = linePoints[b][1] - linePoints[b - 1][1];
770
+ crtPixelLength += Math.sqrt((tempX * tempX) + (tempY * tempY));
771
+ lastPixelPercentageSize = crtPixelPercentageSize;
772
+ crtPixelPercentageSize = (crtPixelLength / completePixelLength);
773
+ b++;
774
+ } while (crtPixelPercentageSize < segmentPercentages[segmentIndex] && b < linePoints.length);
775
+ const crtPixelPercentage = (crtPixelLength / completePixelLength);
776
+ if (crtPixelPercentage <= segmentPercentages[segmentIndex] + epsilon) {
777
+ // Ende erreicht
778
+ }
779
+ else if (crtPixelPercentage > segmentPercentages[segmentIndex]) {
780
+ let decreased = false;
781
+ //if (b === i7LineBasePoints.length) {
782
+ b--;
783
+ decreased = true;
784
+ //}
785
+ // Neuer DiagramObjectPoint notwendig
786
+ // Interpoliere dafür zwischen den letzten beiden Punkten und erzeuge neuen Punkt
787
+ let tempX = linePoints[b][0] - linePoints[b - 1][0];
788
+ let tempY = linePoints[b][1] - linePoints[b - 1][1];
789
+ const percentageOfSegment = crtPixelPercentageSize - lastPixelPercentageSize;
790
+ const tempRestX = tempX * (1 - percentageOfSegment);
791
+ const tempRestY = tempY * (1 - percentageOfSegment);
792
+ tempX = tempX * percentageOfSegment;
793
+ tempY = tempY * percentageOfSegment;
794
+ const newDiagramObjectPoint = [
795
+ linePoints[b - 1][0] + tempX,
796
+ linePoints[b - 1][1] + tempY
797
+ ];
798
+ crtPixelLength -= Math.sqrt((tempRestX * tempRestX) + (tempRestY * tempRestY));
799
+ linePoints.splice(b, 0, newDiagramObjectPoint);
800
+ if (decreased)
801
+ b++;
802
+ }
803
+ const diagramObject = new DiagramObject_1.DiagramObject(common_utils_1.CommonUtils.generateUUID(), 'DiagramObject');
804
+ // diagramObject.setIdentifiedObjectUUID(eqUUIDs[segmentIndex]);
805
+ const segment = [];
806
+ resultSegments.push(segment);
807
+ // let i = 1;
808
+ for (let idx = lastB; idx < b; ++idx) {
809
+ segment.push([linePoints[idx][0], linePoints[idx][1]]);
810
+ // ++i;
811
+ }
812
+ lastB = b - 1;
813
+ }
814
+ return resultSegments;
815
+ }
688
816
  static convertACLineSegment(completeLength, segmentPercentages, eqUUIDs, i7LineBasePoints) {
689
817
  const returnedDiagramObjects = [];
690
818
  // Bestimme komplette 'Pixellänge' der Leitung