@crystaldesign/web-planner-logic 26.11.0-beta.2 → 26.11.0-beta.21

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 (108) hide show
  1. package/build/cjs/{DivaBoxPlanner-68cc1bd1.js → DivaBoxPlanner-051e3b01.js} +134 -47
  2. package/build/cjs/{DivaStandardPlanner-d44ae0e7.js → DivaStandardPlanner-40846a4f.js} +340 -190
  3. package/build/cjs/{DoorPlanner-1719cbe1.js → DoorPlanner-51477bb2.js} +3 -1
  4. package/build/cjs/{Host3DSignalR-a456221e.js → Host3DSignalR-72511b72.js} +41 -24
  5. package/build/cjs/{LiviqueWWSHandler-f2afb4eb.js → LiviqueWWSHandler-fbfeeb05.js} +3 -1
  6. package/build/cjs/{PfisterWWSHandler-8f522ab6.js → PfisterWWSHandler-a7ac983b.js} +3 -1
  7. package/build/cjs/PlannerHandler2D-e2c83aec.js +544 -0
  8. package/build/cjs/{SeriousBasketHandler-b39f0556.js → SeriousBasketHandler-60853c54.js} +3 -1
  9. package/build/cjs/{ShelfPlanner-1dde2d7c.js → ShelfPlanner-a901f6da.js} +262 -148
  10. package/build/cjs/{StandardWWSHandler-62ec343d.js → StandardWWSHandler-3a8a3685.js} +3 -1
  11. package/build/cjs/{index-d63749e4.js → index-7d87a838.js} +15132 -13899
  12. package/build/cjs/index.js +13 -2
  13. package/build/esm/{DivaBoxPlanner-a347ef5d.js → DivaBoxPlanner-a76550ee.js} +134 -47
  14. package/build/esm/{DivaStandardPlanner-a8f0d722.js → DivaStandardPlanner-56c260dc.js} +339 -190
  15. package/build/esm/{DoorPlanner-60c065e5.js → DoorPlanner-a40a4342.js} +3 -1
  16. package/build/esm/{Host3DSignalR-0c7e84a7.js → Host3DSignalR-6f824d99.js} +41 -24
  17. package/build/esm/{LiviqueWWSHandler-3df03404.js → LiviqueWWSHandler-2f1189d0.js} +3 -1
  18. package/build/esm/{PfisterWWSHandler-28b609ef.js → PfisterWWSHandler-81238c20.js} +3 -1
  19. package/build/esm/PlannerHandler2D-d93ae013.js +526 -0
  20. package/build/esm/{SeriousBasketHandler-276a8035.js → SeriousBasketHandler-bca9210d.js} +3 -1
  21. package/build/esm/{ShelfPlanner-7380b831.js → ShelfPlanner-539f1b08.js} +262 -148
  22. package/build/esm/{StandardWWSHandler-1d13f6a3.js → StandardWWSHandler-cdc4c837.js} +3 -1
  23. package/build/esm/{index-358c0a3c.js → index-b755400a.js} +15128 -13899
  24. package/build/esm/index.js +3 -1
  25. package/build/types/web-planner-logic/src/index.d.ts +8 -3
  26. package/build/types/web-planner-logic/src/index.d.ts.map +1 -1
  27. package/build/types/web-planner-logic/src/interface/Articles/ArticleDataType.d.ts +13 -0
  28. package/build/types/web-planner-logic/src/interface/Articles/ArticleDataType.d.ts.map +1 -1
  29. package/build/types/web-planner-logic/src/interface/Articles/ArticleInfoType.d.ts +13 -0
  30. package/build/types/web-planner-logic/src/interface/Articles/ArticleInfoType.d.ts.map +1 -1
  31. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts +3 -0
  32. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts.map +1 -1
  33. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts +5 -0
  34. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts.map +1 -1
  35. package/build/types/web-planner-logic/src/interface/IDM/ArticleApi.d.ts +19 -18
  36. package/build/types/web-planner-logic/src/interface/IDM/ArticleApi.d.ts.map +1 -1
  37. package/build/types/web-planner-logic/src/interface/Planner/ISaveSetPlanner.d.ts +37 -0
  38. package/build/types/web-planner-logic/src/interface/Planner/ISaveSetPlanner.d.ts.map +1 -1
  39. package/build/types/web-planner-logic/src/interface/ShelfPlanner/ShelfAccessoiresView.d.ts +5 -0
  40. package/build/types/web-planner-logic/src/interface/ShelfPlanner/ShelfAccessoiresView.d.ts.map +1 -1
  41. package/build/types/web-planner-logic/src/interface/webPlannerParams/WebPlannerParamsType.d.ts +46 -2
  42. package/build/types/web-planner-logic/src/interface/webPlannerParams/WebPlannerParamsType.d.ts.map +1 -1
  43. package/build/types/web-planner-logic/src/logic/Article/DivaArticle.d.ts.map +1 -1
  44. package/build/types/web-planner-logic/src/logic/Article/Engine/ArticleEngine.d.ts +4 -0
  45. package/build/types/web-planner-logic/src/logic/Article/Engine/ArticleEngine.d.ts.map +1 -1
  46. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts +12 -2
  47. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts.map +1 -1
  48. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlanner.d.ts +20 -0
  49. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlanner.d.ts.map +1 -1
  50. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlannerGrid.d.ts +31 -1
  51. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlannerGrid.d.ts.map +1 -1
  52. package/build/types/web-planner-logic/src/logic/DivaApiHandler.d.ts +25 -0
  53. package/build/types/web-planner-logic/src/logic/DivaApiHandler.d.ts.map +1 -1
  54. package/build/types/web-planner-logic/src/logic/DivaCatalogHandler.d.ts +1 -0
  55. package/build/types/web-planner-logic/src/logic/DivaCatalogHandler.d.ts.map +1 -1
  56. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts +149 -95
  57. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts.map +1 -1
  58. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/ConstructionRulesHandler.d.ts +19 -0
  59. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/ConstructionRulesHandler.d.ts.map +1 -1
  60. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/DivaBoxPlanner.d.ts +15 -1
  61. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/DivaBoxPlanner.d.ts.map +1 -1
  62. package/build/types/web-planner-logic/src/logic/Planner/DivaPlannerHandler.d.ts +11 -1
  63. package/build/types/web-planner-logic/src/logic/Planner/DivaPlannerHandler.d.ts.map +1 -1
  64. package/build/types/web-planner-logic/src/logic/Planner/DivaStandardPlanner.d.ts +28 -1
  65. package/build/types/web-planner-logic/src/logic/Planner/DivaStandardPlanner.d.ts.map +1 -1
  66. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/DockingPointHandler.d.ts +9 -114
  67. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/DockingPointHandler.d.ts.map +1 -1
  68. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/PlannerHandler2D.d.ts +5 -7
  69. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/PlannerHandler2D.d.ts.map +1 -1
  70. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/SVGUtils.d.ts +5 -6
  71. package/build/types/web-planner-logic/src/logic/Planner/PlannerUtils/SVGUtils.d.ts.map +1 -1
  72. package/build/types/web-planner-logic/src/logic/Planner/Rendering/Host3DSignalR.d.ts.map +1 -1
  73. package/build/types/web-planner-logic/src/logic/Planner/Rendering/PlannerHandler3D.d.ts +17 -1
  74. package/build/types/web-planner-logic/src/logic/Planner/Rendering/PlannerHandler3D.d.ts.map +1 -1
  75. package/build/types/web-planner-logic/src/logic/Set/DivaSet.d.ts +2 -2
  76. package/build/types/web-planner-logic/src/logic/Set/DivaSet.d.ts.map +1 -1
  77. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts +31 -3
  78. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts.map +1 -1
  79. package/build/types/web-planner-logic/src/logic/Set/catalogXml/articleGeo.d.ts +9 -0
  80. package/build/types/web-planner-logic/src/logic/Set/catalogXml/articleGeo.d.ts.map +1 -0
  81. package/build/types/web-planner-logic/src/logic/Set/catalogXml/parseCatalogXml.d.ts +12 -0
  82. package/build/types/web-planner-logic/src/logic/Set/catalogXml/parseCatalogXml.d.ts.map +1 -0
  83. package/build/types/web-planner-logic/src/logic/Set/catalogXml/types.d.ts +66 -0
  84. package/build/types/web-planner-logic/src/logic/Set/catalogXml/types.d.ts.map +1 -0
  85. package/build/types/web-planner-logic/src/logic/bootMark.d.ts +71 -0
  86. package/build/types/web-planner-logic/src/logic/bootMark.d.ts.map +1 -0
  87. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts +1 -0
  88. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts.map +1 -1
  89. package/build/types/web-planner-logic/src/model/Articles/Article/IDMCatalogArticle.d.ts +11 -0
  90. package/build/types/web-planner-logic/src/model/Articles/Article/IDMCatalogArticle.d.ts.map +1 -1
  91. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts +13 -0
  92. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts.map +1 -1
  93. package/build/types/web-planner-logic/src/model/Catalog/IDMCatalogData.d.ts.map +1 -1
  94. package/build/types/web-planner-logic/src/model/Planner/DockingPoint.d.ts +1 -44
  95. package/build/types/web-planner-logic/src/model/Planner/DockingPoint.d.ts.map +1 -1
  96. package/build/types/web-planner-logic/src/model/Planner/PlannerElementData.d.ts +6 -1
  97. package/build/types/web-planner-logic/src/model/Planner/PlannerElementData.d.ts.map +1 -1
  98. package/build/types/web-planner-logic/src/test/engineFeatureDefaults.test.d.ts +2 -0
  99. package/build/types/web-planner-logic/src/test/engineFeatureDefaults.test.d.ts.map +1 -0
  100. package/build/types/web-planner-logic/src/test/idmPlannerPaletteView.test.d.ts +2 -0
  101. package/build/types/web-planner-logic/src/test/idmPlannerPaletteView.test.d.ts.map +1 -0
  102. package/build/types/web-planner-logic/src/test/parseSvgOltGeometry.test.d.ts +2 -0
  103. package/build/types/web-planner-logic/src/test/parseSvgOltGeometry.test.d.ts.map +1 -0
  104. package/build/types/web-planner-logic/src/test/stretchGoldenMaster.test.d.ts +2 -0
  105. package/build/types/web-planner-logic/src/test/stretchGoldenMaster.test.d.ts.map +1 -0
  106. package/package.json +5 -5
  107. package/build/cjs/PlannerHandler2D-dbe1d858.js +0 -2470
  108. package/build/esm/PlannerHandler2D-f8657005.js +0 -2455
