redhotmagma-visualization 1.46.2 → 1.46.3
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.
|
@@ -47,6 +47,49 @@ var getRotateValue = function getRotateValue(node) {
|
|
|
47
47
|
}
|
|
48
48
|
return 0;
|
|
49
49
|
};
|
|
50
|
+
var getTranslateValues = function getTranslateValues(node) {
|
|
51
|
+
var transform = node.getAttribute("transform") || "";
|
|
52
|
+
var matches = transform.match(/translate\(([^)]+)\)/);
|
|
53
|
+
if (matches) {
|
|
54
|
+
var _matches$1$split$map3 = matches[1].split(",").map(window.parseFloat),
|
|
55
|
+
_matches$1$split$map4 = _slicedToArray(_matches$1$split$map3, 2),
|
|
56
|
+
x = _matches$1$split$map4[0],
|
|
57
|
+
y = _matches$1$split$map4[1];
|
|
58
|
+
return [x, y || x];
|
|
59
|
+
}
|
|
60
|
+
return [0, 0];
|
|
61
|
+
};
|
|
62
|
+
var getPositionValues = function getPositionValues(node) {
|
|
63
|
+
var x = parseFloat(node.getAttribute("x")) || 0;
|
|
64
|
+
var y = parseFloat(node.getAttribute("y")) || 0;
|
|
65
|
+
return [x, y];
|
|
66
|
+
};
|
|
67
|
+
var getWorldTransformValues = function getWorldTransformValues(node) {
|
|
68
|
+
var _node$parentNode;
|
|
69
|
+
var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
|
70
|
+
translate: [0, 0],
|
|
71
|
+
scale: [1, 1],
|
|
72
|
+
rotate: 0
|
|
73
|
+
};
|
|
74
|
+
var _getScaleValues = getScaleValues(node),
|
|
75
|
+
_getScaleValues2 = _slicedToArray(_getScaleValues, 2),
|
|
76
|
+
sx = _getScaleValues2[0],
|
|
77
|
+
sy = _getScaleValues2[1];
|
|
78
|
+
var _getTranslateValues = getTranslateValues(node),
|
|
79
|
+
_getTranslateValues2 = _slicedToArray(_getTranslateValues, 2),
|
|
80
|
+
tx = _getTranslateValues2[0],
|
|
81
|
+
ty = _getTranslateValues2[1];
|
|
82
|
+
var r = getRotateValue(node);
|
|
83
|
+
values.translate[0] = values.translate[0] * sx + tx;
|
|
84
|
+
values.translate[1] = values.translate[1] * sy + ty;
|
|
85
|
+
values.scale[0] *= sx;
|
|
86
|
+
values.scale[1] *= sy;
|
|
87
|
+
values.rotate += r;
|
|
88
|
+
if ((_node$parentNode = node.parentNode) !== null && _node$parentNode !== void 0 && _node$parentNode.getAttribute) {
|
|
89
|
+
getWorldTransformValues(node.parentNode, values);
|
|
90
|
+
}
|
|
91
|
+
return values;
|
|
92
|
+
};
|
|
50
93
|
var getSizeValues = function getSizeValues(svgNode) {
|
|
51
94
|
return [parseFloat(svgNode.getAttribute("width")) || 0, parseFloat(svgNode.getAttribute("height")) || 0];
|
|
52
95
|
};
|
|
@@ -98,52 +141,51 @@ var svgToImg = /*#__PURE__*/function () {
|
|
|
98
141
|
}();
|
|
99
142
|
var applyOnEmbeddedSvg = /*#__PURE__*/function () {
|
|
100
143
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(imageNode, imageCanvas, ctx, rootSvgElement) {
|
|
101
|
-
var
|
|
144
|
+
var _getSizeValues, _getSizeValues2, rootWidth, canvasWidth, svgToCanvasRatio, worldTransformValues, scaleX, scaleY, size, _createWorkingCanvas3, _createWorkingCanvas4, tmpCanvas, tmpCtx, svgAsString, svgDoc, svgElement, _worldTransformValues, wx, wy, _getPositionValues, _getPositionValues2, px, py, angle;
|
|
102
145
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
103
146
|
while (1) switch (_context2.prev = _context2.next) {
|
|
104
147
|
case 0:
|
|
105
|
-
outermostGroup = findOutermostNode(imageNode, rootSvgElement);
|
|
106
|
-
_getScaleValues = getScaleValues(outermostGroup), _getScaleValues2 = _slicedToArray(_getScaleValues, 2), rootScaleX = _getScaleValues2[0], rootScaleY = _getScaleValues2[1];
|
|
107
|
-
_getScaleValues3 = getScaleValues(imageNode), _getScaleValues4 = _slicedToArray(_getScaleValues3, 2), imgScaleX = _getScaleValues4[0], imgScaleY = _getScaleValues4[1];
|
|
108
148
|
_getSizeValues = getSizeValues(rootSvgElement), _getSizeValues2 = _slicedToArray(_getSizeValues, 1), rootWidth = _getSizeValues2[0];
|
|
109
149
|
canvasWidth = imageCanvas.width;
|
|
110
150
|
svgToCanvasRatio = canvasWidth / rootWidth;
|
|
111
|
-
|
|
112
|
-
|
|
151
|
+
worldTransformValues = getWorldTransformValues(imageNode);
|
|
152
|
+
scaleX = worldTransformValues.scale[0] * svgToCanvasRatio;
|
|
153
|
+
scaleY = worldTransformValues.scale[1] * svgToCanvasRatio;
|
|
113
154
|
size = {
|
|
114
155
|
width: parseFloat(imageNode.getAttribute("width")) * scaleX,
|
|
115
156
|
height: parseFloat(imageNode.getAttribute("height")) * scaleY
|
|
116
157
|
};
|
|
117
158
|
_createWorkingCanvas3 = (0, _createCanvas.createWorkingCanvas)(size), _createWorkingCanvas4 = _slicedToArray(_createWorkingCanvas3, 2), tmpCanvas = _createWorkingCanvas4[0], tmpCtx = _createWorkingCanvas4[1];
|
|
118
|
-
_context2.prev =
|
|
159
|
+
_context2.prev = 8;
|
|
119
160
|
svgAsString = window.atob(getImageSrc(imageNode).substring(SVG_DATA_URL_HDR.length));
|
|
120
161
|
svgDoc = new DOMParser().parseFromString(svgAsString, "image/svg+xml");
|
|
121
162
|
svgElement = svgDoc.getElementsByTagName("svg")[0];
|
|
122
|
-
_context2.next =
|
|
163
|
+
_context2.next = 14;
|
|
123
164
|
return Promise.all(Array.from(svgElement.childNodes).map(applyOnChildNode(tmpCanvas, tmpCtx, svgElement)));
|
|
124
|
-
case
|
|
165
|
+
case 14:
|
|
125
166
|
ctx.save();
|
|
126
167
|
|
|
127
168
|
// apply element transformations
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
angle =
|
|
169
|
+
_worldTransformValues = _slicedToArray(worldTransformValues.translate, 2), wx = _worldTransformValues[0], wy = _worldTransformValues[1];
|
|
170
|
+
_getPositionValues = getPositionValues(imageNode), _getPositionValues2 = _slicedToArray(_getPositionValues, 2), px = _getPositionValues2[0], py = _getPositionValues2[1];
|
|
171
|
+
angle = worldTransformValues.rotate / 180 * Math.PI;
|
|
172
|
+
ctx.translate(wx * svgToCanvasRatio, wy * svgToCanvasRatio);
|
|
131
173
|
ctx.rotate(angle);
|
|
132
|
-
ctx.translate(
|
|
174
|
+
ctx.translate(px * scaleX, py * scaleY);
|
|
133
175
|
ctx.drawImage(tmpCanvas, 0, 0);
|
|
134
176
|
ctx.restore();
|
|
135
|
-
_context2.next =
|
|
177
|
+
_context2.next = 28;
|
|
136
178
|
break;
|
|
137
|
-
case
|
|
138
|
-
_context2.prev =
|
|
139
|
-
_context2.t0 = _context2["catch"](
|
|
179
|
+
case 25:
|
|
180
|
+
_context2.prev = 25;
|
|
181
|
+
_context2.t0 = _context2["catch"](8);
|
|
140
182
|
// eslint-disable-next-line no-console
|
|
141
183
|
console.error("Error during embedded svg image processing!", _context2.t0);
|
|
142
|
-
case
|
|
184
|
+
case 28:
|
|
143
185
|
case "end":
|
|
144
186
|
return _context2.stop();
|
|
145
187
|
}
|
|
146
|
-
}, _callee2, null, [[
|
|
188
|
+
}, _callee2, null, [[8, 25]]);
|
|
147
189
|
}));
|
|
148
190
|
return function applyOnEmbeddedSvg(_x2, _x3, _x4, _x5) {
|
|
149
191
|
return _ref2.apply(this, arguments);
|
|
@@ -275,10 +317,10 @@ var setSvgSize = function setSvgSize(svgElement, _ref4) {
|
|
|
275
317
|
var updateViewGroupScale = function updateViewGroupScale(svgElement, ratio) {
|
|
276
318
|
var viewGroup = svgElement.getElementById("viewGroup");
|
|
277
319
|
if (viewGroup) {
|
|
278
|
-
var
|
|
279
|
-
|
|
280
|
-
sx =
|
|
281
|
-
sy =
|
|
320
|
+
var _getScaleValues3 = getScaleValues(viewGroup),
|
|
321
|
+
_getScaleValues4 = _slicedToArray(_getScaleValues3, 2),
|
|
322
|
+
sx = _getScaleValues4[0],
|
|
323
|
+
sy = _getScaleValues4[1];
|
|
282
324
|
viewGroup.setAttribute("transform", "scale(".concat(sx / ratio, ",").concat(sy / ratio, ")"));
|
|
283
325
|
}
|
|
284
326
|
};
|
|
@@ -321,7 +363,7 @@ var createEffectImg = function () {
|
|
|
321
363
|
var cache = (0, _createCache.createCache)(10);
|
|
322
364
|
return /*#__PURE__*/function () {
|
|
323
365
|
var _createEffectImg = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(svgAsString, srcCanvas) {
|
|
324
|
-
var key, cachedResult, svgDoc, svgElement, _getSizeValues3, _getSizeValues4, cWidth, cHeight, aspectRatio, width, height, _createWorkingCanvas11, _createWorkingCanvas12, imageCanvas, ctx, designerLayer, childNodes, image,
|
|
366
|
+
var key, cachedResult, svgDoc, svgElement, _getSizeValues3, _getSizeValues4, cWidth, cHeight, aspectRatio, width, height, _createWorkingCanvas11, _createWorkingCanvas12, imageCanvas, ctx, designerLayer, childNodes, image, _getScaleValues5, _getScaleValues6, sx, sy, resultImgPromise;
|
|
325
367
|
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
326
368
|
while (1) switch (_context4.prev = _context4.next) {
|
|
327
369
|
case 0:
|
|
@@ -361,7 +403,7 @@ var createEffectImg = function () {
|
|
|
361
403
|
image.width.baseVal.value = width;
|
|
362
404
|
image.height.baseVal.value = height;
|
|
363
405
|
image.href.baseVal = imageCanvas.toDataURL();
|
|
364
|
-
|
|
406
|
+
_getScaleValues5 = getScaleValues(findOutermostNode(designerLayer, svgElement)), _getScaleValues6 = _slicedToArray(_getScaleValues5, 2), sx = _getScaleValues6[0], sy = _getScaleValues6[1];
|
|
365
407
|
image.setAttribute("transform", "scale(".concat(1 / sx, ",").concat(1 / sy, ")"));
|
|
366
408
|
designerLayer.innerHTML = "";
|
|
367
409
|
designerLayer.appendChild(image);
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "redhotmagma-visualization",
|
|
3
|
-
"version": "1.46.
|
|
3
|
+
"version": "1.46.3",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "./index.js",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@babel/polyfill": "^7.12.1",
|
|
9
|
-
"@configuratorware/scripts": "1.46.
|
|
9
|
+
"@configuratorware/scripts": "1.46.3",
|
|
10
10
|
"@tweenjs/tween.js": "^17.6.0",
|
|
11
11
|
"console-polyfill": "^0.3.0",
|
|
12
12
|
"css-element-queries": "^1.2.3",
|
|
@@ -27,6 +27,37 @@ const getRotateValue = node => {
|
|
|
27
27
|
return 0;
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
+
const getTranslateValues = node => {
|
|
31
|
+
const transform = node.getAttribute("transform") || "";
|
|
32
|
+
const matches = transform.match(/translate\(([^)]+)\)/);
|
|
33
|
+
if (matches) {
|
|
34
|
+
const [x, y] = matches[1].split(",").map(window.parseFloat);
|
|
35
|
+
return [x, y || x];
|
|
36
|
+
}
|
|
37
|
+
return [0, 0];
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const getPositionValues = node => {
|
|
41
|
+
const x = parseFloat(node.getAttribute("x")) || 0;
|
|
42
|
+
const y = parseFloat(node.getAttribute("y")) || 0;
|
|
43
|
+
return [x, y];
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const getWorldTransformValues = (node, values = { translate: [0, 0], scale: [1, 1], rotate: 0 }) => {
|
|
47
|
+
const [sx, sy] = getScaleValues(node);
|
|
48
|
+
const [tx, ty] = getTranslateValues(node);
|
|
49
|
+
const r = getRotateValue(node);
|
|
50
|
+
values.translate[0] = values.translate[0] * sx + tx;
|
|
51
|
+
values.translate[1] = values.translate[1] * sy + ty;
|
|
52
|
+
values.scale[0] *= sx;
|
|
53
|
+
values.scale[1] *= sy;
|
|
54
|
+
values.rotate += r;
|
|
55
|
+
if (node.parentNode?.getAttribute) {
|
|
56
|
+
getWorldTransformValues(node.parentNode, values);
|
|
57
|
+
}
|
|
58
|
+
return values;
|
|
59
|
+
};
|
|
60
|
+
|
|
30
61
|
const getSizeValues = svgNode => {
|
|
31
62
|
return [
|
|
32
63
|
parseFloat(svgNode.getAttribute("width")) || 0,
|
|
@@ -66,16 +97,14 @@ const svgToImg = async svgElement => {
|
|
|
66
97
|
};
|
|
67
98
|
|
|
68
99
|
const applyOnEmbeddedSvg = async (imageNode, imageCanvas, ctx, rootSvgElement) => {
|
|
69
|
-
const outermostGroup = findOutermostNode(imageNode, rootSvgElement);
|
|
70
|
-
const [rootScaleX, rootScaleY] = getScaleValues(outermostGroup);
|
|
71
|
-
const [imgScaleX, imgScaleY] = getScaleValues(imageNode);
|
|
72
|
-
|
|
73
100
|
const [rootWidth] = getSizeValues(rootSvgElement);
|
|
74
101
|
const { width: canvasWidth } = imageCanvas;
|
|
75
102
|
const svgToCanvasRatio = canvasWidth / rootWidth;
|
|
76
103
|
|
|
77
|
-
const
|
|
78
|
-
|
|
104
|
+
const worldTransformValues = getWorldTransformValues(imageNode);
|
|
105
|
+
|
|
106
|
+
const scaleX = worldTransformValues.scale[0] * svgToCanvasRatio;
|
|
107
|
+
const scaleY = worldTransformValues.scale[1] * svgToCanvasRatio;
|
|
79
108
|
|
|
80
109
|
const size = {
|
|
81
110
|
width: parseFloat(imageNode.getAttribute("width")) * scaleX,
|
|
@@ -95,12 +124,13 @@ const applyOnEmbeddedSvg = async (imageNode, imageCanvas, ctx, rootSvgElement) =
|
|
|
95
124
|
ctx.save();
|
|
96
125
|
|
|
97
126
|
// apply element transformations
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
const angle = (
|
|
127
|
+
const [wx, wy] = worldTransformValues.translate;
|
|
128
|
+
const [px, py] = getPositionValues(imageNode);
|
|
129
|
+
const angle = (worldTransformValues.rotate / 180) * Math.PI;
|
|
101
130
|
|
|
131
|
+
ctx.translate(wx * svgToCanvasRatio, wy * svgToCanvasRatio);
|
|
102
132
|
ctx.rotate(angle);
|
|
103
|
-
ctx.translate(
|
|
133
|
+
ctx.translate(px * scaleX, py * scaleY);
|
|
104
134
|
|
|
105
135
|
ctx.drawImage(tmpCanvas, 0, 0);
|
|
106
136
|
ctx.restore();
|
|
@@ -114,7 +144,10 @@ const getImageSrc = imageNode =>
|
|
|
114
144
|
imageNode.getAttribute("href") || imageNode.getAttribute("xlink:href");
|
|
115
145
|
|
|
116
146
|
const applyOnChildNode = (imageCanvas, ctx, svgElement) => async node => {
|
|
117
|
-
if (
|
|
147
|
+
if (
|
|
148
|
+
node.nodeType === 3 /** ignore text nodes **/ ||
|
|
149
|
+
node.getAttribute("visibility") === "hidden"
|
|
150
|
+
) {
|
|
118
151
|
return;
|
|
119
152
|
}
|
|
120
153
|
if (node.tagName === "image") {
|