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