@@ -1,2455 +0,0 @@
1
- import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
2
- import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
3
- import _createClass from '@babel/runtime/helpers/createClass';
4
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
5
- import _regeneratorRuntime from '@babel/runtime/regenerator';
6
- import { c as Vector2, D as DockingPoint, V as Vector3 } from './index-358c0a3c.js';
7
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
8
- import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
9
- import { fabric } from 'fabric';
10
- import DivaUtils, { DivaError } from '@crystaldesign/diva-utils';
11
- import serialize from 'w3c-xmlserializer';
12
-
13
- var LOG$2 = DivaUtils.initLog('Planner', 'WEB-PLANNER-LOGIC');
14
- var SVGUtils = /*#__PURE__*/function () {
15
- function SVGUtils() {
16
- _classCallCheck(this, SVGUtils);
17
- }
18
- /**
19
- * This function removes all VIF and OLF information from the SVG. This is used for displaying only the OLT information
20
- * @param content The svg with OLF and OLT
21
- * @returns SVG with only OLT information
22
- */
23
- return _createClass(SVGUtils, [{
24
- key: "removeOLFFromSvg",
25
- value: function removeOLFFromSvg(content) {
26
- var parser = new DOMParser();
27
- var xmlDocument;
28
- xmlDocument = parser.parseFromString(content, 'application/xml');
29
- var vifObjs = xmlDocument.evaluate("//*[starts-with(@id,'VIF')]", xmlDocument, null, 7, null);
30
- if (vifObjs.snapshotLength > 0) {
31
- for (var i = 0; i < vifObjs.snapshotLength; i++) {
32
- var _parentElement;
33
- (_parentElement = vifObjs.snapshotItem(i).parentElement) === null || _parentElement === void 0 || _parentElement.removeChild(vifObjs.snapshotItem(i));
34
- }
35
- }
36
- var olfObjs = xmlDocument.evaluate("//*[starts-with(@id,'OLF')]", xmlDocument, null, 7, null);
37
- if (olfObjs.snapshotLength > 0) {
38
- for (var i = 0; i < olfObjs.snapshotLength; i++) {
39
- var _parentElement2;
40
- (_parentElement2 = olfObjs.snapshotItem(i).parentElement) === null || _parentElement2 === void 0 || _parentElement2.removeChild(olfObjs.snapshotItem(i));
41
- }
42
- }
43
- if (typeof XMLSerializer !== 'undefined') return new XMLSerializer().serializeToString(xmlDocument);else {
44
- return serialize(xmlDocument);
45
- }
46
- }
47
-
48
- /**
49
- * This function returns the DPs of an svg
50
- * @param content The svg with OLF and OLT
51
- * @returns SVG with only OLT information
52
- */
53
- }, {
54
- key: "getDPsInSVG",
55
- value: function getDPsInSVG(content) {
56
- var dockingpointsSvgLine = [];
57
- var parser = new DOMParser();
58
- var xmlDocument = parser.parseFromString(content, 'application/xml');
59
- var dpObjs = xmlDocument.evaluate("//*[starts-with(@id,'AV')]", xmlDocument, null, 7, null);
60
- if (dpObjs.snapshotLength > 0) {
61
- for (var i = 0; i < dpObjs.snapshotLength; i++) {
62
- var obj = dpObjs.snapshotItem(i);
63
- if ((obj === null || obj === void 0 ? void 0 : obj.nodeName) === 'line') {
64
- dockingpointsSvgLine.push({
65
- x1: Number(obj.getAttribute('x1')),
66
- y1: Number(obj.getAttribute('y1')),
67
- x2: Number(obj.getAttribute('x2')),
68
- y2: Number(obj.getAttribute('y2')),
69
- dockingName: obj.getAttribute('id'),
70
- dockingType: obj.getAttribute('id').substring(0, 3)
71
- });
72
- } else {
73
- throw new Error('nodename type: ' + obj.nodeName + ' not implemented');
74
- }
75
- }
76
- }
77
- dockingpointsSvgLine.sort(function (a, b) {
78
- if (a.dockingType === 'AVL') return -1;
79
- if (a.dockingType === 'AVR' && ['AVR', 'AVC', 'AVU', 'AVO', 'AVS', 'AVN'].includes(b.dockingType)) return -1;
80
- return 0;
81
- });
82
- return dockingpointsSvgLine;
83
- }
84
-
85
- /**
86
- * This function returns the DPs of an svg
87
- * @param content The svg with OLF and OLT
88
- * @returns SVG with only OLT information
89
- */
90
- }, {
91
- key: "getPointOfPoligonById",
92
- value: function getPointOfPoligonById(content, id) {
93
- var points = [];
94
- var parser = new DOMParser();
95
- var xmlDocument = parser.parseFromString(content, 'application/xml');
96
- var dpObjs = xmlDocument.evaluate("//*[starts-with(@id,'" + id + "')]", xmlDocument, null, 7, null);
97
- if (dpObjs.snapshotLength > 1 || dpObjs.snapshotLength == 0) return undefined;
98
- for (var i = 0; i < dpObjs.snapshotLength; i++) {
99
- var obj = dpObjs.snapshotItem(i);
100
- if ((obj === null || obj === void 0 ? void 0 : obj.nodeName) === 'polygon') {
101
- var pointsAsString = obj.getAttribute('points');
102
- if (pointsAsString) {
103
- var pointsFromString = pointsAsString.split(' ');
104
- for (var j = 0; j < pointsFromString.length; j++) {
105
- var xandY = pointsFromString[j].split(',');
106
- if (xandY.length !== 2) continue;
107
- points.push(new Vector2(Number(xandY[0]), Number(xandY[1])));
108
- }
109
- } else {
110
- return undefined;
111
- }
112
- }
113
- }
114
- return points;
115
- }
116
- }, {
117
- key: "getBoundingBoxOfPoints",
118
- value: function getBoundingBoxOfPoints(points) {
119
- var xArr = points.map(function (c) {
120
- return c.x;
121
- });
122
- var yArr = points.map(function (c) {
123
- return c.y;
124
- });
125
- var minX = Math.min.apply(Math, _toConsumableArray(xArr));
126
- var maxX = Math.max.apply(Math, _toConsumableArray(xArr));
127
- var minY = Math.min.apply(Math, _toConsumableArray(yArr));
128
- var maxY = Math.max.apply(Math, _toConsumableArray(yArr));
129
- var width = maxX - minX;
130
- var height = maxY - minY;
131
- return {
132
- width: width,
133
- height: height,
134
- minX: minX,
135
- minY: minY
136
- };
137
- }
138
-
139
- /**
140
- * Returns OLF geometry (minX, minY, width, height) from SVG - supports rect and polygon.
141
- * Iterates through matches to find first rect/polygon (handles Illustrator group wrappers).
142
- */
143
- }, {
144
- key: "getOLFGeometryFromSvg",
145
- value: function getOLFGeometryFromSvg(content) {
146
- var parser = new DOMParser();
147
- var xmlDocument = parser.parseFromString(content, 'application/xml');
148
- var olfObjs = xmlDocument.evaluate("//*[starts-with(@id,'OLF')]", xmlDocument, null, 7, null);
149
- for (var i = 0; i < olfObjs.snapshotLength; i++) {
150
- var obj = olfObjs.snapshotItem(i);
151
- if ((obj === null || obj === void 0 ? void 0 : obj.nodeName) === 'rect') {
152
- var _obj$getAttribute, _obj$getAttribute2, _obj$getAttribute3, _obj$getAttribute4;
153
- var x = parseFloat((_obj$getAttribute = obj.getAttribute('x')) !== null && _obj$getAttribute !== void 0 ? _obj$getAttribute : '0');
154
- var y = parseFloat((_obj$getAttribute2 = obj.getAttribute('y')) !== null && _obj$getAttribute2 !== void 0 ? _obj$getAttribute2 : '0');
155
- var width = parseFloat((_obj$getAttribute3 = obj.getAttribute('width')) !== null && _obj$getAttribute3 !== void 0 ? _obj$getAttribute3 : '0');
156
- var height = parseFloat((_obj$getAttribute4 = obj.getAttribute('height')) !== null && _obj$getAttribute4 !== void 0 ? _obj$getAttribute4 : '0');
157
- return {
158
- minX: x,
159
- minY: y,
160
- width: width,
161
- height: height
162
- };
163
- }
164
- if ((obj === null || obj === void 0 ? void 0 : obj.nodeName) === 'polygon') {
165
- var pts = obj.getAttribute('points');
166
- if (pts) {
167
- var points = pts.split(/\s+/).reduce(function (acc, p) {
168
- var _p$split = p.split(','),
169
- _p$split2 = _slicedToArray(_p$split, 2),
170
- x = _p$split2[0],
171
- y = _p$split2[1];
172
- if (x != null && y != null) acc.push(new Vector2(Number(x), Number(y)));
173
- return acc;
174
- }, []);
175
- if (points.length) {
176
- var bbox = this.getBoundingBoxOfPoints(points);
177
- return {
178
- minX: bbox.minX,
179
- minY: bbox.minY,
180
- width: bbox.width,
181
- height: bbox.height
182
- };
183
- }
184
- }
185
- }
186
- }
187
- return undefined;
188
- }
189
-
190
- /**
191
- * Returns OLT geometry (x, y, width, height) from SVG attributes - untransformed coords.
192
- * Iterates through matches to find first rect/polygon (handles Illustrator group wrappers).
193
- */
194
- }, {
195
- key: "getOLTGeometryFromSvg",
196
- value: function getOLTGeometryFromSvg(content) {
197
- var parser = new DOMParser();
198
- var xmlDocument = parser.parseFromString(content, 'application/xml');
199
- var oltObjs = xmlDocument.evaluate("//*[starts-with(@id,'OLT')]", xmlDocument, null, 7, null);
200
- for (var i = 0; i < oltObjs.snapshotLength; i++) {
201
- var obj = oltObjs.snapshotItem(i);
202
- if ((obj === null || obj === void 0 ? void 0 : obj.nodeName) === 'rect') {
203
- var _obj$getAttribute5, _obj$getAttribute6, _obj$getAttribute7, _obj$getAttribute8;
204
- var x = parseFloat((_obj$getAttribute5 = obj.getAttribute('x')) !== null && _obj$getAttribute5 !== void 0 ? _obj$getAttribute5 : '0');
205
- var y = parseFloat((_obj$getAttribute6 = obj.getAttribute('y')) !== null && _obj$getAttribute6 !== void 0 ? _obj$getAttribute6 : '0');
206
- var width = parseFloat((_obj$getAttribute7 = obj.getAttribute('width')) !== null && _obj$getAttribute7 !== void 0 ? _obj$getAttribute7 : '0');
207
- var height = parseFloat((_obj$getAttribute8 = obj.getAttribute('height')) !== null && _obj$getAttribute8 !== void 0 ? _obj$getAttribute8 : '0');
208
- return {
209
- x: x,
210
- y: y,
211
- width: width,
212
- height: height
213
- };
214
- }
215
- if ((obj === null || obj === void 0 ? void 0 : obj.nodeName) === 'polygon') {
216
- var pts = obj.getAttribute('points');
217
- if (pts) {
218
- var points = pts.split(/\s+/).reduce(function (acc, p) {
219
- var _p$split3 = p.split(','),
220
- _p$split4 = _slicedToArray(_p$split3, 2),
221
- x = _p$split4[0],
222
- y = _p$split4[1];
223
- if (x != null && y != null) acc.push(new Vector2(Number(x), Number(y)));
224
- return acc;
225
- }, []);
226
- if (points.length) {
227
- var bbox = this.getBoundingBoxOfPoints(points);
228
- return {
229
- x: bbox.minX,
230
- y: bbox.minY,
231
- width: bbox.width,
232
- height: bbox.height
233
- };
234
- }
235
- }
236
- }
237
- }
238
- return undefined;
239
- }
240
-
241
- /**
242
- * This function looks if the svg has a Mask HTML element. If so it removes all masks from SVG
243
- * @param content
244
- */
245
- }, {
246
- key: "removeMaskFromSvg",
247
- value: function removeMaskFromSvg(content) {
248
- if (content.toLowerCase().indexOf('<mask') >= 0) {
249
- var parser = new DOMParser();
250
- var xmlDocument;
251
- xmlDocument = parser.parseFromString(content, 'image/svg+xml');
252
- var maskObjs = xmlDocument.evaluate('//*["mask"=local-name()]', xmlDocument, null, 7, null);
253
- for (var i = 0; i < maskObjs.snapshotLength; i++) {
254
- var _parentElement3;
255
- (_parentElement3 = maskObjs.snapshotItem(i).parentElement) === null || _parentElement3 === void 0 || _parentElement3.removeChild(maskObjs.snapshotItem(i));
256
- }
257
- var objMaskIds = xmlDocument.evaluate('//*[@mask]', xmlDocument, null, 7, null);
258
- for (var i = 0; i < objMaskIds.snapshotLength; i++) {
259
- var _parentElement4;
260
- (_parentElement4 = objMaskIds.snapshotItem(i).parentElement) === null || _parentElement4 === void 0 || _parentElement4.removeChild(objMaskIds.snapshotItem(i));
261
- }
262
- if (typeof XMLSerializer !== 'undefined') return new XMLSerializer().serializeToString(xmlDocument);else {
263
- return serialize(xmlDocument);
264
- }
265
- }
266
- return content;
267
- }
268
-
269
- /*
270
- * @param content xml Document as String representing SVG
271
- * @param newWidth new width of SVG (written in the OLT tag)
272
- * @param newHeight new height of SCG( written in the OLT tag)
273
- * @param svgMinBorderXVal : number returns the minimum coordinate in x left direction in the SVG. Used to correct viewBox.
274
- * @param svgSourceUrl optional URL / path of the loaded SVG for diagnostics
275
- */
276
- }, {
277
- key: "ccCheckStretchAreas",
278
- value: function ccCheckStretchAreas(content, newWidthCM, newHeightCM, useglobalSvgScale, svgMinBorderXVal, svgMinBorderYVal, callback, svgSourceUrl) {
279
- //var parse = require("xml-parser");
280
- //var svg = parse(content);
281
- var unitRecalc = DivaUtils.UnitRecalc;
282
- var newWidthOLT = newWidthCM * unitRecalc;
283
- var newHeightOLT = newHeightCM * unitRecalc;
284
- var xmlDocument;
285
- var root;
286
- var SAH = [];
287
- var SAV = [];
288
- var ratioSAH = []; //contains proportions from single SAH
289
- var ratioSAV = [];
290
- //var minHeight: number;
291
- //var minWidth: number;
292
-
293
- var origOLTWidth; //saves original width of OLT
294
- var origOLTHeight; //saves original height of OLT
295
- var scaleFactorSvgViewBox = {
296
- x: 0,
297
- y: 0
298
- };
299
- var widthOLT = 0; //saves temp Width
300
- var heightOLT = 0; // saves temp oltHeight
301
- var widthOLF = 0; //saves temp olfWidth
302
- var heightOLF = 0; //Saves temp olfHeight
303
- var startWidthOLT = 0; //saves start position of temp Width
304
- var startHeightOLT = 0;
305
- var startWidthOLF = 0;
306
- var startHeightOLF = 0;
307
- var svgHasOLF = false; //true, if SVG has OLF
308
- var deltaOLFWidth = 0; //originale widthOLF - widthOLT -> saves proportions. Das Strecken bezieht sich immer auf die OLT. Bei den OLF wird einfach das delta dazuaddiert
309
- var deltaOLFHeight = 0; //originale heightOLF - HeightOLT
310
- var result = '';
311
- var globalScaleFactorWidth;
312
- var globalScaleFactorHeight;
313
- var scaleFactorSvgViewBox = {
314
- x: 1,
315
- y: 1
316
- }; //Es kann sein, dass das SVG in einem anderen Koordinaten system gespeichert wurde. Nun m�ssen die werte angepasst werden.
317
-
318
- var replacer = new RegExp('svg', 'g');
319
- var content = content.replace(replacer, 'xxx');
320
- var parser = new DOMParser();
321
- xmlDocument = parser.parseFromString(content, 'application/xml');
322
- root = xmlDocument.getElementsByTagName('xxx')[0];
323
- replacer = new RegExp('xxx', 'g');
324
- correctSVG(root);
325
- scaleFactorSvgViewBox = calcScaleFactorSvgViewBox(root);
326
- recalcScaleFactorSvgViewBox(root);
327
- correctSVGViewBoxScale(root, scaleFactorSvgViewBox);
328
- var origWidthCM = Math.round(parseFloat(root.getAttribute('width')) / unitRecalc * 100) / 100; //Change the size only if the the svg in cm is different from the cm to scale
329
- var origHeightCM = Math.round(parseFloat(root.getAttribute('height')) / unitRecalc * 100) / 100;
330
- if (newWidthOLT == 0) {
331
- origWidthCM = parseFloat(root.getAttribute('width'));
332
- }
333
- if (newHeightOLT == 0) {
334
- newHeightOLT = parseFloat(root.getAttribute('height'));
335
- }
336
- correctTEAttributes();
337
- findStretchAreas(root.children, scaleFactorSvgViewBox, function () {
338
- newWidthOLT = newWidthOLT / scaleFactorSvgViewBox.x;
339
- newHeightOLT = newHeightOLT / scaleFactorSvgViewBox.y;
340
- if (newWidthCM == origWidthCM && newHeightCM == origHeightCM) {
341
- var result2;
342
- if (typeof XMLSerializer !== 'undefined') result2 = new XMLSerializer().serializeToString(xmlDocument);else {
343
- result2 = serialize(xmlDocument);
344
- }
345
- result2 = result2.replace(replacer, 'svg');
346
- callback(result2);
347
- } else {
348
- //Resize OLT and VIT
349
- resizeXml(newWidthOLT, newHeightOLT, 'OLT', function () {
350
- //Resize OLF and VIF
351
- if (svgHasOLF) {
352
- resizeXml(newWidthOLT + deltaOLFWidth, newHeightOLT + deltaOLFHeight, 'OLF', function () {
353
- root = fixViewBox(root, svgMinBorderXVal, svgMinBorderYVal);
354
- //scaleFactorSvgViewBox = calcScaleFactorSvgViewBox(root);
355
-
356
- if (typeof XMLSerializer !== 'undefined') result = new XMLSerializer().serializeToString(xmlDocument);else {
357
- result = serialize(xmlDocument);
358
- }
359
- result = result.replace(replacer, 'svg');
360
- callback(result);
361
- });
362
- } else {
363
- root = fixViewBox(root, svgMinBorderXVal, svgMinBorderYVal);
364
- //scaleFactorSvgViewBox = calcScaleFactorSvgViewBox(root);
365
- if (typeof XMLSerializer !== 'undefined') result = new XMLSerializer().serializeToString(xmlDocument);else {
366
- result = serialize(xmlDocument);
367
- }
368
- result = result.replace(replacer, 'svg');
369
- callback(result);
370
- }
371
- });
372
- }
373
- });
374
- function correctSVG(root) {
375
- //Check if svg has width and height attribute. Otherwise set it as the values in the viewBox
376
- var viewBox = root.getAttribute('viewBox');
377
- if (viewBox && root.getAttribute('width') == null) {
378
- root.setAttribute('width', viewBox.split(' ')[2]);
379
- }
380
- if (viewBox && root.getAttribute('height') == null) {
381
- root.setAttribute('height', viewBox.split(' ')[3]);
382
- }
383
-
384
- //Convert mm to px and remove px from width and height
385
- var origWidthTxt = root.getAttribute('width');
386
- var origWidth;
387
- if (origWidthTxt.indexOf('mm') > 0) {
388
- origWidth = parseFloat(origWidthTxt.substring(0, origWidthTxt.length - 2));
389
- origWidth = origWidth * unitRecalc;
390
- } else if (origWidthTxt.indexOf('px') > 0) {
391
- origWidth = parseFloat(origWidthTxt.substring(0, origWidthTxt.length - 2));
392
- } else {
393
- origWidth = parseFloat(origWidthTxt);
394
- }
395
- //Convert to dpi 96
396
- root.setAttribute('width', origWidth.toString()); //Eventuell nicht runden
397
- var origHeightTxt = root.getAttribute('height');
398
- var origHeight;
399
- if (origHeightTxt.indexOf('mm') > 0) {
400
- origHeight = parseFloat(origHeightTxt.substring(0, origHeightTxt.length - 2));
401
- origHeight = origHeight * unitRecalc;
402
- } else if (origHeightTxt.indexOf('px') > 0) {
403
- origHeight = parseFloat(origHeightTxt.substring(0, origHeightTxt.length - 2));
404
- } else {
405
- origHeight = parseFloat(origHeightTxt);
406
- }
407
- root.setAttribute('height', origHeight.toString());
408
- if (!viewBox) root.setAttribute('viewBox', '0 0 ' + origWidth + ' ' + origHeight);
409
- }
410
- function correctTEAttributes() {
411
- var teObj = xmlDocument.evaluate("//*[starts-with(@id,'TE')]", xmlDocument, null, 7, null);
412
- if (teObj.snapshotLength == 0) {
413
- //f�ge TE Objekt hinzu
414
- var oltObj = xmlDocument.evaluate("//*[starts-with(@id,'OLT')]", xmlDocument, null, 7, null);
415
- if (oltObj.snapshotLength > 0) {
416
- for (var i = 0; i < oltObj.snapshotLength; i++) {
417
- var _oltObj$snapshotItem;
418
- if (((_oltObj$snapshotItem = oltObj.snapshotItem(i)) === null || _oltObj$snapshotItem === void 0 ? void 0 : _oltObj$snapshotItem.nodeName) != 'g') {
419
- var _oltObj$snapshotItem2;
420
- var parentOLTNode = (_oltObj$snapshotItem2 = oltObj.snapshotItem(i)) === null || _oltObj$snapshotItem2 === void 0 ? void 0 : _oltObj$snapshotItem2.parentNode;
421
- if (parentOLTNode.tagName == 'g') {
422
- parentOLTNode.setAttribute('id', 'TE');
423
- }
424
- }
425
- }
426
- }
427
- teObj = xmlDocument.evaluate("//*[starts-with(@id,'TE')]", xmlDocument, null, 7, null);
428
- }
429
- if (teObj.snapshotLength > 0) {
430
- for (var i = 0; i < teObj.snapshotLength; i++) {
431
- var _teObj$snapshotItem;
432
- if (((_teObj$snapshotItem = teObj.snapshotItem(i)) === null || _teObj$snapshotItem === void 0 ? void 0 : _teObj$snapshotItem.nodeName) == 'g') {
433
- var obj = teObj.snapshotItem(i);
434
- obj.setAttribute('display', 'none');
435
- }
436
- }
437
- }
438
- }
439
- function calcScaleFactorSvgViewBox(root) {
440
- var viewBox = root.getAttribute('viewBox');
441
- var xScale = 1;
442
- var yScale = 1;
443
- if (viewBox != null) {
444
- var origWidth = Number(root.getAttribute('width'));
445
- var splittedViewBox = viewBox.split(' ');
446
- var vBwidth = Number(splittedViewBox[2]);
447
- xScale = origWidth / vBwidth;
448
- var origHeight = Number(root.getAttribute('height'));
449
- var vBheight = Number(splittedViewBox[3]);
450
- yScale = origHeight / vBheight;
451
- }
452
- return new fabric.Point(xScale, yScale);
453
- }
454
- function recalcScaleFactorSvgViewBox(root) {
455
- var viewBox = root.getAttribute('viewBox');
456
- if (viewBox != null) {
457
- var origWidth = Math.ceil(parseFloat(root.getAttribute('width')));
458
- var origHeight = Math.ceil(parseFloat(root.getAttribute('height')));
459
- var origXTxt = root.getAttribute('x');
460
- var origX;
461
- if (origXTxt) {
462
- if (origXTxt.indexOf('mm') > 0) {
463
- origX = parseFloat(origXTxt.substring(0, origXTxt.length - 2));
464
- origX = origX * unitRecalc;
465
- } else if (origXTxt.indexOf('px') > 0) {
466
- origX = parseFloat(origXTxt.substring(0, origXTxt.length - 2));
467
- } else {
468
- origX = parseFloat(origXTxt);
469
- }
470
- origX = Math.ceil(origX);
471
- } else {
472
- origX = 0;
473
- }
474
- var origYTxt = root.getAttribute('y');
475
- var origY;
476
- if (origYTxt) {
477
- if (origYTxt.indexOf('mm') > 0) {
478
- origY = parseFloat(origYTxt.substring(0, origYTxt.length - 2));
479
- origY = origY * unitRecalc;
480
- } else if (origYTxt.indexOf('px') > 0) {
481
- origY = parseFloat(origYTxt.substring(0, origYTxt.length - 2));
482
- } else {
483
- origY = parseFloat(origYTxt);
484
- }
485
- origY = Math.ceil(origY);
486
- } else {
487
- origY = 0;
488
- }
489
- root.setAttribute('viewBox', origX + ' ' + origY + ' ' + origWidth + ' ' + origHeight);
490
- }
491
- }
492
-
493
- /*
494
- Geht alle Elemente durch und sucht zuerst nach den Technischen Eigenschaften
495
- Danach geht er davon alle Kinder durch und speichert alle horizontalen StrechAreas in SAH Array
496
- und alle vertikalen Strech Areas in SAV Array.
497
- */
498
- function findStretchAreas(root, scaleFactorSvgViewBox, callback) {
499
- var sahWidth = 0;
500
- var savHeight = 0;
501
- var i = 0;
502
- var SAHRefobj = xmlDocument.evaluate("//*[starts-with(@id,'SAH')]", xmlDocument, null, 7, null);
503
- var SAHobj = [];
504
- for (var i = 0; i < SAHRefobj.snapshotLength; i++) {
505
- SAHobj.push(SAHRefobj.snapshotItem(i));
506
- }
507
- for (i = 0; i < SAHobj.length; i++) {
508
- if (SAHobj[i].nodeName == 'polygon') {
509
- SAHobj[i] = convertPolygonToRect(SAHobj[i], xmlDocument);
510
- }
511
- if (SAHobj[i].nodeName == 'rect') {
512
- SAHobj[i].setAttribute('style', 'fill:none;');
513
- correctViewBoxScaleRectangle(SAHobj[i], scaleFactorSvgViewBox);
514
- }
515
- sahWidth += parseFloat(SAHobj[i].getAttribute('width'));
516
- SAH.push(SAHobj[i]);
517
- }
518
- var SAVRefobj = xmlDocument.evaluate("//*[starts-with(@id,'SAV')]", xmlDocument, null, 7, null);
519
- var SAVobj = [];
520
- for (var i = 0; i < SAVRefobj.snapshotLength; i++) {
521
- SAVobj.push(SAVRefobj.snapshotItem(i));
522
- }
523
- for (i = 0; i < SAVobj.length; i++) {
524
- if (SAVobj[i].nodeName == 'polygon') {
525
- SAVobj[i] = convertPolygonToRect(SAVobj[i], xmlDocument);
526
- }
527
- if (SAVobj[i].nodeName == 'rect') {
528
- SAVobj[i].setAttribute('style', 'fill:none;');
529
- correctViewBoxScaleRectangle(SAVobj[i], scaleFactorSvgViewBox);
530
- }
531
- savHeight += parseFloat(SAVobj[i].getAttribute('height'));
532
- SAV.push(SAVobj[i]);
533
- }
534
- var OLFobj = xmlDocument.evaluate("//*[starts-with(@id,'OLF')]", xmlDocument, null, 7, null);
535
- for (i = 0; i < OLFobj.snapshotLength; i++) {
536
- svgHasOLF = true;
537
- calcOlfAndOlt(OLFobj.snapshotItem(i), 'OLF');
538
- }
539
- var OLTobj = xmlDocument.evaluate("//*[starts-with(@id,'OLT')]", xmlDocument, null, 7, null);
540
- for (i = 0; i < OLTobj.snapshotLength; i++) {
541
- var _OLTobj$snapshotItem;
542
- if (OLTobj.snapshotLength > 1 && ((_OLTobj$snapshotItem = OLTobj.snapshotItem(i)) === null || _OLTobj$snapshotItem === void 0 || (_OLTobj$snapshotItem = _OLTobj$snapshotItem.parentElement) === null || _OLTobj$snapshotItem === void 0 ? void 0 : _OLTobj$snapshotItem.getAttribute('id')) != 'TE') {
543
- continue;
544
- }
545
- calcOlfAndOlt(OLTobj.snapshotItem(i), 'OLT');
546
- }
547
- if (svgHasOLF) {
548
- deltaOLFWidth = widthOLF - widthOLT;
549
- deltaOLFHeight = heightOLF - heightOLT;
550
- }
551
- origOLTWidth = widthOLT;
552
- origOLTHeight = heightOLT;
553
- sortSA(); //verh�ltnisse berechnen
554
-
555
- calcRatioSA(sahWidth, savHeight);
556
- clearSA();
557
-
558
- //var sahWidht: number = 0;
559
- //var savHeigh: number = 0;
560
-
561
- callback();
562
-
563
- //Calculates the max X and Y coordinates depending on the parameter "name": "OLF" or "OLT"
564
- function convertPolygonToRect(polygon, document) {
565
- var rect = document.createElement('rect');
566
- rect.setAttribute('id', polygon.getAttribute('id'));
567
- var points = createPolygonElement(polygon.getAttribute('points')).points;
568
- if (points.length > 0) {
569
- var minX = points[0].x;
570
- var maxX = points[0].x;
571
- var minY = points[0].y;
572
- var maxY = points[0].y;
573
- for (var i = 1; i < points.length; i++) {
574
- if (points[i].x < minX) minX = points[i].x;else if (points[i].x > maxX) maxX = points[i].x;
575
- if (points[i].y < minY) minY = points[i].y;else if (points[i].y > maxY) maxY = points[i].y;
576
- }
577
- rect.setAttribute('x', minX);
578
- rect.setAttribute('y', minY);
579
- rect.setAttribute('width', maxX - minX);
580
- rect.setAttribute('height', maxY - minY);
581
- polygon.parentElement.appendChild(rect);
582
- rect.parentElement.removeChild(polygon);
583
- }
584
- return rect;
585
- }
586
- function calcOlfAndOlt(element, name, scaleFactorSvgViewBox) {
587
- switch (element.localName) {
588
- case 'rect':
589
- if (!element.hasAttribute('x')) element.setAttribute('x', '0');
590
- if (!element.hasAttribute('y') == null) element.setAttribute('y', '0');
591
- if (name == 'OLT') {
592
- widthOLT = parseFloat(element.getAttribute('width'));
593
- heightOLT = parseFloat(element.getAttribute('height'));
594
- } else if (name == 'OLF') {
595
- widthOLF = parseFloat(element.getAttribute('width'));
596
- heightOLF = parseFloat(element.getAttribute('height'));
597
- }
598
- break;
599
- case 'polygon':
600
- var poly = createPolygonElement(element.getAttribute('points'));
601
- var maxX = 0;
602
- var maxY = 0;
603
- var minX;
604
- var minY;
605
- if (poly.points[0]) {
606
- minX = poly.points[0].x;
607
- minY = poly.points[0].y;
608
- }
609
- for (var i = 0; i < poly.points.length; i++) {
610
- if (poly.points[i].x > maxX) maxX = poly.points[i].x;
611
- if (poly.points[i].y > maxY) maxY = poly.points[i].y;
612
- if (poly.points[i].x < minX) minX = poly.points[i].x;
613
- if (poly.points[i].y < minY) minY = poly.points[i].y;
614
- }
615
- if (name == 'OLT') {
616
- widthOLT = maxX - minX;
617
- heightOLT = maxY - minY;
618
- startWidthOLT = minX; //saves start position of temp Width
619
- startHeightOLT = minY;
620
- } else if (name == 'OLF') {
621
- widthOLF = maxX - minX;
622
- heightOLF = maxY - minY;
623
- startWidthOLF = minX;
624
- startHeightOLF = minY;
625
- }
626
- break;
627
- case 'path':
628
- var path = new fabric.Path(element.getAttribute('d'));
629
- if (name == 'OLT') {
630
- widthOLT = path.width;
631
- heightOLT = path.height;
632
- } else if (name == 'OLF') {
633
- widthOLF = path.width;
634
- heightOLF = path.height;
635
- }
636
- break;
637
- case 'g':
638
- var children = element.children;
639
- element.setAttribute('id', '');
640
- for (var i = 0; i < children.length; i++) {
641
- switch (children[i].localName) {
642
- case 'rect':
643
- case 'path':
644
- case 'polygon':
645
- children[i].setAttribute('id', name);
646
- //element.parentElement.replaceChild(children[1], element);
647
- calcOlfAndOlt(children[i], name);
648
- break;
649
- }
650
- break;
651
- }
652
- break;
653
- }
654
- }
655
- }
656
- function correctSVGViewBoxScale(root, scaleFactorSvgViewBox) {
657
- if (scaleFactorSvgViewBox.x == 1 && scaleFactorSvgViewBox.y == 1) return;
658
- //Correct all rectangles in scene
659
- var children = root.children;
660
- if (!children) return;
661
- for (var i = 0; i < children.length; i++) {
662
- switch (children[i].tagName) {
663
- case 'rect':
664
- correctViewBoxScaleRectangle(children[i], scaleFactorSvgViewBox);
665
- break;
666
- case 'polygon':
667
- correctViewBoxScalePolygon(children[i], scaleFactorSvgViewBox);
668
- break;
669
- case 'path':
670
- correctViewBoxScalePath(children[i], scaleFactorSvgViewBox);
671
- break;
672
- case 'line':
673
- correctViewBoxScaleLine(children[i], scaleFactorSvgViewBox);
674
- break;
675
- case 'style':
676
- correctViewBoxScaleStyle(children[i], scaleFactorSvgViewBox);
677
- break;
678
- }
679
- correctSVGViewBoxScale(children[i], scaleFactorSvgViewBox);
680
- }
681
- }
682
- function correctViewBoxScaleStyle(styleNode, scaleFactorSvgViewBox) {
683
- if (styleNode.getAttribute('type') != 'text/css') LOG$2.debug('Warnung komisches style Element bei diesem CSS.');
684
- var styleText = styleNode.innerHTML;
685
- var styleParts = styleText.split('{');
686
- var newStyleContent = '';
687
- for (var i = 0; i < styleParts.length; i++) {
688
- var indWidth = styleParts[i].indexOf('width');
689
- if (indWidth >= 0) {
690
- var value = '';
691
- var startIndNumber = -1;
692
- var endIndNumber = -1;
693
- for (var j = indWidth + 'width'.length; j < styleParts[i].length; j++) {
694
- if (styleParts[i][j] == ';' || styleParts[i][j] == '}') {
695
- endIndNumber = j;
696
- break;
697
- }
698
- if (startIndNumber > -1) value += styleParts[i][j];
699
- if (styleParts[i][j] == ':') {
700
- startIndNumber = j;
701
- }
702
- }
703
- var correctedNumber = parseFloat(value) * scaleFactorSvgViewBox.x;
704
- var newPartString = styleParts[i].substring(0, startIndNumber + 1) + correctedNumber + styleParts[i].substring(endIndNumber, styleParts[i].lenght);
705
- styleParts[i] = newPartString;
706
- }
707
- var indHeight = styleParts[i].indexOf('height');
708
- if (indHeight >= 0) {
709
- var value = '';
710
- var startIndNumber = -1;
711
- var endIndNumber = -1;
712
- for (var j = indHeight + 'height'.length; j < styleParts[i].length; j++) {
713
- if (styleParts[i][j] == ';' || styleParts[i][j] == '}') {
714
- endIndNumber = j;
715
- break;
716
- }
717
- if (startIndNumber > -1) value += styleParts[i][j];
718
- if (styleParts[i][j] == ':') {
719
- startIndNumber = j;
720
- }
721
- }
722
- var correctedNumber = parseFloat(value) * scaleFactorSvgViewBox.y;
723
- var newPartString = styleParts[i].substring(0, startIndNumber + 1) + correctedNumber + styleParts[i].substring(endIndNumber, styleParts[i].lenght);
724
- styleParts[i] = newPartString;
725
- }
726
- newStyleContent += styleParts[i];
727
- if (i < styleParts.length - 1) newStyleContent = newStyleContent + '{';
728
- }
729
- styleNode.innerHTML = newStyleContent;
730
- }
731
- function correctViewBoxScaleLine(lineNode, scaleFactorSvgViewBox) {
732
- var x1Attr = lineNode.getAttribute('x1');
733
- if (!x1Attr) x1Attr = 0;
734
- var x2Attr = lineNode.getAttribute('x2');
735
- var y1Attr = lineNode.getAttribute('y1');
736
- if (!y1Attr) y1Attr = 0;
737
- var y2Attr = lineNode.getAttribute('y2');
738
- lineNode.setAttribute('x1', parseFloat(x1Attr) * scaleFactorSvgViewBox.x);
739
- lineNode.setAttribute('y1', parseFloat(y1Attr) * scaleFactorSvgViewBox.y);
740
- lineNode.setAttribute('x2', parseFloat(x2Attr) * scaleFactorSvgViewBox.x);
741
- lineNode.setAttribute('y2', parseFloat(y2Attr) * scaleFactorSvgViewBox.y);
742
- }
743
- function correctViewBoxScalePath(pathNode, scaleFactorSvgViewBox) {
744
- var path = createPathElement(pathNode.getAttribute('d'), scaleFactorSvgViewBox);
745
- var d = getPathStringFromPathElement(path);
746
- pathNode.setAttribute('d', d);
747
- }
748
- function correctViewBoxScalePolygon(polygonNode, scaleFactorSvgViewBox) {
749
- var polygon = createPolygonElement(polygonNode.getAttribute('points'), scaleFactorSvgViewBox);
750
- polygonNode.setAttribute('points', polygon.points);
751
- }
752
- function correctViewBoxScaleRectangle(rect, scaleFactorSvgViewBox) {
753
- var xAttr = rect.getAttribute('x');
754
- if (!xAttr) xAttr = 0;
755
- var yAttr = rect.getAttribute('y');
756
- if (!yAttr) yAttr = 0;
757
- var widthAttr = rect.getAttribute('width');
758
- var heightAttr = rect.getAttribute('height');
759
- rect.setAttribute('x', parseFloat(xAttr) * scaleFactorSvgViewBox.x);
760
- rect.setAttribute('y', parseFloat(yAttr) * scaleFactorSvgViewBox.y);
761
- rect.setAttribute('width', parseFloat(widthAttr) * scaleFactorSvgViewBox.x);
762
- rect.setAttribute('height', parseFloat(heightAttr) * scaleFactorSvgViewBox.y);
763
- }
764
-
765
- /*
766
- Wird aufgerufen, wenn die Gr��e des SVG ge�ndert werden soll.
767
- Es berechnet die neuen Gr��en der Stretch Areas
768
- Ruft fixXMLObject() auf, worauf hin, die Koordinaten der Einzelnen Elemente (rect, line, path) des SVG angepasst werden
769
- Wird eine zu kleine Breite oder H�he eingegeben, wird der Eingabe einfach die minimale Breite / H�he �bergeben
770
- newWidth and newHeigth h�ngt vom Wert in OLT_OLF ab. Ist die OLT, so wird der Wert zum Anpassen der
771
- Olt �bergeben und umgekehrt.
772
- */
773
- function resizeXml(newWidth, newHeight, OLT_OLF, callback) {
774
- var currentWidth = OLT_OLF == 'OLT' ? widthOLT : widthOLF;
775
- var currentHeight = OLT_OLF == 'OLT' ? heightOLT : heightOLF;
776
- if (!useglobalSvgScale && SAV[0] && newHeight != currentHeight) {
777
- if (OLT_OLF == 'OLT') {
778
- heightOLT = newHeight;
779
- } else {
780
- heightOLF = newHeight;
781
- }
782
- var deltaY = round(newHeight - currentHeight);
783
- var newY = 0;
784
- for (var i = 0; i < SAV.length; i++) {
785
- SAV[i].setAttribute('y', round(parseFloat(SAV[i].getAttribute('y')) + newY));
786
- SAV[i].setAttribute('height', round(deltaY * ratioSAV[i]));
787
- newY += round(deltaY * ratioSAV[i]);
788
- }
789
- fixXMLObject(root, 'SAV', OLT_OLF);
790
- }
791
-
792
- //resize only if width has changed or if there is a SAH
793
- if (!useglobalSvgScale && newWidth != currentWidth && SAH[0]) {
794
- if (OLT_OLF == 'OLT') {
795
- widthOLT = newWidth;
796
- } else {
797
- widthOLF = newWidth;
798
- }
799
- var deltaX = round(newWidth - currentWidth);
800
- var newX = 0; //if i change the width of a SAH, i have to fix the position of the following SAH
801
- for (var i = 0; i < SAH.length; i++) {
802
- if (OLT_OLF == 'OLT') {
803
- SAH[i].setAttribute('x', round(parseFloat(SAH[i].getAttribute('x')) + newX));
804
- newX += round(deltaX * ratioSAH[i]);
805
- }
806
- SAH[i].setAttribute('width', round(deltaX * ratioSAH[i]));
807
- }
808
- fixXMLObject(root, 'SAH', OLT_OLF);
809
- }
810
- var doScale = false;
811
- if (useglobalSvgScale && newHeight != currentHeight) {
812
- globalScaleFactorHeight = newHeight / currentHeight;
813
- doScale = true;
814
- if (OLT_OLF == 'OLT') {
815
- heightOLT = newHeight;
816
- } else {
817
- heightOLF = newHeight;
818
- }
819
- }
820
- if (useglobalSvgScale && newWidth != currentWidth) {
821
- globalScaleFactorWidth = newWidth / currentWidth;
822
- doScale = true;
823
- if (OLT_OLF == 'OLT') {
824
- widthOLT = newWidth;
825
- } else {
826
- widthOLF = newWidth;
827
- }
828
- }
829
- if (doScale) {
830
- fixXMLObject(root, 'GLOBAL_SCALE', OLT_OLF);
831
- }
832
- callback();
833
- }
834
-
835
- /*
836
- Diese Methode geht nun rekursiv alle Elemente des Xml Dokuments durch und passt die Koordinaten den neuen Stretch Areas an.
837
- Neben dem aktuellen Element wird noch eine Weitere Variable SA �bergeben. Sie beinhaltet entweder den Wert "SAH" oder "SAV".
838
- Je nach Eingabe werden entweder die Methoden bzg der Horizontalen doer vertikalen Stretch Areas aufgerufen.
839
- Weiterer �bergabeparameter ist VI. Die Werte die in SAH oder SAV stehen, sind abh�ngig davon, ob man gerade die OLT oder OLF
840
- �ndern will. Je nachdem was man gerade �ndern will, wird der andere Fall ignoriert.
841
- */
842
- function fixXMLObject(parent, SA, VI) {
843
- //If fixing the OLT, ignore the OLF and VIF || if fixing OLF, ignore OLT and VIT
844
- var VIToIgnore;
845
- var OLToIgnore;
846
- if (VI == 'OLT') {
847
- VIToIgnore = 'VIF';
848
- OLToIgnore = 'OLF';
849
- } else {
850
- VIToIgnore = 'VIT';
851
- OLToIgnore = 'OLT';
852
- }
853
- var children = parent.children;
854
- for (var i = 0; i < children.length; i++) {
855
- if (children[i].getAttribute('id') != VIToIgnore && children[i].getAttribute('id') != OLToIgnore) {
856
- switch (children[i].localName) {
857
- case 'g':
858
- break;
859
- case 'rect':
860
- if (!children[i].hasAttribute('id') || children[i].getAttribute('id').substring(0, 3) != 'SAV' && children[i].getAttribute('id').substring(0, 3) != 'SAH') {
861
- parent.replaceChild(fixRectangle(children[i], SA), children[i]);
862
- }
863
- break;
864
- case 'path':
865
- var path = createPathElement(children[i].getAttribute('d'));
866
- var d = fixPath(path, SA);
867
- children[i].setAttribute('d', d);
868
- break;
869
- case 'line':
870
- if (children[i].hasAttribute('id') && children[i].getAttribute('id').substring(0, 2) == 'AV') {
871
- if (VI == 'OLT') {
872
- parent.replaceChild(fixLine(children[i], SA), children[i]);
873
- }
874
- } else {
875
- parent.replaceChild(fixLine(children[i], SA), children[i]);
876
- }
877
- break;
878
- case 'polygon':
879
- case 'polyline':
880
- var polygon = createPolygonElement(children[i].getAttribute('points'));
881
- var points = fixPolygon(polygon, SA);
882
- children[i].setAttribute('points', points);
883
- break;
884
- case 'image':
885
- fixImage(children[i], SA);
886
- break;
887
- }
888
- fixXMLObject(children[i], SA, VI);
889
- }
890
- }
891
- }
892
- /*
893
- Berechnet die Gr��e des Bildelementes neu, wobei in SA drin steht, ob gerade die Breite oder H�he gerichtet wird
894
- */
895
- function fixImage(image, SA) {
896
- image.setAttribute('preserveAspectRatio', 'none');
897
- if (SA == 'SAH') {
898
- var imageWidth = parseInt(image.getAttribute('width'), 10);
899
- var deltaWidth = newWidthOLT / origOLTWidth; //Faktor, um den den die Breite des Image verg��ert oder verkleinert wird
900
-
901
- imageWidth = Math.round(imageWidth * deltaWidth);
902
- image.setAttribute('width', imageWidth + 'px');
903
- } else if (SA == 'SAV') {
904
- var imageHeight = parseInt(image.getAttribute('height'), 10);
905
- var deltaHeight = newHeightOLT / origOLTHeight; //Faktor, um den den die H�he des Image verg��ert oder verkleinert wird
906
-
907
- imageHeight = Math.round(imageHeight * deltaHeight);
908
- image.setAttribute('height', imageHeight + 'px');
909
- }
910
- }
911
-
912
- /*
913
- Berechnet die Koordinaten eines <line> Elementes neu
914
- */
915
- function fixLine(line, SA) {
916
- var x1;
917
- var y1;
918
- var x2;
919
- var y2;
920
- if (SA == 'SAH') {
921
- for (var i = 0; i < SAH.length; i++) {
922
- x1 = parseFloat(line.getAttribute('x1'));
923
- x2 = parseFloat(line.getAttribute('x2'));
924
- var saXBegin = parseFloat(SAH[i].getAttribute('x'));
925
- var saXEnd = round(saXBegin + parseFloat(SAH[i].getAttribute('width')));
926
- scaleLineX(x1, x2, saXBegin, saXEnd);
927
- }
928
- } else if (SA == 'SAV') {
929
- for (var i = 0; i < SAV.length; i++) {
930
- y1 = parseFloat(line.getAttribute('y1'));
931
- y2 = parseFloat(line.getAttribute('y2'));
932
- var saYBegin = parseFloat(SAV[i].getAttribute('y'));
933
- var saYEnd = round(saYBegin + parseFloat(SAV[i].getAttribute('height')));
934
- scaleLineY(y1, y2, saYBegin, saYEnd);
935
- }
936
- } else if (SA == 'GLOBAL_SCALE') {
937
- x1 = parseFloat(line.getAttribute('x1'));
938
- x2 = parseFloat(line.getAttribute('x2'));
939
- y1 = parseFloat(line.getAttribute('y1'));
940
- y2 = parseFloat(line.getAttribute('y2'));
941
- line.setAttribute('x1', round(x1 * globalScaleFactorWidth));
942
- line.setAttribute('x2', round(x2 * globalScaleFactorWidth));
943
- line.setAttribute('y1', round(y1 * globalScaleFactorHeight));
944
- line.setAttribute('y2', round(y2 * globalScaleFactorHeight));
945
- }
946
- //Passt die Linie bei horizontalen Strech Areas an
947
- function scaleLineX(x1, x2, saXBegin, saXEnd) {
948
- if (x1 > saXBegin) {
949
- line.setAttribute('x1', round(x1 + (saXEnd - saXBegin)));
950
- line.setAttribute('x2', round(x2 + (saXEnd - saXBegin)));
951
- } else if (x1 < saXBegin && x2 > saXBegin) {
952
- line.setAttribute('x2', round(x2 + (saXEnd - saXBegin)));
953
- }
954
- }
955
-
956
- //Passt die Linie bei vertikalen Strech Areas an
957
- function scaleLineY(y1, y2, saYBegin, saYEnd) {
958
- if (y1 > saYBegin) {
959
- line.setAttribute('y1', round(y1 + (saYEnd - saYBegin)));
960
- line.setAttribute('y2', round(y2 + (saYEnd - saYBegin)));
961
- } else if (y1 < saYBegin && y2 > saYBegin) {
962
- line.setAttribute('y2', round(y2 + (saYEnd - saYBegin)));
963
- }
964
- }
965
- return line;
966
- }
967
- /*
968
- Berechnet die Koordinaten f�r das Polygon neu. Polygon ist ein Array aus Punkten mit jeweils zwei Koordinaten
969
- */
970
- function fixPolygon(polygon, SA) {
971
- if (SA == 'SAH') {
972
- for (var j = 0; j < SAH.length; j++) {
973
- var saXBegin = parseFloat(SAH[j].getAttribute('x'));
974
- var saXEnd = round(saXBegin + parseFloat(SAH[j].getAttribute('width')));
975
- for (var i = 0; i < polygon.points.length; i++) {
976
- if (polygon.points[i].x > saXBegin) {
977
- polygon.points[i].x += saXEnd - saXBegin;
978
- }
979
- }
980
- }
981
- } else if (SA == 'SAV') {
982
- for (var j = 0; j < SAV.length; j++) {
983
- var saYBegin = parseFloat(SAV[j].getAttribute('y'));
984
- var saYEnd = round(saYBegin + parseFloat(SAV[j].getAttribute('height')));
985
- for (var i = 0; i < polygon.points.length; i++) {
986
- if (polygon.points[i].y > saYBegin) {
987
- polygon.points[i].y += saYEnd - saYBegin;
988
- }
989
- }
990
- }
991
- } else if (SA == 'GLOBAL_SCALE') {
992
- for (var i = 0; i < polygon.points.length; i++) {
993
- polygon.points[i].x = polygon.points[i].x * globalScaleFactorWidth;
994
- polygon.points[i].y = polygon.points[i].y * globalScaleFactorHeight;
995
- }
996
- }
997
- var points = '';
998
- //nun m�ssen die Punkte wieder zu einem String zusammengesetzt werden
999
- for (var i = 0; i < polygon.points.length; i++) {
1000
- points += polygon.points[i].x + ',' + polygon.points[i].y + ' ';
1001
- }
1002
- return points;
1003
- }
1004
-
1005
- /*
1006
- Berechnet die Koordinaten eines Dreieckes neu
1007
- */
1008
- function fixRectangle(rect, SA) {
1009
- if (SA == 'SAH') {
1010
- for (var i = 0; i < SAH.length; i++) {
1011
- var rectXBegin = parseFloat(rect.getAttribute('x'));
1012
- var rectXEnd = round(rectXBegin + parseFloat(rect.getAttribute('width')));
1013
- var saXBegin = parseFloat(SAH[i].getAttribute('x'));
1014
- var saXEnd = round(saXBegin + parseFloat(SAH[i].getAttribute('width')));
1015
- scaleRectX(rectXBegin, rectXEnd, saXBegin, saXEnd);
1016
- }
1017
- } else if (SA == 'SAV') {
1018
- for (var i = 0; i < SAV.length; i++) {
1019
- var saYBegin = parseFloat(SAV[i].getAttribute('y'));
1020
- var saYEnd = round(saYBegin + parseFloat(SAV[i].getAttribute('height')));
1021
- var rectYBegin = parseFloat(rect.getAttribute('y'));
1022
- var rectYEnd = round(rectYBegin + parseFloat(rect.getAttribute('height')));
1023
- scaleRectY(rectYBegin, rectYEnd, saYBegin, saYEnd);
1024
- }
1025
- } else if (SA == 'GLOBAL_SCALE') {
1026
- var rectX = parseFloat(rect.getAttribute('x'));
1027
- var rectWidth = parseFloat(rect.getAttribute('width'));
1028
- var rectY = parseFloat(rect.getAttribute('y'));
1029
- var rectHeight = parseFloat(rect.getAttribute('height'));
1030
- rect.setAttribute('x', round(rectX * globalScaleFactorWidth));
1031
- rect.setAttribute('width', round(rectWidth * globalScaleFactorWidth));
1032
- rect.setAttribute('y', round(rectY * globalScaleFactorHeight));
1033
- rect.setAttribute('height', round(rectHeight * globalScaleFactorHeight));
1034
- }
1035
-
1036
- //Skaliert das Dreieck anhand einer bestimten horizontalen Stretch Area
1037
- function scaleRectX(rectXBegin, rectXEnd, saXBegin, saXEnd) {
1038
- //1. Fall -> Begin des rect befindet sich links von SA, ende hinter begin von SA und vor ende von SA
1039
- //2. Fall -> SA befindet sich genau im Bereich von rect
1040
- if (rectXBegin <= saXBegin && rectXEnd >= saXBegin) {
1041
- rect.setAttribute('width', round(rectXEnd - rectXBegin + (saXEnd - saXBegin)));
1042
- }
1043
- //3. Fall -> rect ist komplett rechts
1044
- else if (rectXBegin > saXBegin) {
1045
- rect.setAttribute('x', round(rectXBegin + (saXEnd - saXBegin)));
1046
- }
1047
- }
1048
-
1049
- //Skaliert das Dreieck entlang einer vertikalen Stretch Area
1050
- function scaleRectY(rectYBegin, rectYEnd, saYBegin, saYEnd) {
1051
- //2. Fall -> SA befindet sich genau im Bereich von rect
1052
- if (rectYBegin <= saYBegin && rectYEnd >= saYBegin) {
1053
- rect.setAttribute('height', round(rectYEnd - rectYBegin + (saYEnd - saYBegin)));
1054
- }
1055
- //3. Fall -> rect ist komplett rechts
1056
- else if (rectYBegin > saYBegin) {
1057
- rect.setAttribute('y', round(rectYBegin + (saYEnd - saYBegin)));
1058
- }
1059
- }
1060
- return rect;
1061
- }
1062
-
1063
- /*
1064
- Berechnet die Koordinaten eines <path> Elementes neu
1065
- */
1066
- function fixPath(path, SA) {
1067
- if (SA == 'SAH') {
1068
- for (var j = 0; j < SAH.length; j++) {
1069
- var saXBegin = parseFloat(SAH[j].getAttribute('x'));
1070
- var saXEnd = round(saXBegin + parseFloat(SAH[j].getAttribute('width')));
1071
- var lastX; //Speichert die letzte x Koordinate ab.
1072
-
1073
- for (var i = 0; i < path.elements.length; i++) {
1074
- switch (path.elements[i].command) {
1075
- case 'M':
1076
- case 'L':
1077
- case 'H':
1078
- lastX = path.elements[i].parameter[0];
1079
- if (path.elements[i].parameter[0] > saXBegin) {
1080
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] + (saXEnd - saXBegin));
1081
- }
1082
- break;
1083
- case 'm': //LEA zu �ndern---------------------------------------------
1084
- case 'l':
1085
- case 'h':
1086
- var help = path.elements[i].parameter[0];
1087
- if (help >= 0 && lastX < saXBegin && lastX + path.elements[i].parameter[0] > saXBegin) {
1088
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] + (saXEnd - saXBegin));
1089
- } else if (help < 0 && lastX >= saXBegin && lastX + path.elements[i].parameter[0] < saXBegin) {
1090
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] - (saXEnd - saXBegin));
1091
- }
1092
- lastX += help;
1093
- break;
1094
- case 'C':
1095
- lastX = path.elements[i].parameter[4];
1096
- if (path.elements[i].parameter[4] > saXBegin) {
1097
- path.elements[i].parameter[4] = round(path.elements[i].parameter[4] + (saXEnd - saXBegin));
1098
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] + (saXEnd - saXBegin));
1099
- path.elements[i].parameter[2] = round(path.elements[i].parameter[2] + (saXEnd - saXBegin));
1100
- }
1101
- break;
1102
- case 'c':
1103
- var help = path.elements[i].parameter[4];
1104
- if (lastX < saXBegin && path.elements[i].parameter[4] + lastX > saXBegin) {
1105
- path.elements[i].parameter[4] = round(path.elements[i].parameter[4] + (saXEnd - saXBegin));
1106
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] + (saXEnd - saXBegin));
1107
- path.elements[i].parameter[2] = round(path.elements[i].parameter[2] + (saXEnd - saXBegin));
1108
- } else if (help < 0 && lastX >= saXBegin && lastX + path.elements[i].parameter[0] < saXBegin) {
1109
- path.elements[i].parameter[4] = round(path.elements[i].parameter[4] + (saXEnd - saXBegin));
1110
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] + (saXEnd - saXBegin));
1111
- path.elements[i].parameter[2] = round(path.elements[i].parameter[2] + (saXEnd - saXBegin));
1112
- }
1113
- lastX += help;
1114
- break;
1115
- case 'S':
1116
- lastX = path.elements[i].parameter[2];
1117
- if (path.elements[i].parameter[2] > saXBegin) {
1118
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] + (saXEnd - saXBegin));
1119
- path.elements[i].parameter[2] = round(path.elements[i].parameter[2] + (saXEnd - saXBegin));
1120
- }
1121
- break;
1122
- case 's':
1123
- var help = path.elements[i].parameter[2];
1124
- if (lastX < saXBegin && path.elements[i].parameter[2] + lastX > saXBegin) {
1125
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] + (saXEnd - saXBegin));
1126
- path.elements[i].parameter[2] = round(path.elements[i].parameter[2] + (saXEnd - saXBegin));
1127
- } else if (help < 0 && lastX >= saXBegin && lastX + path.elements[i].parameter[0] < saXBegin) {
1128
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] - (saXEnd - saXBegin));
1129
- path.elements[i].parameter[2] = round(path.elements[i].parameter[2] - (saXEnd - saXBegin));
1130
- }
1131
- lastX += help;
1132
- break;
1133
- }
1134
- }
1135
- }
1136
- } else if (SA == 'SAV') {
1137
- for (var j = 0; j < SAV.length; j++) {
1138
- var saYBegin = parseFloat(SAV[j].getAttribute('y'));
1139
- var saYEnd = round(saYBegin + parseFloat(SAV[j].getAttribute('height')));
1140
- var lastY;
1141
- for (var i = 0; i < path.elements.length; i++) {
1142
- switch (path.elements[i].command) {
1143
- case 'M':
1144
- case 'L':
1145
- lastY = path.elements[i].parameter[1];
1146
- if (path.elements[i].parameter[1] > saYBegin) {
1147
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] + (saYEnd - saYBegin));
1148
- }
1149
- break;
1150
- case 'm':
1151
- case 'l':
1152
- var help = path.elements[i].parameter[1];
1153
- if (lastY < saYBegin && path.elements[i].parameter[1] + lastY > saYBegin) {
1154
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] + (saYEnd - saYBegin));
1155
- } else if (help < 0 && lastY >= saYBegin && lastY + path.elements[i].parameter[1] < saYBegin) {
1156
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] - (saYEnd - saYBegin));
1157
- }
1158
- lastY += help;
1159
- break;
1160
- case 'V':
1161
- lastY = path.elements[i].parameter[0];
1162
- if (path.elements[i].parameter[0] > saYBegin) {
1163
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] + (saYEnd - saYBegin));
1164
- }
1165
- break;
1166
- case 'v':
1167
- var help = path.elements[i].parameter[0];
1168
- if (lastY < saYBegin && path.elements[i].parameter[0] + lastY > saYBegin) {
1169
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] + (saYEnd - saYBegin));
1170
- } else if (help < 0 && lastY >= saYBegin && lastY + path.elements[i].parameter[0] < saYBegin) {
1171
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] - (saYEnd - saYBegin));
1172
- }
1173
- lastY += help;
1174
- break;
1175
- case 'C':
1176
- lastY = path.elements[i].parameter[5];
1177
- if (path.elements[i].parameter[5] > saYBegin) {
1178
- path.elements[i].parameter[5] = round(path.elements[i].parameter[5] + (saYEnd - saYBegin));
1179
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] + (saYEnd - saYBegin));
1180
- path.elements[i].parameter[3] = round(path.elements[i].parameter[3] + (saYEnd - saYBegin));
1181
- }
1182
- break;
1183
- case 'c':
1184
- var help = path.elements[i].parameter[5];
1185
- if (lastY < saYBegin && path.elements[i].parameter[5] + lastY > saYBegin) {
1186
- path.elements[i].parameter[5] = round(path.elements[i].parameter[5] + (saYEnd - saYBegin));
1187
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] + (saYEnd - saYBegin));
1188
- path.elements[i].parameter[3] = round(path.elements[i].parameter[3] + (saYEnd - saYBegin));
1189
- } else if (help < 0 && lastY >= saYBegin && lastY + path.elements[i].parameter[0] < saYBegin) {
1190
- path.elements[i].parameter[5] = round(path.elements[i].parameter[5] - (saYEnd - saYBegin));
1191
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] - (saYEnd - saYBegin));
1192
- path.elements[i].parameter[3] = round(path.elements[i].parameter[3] - (saYEnd - saYBegin));
1193
- }
1194
- lastY += help;
1195
- break;
1196
- case 'S':
1197
- lastY = path.elements[i].parameter[3];
1198
- if (path.elements[i].parameter[3] > saYBegin) {
1199
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] + (saYEnd - saYBegin));
1200
- path.elements[i].parameter[3] = round(path.elements[i].parameter[3] + (saYEnd - saYBegin));
1201
- }
1202
- break;
1203
- case 's':
1204
- var help = path.elements[i].parameter[3];
1205
- if (lastY < saYBegin && path.elements[i].parameter[3] + lastY > saYBegin) {
1206
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] + (saYEnd - saYBegin));
1207
- path.elements[i].parameter[3] = round(path.elements[i].parameter[3] + (saYEnd - saYBegin));
1208
- } else if (help < 0 && lastY >= saYBegin && lastY + path.elements[i].parameter[0] < saYBegin) {
1209
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] - (saYEnd - saYBegin));
1210
- path.elements[i].parameter[3] = round(path.elements[i].parameter[3] - (saYEnd - saYBegin));
1211
- }
1212
- lastY += help;
1213
- break;
1214
- }
1215
- }
1216
- }
1217
- } else if (SA == 'GLOBAL_SCALE') {
1218
- for (var i = 0; i < path.elements.length; i++) {
1219
- switch (path.elements[i].command) {
1220
- case 'M':
1221
- case 'm':
1222
- case 'l':
1223
- case 'L':
1224
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] * globalScaleFactorWidth);
1225
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] * globalScaleFactorHeight);
1226
- break;
1227
- case 'v':
1228
- case 'V':
1229
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] * globalScaleFactorHeight);
1230
- break;
1231
- case 'h':
1232
- case 'H':
1233
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] * globalScaleFactorWidth);
1234
- break;
1235
- case 'C':
1236
- case 'c':
1237
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] * globalScaleFactorWidth);
1238
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] * globalScaleFactorHeight);
1239
- path.elements[i].parameter[2] = round(path.elements[i].parameter[2] * globalScaleFactorWidth);
1240
- path.elements[i].parameter[3] = round(path.elements[i].parameter[3] * globalScaleFactorHeight);
1241
- path.elements[i].parameter[4] = round(path.elements[i].parameter[4] * globalScaleFactorWidth);
1242
- path.elements[i].parameter[5] = round(path.elements[i].parameter[5] * globalScaleFactorHeight);
1243
- break;
1244
- case 'S':
1245
- case 's':
1246
- path.elements[i].parameter[0] = round(path.elements[i].parameter[0] * globalScaleFactorWidth);
1247
- path.elements[i].parameter[1] = round(path.elements[i].parameter[1] * globalScaleFactorHeight);
1248
- path.elements[i].parameter[2] = round(path.elements[i].parameter[2] * globalScaleFactorWidth);
1249
- path.elements[i].parameter[3] = round(path.elements[i].parameter[3] * globalScaleFactorHeight);
1250
- break;
1251
- }
1252
- }
1253
- }
1254
- return getPathStringFromPathElement(path);
1255
- }
1256
- function getPathStringFromPathElement(path) {
1257
- //Nun muss d wieder hergestellt werden
1258
- var d = '';
1259
- for (var i = 0; i < path.elements.length; i++) {
1260
- d += path.elements[i].command;
1261
- if (path.elements[i].command != 'z') {
1262
- for (var a = 0; a < path.elements[i].parameter.length; a++) {
1263
- d += path.elements[i].parameter[a];
1264
- if (a != path.elements[i].parameter.length - 1) {
1265
- d += ',';
1266
- }
1267
- }
1268
- }
1269
- }
1270
- return d;
1271
- }
1272
- /*
1273
- Die ViewBox zum Anzeigen des SVG wird auf die richtige Gr��e gebracht
1274
- */
1275
- function fixViewBox(root, svgMinBorderXVal, svgMinBorderYVal) {
1276
- var viewBox = '';
1277
- var maxWidth = startWidthOLF + widthOLF > startWidthOLT + widthOLT ? startWidthOLF + widthOLF : startWidthOLT + widthOLT;
1278
- var maxHeight = startHeightOLF + heightOLF > startHeightOLT + heightOLT ? startHeightOLF + heightOLF : startHeightOLT + heightOLT;
1279
- root.setAttribute('height', (Math.round(maxHeight * 100) / 100).toString());
1280
- root.setAttribute('width', (Math.round(maxWidth * 100) / 100).toString());
1281
- svgMinBorderXVal = Math.round(svgMinBorderXVal * 100.0) / 100.0;
1282
- svgMinBorderYVal = Math.round(svgMinBorderYVal * 100.0) / 100.0;
1283
-
1284
- //check if there exist x and y.
1285
- if (root.hasAttribute('x') && root.hasAttribute('y')) {
1286
- viewBox = Number.parseFloat(root.getAttribute('x').substring(0, root.getAttribute('x').length - 2)) + svgMinBorderXVal + ' ' + (Number.parseFloat(root.getAttribute('y').substring(0, root.getAttribute('y').length - 2)) + svgMinBorderYVal) + ' ' + Math.round(maxWidth * 100) / 100 + ' ' + Math.round(maxHeight * 100) / 100;
1287
- } else {
1288
- var oldViewBox = root.getAttribute('viewBox');
1289
- var pieces = oldViewBox.split(' ');
1290
- viewBox = Number.parseFloat(pieces[0]) + svgMinBorderXVal + ' ' + (Number.parseFloat(pieces[1]) + svgMinBorderYVal);
1291
- if (SAH[0]) {
1292
- //Viewbox muss nur ge�ndert werden, wenn es Stretch areas gibt
1293
- viewBox = viewBox + ' ' + Math.round(maxWidth * 100) / 100;
1294
- } else {
1295
- //Gibt es keine Stretch ares, dann wird nur width und height angepasst, aber nicht die Viewbox. Es wird nur skaliert.
1296
- viewBox = viewBox + ' ' + pieces[2];
1297
- }
1298
- if (SAV[0]) {
1299
- viewBox = viewBox + ' ' + Math.round(maxHeight * 100) / 100;
1300
- } else {
1301
- viewBox = viewBox + ' ' + pieces[3];
1302
- }
1303
- }
1304
- var enableBackGround = 'new ' + viewBox;
1305
- root.setAttribute('x', svgMinBorderXVal);
1306
- root.setAttribute('y', svgMinBorderYVal);
1307
- root.setAttribute('viewBox', viewBox);
1308
- root.setAttribute('enable-background', enableBackGround);
1309
- root.setAttribute('style', 'enable-background:new ' + viewBox + ';');
1310
- return root;
1311
- }
1312
-
1313
- /*
1314
- Bekommt das d Attribut eines <path> Elementes �bergeben, welches die Koordinateninformationen beinhaltet
1315
- Diese Methode liest die Koordinaten heraus und erstellt jeweils einen Punkt f�r jede einzelne Koordinaten.
1316
- Besitzt dann die Variable elements, in der die ganzen Punkte gespeichert sind.
1317
- Ein PUnkt besteht immer aus einem Befehl und den jeweiligen Parametern.
1318
- */
1319
-
1320
- function createPolygonElement(polygonString, scaleFactorSvgViewBox) {
1321
- var xKoordBool = true;
1322
- var xKoord = '';
1323
- var yKoord = '';
1324
- var _points = [];
1325
- var ret = {};
1326
- var separaterChar = polygonString.includes(',') ? ',' : polygonString.includes(' ') ? ' ' : ',';
1327
- polygonString = polygonString.trimEnd().trimStart();
1328
- for (var i = 0; i < polygonString.length; i++) {
1329
- var character = polygonString.charAt(i);
1330
- if (!xKoordBool && character == ' ') {
1331
- if (xKoord != '') {
1332
- _points.push(createPoint(xKoord, yKoord));
1333
- xKoord = '';
1334
- yKoord = '';
1335
- xKoordBool = true;
1336
- }
1337
- } else if (character == separaterChar) {
1338
- xKoordBool = false;
1339
- } else {
1340
- if (xKoordBool) {
1341
- xKoord += character;
1342
- } else {
1343
- yKoord += character;
1344
- }
1345
- }
1346
- }
1347
- if (xKoord != '') {
1348
- if (scaleFactorSvgViewBox && (scaleFactorSvgViewBox.x != 1 || scaleFactorSvgViewBox.y != 1)) {
1349
- _points.push(createPoint(xKoord, yKoord) * scaleFactorSvgViewBox);
1350
- } else {
1351
- _points.push(createPoint(xKoord, yKoord));
1352
- }
1353
- }
1354
- ret.points = _points;
1355
- function createPoint(_x, _y) {
1356
- var point = {};
1357
- point.x = parseFloat(_x);
1358
- point.y = parseFloat(_y);
1359
- return point;
1360
- }
1361
- return ret;
1362
- }
1363
- function createPathElement(d, correctViewBoxScale) {
1364
- /*---------------------------------------------------------------
1365
-
1366
- Lea -> Man muss bei den ueberpruefungen if(number[anzParam]) auf if(number[anzParam] != null) aendern
1367
- Der Grund liegt darin, da es stellen in d geben kann, wo viele aufeinanderfolgende Leerzeichen sind.
1368
- Nach dem ersten leerzeichen wird der Eintrag in number[anzParam] in eine Zahl umgewandelt.
1369
- Wenn dann weitere Leerzeichen kommen, will ich wissen, ob in if(number[anzParam]) noch etwas drinnen steht.
1370
- Das tut es zwar, aber wenn die Zahl 0 drinnensteht wird sie f�lschlicherwei�e als 0 interpretiert.
1371
- Ich springe in das if also nicht hinein, obwohl etwas drinnen w�re.
1372
- ------------------------------------------------------------------*/
1373
-
1374
- var points = [];
1375
- var command;
1376
- var number = [];
1377
- var anzParam = 0;
1378
- var ret = {};
1379
- d = d == null ? '' : String(d).trim();
1380
- if (d === '') {
1381
- ret.elements = [];
1382
- return ret;
1383
- }
1384
- for (var i = 0; i < d.length; i++) {
1385
- var character = d.charAt(i);
1386
- // falls ein leerzeichen direkt nach einem commandLetter folgt soll dieses zeichen übersprungen werden
1387
- if (character == ' ' && i - 1 > 0 && isLetter(d.charAt(i - 1))) {
1388
- continue;
1389
- }
1390
- if (character != ' ' && (!isNaN(character) || character == '.' || character == '-')) {
1391
- if (number[anzParam] != null && character == '-') {
1392
- number[anzParam] = parseFloat(number[anzParam]);
1393
- anzParam++;
1394
- number[anzParam] = character;
1395
- } else if (number[anzParam] != null) {
1396
- number[anzParam] += character;
1397
- } else {
1398
- number[anzParam] = character;
1399
- }
1400
- } else {
1401
- if (character == ',' || character == ' ') {
1402
- if (number[anzParam] != null) {
1403
- number[anzParam] = parseFloat(number[anzParam]);
1404
- }
1405
- if (!isNaN(d.charAt(i + 1)) && d.charAt(i + 1) != ' ') {
1406
- anzParam++;
1407
- }
1408
- } else if (character != ' ' && character != '.' && character != '-') {
1409
- //Es handelt sich um einen buchstaben
1410
-
1411
- if (command == null) {
1412
- // die erste zahl wird eingelesen
1413
- command = character;
1414
- } else {
1415
- if (number[anzParam] != null) {
1416
- number[anzParam] = parseFloat(number[anzParam]);
1417
- checkForSkippedLiterals(correctViewBoxScale);
1418
- if (character == 'z') {
1419
- points.push(createPoint('z', null));
1420
- }
1421
- }
1422
- command = character;
1423
- number = [];
1424
- anzParam = 0;
1425
- }
1426
- }
1427
- }
1428
- }
1429
- if (d.charAt(d.length - 1) != 'z') {
1430
- checkForSkippedLiterals(correctViewBoxScale);
1431
- }
1432
- function isLetter(str) {
1433
- return str.length === 1 && str.match(/[a-z]/i);
1434
- }
1435
-
1436
- //Diese Funktion untersucht, ob aus Platzgr�nden Zeichen weggelassen wurden.
1437
- //Denn beim Path kann man, um platz zu sparen, sollten zwei h aufeinander folgen, das zweite h weglassen
1438
- function checkForSkippedLiterals(correctViewBoxScale) {
1439
- var deltaParameter = 0;
1440
- switch (command) {
1441
- case 'M':
1442
- case 'm':
1443
- case 'L':
1444
- case 'l':
1445
- deltaParameter = 2;
1446
- break;
1447
- case 'H':
1448
- case 'h':
1449
- case 'V':
1450
- case 'v':
1451
- deltaParameter = 1;
1452
- break;
1453
- case 'C':
1454
- case 'c':
1455
- deltaParameter = 6;
1456
- break;
1457
- case 'S':
1458
- case 's':
1459
- deltaParameter = 4;
1460
- break;
1461
- default:
1462
- LOG$2.warn('[SVGUtils] ccCheckStretchAreas: svg path command: ' + command + ' unknown; path d: ' + d + (svgSourceUrl != null && svgSourceUrl !== '' ? '; svg url: ' + svgSourceUrl : ''));
1463
- return;
1464
- }
1465
- for (var a = 0; a < number.length; a = a + deltaParameter) {
1466
- var help = [];
1467
- for (var h = 0; h < deltaParameter; h++) {
1468
- help.push(number[a + h]);
1469
- }
1470
- points.push(createPoint(command, help, correctViewBoxScale));
1471
- }
1472
- }
1473
-
1474
- //Repr�sentiert einen Punkt f�r ein pathElement.
1475
- function createPoint(com, number, correctViewBoxScale) {
1476
- var point = {};
1477
- point.command = com; //Wie zum Beispiel
1478
- point.parameter = number;
1479
- if (correctViewBoxScale && (correctViewBoxScale.x != 1 || correctViewBoxScale.y != 1)) {
1480
- switch (point.command) {
1481
- case 'M':
1482
- case 'm':
1483
- case 'L':
1484
- case 'l':
1485
- point.parameter[0] = point.parameter[0] * correctViewBoxScale.x;
1486
- point.parameter[1] = point.parameter[1] * correctViewBoxScale.y;
1487
- break;
1488
- case 'H':
1489
- case 'h':
1490
- point.parameter[0] = point.parameter[0] * correctViewBoxScale.x;
1491
- break;
1492
- case 'V':
1493
- case 'v':
1494
- point.parameter[0] = point.parameter[0] * correctViewBoxScale.y;
1495
- break;
1496
- case 'C':
1497
- case 'c':
1498
- point.parameter[0] = point.parameter[0] * correctViewBoxScale.x;
1499
- point.parameter[1] = point.parameter[1] * correctViewBoxScale.y;
1500
- point.parameter[2] = point.parameter[2] * correctViewBoxScale.x;
1501
- point.parameter[3] = point.parameter[3] * correctViewBoxScale.y;
1502
- point.parameter[4] = point.parameter[4] * correctViewBoxScale.x;
1503
- point.parameter[5] = point.parameter[5] * correctViewBoxScale.y;
1504
- break;
1505
- case 'S':
1506
- case 's':
1507
- point.parameter[0] = point.parameter[0] * correctViewBoxScale.x;
1508
- point.parameter[1] = point.parameter[1] * correctViewBoxScale.y;
1509
- point.parameter[2] = point.parameter[2] * correctViewBoxScale.x;
1510
- point.parameter[3] = point.parameter[3] * correctViewBoxScale.y;
1511
- break;
1512
- }
1513
- }
1514
- return point;
1515
- }
1516
- ret.elements = points;
1517
- return ret;
1518
- }
1519
-
1520
- //Die Elemente in SAV und SAH m�ssen entweder nach x oder y aufsteigend sortiert sein
1521
- function sortSA() {
1522
- //Sortiere SAH
1523
- for (var j = 0; j < SAH.length; j++) {
1524
- var minpos = j;
1525
- for (var i = j + 1; i < SAH.length; i++) {
1526
- if (parseFloat(SAH[i].getAttribute('x')) < parseFloat(SAH[minpos].getAttribute('x'))) {
1527
- minpos = i;
1528
- }
1529
- }
1530
- if (minpos > j) {
1531
- var help = SAH[j];
1532
- SAH[j] = SAH[minpos];
1533
- SAH[minpos] = help;
1534
- }
1535
- }
1536
-
1537
- //Sortiere SAV
1538
- for (var j = 0; j < SAV.length; j++) {
1539
- var minpos = j;
1540
- for (var i = j + 1; i < SAV.length; i++) {
1541
- if (parseFloat(SAV[i].getAttribute('y')) < parseFloat(SAV[minpos].getAttribute('y'))) {
1542
- minpos = i;
1543
- }
1544
- }
1545
- if (minpos > j) {
1546
- var help = SAV[j];
1547
- SAV[j] = SAV[minpos];
1548
- SAV[minpos] = help;
1549
- }
1550
- }
1551
- }
1552
-
1553
- //Ermittelt die Verh�ltnisse zwischen den einzelnen StrechAreas
1554
- function calcRatioSA(sahWidth, savHeight) {
1555
- if (sahWidth > 0) {
1556
- for (var i = 0; i < SAH.length; i++) {
1557
- ratioSAH[i] = parseFloat(SAH[i].getAttribute('width')) / sahWidth;
1558
- }
1559
- }
1560
- if (savHeight > 0) {
1561
- for (var i = 0; i < SAV.length; i++) {
1562
- ratioSAV[i] = parseFloat(SAV[i].getAttribute('height')) / savHeight;
1563
- }
1564
- }
1565
- }
1566
-
1567
- //Setzt Breite bzw. H�he der Strech Areas auf 0
1568
- function clearSA() {
1569
- for (var i = 0; i < SAH.length; i++) {
1570
- SAH[i].setAttribute('width', '0');
1571
- }
1572
- for (var i = 0; i < SAV.length; i++) {
1573
- SAV[i].setAttribute('height', '0');
1574
- }
1575
- }
1576
-
1577
- //Rundet auf drei Nachkommastellen
1578
- function round(zahl) {
1579
- return Math.round(zahl * 1000) / 1000;
1580
- }
1581
- return {
1582
- heightOLF: heightOLF,
1583
- widthOLF: widthOLF,
1584
- heightOLT: heightOLT,
1585
- widthOLT: widthOLT
1586
- };
1587
- }
1588
- }]);
1589
- }();
1590
-
1591
- var LOG$1 = DivaUtils.initLog('Planner', 'WEB-PLANNER-LOGIC');
1592
- /**
1593
- * This class is used like a service.
1594
- * It handles different actions on planner Elements and its docking Points
1595
- */
1596
- var DockingPointHandler = /*#__PURE__*/function () {
1597
- function DockingPointHandler() {
1598
- _classCallCheck(this, DockingPointHandler);
1599
- }
1600
- return _createClass(DockingPointHandler, [{
1601
- key: "getRotOfDP",
1602
- value:
1603
- /**
1604
- * This function returns the rotation of a vector that is specified by two positions in the 2 Dim Space
1605
- * The rotation is 0 when the Vector is pointing downwards (pos1 is directly above pos2). The rotation is then computed clockwise
1606
- * The result is resturned in degrees
1607
- * @param pos1 2 Dimensional position
1608
- * @param pos2 2 Dimensional position
1609
- */
1610
- function getRotOfDP(pos1, pos2) {
1611
- var directionVec = Vector2.getDirection(pos2, pos1);
1612
- var refDirection = new Vector2(0, 1);
1613
- var smallAngle = Vector2.angleDeg(refDirection, directionVec);
1614
- if (directionVec.x > 0) {
1615
- return 360 - smallAngle;
1616
- }
1617
- return smallAngle;
1618
- }
1619
- }, {
1620
- key: "getReferenceDPType",
1621
- value: function getReferenceDPType(dpType) {
1622
- switch (dpType) {
1623
- case 'AVR':
1624
- return 'AVL';
1625
- case 'AVL':
1626
- return 'AVR';
1627
- case 'AVO':
1628
- return 'AVU';
1629
- case 'AVU':
1630
- return 'AVO';
1631
- case 'AVC':
1632
- return 'AVC';
1633
- case 'AVS':
1634
- return 'AVN';
1635
- case 'AVN':
1636
- return 'AVS';
1637
- }
1638
- return '';
1639
- }
1640
- }, {
1641
- key: "sortDockingPoints",
1642
- value: function sortDockingPoints(dir, dockingPoints) {
1643
- if (dir == 'LEFT_TO_RIGHT') return dockingPoints.sort(function (a, b) {
1644
- return a.LocalWorldPos.x > b.LocalWorldPos.x ? 1 : -1;
1645
- });else return dockingPoints.sort(function (a, b) {
1646
- return a.LocalWorldPos.x < b.LocalWorldPos.x ? 1 : -1;
1647
- });
1648
- }
1649
- /**
1650
- * Check if the docking Points Filter match for the two elements.
1651
- * @param plannerElement1
1652
- * @param plannerElement2
1653
- */
1654
- }, {
1655
- key: "checkDPAVLFilterDoMatch",
1656
- value: function checkDPAVLFilterDoMatch(plannerElement1, plannerElement2) {
1657
- var avrFilter1 = plannerElement1.FilterAVR;
1658
- var avlFilter2 = plannerElement2.FilterAVL;
1659
-
1660
- // An empty filter on either side means "no connector restriction" -> always dockable.
1661
- if (avlFilter2.length == 0 || avrFilter1.length == 0) return true;
1662
- for (var i = 0; i < avrFilter1.length; i++) {
1663
- for (var j = 0; j < avlFilter2.length; j++) {
1664
- if (avrFilter1[i] == avlFilter2[j]) {
1665
- return true;
1666
- }
1667
- }
1668
- }
1669
- return false;
1670
- }
1671
- }, {
1672
- key: "checkDPAVRFilterDoMatch",
1673
- value: function checkDPAVRFilterDoMatch(plannerElement1, plannerElement2) {
1674
- var avlFilter1 = plannerElement1.FilterAVL;
1675
- var avrFilter2 = plannerElement2.FilterAVR;
1676
-
1677
- // An empty filter on either side means "no connector restriction" -> always dockable.
1678
- if (avlFilter1.length == 0 || avrFilter2.length == 0) return true;
1679
- for (var i = 0; i < avlFilter1.length; i++) {
1680
- for (var j = 0; j < avrFilter2.length; j++) {
1681
- if (avlFilter1[i] == avrFilter2[j]) {
1682
- return true;
1683
- }
1684
- }
1685
- }
1686
- return false;
1687
- }
1688
-
1689
- /**
1690
- * This function checks if two docking Points can be docked
1691
- */
1692
- }, {
1693
- key: "checkDPsDoMatch",
1694
- value: function checkDPsDoMatch(dp1, dp2, sourcePlannerElement, targetElement) {
1695
- var avrDockable = this.checkDPAVRFilterDoMatch(sourcePlannerElement, targetElement);
1696
- var avlDockable = this.checkDPAVLFilterDoMatch(sourcePlannerElement, targetElement);
1697
- var refDPType = this.getReferenceDPType(dp1.Type);
1698
- if (refDPType == 'AVL' && !avlDockable) {
1699
- return false;
1700
- }
1701
- if (refDPType == 'AVR' && !avrDockable) {
1702
- return false;
1703
- }
1704
- if (dp2.Type != refDPType) {
1705
- return false;
1706
- }
1707
- if (dp1.IsDocking || dp2.IsDocking) {
1708
- return false;
1709
- }
1710
- if (!dp1.IgnoreLayer || !dp2.IgnoreLayer) {
1711
- var doCheckLayer = true;
1712
- if (dp1.PlannerConfig.ignoreLayerAVC && (dp1.Type == 'AVC' || dp2.Type == 'AVC')) {
1713
- doCheckLayer = false;
1714
- }
1715
- if (dp1.PlannerConfig.ignoreLayerAVOAVU && (dp1.Type == 'AVO' || dp1.Type == 'AVU') && (dp2.Type == 'AVO' || dp2.Type == 'AVU')) {
1716
- doCheckLayer = false;
1717
- }
1718
- if (dp1.PlannerConfig.ignoreLayerAVNAVS && (dp1.Type == 'AVN' || dp1.Type == 'AVS') && (dp2.Type == 'AVN' || dp2.Type == 'AVS')) {
1719
- doCheckLayer = false;
1720
- }
1721
- //Check layer
1722
- if (doCheckLayer && dp2.Layer == dp1.Layer) {
1723
- return false;
1724
- }
1725
- }
1726
- if (!dp1.PlannerConfig.ignoreDockingNumber && dp1.HasNumber && dp2.HasNumber && dp1.Number != dp2.Number) {
1727
- return false;
1728
- }
1729
- return true;
1730
- }
1731
-
1732
- /**
1733
- * This function assumes that the two docking points are matching and can be docked
1734
- * @param dp1
1735
- * @param dp2
1736
- */
1737
- }, {
1738
- key: "doDock",
1739
- value: function doDock(dp1, dp2, elemId1, elemId2) {
1740
- dp1.doDock(dp2, elemId2);
1741
- dp2.doDock(dp1, elemId1);
1742
- }
1743
- /*
1744
- This function inits all docking points of a planner Element Data. The information of the docking Points is currently loaded from the SVG Loader
1745
- catalogCodex indicates the catalogCodex of the plannerElement
1746
- */
1747
- }, {
1748
- key: "initDockingPointsFromSvg",
1749
- value: function initDockingPointsFromSvg(plannerElement, dockingVectors, minBorderSVG, plannerconfig) {
1750
- plannerElement.saveCurrentDPState();
1751
- this.removeDockingPointRelations(plannerElement);
1752
- plannerElement.clearAllDockingPoints();
1753
- for (var i = 0; i < dockingVectors.length; i++) {
1754
- var dockingVector = dockingVectors[i];
1755
- var localWorldPos1 = new Vector2((dockingVector.x1 - minBorderSVG.svgMinXVal) / DivaUtils.UnitRecalc, (dockingVector.y1 - minBorderSVG.svgMinYVal) / DivaUtils.UnitRecalc);
1756
- var localWorldPos2 = new Vector2((dockingVector.x2 - minBorderSVG.svgMinXVal) / DivaUtils.UnitRecalc, (dockingVector.y2 - minBorderSVG.svgMinYVal) / DivaUtils.UnitRecalc);
1757
- var angle = this.getRotOfDP(localWorldPos1, localWorldPos2);
1758
- var dockingfilter = undefined;
1759
- if (dockingVector.dockingType == 'AVL') dockingfilter = plannerElement.getFilterAVL();else if (dockingVector.dockingType == 'AVR') dockingfilter = plannerElement.getFilterAVR();
1760
- var dockingPoint = new DockingPoint(plannerElement.getElementId(), dockingVector.dockingType, dockingVector.dockingName, new Vector3(localWorldPos1.x, 0, localWorldPos1.y), angle, plannerElement.Layer, plannerconfig, dockingfilter);
1761
- plannerElement.addDockingPoint(dockingPoint);
1762
- }
1763
- }
1764
-
1765
- /**
1766
- * This function removes all docking Point relations from the Element .
1767
- * It removes them as well in the docked elements.
1768
- * This function is used when deleting a plannerElement
1769
- * @param plannerElement
1770
- */
1771
- }, {
1772
- key: "removeDockingPointRelations",
1773
- value: function removeDockingPointRelations(plannerElement) {
1774
- var dockingPoints = plannerElement.getDockingPoints();
1775
- for (var i = 0; i < dockingPoints.length; i++) {
1776
- var dockingPoint = dockingPoints[i];
1777
- if (dockingPoint.IsDocking) {
1778
- var refDockingPoint = dockingPoint.OnDP;
1779
- refDockingPoint.undock();
1780
- dockingPoint.undock();
1781
- }
1782
- }
1783
- }
1784
- /**
1785
- * This function removes all docking Point relations with the type from the Element .
1786
- * It removes them as well in the docked elements.
1787
- * This function is used when deleting a plannerElement
1788
- * @param plannerElement
1789
- * @param dpTypeList The Type of the docking Point like AVL or AVR
1790
- */
1791
- }, {
1792
- key: "removeDockingPointRelationsByType",
1793
- value: function removeDockingPointRelationsByType(plannerElement, dpTypeList) {
1794
- var undockedFromElements = [];
1795
- var dockingPoints = plannerElement.getDockingPoints();
1796
- for (var i = 0; i < dockingPoints.length; i++) {
1797
- var dockingPoint = dockingPoints[i];
1798
- if (dpTypeList.indexOf(dockingPoint.Type) > -1 && dockingPoint.IsDocking) {
1799
- var refDockingPoint = dockingPoint.OnDP;
1800
- undockedFromElements.push(refDockingPoint.ElementId);
1801
- refDockingPoint.undock();
1802
- dockingPoint.undock();
1803
- }
1804
- }
1805
- return undockedFromElements;
1806
- }
1807
- /**
1808
- * This function returns a list of docking points that are dockable to the source Planner Element. The function only returns docking Points that lay within a specific area.
1809
- *
1810
- * @param sourceElement
1811
- * @param targetElements
1812
- * @param autoDockingDistance //gibt die distance an in der er automatisch snappen muss. Infinity _> Docke überall. 0 Docke nie
1813
- * @returns saves dockable dockingpoints per type with the distance
1814
- */
1815
- }, {
1816
- key: "searchDockableElementsInArea",
1817
- value: function searchDockableElementsInArea(sourceElement, targetElements, autoDockingDistance // Wenn 0, dann dockt es immer
1818
- ) {
1819
- var sourceDPs = sourceElement.getAllDockingPoints();
1820
- var dockableDPPairs = new Map(); //saves all dockable dockingpoints per type
1821
- for (var i = 0; i < targetElements.length; i++) {
1822
- var targetElement = targetElements[i];
1823
- if (sourceElement.getElementId() == targetElement.getElementId()) continue;
1824
- for (var di = 0; di < sourceDPs.length; di++) {
1825
- var sourceDP = sourceDPs[di];
1826
- var targetType = this.getReferenceDPType(sourceDP.Type);
1827
- var targetDPS = targetElement.getFreeDockingPointsByType(targetType);
1828
- for (var j = 0; j < targetDPS.length; j++) {
1829
- var targetDP = targetDPS[j];
1830
- if (this.checkDPsDoMatch(sourceDP, targetDP, sourceElement, targetElement)) {
1831
- var worldPosSourceDP = sourceElement.getWorldPosOfDP(sourceDP.DpId);
1832
- var worldPosTargetDP = targetElement.getWorldPosOfDP(targetDP.DpId);
1833
- var distance = Math.sqrt(Math.pow(worldPosSourceDP.x - worldPosTargetDP.x, 2) + Math.pow(worldPosSourceDP.z - worldPosTargetDP.z, 2));
1834
- if (autoDockingDistance != 0 && (autoDockingDistance == Infinity || distance < autoDockingDistance)) {
1835
- // dockableDPs.set();
1836
- //TODO Lea - ich muss mir das paar merken!!!! Hier habe ich ein potentielles Paar gefunden.
1837
- //Pro dockingPoint merke dir den mit dem kleinsten Abstand
1838
- if (dockableDPPairs.has(sourceDP.Type)) {
1839
- if (distance < dockableDPPairs.get(sourceDP.Type).distance) {
1840
- dockableDPPairs.set(sourceDP.Type, {
1841
- sourceDP: sourceDP,
1842
- targetDP: targetDP,
1843
- distance: distance
1844
- });
1845
- }
1846
- } else {
1847
- dockableDPPairs.set(sourceDP.Type, {
1848
- sourceDP: sourceDP,
1849
- targetDP: targetDP,
1850
- distance: distance
1851
- });
1852
- }
1853
- }
1854
- }
1855
- }
1856
- }
1857
- }
1858
- return dockableDPPairs;
1859
- }
1860
-
1861
- /**
1862
- * This function tries to dock an element sourcePlannerElement to one element in the targetElements
1863
- * @param sourcePlannerElement the element that must be docked
1864
- * @param sourceDPType the type of the element that must be docked
1865
- * @param targetElements the target Element on which the element should be docked
1866
- * the function returns true when the Element is docked
1867
- */
1868
- }, {
1869
- key: "tryDockElement",
1870
- value: function tryDockElement(sourcePlannerElement, sourceDPType, targetElements) {
1871
- var dockingPoints = sourcePlannerElement.getDockingPointsByType(sourceDPType);
1872
- if (!dockingPoints) {
1873
- return false;
1874
- }
1875
- var refDPType = this.getReferenceDPType(sourceDPType);
1876
- for (var i = 0; i < targetElements.length; i++) {
1877
- var targetElement = targetElements[i];
1878
- if (targetElement.ElementId == sourcePlannerElement.ElementId) continue;
1879
-
1880
- //this if denies an element (with is not an accessorie) to dock to an accessorie of another element
1881
- if (!sourcePlannerElement.IsAccessoire && targetElement.IsAccessoire && targetElement.getParentElementId() != sourcePlannerElement.getElementId()) continue;
1882
- if (sourcePlannerElement.IsAccessoire && !targetElement.getAccessoires().includes(sourcePlannerElement.ArticleCodex)) continue;
1883
- var targetDockingPoints = targetElement.getDockingPointsByType(refDPType);
1884
- if (sourcePlannerElement.getIsDockedAccessoire() || sourcePlannerElement.IsAccessoire) {
1885
- targetDockingPoints = this.sortDockingPoints('LEFT_TO_RIGHT', targetDockingPoints);
1886
- }
1887
- if (!targetDockingPoints) continue; //Das target Element hat keinen solchen dp
1888
- for (var j = 0; j < targetDockingPoints.length; j++) {
1889
- var targetDockingPoint = targetDockingPoints[j];
1890
- for (var dpNr = 0; dpNr < dockingPoints.length; dpNr++) {
1891
- var dockingPoint = dockingPoints[dpNr];
1892
- if (this.checkDPsDoMatch(dockingPoint, targetDockingPoint, sourcePlannerElement, targetElement)) {
1893
- //The two docking Points match
1894
- this.doDock(dockingPoint, targetDockingPoint, sourcePlannerElement.ElementId, targetElement.ElementId); //Passender Docking Point wurde gefunden. Nun erfolgt das docken
1895
- return dockingPoint;
1896
- }
1897
- }
1898
- }
1899
- }
1900
- return false;
1901
- }
1902
-
1903
- /**
1904
- * This function tries to dock an element sourcePlannerElement to the targetElement and a specific DockingPoint of the targetElement
1905
- * @param sourcePlannerElement the element that must be docked
1906
- * @param sourceDPType the type of the element that must be docked
1907
- * @param targetElements the target Element on which the element should be docked
1908
- * the function returns true when the Element is docked
1909
- */
1910
- }, {
1911
- key: "tryDockElementToDP",
1912
- value: function tryDockElementToDP(sourcePlannerElement, targetElement, targetDP) {
1913
- var sourceDPType = this.getReferenceDPType(targetDP.Type);
1914
- var dockingPoints = sourcePlannerElement.getFreeDockingPointsByType(sourceDPType);
1915
- if (!dockingPoints) {
1916
- return false;
1917
- }
1918
- for (var i = 0; i < dockingPoints.length; i++) {
1919
- if (this.checkDPsDoMatch(dockingPoints[i], targetDP, sourcePlannerElement, targetElement)) {
1920
- //The two docking Points match
1921
- this.doDock(dockingPoints[i], targetDP, sourcePlannerElement.ElementId, targetElement.ElementId); //Passender Docking Point wurde gefunden. Nun erfolgt das docken
1922
- return dockingPoints[i];
1923
- }
1924
- }
1925
- return false;
1926
- }
1927
-
1928
- /**
1929
- * This function tries to dock an element sourcePlannerElement to the targetElement and a specific DockingPoint of the targetElement
1930
- * @param sourcePlannerElement the element that must be docked
1931
- * @param sourceDPType the type of the element that must be docked
1932
- * @param sourceDP The source DP
1933
- * @param targetElements the target Element on which the element should be docked
1934
- * the function returns true when the Element is docked
1935
- */
1936
- }, {
1937
- key: "tryDockElementDPToDP",
1938
- value: function tryDockElementDPToDP(sourcePlannerElement, targetElement, sourceDP, targetDP) {
1939
- if (this.checkDPsDoMatch(sourceDP, targetDP, sourcePlannerElement, targetElement)) {
1940
- this.doDock(sourceDP, targetDP, sourcePlannerElement.getElementId(), targetElement.getElementId());
1941
- return true;
1942
- }
1943
- return false;
1944
- }
1945
-
1946
- /**
1947
- * this function updates the dockingPoint relations. It is called after reloading one or more SVGs (StretchAreas / SVG Tausch) . For example when changing the ArmRests of
1948
- * two docking sofas - the old docking information is saved in the plannerElement. The new DockingPoints must be updated based on the previous docking information.
1949
- * @param plannerElements
1950
- * @returns returns the list of all Articles that have lost their dockingPoint relations
1951
- */
1952
- }, {
1953
- key: "updateDockingRelations",
1954
- value: function updateDockingRelations(plannerElements) {
1955
- //Sort the elements by pos nr
1956
- var sortedPlannerElementsbyPosNr = [];
1957
- var accElems = [];
1958
- plannerElements.forEach(function (plannerElement, elementId) {
1959
- if (!plannerElement.IsDockedAccessoire) {
1960
- sortedPlannerElementsbyPosNr[plannerElement.PosNr - 1] = plannerElement;
1961
- } else {
1962
- accElems.push(plannerElement);
1963
- }
1964
- });
1965
- sortedPlannerElementsbyPosNr = sortedPlannerElementsbyPosNr.concat(accElems);
1966
- var elementsLostDockingRelation = [];
1967
- //nun laufe alle Elemente durch und schaue, ob sie vorher zu einem DP gedockt haben. Diese müssen nun auch gedockt werden, falls möglich
1968
- for (var i = 0; i < sortedPlannerElementsbyPosNr.length; i++) {
1969
- if (sortedPlannerElementsbyPosNr[i]) {
1970
- var element = sortedPlannerElementsbyPosNr[i];
1971
- var tempDPs = element.getTempDockingPoints();
1972
- for (var j = 0; j < tempDPs.length; j++) {
1973
- var tempDP = tempDPs[j];
1974
- if (tempDP.IsDocking && tempDP.OnElementId) {
1975
- //Check if tempDP still exists.
1976
- var dp = element.getDockingPointById(tempDP.DpId);
1977
- if (dp == undefined) {
1978
- //In this case the dockingPoint does not exist anymore
1979
- var targetElement = plannerElements.get(tempDP.OnElementId);
1980
-
1981
- //In some cases like hasena fjord it can happen - that the Dockingpoint nummer has changed.
1982
- //First kopfteil and rahmen have docked using AVO_1 and AVU_1. When changing the size of the bedframe the docking Points get changed AVO_2 and AVU_2.
1983
- //In this case -look if both elements only have 1 dockingpoint of the same Type - and then redock them.
1984
-
1985
- var dockingPointsCurElement = element.getFreeDockingPointsByType(tempDP.Type);
1986
- if (dockingPointsCurElement.length == 1) {
1987
- var dockingPointsToDockElement = targetElement === null || targetElement === void 0 ? void 0 : targetElement.getFreeDockingPointsByType(this.getReferenceDPType(tempDP.Type));
1988
- if ((dockingPointsToDockElement === null || dockingPointsToDockElement === void 0 ? void 0 : dockingPointsToDockElement.length) == 1) {
1989
- this.tryDockElementDPToDP(element, targetElement, dockingPointsCurElement[0], dockingPointsToDockElement[0]);
1990
- continue;
1991
- }
1992
- }
1993
- if (targetElement) elementsLostDockingRelation.push(targetElement);
1994
- continue;
1995
- }
1996
- //Suche den targetDP und schaue ob sie schon docken
1997
- if (plannerElements.has(tempDP.OnElementId)) {
1998
- var _targetElement = plannerElements.get(tempDP.OnElementId);
1999
- var targetDP = _targetElement === null || _targetElement === void 0 ? void 0 : _targetElement.getDockingPointById(tempDP.OnDP.DpId);
2000
- this.tryDockElementDPToDP(element, _targetElement, dp, targetDP);
2001
- }
2002
- }
2003
- }
2004
- }
2005
- }
2006
- for (var i = 0; i < sortedPlannerElementsbyPosNr.length; i++) {
2007
- if (sortedPlannerElementsbyPosNr[i]) sortedPlannerElementsbyPosNr[i].clearTempDockingPoints();
2008
- }
2009
- return elementsLostDockingRelation;
2010
- }
2011
- /**
2012
- * This function is used when initialiazing a planning. In the old planner we do only know that a docking point of a specific kind (AVL) of the source Element docks with any docking Point of the targetPlannerElement.
2013
- * If there is only one target docking Point in the reference object - dock to that. However, when looking at AVOs, there can be that the target element has two AVUs. In this case search the docking point that is the neares.
2014
- * @param sourcePlannerElement
2015
- * @param targetPlannerElement
2016
- * @param sourceDPType The type of the dockingPoint
2017
- */
2018
- }, {
2019
- key: "initDockingPointRelationByArea",
2020
- value: function initDockingPointRelationByArea(sourcePlannerElement, targetPlannerElement, sourceDPType) {
2021
- // let refDPTarget = this.getReferenceDPType(sourceDPType);
2022
- var freeSourceDPs = sourcePlannerElement.getFreeDockingPointsByType(sourceDPType);
2023
- //let allTargetDPs = targetPlannerElement.getDockingPointsByType(refDPTarget);
2024
-
2025
- if (freeSourceDPs.length > 0) {
2026
- var allDockingPairs = this.searchDockableElementsInArea(sourcePlannerElement, [targetPlannerElement], Infinity);
2027
- if (allDockingPairs.has(sourceDPType)) {
2028
- var dockingPair = allDockingPairs.get(sourceDPType);
2029
- if (dockingPair) {
2030
- var success = this.tryDockElementDPToDP(sourcePlannerElement, targetPlannerElement, dockingPair.sourceDP, dockingPair.targetDP);
2031
- if (!success) {
2032
- LOG$1.debug('Error when initializing docking Points. Two dockingpoints could not be matched. sourceDP: ' + dockingPair.sourceDP.DpId + '; sourceRlementId: ' + dockingPair.sourceDP.ElementId + '; targetDP: ' + dockingPair.targetDP.DpId + ' targetElemId: ' + dockingPair.targetDP.ElementId);
2033
- }
2034
- }
2035
- }
2036
- }
2037
- }
2038
-
2039
- /**
2040
- * This function returns true if the two elements are docking. False if they are not
2041
- * @param element1
2042
- * @param element2
2043
- */
2044
- }, {
2045
- key: "checkElementsAreDocking",
2046
- value: function checkElementsAreDocking(element1, element2) {
2047
- var allDockingDockingPoints = element1.getDockingDockingPoints();
2048
- for (var i = 0; i < allDockingDockingPoints.length; i++) {
2049
- var dp = allDockingDockingPoints[i];
2050
- if (dp.OnElementId == element2.getElementId()) return true;
2051
- }
2052
- return false;
2053
- }
2054
- }]);
2055
- }();
2056
- var dockingPointHandlerInst = new DockingPointHandler();
2057
-
2058
- var LOG = DivaUtils.initLog('Planner', 'WEB-PLANNER-LOGIC');
2059
- //Diese Klasse dient dazu, die 2D Shapes zu verwalten. Achtung_ Hier wird es aber noch nicht angezeigt
2060
- var PlannerHandler2D = /*#__PURE__*/function () {
2061
- function PlannerHandler2D() {
2062
- _classCallCheck(this, PlannerHandler2D);
2063
- _defineProperty(this, "svgUtils", void 0);
2064
- this.svgUtils = new SVGUtils();
2065
- }
2066
- /**
2067
- * This function computes the collision between two elements.
2068
- * First it computes the collision with the bounding Box. Only if these collide - we compute the collision between the OLF Polygons
2069
- * @param element1
2070
- * @param element2
2071
- */
2072
- return _createClass(PlannerHandler2D, [{
2073
- key: "checkCollision",
2074
- value: function checkCollision(element1, element2, checkCollisionForDifferentLayers) {
2075
- //Do not check Collision
2076
- DivaUtils.startSpanOfApm('PlannerHandler2D checkCollision');
2077
- if (element1.Layer != element2.Layer && (!checkCollisionForDifferentLayers.includes(Number(element1.Layer)) || !checkCollisionForDifferentLayers.includes(Number(element2.Layer)))) return false;
2078
- var bboxPoints1 = element1.getWorld2DBBoxOutline();
2079
- var bboxPoints2 = element2.getWorld2DBBoxOutline();
2080
- var checkCollisionPolygonPolygon = function checkCollisionPolygonPolygon(polyLinePoints1, polyLinePoint2) {
2081
- for (var i = 0; i < polyLinePoints1.length; i++) {
2082
- var start1 = polyLinePoints1[i];
2083
- var end1 = polyLinePoints1[(i + 1) % polyLinePoints1.length];
2084
- for (var j = 0; j < polyLinePoint2.length; j++) {
2085
- var start2 = polyLinePoint2[j];
2086
- var end2 = polyLinePoint2[(j + 1) % polyLinePoint2.length];
2087
- var doCollide = fabric.Intersection.intersectLineLine(new fabric.Point(start1.x, start1.y), new fabric.Point(end1.x, end1.y), new fabric.Point(start2.x, start2.y), new fabric.Point(end2.x, end2.y));
2088
- if (doCollide.status == 'Intersection') {
2089
- return true;
2090
- }
2091
- }
2092
- }
2093
- return false;
2094
- };
2095
-
2096
- /**
2097
- * This function checks if one Polygon is inside the other
2098
- */
2099
- var checkPolygonInsidePolygon = function checkPolygonInsidePolygon(polyLinePoints1, polyLinePoint2) {
2100
- var pointOutsideCount = 0;
2101
- var pointInsideCount = 0;
2102
- for (var i = 0; i < polyLinePoints1.length; i++) {
2103
- var start1 = polyLinePoints1[i];
2104
- var end1 = new Vector2(start1.x + 999999, start1.y);
2105
- var intersectionCount = 0;
2106
- //check if curPoint lies outside or inside the polygon
2107
- for (var j = 0; j < polyLinePoint2.length; j++) {
2108
- var start2 = polyLinePoint2[j];
2109
- var end2 = polyLinePoint2[(j + 1) % polyLinePoint2.length];
2110
- var doCollide = fabric.Intersection.intersectLineLine(new fabric.Point(start1.x, start1.y), new fabric.Point(end1.x, end1.y), new fabric.Point(start2.x, start2.y), new fabric.Point(end2.x, end2.y));
2111
- if (doCollide.status == 'Intersection') intersectionCount++;
2112
- }
2113
- if (intersectionCount % 2 == 0) {
2114
- //Der Punkt lag außerhalb
2115
- pointOutsideCount++;
2116
- } else {
2117
- pointInsideCount++;
2118
- }
2119
- if (pointOutsideCount > 0 && pointInsideCount > 0) return false;
2120
- }
2121
- if (pointOutsideCount > 0 && pointInsideCount > 0) return false;else return pointInsideCount == polyLinePoints1.length;
2122
- };
2123
- if (checkCollisionPolygonPolygon(bboxPoints1, bboxPoints2)) {
2124
- if (!element1.HasOLTPolygon && !element1.HasOLFPolygon) {
2125
- LOG.error(new DivaError('checkCollision PlannerHandler2D - The element with id: ' + element1.getElementId() + ' has no OLT AND no OLF', {
2126
- code: 'WC_0012'
2127
- }));
2128
- DivaUtils.endSpanOfApm('PlannerHandler2D checkCollision');
2129
- return false;
2130
- } else if (!element2.HasOLTPolygon && !element2.HasOLFPolygon) {
2131
- LOG.error(new DivaError('checkCollision PlannerHandler2D - The element with id: ' + element2.getElementId() + ' has no OLT AND no OLF', {
2132
- code: 'WC_0012'
2133
- }));
2134
- DivaUtils.endSpanOfApm('PlannerHandler2D checkCollision');
2135
- return false;
2136
- }
2137
- var detailPolygon1 = element1.HasOLFPolygon ? element1.getOLFPolygonWorldPos() : element1.getOLTPolygonWorldPos();
2138
- var detailPolygon2 = element2.HasOLFPolygon ? element2.getOLFPolygonWorldPos() : element2.getOLTPolygonWorldPos();
2139
- DivaUtils.endSpanOfApm('PlannerHandler2D checkCollision');
2140
- return checkCollisionPolygonPolygon(detailPolygon1, detailPolygon2);
2141
- } else {
2142
- DivaUtils.endSpanOfApm('PlannerHandler2D checkCollision');
2143
- return checkPolygonInsidePolygon(bboxPoints1, bboxPoints2); //wenn sie sich nicht überschneiden untersuche, ob ein Polygon genau innerhalb des anderen liegt
2144
- }
2145
- }
2146
-
2147
- /**
2148
- * This function creates a HTML Canvas Element of the SVg. This canvas is used by the 3D Grid in order to display the Svg as PNG on the ground.
2149
- * Before creating the canvas element, the SVG is parsed to be a PNG.
2150
- * @param plannerElement The planner Element whoes SVGData is used for creating the canvas Element.
2151
- */
2152
- }, {
2153
- key: "caluclatePNGOfSVG",
2154
- value: function caluclatePNGOfSVG(plannerElement) {
2155
- DivaUtils.startSpanOfApm('PlannerHandler2D caluclatePNGOfSVG');
2156
- var canvasHtml = document.createElement('canvas');
2157
- canvasHtml.id = 'helperCanvasConverter';
2158
- var canvas = new fabric.Canvas('helperCanvasConverter');
2159
- canvas.backgroundColor = '#fff';
2160
- canvas.setWidth(DivaUtils.UnitRecalc * plannerElement.getWidthOLT());
2161
- canvas.setHeight(DivaUtils.UnitRecalc * plannerElement.getHeightOLT());
2162
- var shape = plannerElement.getSVGShapeOLT2D();
2163
- canvas.add(shape);
2164
- shape.bringToFront();
2165
- canvas.renderAll();
2166
- var base46Image = canvas.toDataURL({
2167
- format: 'jpeg',
2168
- quality: 1
2169
- });
2170
- plannerElement.SvgDataOLTBase64 = base46Image;
2171
- }
2172
- }, {
2173
- key: "parseSvg",
2174
- value: function parseSvg(plannerElement, svgXml, minBorderSVG, plannerconfig, sizes) {
2175
- var that = this;
2176
- svgXml = this.svgUtils.removeMaskFromSvg(svgXml); //Correct mask attributes
2177
- dockingPointHandlerInst.initDockingPointsFromSvg(plannerElement, this.svgUtils.getDPsInSVG(svgXml), minBorderSVG, plannerconfig);
2178
- var svgXmlOLT = this.svgUtils.removeOLFFromSvg(svgXml);
2179
- var oltPoints = this.svgUtils.getPointOfPoligonById(svgXml, 'OLT');
2180
- if (!(oltPoints !== null && oltPoints !== void 0 && oltPoints.length)) {
2181
- LOG.warn('no olt fount in svg for element' + plannerElement.ArticleCodex + ' with id ' + plannerElement.getElementId());
2182
- }
2183
- plannerElement.OLTPolygon = oltPoints;
2184
- var olf = this.svgUtils.getPointOfPoligonById(svgXml, 'OLF');
2185
- var olfGeoEarly = this.svgUtils.getOLFGeometryFromSvg(svgXml);
2186
- if (olf !== null && olf !== void 0 && olf.length) {
2187
- var _olfGeoEarly$width, _olfGeoEarly$height;
2188
- var olfBBox = this.svgUtils.getBoundingBoxOfPoints(olf);
2189
- // Prefer getOLFGeometryFromSvg for dims - single source of truth, handles split(/\s+/) correctly
2190
- var olfW = (_olfGeoEarly$width = olfGeoEarly === null || olfGeoEarly === void 0 ? void 0 : olfGeoEarly.width) !== null && _olfGeoEarly$width !== void 0 ? _olfGeoEarly$width : olfBBox.width;
2191
- var olfD = (_olfGeoEarly$height = olfGeoEarly === null || olfGeoEarly === void 0 ? void 0 : olfGeoEarly.height) !== null && _olfGeoEarly$height !== void 0 ? _olfGeoEarly$height : olfBBox.height;
2192
- plannerElement.setupOLF(olf, olfW, olfD);
2193
- } else {
2194
- var olfGeo = this.svgUtils.getOLFGeometryFromSvg(svgXml);
2195
- if (olfGeo) {
2196
- var olfRectPoints = [new Vector2(olfGeo.minX, olfGeo.minY), new Vector2(olfGeo.minX + olfGeo.width, olfGeo.minY), new Vector2(olfGeo.minX + olfGeo.width, olfGeo.minY + olfGeo.height), new Vector2(olfGeo.minX, olfGeo.minY + olfGeo.height)];
2197
- plannerElement.setupOLF(olfRectPoints, olfGeo.width, olfGeo.height);
2198
- } else if (sizes !== null && sizes !== void 0 && sizes.heightOLF, sizes !== null && sizes !== void 0 && sizes.widthOLF) {
2199
- plannerElement.setupOLF(olf, sizes === null || sizes === void 0 ? void 0 : sizes.widthOLF, sizes === null || sizes === void 0 ? void 0 : sizes.heightOLF);
2200
- } else {
2201
- plannerElement.clearOLF();
2202
- }
2203
- }
2204
-
2205
- //if we are running in node js dont do fabric stuff
2206
- if (typeof window === 'undefined') return;
2207
- return new Promise(function (resolve, reject) {
2208
- fabric.loadSVGFromString(svgXml, function (objects, options) {
2209
- plannerElement.cleanShapeOLF2D();
2210
- var olfObjects = [];
2211
- var oltTop = 0;
2212
- var oltLeft = 0;
2213
- var oltWidth = 0;
2214
- var oltDepth = 0;
2215
- for (var objNo = 0; objNo < objects.length; objNo++) {
2216
- var object = objects[objNo];
2217
- object.setCoords();
2218
- var objID;
2219
- if (object.id) {
2220
- objID = object.id.toString();
2221
- switch (objID.substring(0, 3)) {
2222
- case 'OLF':
2223
- object.stroke = 'none';
2224
- break;
2225
- case 'OLT':
2226
- object.stroke = 'none';
2227
- oltWidth = object.width;
2228
- oltDepth = object.height;
2229
- break;
2230
- }
2231
- }
2232
- olfObjects.push(object);
2233
- }
2234
- // oltLeft/oltTop/oltWidth/oltDepth from SVG attributes (untransformed) - Fabric values wrong for transformed rects
2235
- var olfGeo = that.svgUtils.getOLFGeometryFromSvg(svgXml);
2236
- var oltGeo = that.svgUtils.getOLTGeometryFromSvg(svgXml);
2237
- if (olfGeo && oltGeo) {
2238
- oltLeft = oltGeo.x - olfGeo.minX;
2239
- oltTop = oltGeo.y - olfGeo.minY;
2240
- oltWidth = oltGeo.width;
2241
- oltDepth = oltGeo.height;
2242
- }
2243
-
2244
- //hier wird definitv fabric.js Element erstellt
2245
- var fabricShapeOLF = fabric.util.groupSVGElements(olfObjects, options);
2246
- fabricShapeOLF.set({
2247
- originX: 'left',
2248
- originY: 'top',
2249
- lockRotation: true,
2250
- hasRotatingPoint: true,
2251
- lockUniScaling: true,
2252
- lockScalingX: true,
2253
- lockScalingY: true,
2254
- scaleX: 1,
2255
- scaleY: 1,
2256
- left: 0,
2257
- top: 0
2258
- });
2259
- if (plannerElement.DoSetWidthFromSVG && fabricShapeOLF.width) plannerElement.WidthFromSVG = fabricShapeOLF.width / DivaUtils.UnitRecalc;
2260
- // since the svg is always top down perspective height in 2D represents depth in 2D planner and 3D
2261
- if (plannerElement.DoSetDepthFromSVG && fabricShapeOLF.height) plannerElement.DepthFromSVG = fabricShapeOLF.height / DivaUtils.UnitRecalc;
2262
- plannerElement.SvgShapeOLF2D = fabricShapeOLF;
2263
- plannerElement.OLTDepth = oltDepth;
2264
- plannerElement.OLTWidth = oltWidth;
2265
- plannerElement.OLTTop = oltTop;
2266
- plannerElement.OLTLeft = oltLeft;
2267
- plannerElement.SvgData = svgXml;
2268
- fabric.loadSVGFromString(svgXmlOLT, function (objectsOLT, optionsOLT) {
2269
- plannerElement.cleanShapeOLT2D();
2270
- if (oltGeo) {
2271
- optionsOLT.width = oltGeo.width;
2272
- optionsOLT.height = oltGeo.height;
2273
- } else {
2274
- for (var objNo = 0; objNo < objects.length; objNo++) {
2275
- var object = objects[objNo];
2276
- var objID;
2277
- if (object.id) {
2278
- objID = object.id.toString();
2279
- if (objID.startsWith('OLT')) {
2280
- optionsOLT.height = object.height;
2281
- optionsOLT.width = object.width;
2282
- break;
2283
- }
2284
- }
2285
- }
2286
- }
2287
- var fabricShapeOLT = fabric.util.groupSVGElements(objectsOLT, optionsOLT);
2288
- fabricShapeOLT.set({
2289
- originX: 'left',
2290
- originY: 'top',
2291
- lockRotation: true,
2292
- hasRotatingPoint: true,
2293
- lockUniScaling: true,
2294
- lockScalingX: true,
2295
- lockScalingY: true,
2296
- scaleX: 1,
2297
- scaleY: 1,
2298
- left: 0,
2299
- top: 0
2300
- });
2301
- plannerElement.SvgShapeOLT2D = fabricShapeOLT;
2302
- that.caluclatePNGOfSVG(plannerElement);
2303
- resolve();
2304
- });
2305
- });
2306
- });
2307
- }
2308
- }, {
2309
- key: "getMinBorderSVG",
2310
- value: function getMinBorderSVG(svgXml) {
2311
- //if we are running in node js dont do fabric stuff
2312
- if (typeof window === 'undefined') return {
2313
- svgMinXVal: 0,
2314
- svgMinYVal: 0
2315
- };
2316
- return new Promise(function (resolve, reject) {
2317
- var svgMinXVal = Number.POSITIVE_INFINITY;
2318
- var svgMinYVal = Number.POSITIVE_INFINITY;
2319
- fabric.loadSVGFromString(svgXml, function (objects, options) {
2320
- var objID;
2321
- for (var objNo = 0; objNo < objects.length; objNo++) {
2322
- var object = objects[objNo];
2323
- if (object.id) objID = object.id.toString();
2324
- if (objID == null || !objID.startsWith('AV')) {
2325
- if (svgMinXVal > object.left) svgMinXVal = object.left;
2326
- if (svgMinYVal > object.top) svgMinYVal = object.top;
2327
- }
2328
- }
2329
- resolve({
2330
- svgMinXVal: svgMinXVal,
2331
- svgMinYVal: svgMinYVal
2332
- });
2333
- });
2334
- });
2335
- }
2336
- /*
2337
- This function is used to load the SVG of the element and set everything up.
2338
- */
2339
- }, {
2340
- key: "loadSVG",
2341
- value: (function () {
2342
- var _loadSVG = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(plannerElement, set) {
2343
- var _this = this;
2344
- var svgFile, svgContentXML, svgContent, result, svgNewWidth, svgNewDepth, sizes, minBoderSVG, svgSourceUrl, correctedContent;
2345
- return _regeneratorRuntime.wrap(function _callee$(_context) {
2346
- while (1) switch (_context.prev = _context.next) {
2347
- case 0:
2348
- svgFile = plannerElement.SvgFileName;
2349
- if (svgFile) {
2350
- _context.next = 3;
2351
- break;
2352
- }
2353
- return _context.abrupt("return", false);
2354
- case 3:
2355
- if (!set.CatalogData.isIDMFormat) {
2356
- _context.next = 9;
2357
- break;
2358
- }
2359
- _context.next = 6;
2360
- return set.api.fetchData(svgFile, {
2361
- method: 'GET',
2362
- config: {},
2363
- data: {}
2364
- });
2365
- case 6:
2366
- svgContentXML = _context.sent;
2367
- _context.next = 16;
2368
- break;
2369
- case 9:
2370
- _context.next = 11;
2371
- return set.api.getDataCache(this.getSVGUrl(svgFile, set.CatalogData.mediaUrl), undefined, set.CatalogData.accountSessionGuid);
2372
- case 11:
2373
- result = _context.sent;
2374
- if (!result.Error) {
2375
- _context.next = 14;
2376
- break;
2377
- }
2378
- throw new Error(result.Error);
2379
- case 14:
2380
- if (result.Result.toLowerCase() == 'success') {
2381
- svgContent = result.Content;
2382
- }
2383
- svgContentXML = DivaUtils.decodeBase64(svgContent);
2384
- case 16:
2385
- if (!svgContentXML) {
2386
- LOG.error(new DivaError('Fehler beim laden des SVGs ', {
2387
- code: 'WC_0009',
2388
- custom: {
2389
- svgFile: svgFile
2390
- }
2391
- }));
2392
- }
2393
- plannerElement.svgBefore = svgContentXML;
2394
- svgNewWidth = plannerElement.Width;
2395
- svgNewDepth = plannerElement.Depth;
2396
- //fix for "kissen" that didnt had a depth but do have a height https://app.asana.com/0/1201426433314773/1201432109700389
2397
- if (svgNewDepth === -1 && plannerElement.Height !== -1) svgNewDepth = plannerElement.Height;
2398
- if (!(svgNewWidth != undefined && svgNewWidth > 0 && svgNewDepth != undefined && svgNewDepth > 0)) {
2399
- _context.next = 34;
2400
- break;
2401
- }
2402
- _context.next = 24;
2403
- return this.getMinBorderSVG(svgContentXML);
2404
- case 24:
2405
- minBoderSVG = _context.sent;
2406
- svgSourceUrl = set.CatalogData.isIDMFormat ? svgFile : "".concat(set.CatalogData.mediaUrl, "pln_").concat(svgFile);
2407
- correctedContent = '';
2408
- _context.next = 29;
2409
- return new Promise(function (resolve, reject) {
2410
- sizes = _this.svgUtils.ccCheckStretchAreas(svgContentXML, svgNewWidth, svgNewDepth, set.CatalogData.useGlobalSVGScale, minBoderSVG.svgMinXVal, minBoderSVG.svgMinYVal, function (_correctedContent) {
2411
- correctedContent = _correctedContent;
2412
- resolve();
2413
- }, svgSourceUrl);
2414
- });
2415
- case 29:
2416
- plannerElement.svgAfter = correctedContent;
2417
- _context.next = 32;
2418
- return this.parseSvg(plannerElement, correctedContent, minBoderSVG, set.CatalogData.getPlannerConfig(), sizes);
2419
- case 32:
2420
- _context.next = 37;
2421
- break;
2422
- case 34:
2423
- plannerElement.svgAfter = svgContentXML;
2424
- _context.next = 37;
2425
- return this.parseSvg(plannerElement, svgContentXML, {
2426
- svgMinXVal: 0,
2427
- svgMinYVal: 0
2428
- }, set.CatalogData.getPlannerConfig());
2429
- case 37:
2430
- return _context.abrupt("return", true);
2431
- case 38:
2432
- case "end":
2433
- return _context.stop();
2434
- }
2435
- }, _callee, this);
2436
- }));
2437
- function loadSVG(_x, _x2) {
2438
- return _loadSVG.apply(this, arguments);
2439
- }
2440
- return loadSVG;
2441
- }())
2442
- }, {
2443
- key: "getSVGUrl",
2444
- value: function getSVGUrl(svgFile, mediaUrl) {
2445
- var url = mediaUrl + 'pln_' + svgFile;
2446
- //Split url
2447
- var index = url.indexOf('/files/');
2448
- url = url.substring(index);
2449
- return 'function=GetFileAsString' + '&fileUrl=' + encodeURIComponent(url);
2450
- }
2451
- }]);
2452
- }();
2453
- var handler2D = new PlannerHandler2D();
2454
-
2455
- export { dockingPointHandlerInst as d, handler2D as h };