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