figureone 1.7.0 → 1.8.0

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/index.js CHANGED
@@ -7167,6 +7167,13 @@ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf
7167
7167
  * @group Misc Figure Element
7168
7168
  */
7169
7169
  var GLObject = /*#__PURE__*/function (_DrawingObject) {
7170
+ // Optional mask textures used by the `textureMap` color mode (one or more).
7171
+ // They share the base texture's coordinates (`a_texcoord`/`v_texcoord`), so
7172
+ // each needs no buffer or mapping of its own - just an id/src and a load
7173
+ // color. Mask i is bound to the shader's u_mask{i} sampler (its uniform name
7174
+ // is precomputed so the draw loop allocates nothing). A mask with an empty
7175
+ // src is a transparent placeholder - an index-preserving no-op slot.
7176
+
7170
7177
  function GLObject(webgl) {
7171
7178
  var _this;
7172
7179
  var vertexShader = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
@@ -7196,6 +7203,7 @@ var GLObject = /*#__PURE__*/function (_DrawingObject) {
7196
7203
  _this.numVertices = 0;
7197
7204
  _this.uniforms = {};
7198
7205
  _this.texture = null;
7206
+ _this.maskTextures = [];
7199
7207
  // this.selectorProgramIndex = this.webgl.getProgram(selectorVertexShader, selectorFragShader);
7200
7208
  _this.initProgram();
7201
7209
  return _this;
@@ -7393,6 +7401,31 @@ var GLObject = /*#__PURE__*/function (_DrawingObject) {
7393
7401
  }
7394
7402
  this.onLoad = onLoad;
7395
7403
  }
7404
+
7405
+ /**
7406
+ * Buffer a mask texture for the `textureMap` color mode. Each call appends a
7407
+ * mask, bound to the next u_mask{i} sampler. Masks share the base texture's
7408
+ * coordinates, so only a source and load color are needed. The default load
7409
+ * color is fully transparent so that, until the mask loads, no region is
7410
+ * recolored and the base texture shows through unchanged.
7411
+ *
7412
+ * An empty `location` registers a transparent placeholder, which keeps the
7413
+ * u_mask{i} indexing aligned with the tint blocks when a caller supplies an
7414
+ * invalid/missing mask in a positional list (the slot becomes a no-op).
7415
+ */
7416
+ }, {
7417
+ key: "addMaskTexture",
7418
+ value: function addMaskTexture() {
7419
+ var location = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
7420
+ var loadColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0, 0];
7421
+ var isPlaceholder = location == null || location === '';
7422
+ this.maskTextures.push({
7423
+ id: isPlaceholder ? '__figureOneEmptyMask' : location,
7424
+ src: isPlaceholder ? '' : location,
7425
+ loadColor: isPlaceholder ? [0, 0, 0, 0] : loadColor,
7426
+ uniformName: "u_mask".concat(this.maskTextures.length)
7427
+ });
7428
+ }
7396
7429
  }, {
7397
7430
  key: "updateTexture",
7398
7431
  value: function updateTexture(data) {
@@ -7406,6 +7439,7 @@ var GLObject = /*#__PURE__*/function (_DrawingObject) {
7406
7439
  }, {
7407
7440
  key: "initTexture",
7408
7441
  value: function initTexture() {
7442
+ var _this4 = this;
7409
7443
  var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
7410
7444
  var texture = this.texture,
7411
7445
  webgl = this.webgl;
@@ -7430,6 +7464,15 @@ var GLObject = /*#__PURE__*/function (_DrawingObject) {
7430
7464
  // );
7431
7465
  webgl.addTexture(id, data || src, loadColor, repeat, this.executeOnLoad.bind(this), force);
7432
7466
  this.state = webgl.textures[texture.id].state;
7467
+
7468
+ // Register the optional mask textures (textureMap color mode). Each loads
7469
+ // onto its own texture unit and reuses the base texture's coordinates. A
7470
+ // placeholder (empty src) is registered directly from its load color as a
7471
+ // 1x1 transparent texture, with no image to load.
7472
+ this.maskTextures.forEach(function (maskTexture) {
7473
+ var data = maskTexture.src !== '' ? maskTexture.src : maskTexture.loadColor;
7474
+ webgl.addTexture(maskTexture.id, data, maskTexture.loadColor, false, _this4.executeOnLoad.bind(_this4), force);
7475
+ });
7433
7476
  // if (
7434
7477
  // !(texture.id in webgl.textures)
7435
7478
  // || (
@@ -7661,6 +7704,7 @@ var GLObject = /*#__PURE__*/function (_DrawingObject) {
7661
7704
  value: function resetTextureBuffer() {
7662
7705
  var deleteTexture = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
7663
7706
  var texture = this.texture,
7707
+ maskTextures = this.maskTextures,
7664
7708
  webgl = this.webgl,
7665
7709
  gl = this.gl;
7666
7710
  if (texture) {
@@ -7672,6 +7716,13 @@ var GLObject = /*#__PURE__*/function (_DrawingObject) {
7672
7716
  texture.buffer = null;
7673
7717
  }
7674
7718
  }
7719
+ if (deleteTexture) {
7720
+ maskTextures.forEach(function (maskTexture) {
7721
+ if (webgl.textures[maskTexture.id] != null) {
7722
+ webgl.deleteTexture(maskTexture.id);
7723
+ }
7724
+ });
7725
+ }
7675
7726
  }
7676
7727
  }, {
7677
7728
  key: "cleanup",
@@ -7682,14 +7733,14 @@ var GLObject = /*#__PURE__*/function (_DrawingObject) {
7682
7733
  }, {
7683
7734
  key: "resetBuffers",
7684
7735
  value: function resetBuffers() {
7685
- var _this4 = this;
7736
+ var _this5 = this;
7686
7737
  var deleteTexture = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
7687
7738
  var gl = this.gl;
7688
7739
  Object.keys(this.attributes).forEach(function (attributeName) {
7689
- if (_this4.attributes[attributeName].buffer != null) {
7690
- gl.deleteBuffer(_this4.attributes[attributeName].buffer);
7740
+ if (_this5.attributes[attributeName].buffer != null) {
7741
+ gl.deleteBuffer(_this5.attributes[attributeName].buffer);
7691
7742
  }
7692
- _this4.attributes[attributeName].buffer = null;
7743
+ _this5.attributes[attributeName].buffer = null;
7693
7744
  });
7694
7745
  this.attributes = {};
7695
7746
  this.resetTextureBuffer(deleteTexture);
@@ -7869,7 +7920,7 @@ var GLObject = /*#__PURE__*/function (_DrawingObject) {
7869
7920
  }, {
7870
7921
  key: "drawWithTransformMatrix",
7871
7922
  value: function drawWithTransformMatrix(scene, worldMatrix, color) {
7872
- var _this5 = this;
7923
+ var _this6 = this;
7873
7924
  var numDrawVertices = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.numVertices;
7874
7925
  var targetTexture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
7875
7926
  // if (targetTexture) {
@@ -7899,13 +7950,13 @@ var GLObject = /*#__PURE__*/function (_DrawingObject) {
7899
7950
  if (targetTexture && attributeName !== 'a_vertex') {
7900
7951
  return;
7901
7952
  }
7902
- var _this5$attributes$att = _this5.attributes[attributeName],
7903
- buffer = _this5$attributes$att.buffer,
7904
- size = _this5$attributes$att.size,
7905
- type = _this5$attributes$att.type,
7906
- stride = _this5$attributes$att.stride,
7907
- offset = _this5$attributes$att.offset,
7908
- normalize = _this5$attributes$att.normalize;
7953
+ var _this6$attributes$att = _this6.attributes[attributeName],
7954
+ buffer = _this6$attributes$att.buffer,
7955
+ size = _this6$attributes$att.size,
7956
+ type = _this6$attributes$att.type,
7957
+ stride = _this6$attributes$att.stride,
7958
+ offset = _this6$attributes$att.offset,
7959
+ normalize = _this6$attributes$att.normalize;
7909
7960
  gl.enableVertexAttribArray(locations[attributeName]);
7910
7961
  // Bind it to ARRAY_BUFFER (think of it as ARRAY_BUFFER = positionBuffer)
7911
7962
  gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
@@ -7937,7 +7988,7 @@ var GLObject = /*#__PURE__*/function (_DrawingObject) {
7937
7988
  gl.uniformMatrix4fv(locations.u_viewMatrix, false, _tools_m3__WEBPACK_IMPORTED_MODULE_0__.transpose(scene.viewMatrix));
7938
7989
  }
7939
7990
  Object.keys(this.uniforms).forEach(function (uniformName) {
7940
- var method = _this5.uniforms[uniformName].method;
7991
+ var method = _this6.uniforms[uniformName].method;
7941
7992
  method(locations[uniformName], uniformName);
7942
7993
  });
7943
7994
  gl.uniform1f(locations.u_z, this.z);
@@ -7959,6 +8010,20 @@ var GLObject = /*#__PURE__*/function (_DrawingObject) {
7959
8010
  gl.uniform1i(locations.u_use_texture, 1);
7960
8011
  var index = webglInstance.textures[texture.id].index;
7961
8012
  gl.uniform1i(locations.u_texture, index);
8013
+
8014
+ // Bind the mask textures (textureMap color mode), each to its own texture
8015
+ // unit and precomputed u_mask{i} sampler. They reuse the a_texcoord /
8016
+ // v_texcoord bound above, so no extra attribute is needed. Uses an indexed
8017
+ // loop with precomputed uniform names to avoid per-frame allocation.
8018
+ var maskTextures = this.maskTextures;
8019
+ for (var i = 0; i < maskTextures.length; i += 1) {
8020
+ var maskTexture = maskTextures[i];
8021
+ var maskLocation = locations[maskTexture.uniformName];
8022
+ var maskRegistered = webglInstance.textures[maskTexture.id];
8023
+ if (maskLocation != null && maskRegistered != null) {
8024
+ gl.uniform1i(maskLocation, maskRegistered.index);
8025
+ }
8026
+ }
7962
8027
  } else {
7963
8028
  gl.uniform1i(locations.u_use_texture, 0);
7964
8029
  }
@@ -54522,27 +54587,28 @@ __webpack_require__.r(__webpack_exports__);
54522
54587
  /* harmony import */ var _tools_g2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../tools/g2 */ "./src/js/tools/g2.ts");
54523
54588
  /* harmony import */ var _tools_htmlGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../tools/htmlGenerator */ "./src/js/tools/htmlGenerator.ts");
54524
54589
  /* harmony import */ var _Element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Element */ "./src/js/figure/Element.ts");
54525
- /* harmony import */ var _tools_math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../tools/math */ "./src/js/tools/math.ts");
54526
- /* harmony import */ var _tools_tools__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../tools/tools */ "./src/js/tools/tools.ts");
54527
- /* harmony import */ var _DrawingObjects_GLObject_GLObject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../DrawingObjects/GLObject/GLObject */ "./src/js/figure/DrawingObjects/GLObject/GLObject.ts");
54528
- /* harmony import */ var _Animation_Animation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Animation/Animation */ "./src/js/figure/Animation/Animation.ts");
54529
- /* harmony import */ var _FigureElementPrimitiveMorph__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./FigureElementPrimitiveMorph */ "./src/js/figure/FigurePrimitives/FigureElementPrimitiveMorph.ts");
54530
- /* harmony import */ var _FigureElementPrimitive2DText__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./FigureElementPrimitive2DText */ "./src/js/figure/FigurePrimitives/FigureElementPrimitive2DText.ts");
54531
- /* harmony import */ var _FigureElementPrimitiveGLText__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./FigureElementPrimitiveGLText */ "./src/js/figure/FigurePrimitives/FigureElementPrimitiveGLText.ts");
54532
- /* harmony import */ var _Text__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Text */ "./src/js/figure/FigurePrimitives/Text.ts");
54533
- /* harmony import */ var _DrawingObjects_HTMLObject_HTMLObject__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../DrawingObjects/HTMLObject/HTMLObject */ "./src/js/figure/DrawingObjects/HTMLObject/HTMLObject.ts");
54534
- /* harmony import */ var _geometries_lines_lines__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../geometries/lines/lines */ "./src/js/figure/geometries/lines/lines.ts");
54535
- /* harmony import */ var _geometries_polygon_polygon__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../geometries/polygon/polygon */ "./src/js/figure/geometries/polygon/polygon.ts");
54536
- /* harmony import */ var _geometries_rectangle__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../geometries/rectangle */ "./src/js/figure/geometries/rectangle.ts");
54537
- /* harmony import */ var _geometries_ellipse__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../geometries/ellipse */ "./src/js/figure/geometries/ellipse.ts");
54538
- /* harmony import */ var _geometries_arc__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../geometries/arc */ "./src/js/figure/geometries/arc.ts");
54539
- /* harmony import */ var _geometries_triangle__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../geometries/triangle */ "./src/js/figure/geometries/triangle.ts");
54540
- /* harmony import */ var _geometries_arrow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../geometries/arrow */ "./src/js/figure/geometries/arrow.ts");
54541
- /* harmony import */ var _geometries_line__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../geometries/line */ "./src/js/figure/geometries/line.ts");
54542
- /* harmony import */ var _geometries_copy_copy__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../geometries/copy/copy */ "./src/js/figure/geometries/copy/copy.ts");
54543
- /* harmony import */ var _geometries_buffer__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../geometries/buffer */ "./src/js/figure/geometries/buffer.ts");
54544
- /* harmony import */ var _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../tools/geometry/scene */ "./src/js/tools/geometry/scene.ts");
54545
- /* harmony import */ var _FigureElementPrimitiveGesture__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./FigureElementPrimitiveGesture */ "./src/js/figure/FigurePrimitives/FigureElementPrimitiveGesture.ts");
54590
+ /* harmony import */ var _webgl_shaders__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../webgl/shaders */ "./src/js/figure/webgl/shaders.ts");
54591
+ /* harmony import */ var _tools_math__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../tools/math */ "./src/js/tools/math.ts");
54592
+ /* harmony import */ var _tools_tools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../tools/tools */ "./src/js/tools/tools.ts");
54593
+ /* harmony import */ var _DrawingObjects_GLObject_GLObject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../DrawingObjects/GLObject/GLObject */ "./src/js/figure/DrawingObjects/GLObject/GLObject.ts");
54594
+ /* harmony import */ var _Animation_Animation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Animation/Animation */ "./src/js/figure/Animation/Animation.ts");
54595
+ /* harmony import */ var _FigureElementPrimitiveMorph__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./FigureElementPrimitiveMorph */ "./src/js/figure/FigurePrimitives/FigureElementPrimitiveMorph.ts");
54596
+ /* harmony import */ var _FigureElementPrimitive2DText__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./FigureElementPrimitive2DText */ "./src/js/figure/FigurePrimitives/FigureElementPrimitive2DText.ts");
54597
+ /* harmony import */ var _FigureElementPrimitiveGLText__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./FigureElementPrimitiveGLText */ "./src/js/figure/FigurePrimitives/FigureElementPrimitiveGLText.ts");
54598
+ /* harmony import */ var _Text__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Text */ "./src/js/figure/FigurePrimitives/Text.ts");
54599
+ /* harmony import */ var _DrawingObjects_HTMLObject_HTMLObject__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../DrawingObjects/HTMLObject/HTMLObject */ "./src/js/figure/DrawingObjects/HTMLObject/HTMLObject.ts");
54600
+ /* harmony import */ var _geometries_lines_lines__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../geometries/lines/lines */ "./src/js/figure/geometries/lines/lines.ts");
54601
+ /* harmony import */ var _geometries_polygon_polygon__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../geometries/polygon/polygon */ "./src/js/figure/geometries/polygon/polygon.ts");
54602
+ /* harmony import */ var _geometries_rectangle__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../geometries/rectangle */ "./src/js/figure/geometries/rectangle.ts");
54603
+ /* harmony import */ var _geometries_ellipse__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../geometries/ellipse */ "./src/js/figure/geometries/ellipse.ts");
54604
+ /* harmony import */ var _geometries_arc__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../geometries/arc */ "./src/js/figure/geometries/arc.ts");
54605
+ /* harmony import */ var _geometries_triangle__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../geometries/triangle */ "./src/js/figure/geometries/triangle.ts");
54606
+ /* harmony import */ var _geometries_arrow__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../geometries/arrow */ "./src/js/figure/geometries/arrow.ts");
54607
+ /* harmony import */ var _geometries_line__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../geometries/line */ "./src/js/figure/geometries/line.ts");
54608
+ /* harmony import */ var _geometries_copy_copy__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../geometries/copy/copy */ "./src/js/figure/geometries/copy/copy.ts");
54609
+ /* harmony import */ var _geometries_buffer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../geometries/buffer */ "./src/js/figure/geometries/buffer.ts");
54610
+ /* harmony import */ var _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../tools/geometry/scene */ "./src/js/tools/geometry/scene.ts");
54611
+ /* harmony import */ var _FigureElementPrimitiveGesture__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./FigureElementPrimitiveGesture */ "./src/js/figure/FigurePrimitives/FigureElementPrimitiveGesture.ts");
54546
54612
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
54547
54613
  function _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }
54548
54614
  function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
@@ -54573,6 +54639,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
54573
54639
 
54574
54640
 
54575
54641
 
54642
+
54576
54643
  // eslint-disable-next-line import/no-cycle
54577
54644
  // eslint-disable-next-line import/no-cycle
54578
54645
 
@@ -54668,7 +54735,7 @@ function setupPulse(element, options) {
54668
54735
  element.pulseDefault.scale = options.pulse;
54669
54736
  } else {
54670
54737
  // eslint-disable-next-line no-param-reassign
54671
- element.pulseDefault = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, element.pulseDefault, options.pulse);
54738
+ element.pulseDefault = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, element.pulseDefault, options.pulse);
54672
54739
  }
54673
54740
  }
54674
54741
  }
@@ -54742,7 +54809,45 @@ var FigurePrimitives = /*#__PURE__*/function () {
54742
54809
  optionsIn[_key] = arguments[_key];
54743
54810
  }
54744
54811
  // Setup the default options
54745
- var oIn = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn));
54812
+ var oIn = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn));
54813
+ // The mask recolor (textureMap) path supports one or more mask textures,
54814
+ // supplied as `mask` (single) or `masks` (array). Normalize the input: a
54815
+ // non-array `masks` is coerced to an array, and an empty/absent `masks`
54816
+ // falls back to the singular `mask`. `masks` takes precedence when both are
54817
+ // given and `masks` is non-empty.
54818
+ var rawMasks;
54819
+ if (oIn.masks != null) {
54820
+ rawMasks = Array.isArray(oIn.masks) ? oIn.masks : [oIn.masks];
54821
+ } else {
54822
+ rawMasks = [];
54823
+ }
54824
+ if (rawMasks.length === 0 && oIn.mask != null) {
54825
+ rawMasks = [oIn.mask];
54826
+ }
54827
+ var isValidMask = function isValidMask(m) {
54828
+ return m != null && m.src != null && m.src !== '';
54829
+ };
54830
+ // Masks are positional: each slot owns its own u_mask{i} sampler and tint
54831
+ // block (tints[CHANNELS_PER_MASK * i ...]). Invalid/missing slots are kept
54832
+ // as transparent no-ops rather than dropped, so a conditionally-built list
54833
+ // never shifts later masks onto the wrong tints. The textureMap path is only
54834
+ // selected when at least one slot is a valid mask.
54835
+ var hasMask = rawMasks.some(isValidMask);
54836
+ var maskList = hasMask ? rawMasks : [];
54837
+ var numMasks = maskList.length;
54838
+ var NUM_TINTS = numMasks * _webgl_shaders__WEBPACK_IMPORTED_MODULE_3__.CHANNELS_PER_MASK;
54839
+ // Guard the per-element mask count against the device's texture units (one
54840
+ // is reserved for the base texture). This catches an excessive count with a
54841
+ // clear error instead of an opaque GL failure. Note: a figure with many
54842
+ // other textures can still exhaust units - that global limit is pre-existing
54843
+ // and not checked here.
54844
+ if (hasMask) {
54845
+ var _gl = this.webgl[0].gl;
54846
+ var maxUnits = _gl.getParameter(_gl.MAX_TEXTURE_IMAGE_UNITS);
54847
+ if (typeof maxUnits === 'number' && maxUnits > 0 && numMasks + 1 > maxUnits) {
54848
+ throw new Error("FigureOne gl: ".concat(numMasks, " mask textures (plus the base texture) exceed this device's ").concat(maxUnits, " texture units. Use fewer masks."));
54849
+ }
54850
+ }
54746
54851
  var defaultOptions = {
54747
54852
  glPrimitive: 'TRIANGLES',
54748
54853
  vertexShader: {
@@ -54762,7 +54867,8 @@ var FigurePrimitives = /*#__PURE__*/function () {
54762
54867
  coords: [],
54763
54868
  loadColor: [0, 0, 1, 0.5]
54764
54869
  },
54765
- name: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.generateUniqueId)('primitive_'),
54870
+ tints: [],
54871
+ name: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.generateUniqueId)('primitive_'),
54766
54872
  color: this.defaultColor,
54767
54873
  drawNumber: 0,
54768
54874
  transform: [['s', 1], ['r', 0, 0, 0, 1], ['t', 0, 0, 0]],
@@ -54773,6 +54879,16 @@ var FigurePrimitives = /*#__PURE__*/function () {
54773
54879
  defaultOptions.vertexShader.color = 'texture';
54774
54880
  defaultOptions.fragmentShader.color = 'texture';
54775
54881
  }
54882
+ // A mask recolors regions of the base texture, so it uses the textureMap
54883
+ // color mode (which also samples the base texture). It therefore takes
54884
+ // precedence over the plain 'texture' mode set above. The fragment shader is
54885
+ // composed for the exact number of masks, so a single mask generates the
54886
+ // same shader (and cost) as before.
54887
+ if (hasMask) {
54888
+ defaultOptions.vertexShader.color = 'textureMap';
54889
+ defaultOptions.fragmentShader.color = 'textureMap';
54890
+ defaultOptions.fragmentShader.masks = numMasks;
54891
+ }
54776
54892
  if (oIn.dimension != null) {
54777
54893
  defaultOptions.vertexShader.dimension = oIn.dimension;
54778
54894
  }
@@ -54790,7 +54906,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
54790
54906
  }
54791
54907
 
54792
54908
  // Combine default and input options
54793
- var options = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, defaultOptions, oIn);
54909
+ var options = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, defaultOptions, oIn);
54794
54910
  options.transform = (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getTransform)(options.transform);
54795
54911
  if (options.position != null) {
54796
54912
  options.position = (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getPoint)(options.position);
@@ -54798,7 +54914,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
54798
54914
  }
54799
54915
 
54800
54916
  // User shaders to create a gl drawing object
54801
- var glObject = new _DrawingObjects_GLObject_GLObject__WEBPACK_IMPORTED_MODULE_5__["default"](this.webgl[0], options.vertexShader, options.fragmentShader);
54917
+ var glObject = new _DrawingObjects_GLObject_GLObject__WEBPACK_IMPORTED_MODULE_6__["default"](this.webgl[0], options.vertexShader, options.fragmentShader);
54802
54918
 
54803
54919
  // Set the glPrimitive
54804
54920
  glObject.setPrimitive(options.glPrimitive.toUpperCase());
@@ -54879,7 +54995,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
54879
54995
  usage: 'STATIC',
54880
54996
  size: 2
54881
54997
  };
54882
- var b = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, defaultAttribute, buffer);
54998
+ var b = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, defaultAttribute, buffer);
54883
54999
  glObject.addAttribute(b.name, b.size, b.data, b.type, b.normalize, b.stride, b.offset, b.usageIn);
54884
55000
  });
54885
55001
  glObject.initAttributes();
@@ -54892,18 +55008,58 @@ var FigurePrimitives = /*#__PURE__*/function () {
54892
55008
  type: 'FLOAT',
54893
55009
  length: 1
54894
55010
  };
54895
- var u = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, defaultUniform, uniform);
55011
+ var u = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, defaultUniform, uniform);
54896
55012
  glObject.addUniform(u.name, u.length, u.type, u.value);
54897
55013
  });
54898
55014
  }
54899
55015
 
55016
+ // Normalize a tint color to a 4-component [r, g, b, a] array. A missing
55017
+ // tint becomes fully transparent (alpha 0), which leaves the base texture
55018
+ // unchanged. A 3-component color defaults to alpha 1 (fully recolored).
55019
+ var toTint = function toTint(c) {
55020
+ if (c == null) {
55021
+ return [0, 0, 0, 0];
55022
+ }
55023
+ if (c.length < 4) {
55024
+ return [c[0] || 0, c[1] || 0, c[2] || 0, 1];
55025
+ }
55026
+ return [c[0], c[1], c[2], c[3]];
55027
+ };
55028
+
54900
55029
  // Add a texture - use mapFrom and mapTo if texture coords is not defined
54901
55030
  if (options.texture.src !== '') {
54902
55031
  var t = options.texture;
54903
55032
  glObject.addTexture(t.src, (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getRect)(t.mapFrom), (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getRect)(t.mapTo), t.mapToAttribute, t.coords || [], t.repeat, t.onLoad, t.loadColor);
55033
+ // A mask recolors regions of the base texture (textureMap color mode).
55034
+ // Each mask is bound to u_mask{i} and shares the base texture coordinates.
55035
+ // Invalid slots register a transparent placeholder so masks stay
55036
+ // positional (later masks keep their tint block).
55037
+ maskList.forEach(function (m) {
55038
+ if (isValidMask(m)) {
55039
+ glObject.addMaskTexture(m.src, m.loadColor);
55040
+ } else {
55041
+ glObject.addMaskTexture('');
55042
+ }
55043
+ });
54904
55044
  glObject.initTexture();
54905
55045
  }
54906
55046
 
55047
+ // Seed the textureMap tint uniforms (u_tint0..u_tint{4*numMasks-1}). Each
55048
+ // corresponds to a mask channel (r, g, b, a). Any tints beyond the available
55049
+ // mask channels are ignored. The values are mirrored into customState so
55050
+ // they survive state save/restore and recordings.
55051
+ var tintColors = [];
55052
+ if (hasMask) {
55053
+ tintColors = Array.from({
55054
+ length: NUM_TINTS
55055
+ }, function (_, i) {
55056
+ return toTint(options.tints[i]);
55057
+ });
55058
+ tintColors.forEach(function (tint, i) {
55059
+ glObject.addUniform("u_tint".concat(i), 4, 'FLOAT', tint);
55060
+ });
55061
+ }
55062
+
54907
55063
  // Create th figure element primitive with the gl drawing object
54908
55064
  var element;
54909
55065
  if (options.figureElementPrimitiveCallback != null) {
@@ -54920,6 +55076,49 @@ var FigurePrimitives = /*#__PURE__*/function () {
54920
55076
  element.custom.getUniform = element.drawingObject.getUniform.bind(element.drawingObject);
54921
55077
  element.dimColor = this.defaultDimColor.slice();
54922
55078
 
55079
+ // textureMap tints: expose setters and mirror the current values in
55080
+ // customState so they are captured by state save/restore and recordings.
55081
+ if (hasMask) {
55082
+ element.customState.tints = tintColors.map(function (t) {
55083
+ return t.slice();
55084
+ });
55085
+ // Set a single region's tint. Indices outside the available tints
55086
+ // (4 * numMasks) are ignored rather than throwing - an out-of-range index
55087
+ // would otherwise reference a nonexistent u_tint uniform and corrupt
55088
+ // customState, which would then re-throw on every later state restore.
55089
+ element.custom.setTint = function (index, color) {
55090
+ if (index < 0 || index >= NUM_TINTS) {
55091
+ return;
55092
+ }
55093
+ var tint = toTint(color);
55094
+ element.customState.tints[index] = tint;
55095
+ element.drawingObject.updateUniform("u_tint".concat(index), tint);
55096
+ };
55097
+ // Replace all region tints. Missing or null entries reset that region to
55098
+ // transparent (no recolor), so setTints always defines the full set.
55099
+ element.custom.setTints = function (colors) {
55100
+ for (var index = 0; index < NUM_TINTS; index += 1) {
55101
+ element.custom.setTint(index, colors[index] == null ? null : colors[index]);
55102
+ }
55103
+ };
55104
+ // Custom uniforms are not part of drawing object state, so after a state
55105
+ // restore (including Recorder playback and seek) the tint values are
55106
+ // merged back into customState but not re-applied to the GPU. Re-push them
55107
+ // to the u_tint uniforms whenever state is set. Only the valid tints are
55108
+ // applied so a malformed customState can never throw here.
55109
+ element.notifications.add('setState', function () {
55110
+ var tints = element.customState.tints;
55111
+ if (tints == null) {
55112
+ return;
55113
+ }
55114
+ for (var index = 0; index < NUM_TINTS; index += 1) {
55115
+ if (tints[index] != null) {
55116
+ element.drawingObject.updateUniform("u_tint".concat(index), tints[index]);
55117
+ }
55118
+ }
55119
+ });
55120
+ }
55121
+
54923
55122
  // Setup move, touch, scenarios, dim and default colors if defined in
54924
55123
  // options
54925
55124
  if (options.move != null && options.move !== false) {
@@ -54940,7 +55139,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
54940
55139
  element.scenarios = options.scenarios;
54941
55140
  }
54942
55141
  if (options.scene != null) {
54943
- if (options.scene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_22__["default"]) {
55142
+ if (options.scene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_23__["default"]) {
54944
55143
  element.scene = options.scene;
54945
55144
  } else {
54946
55145
  element.setScene(options.scene);
@@ -54966,13 +55165,13 @@ var FigurePrimitives = /*#__PURE__*/function () {
54966
55165
  for (var _len2 = arguments.length, optionsIn = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
54967
55166
  optionsIn[_key2] = arguments[_key2];
54968
55167
  }
54969
- var oIn = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn));
55168
+ var oIn = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn));
54970
55169
  var defaultOptions = {
54971
55170
  dimension: 3,
54972
55171
  light: oIn.lines ? null : 'directional',
54973
55172
  usage: 'STATIC'
54974
55173
  };
54975
- var options = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, defaultOptions, oIn);
55174
+ var options = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, defaultOptions, oIn);
54976
55175
  var dim = options.dimension;
54977
55176
  var processOptions = function processOptions(o, u) {
54978
55177
  if (o.usage == null) {
@@ -54985,13 +55184,13 @@ var FigurePrimitives = /*#__PURE__*/function () {
54985
55184
  // and colors
54986
55185
  if (o.copy != null) {
54987
55186
  if (o.vertices != null) {
54988
- o.vertices = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_20__.copyPoints)(o.vertices, o.copy, 'points');
55187
+ o.vertices = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_21__.copyPoints)(o.vertices, o.copy, 'points');
54989
55188
  }
54990
55189
  if (o.normals != null) {
54991
- o.normals = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_20__.copyPoints)(o.normals, o.copy, 'normals');
55190
+ o.normals = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_21__.copyPoints)(o.normals, o.copy, 'normals');
54992
55191
  }
54993
55192
  if (o.colors != null) {
54994
- var count = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_20__.getCopyCount)(o.copy);
55193
+ var count = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_21__.getCopyCount)(o.copy);
54995
55194
  var out = [];
54996
55195
  for (var i = 0; i < count; i += 1) {
54997
55196
  out.push.apply(out, _toConsumableArray(o.colors.map(function (c) {
@@ -55001,7 +55200,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55001
55200
  o.colors = out;
55002
55201
  }
55003
55202
  if (o.texture != null && o.texture.coords != null) {
55004
- var _count = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_20__.getCopyCount)(o.copy);
55203
+ var _count = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_21__.getCopyCount)(o.copy);
55005
55204
  var _out = [];
55006
55205
  for (var _i = 0; _i < _count; _i += 1) {
55007
55206
  _out.push.apply(_out, _toConsumableArray(o.texture.coords.slice()));
@@ -55072,8 +55271,8 @@ var FigurePrimitives = /*#__PURE__*/function () {
55072
55271
  }, {
55073
55272
  key: "generic3DBase",
55074
55273
  value: function generic3DBase(defaultOptions, optionsIn, getPointsFn) {
55075
- var options = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, defaultOptions, optionsIn);
55076
- var element = this.generic3((0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, options, {
55274
+ var options = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, defaultOptions, optionsIn);
55275
+ var element = this.generic3((0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, options, {
55077
55276
  points: [],
55078
55277
  normals: options.lines ? null : [],
55079
55278
  glPrimitive: options.lines ? 'LINES' : undefined
@@ -55085,7 +55284,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55085
55284
  element.custom.options = options;
55086
55285
  element.custom.getPoints = getPointsFn;
55087
55286
  element.custom.updatePoints = function (updateOptions) {
55088
- var o = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, element.custom.options, {
55287
+ var o = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, element.custom.options, {
55089
55288
  transform: [],
55090
55289
  position: [0, 0]
55091
55290
  }, updateOptions);
@@ -55098,12 +55297,12 @@ var FigurePrimitives = /*#__PURE__*/function () {
55098
55297
  points = _element$custom$getPo2[0],
55099
55298
  normals = _element$custom$getPo2[1];
55100
55299
  if (o.lines == null || o.lines === false) {
55101
- element.custom.updateGeneric3((0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, o, {
55300
+ element.custom.updateGeneric3((0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, o, {
55102
55301
  points: points,
55103
55302
  normals: normals
55104
55303
  }));
55105
55304
  } else {
55106
- element.custom.updateGeneric3((0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, o, {
55305
+ element.custom.updateGeneric3((0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, o, {
55107
55306
  points: points,
55108
55307
  normals: null
55109
55308
  }));
@@ -55123,7 +55322,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55123
55322
  sides: 10,
55124
55323
  normals: 'flat',
55125
55324
  center: [0, 0, 0]
55126
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55325
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55127
55326
  return (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.sphere)(o);
55128
55327
  });
55129
55328
  }
@@ -55135,7 +55334,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55135
55334
  }
55136
55335
  return this.generic3DBase({
55137
55336
  side: this.defaultLength
55138
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55337
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55139
55338
  return (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.cube)(o);
55140
55339
  });
55141
55340
  }
@@ -55147,7 +55346,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55147
55346
  }
55148
55347
  return this.generic3DBase({
55149
55348
  length: this.defaultLength / 3
55150
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55349
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55151
55350
  return (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.prism)(o);
55152
55351
  });
55153
55352
  }
@@ -55161,7 +55360,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55161
55360
  radius: this.defaultLength / 20,
55162
55361
  sides: 10,
55163
55362
  normals: 'flat'
55164
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55363
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55165
55364
  return (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.cylinder)(o);
55166
55365
  });
55167
55366
  }
@@ -55176,7 +55375,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55176
55375
  sides: 10,
55177
55376
  normals: 'flat',
55178
55377
  length: 1
55179
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55378
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55180
55379
  return (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.cone)(o);
55181
55380
  });
55182
55381
  }
@@ -55190,7 +55389,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55190
55389
  width: this.defaultLength / 40,
55191
55390
  sides: 10,
55192
55391
  normals: 'curve'
55193
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55392
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55194
55393
  return (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.line3)(o);
55195
55394
  });
55196
55395
  }
@@ -55203,7 +55402,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55203
55402
  return this.generic3DBase({
55204
55403
  sides: 10,
55205
55404
  normals: 'flat'
55206
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55405
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55207
55406
  return (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.revolve)(o);
55208
55407
  });
55209
55408
  }
@@ -55216,7 +55415,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55216
55415
  return this.generic3DBase({
55217
55416
  normals: 'flat',
55218
55417
  lines: false
55219
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55418
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn)), function (o) {
55220
55419
  return _tools_g2__WEBPACK_IMPORTED_MODULE_0__.surface.surface(o);
55221
55420
  });
55222
55421
  }
@@ -55244,7 +55443,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55244
55443
  value: function morph() {
55245
55444
  var _this = this;
55246
55445
  var defaultOptions = {
55247
- name: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.generateUniqueId)('primitive_'),
55446
+ name: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.generateUniqueId)('primitive_'),
55248
55447
  color: this.defaultColor,
55249
55448
  points: [],
55250
55449
  glPrimitive: 'TRIANGLES',
@@ -55254,7 +55453,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55254
55453
  for (var _len1 = arguments.length, optionsIn = new Array(_len1), _key1 = 0; _key1 < _len1; _key1++) {
55255
55454
  optionsIn[_key1] = arguments[_key1];
55256
55455
  }
55257
- var options = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}, defaultOptions].concat(optionsIn));
55456
+ var options = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}, defaultOptions].concat(optionsIn));
55258
55457
  options.transform = (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getTransform)(options.transform);
55259
55458
  if (options.position != null) {
55260
55459
  options.position = (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getPoint)(options.position);
@@ -55266,7 +55465,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55266
55465
  colorVertex = true;
55267
55466
  fragmentShader = 'vertexColor';
55268
55467
  }
55269
- var glObject = new _DrawingObjects_GLObject_GLObject__WEBPACK_IMPORTED_MODULE_5__["default"](this.webgl[0], ['morpher', options.points.length, colorVertex], fragmentShader);
55468
+ var glObject = new _DrawingObjects_GLObject_GLObject__WEBPACK_IMPORTED_MODULE_6__["default"](this.webgl[0], ['morpher', options.points.length, colorVertex], fragmentShader);
55270
55469
  glObject.setPrimitive(options.glPrimitive.toUpperCase());
55271
55470
  var shapeNameMap = {};
55272
55471
  if (options.names != null) {
@@ -55285,7 +55484,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55285
55484
  usage: 'STATIC',
55286
55485
  size: 2
55287
55486
  };
55288
- var b = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, defaultBuffer);
55487
+ var b = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, defaultBuffer);
55289
55488
  glObject.addAttribute(attribute, b.size, points, b.type, b.normalize, b.stride, b.offset, b.usageIn);
55290
55489
  });
55291
55490
  if (colorVertex) {
@@ -55310,7 +55509,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55310
55509
  usage: 'STATIC',
55311
55510
  size: 4
55312
55511
  };
55313
- var b = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, defaultBuffer);
55512
+ var b = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, defaultBuffer);
55314
55513
  glObject.addAttribute(attribute, b.size, colors, b.type, b.normalize, b.stride, b.offset, b.usageIn);
55315
55514
  });
55316
55515
  options.color = this.defaultColor;
@@ -55318,7 +55517,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55318
55517
  glObject.addUniform('u_from', 1, 'INT');
55319
55518
  glObject.addUniform('u_to', 1, 'INT');
55320
55519
  glObject.addUniform('u_percent', 1, 'FLOAT');
55321
- var element = new _FigureElementPrimitiveMorph__WEBPACK_IMPORTED_MODULE_7__["default"](glObject, options.transform, options.color, null, options.name);
55520
+ var element = new _FigureElementPrimitiveMorph__WEBPACK_IMPORTED_MODULE_8__["default"](glObject, options.transform, options.color, null, options.name);
55322
55521
  element.shapeNameMap = shapeNameMap;
55323
55522
  element.setPoints(0);
55324
55523
  element.fnMap.add('_morphCallback', function (percentage, customProperties) {
@@ -55330,7 +55529,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55330
55529
  for (var _len10 = arguments.length, opt = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
55331
55530
  opt[_key10] = arguments[_key10];
55332
55531
  }
55333
- var o = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}, {
55532
+ var o = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}, {
55334
55533
  progression: 'easeinout',
55335
55534
  element: element
55336
55535
  }].concat(opt));
@@ -55340,7 +55539,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55340
55539
  };
55341
55540
  o.callback = '_morphCallback';
55342
55541
  o.timeKeeper = _this.timeKeeper;
55343
- return new _Animation_Animation__WEBPACK_IMPORTED_MODULE_6__.CustomAnimationStep(o);
55542
+ return new _Animation_Animation__WEBPACK_IMPORTED_MODULE_7__.CustomAnimationStep(o);
55344
55543
  };
55345
55544
  element.animations.customSteps.push({
55346
55545
  step: element.animations.morph.bind(this),
@@ -55458,7 +55657,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55458
55657
  for (var _len11 = arguments.length, optionsIn = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
55459
55658
  optionsIn[_key11] = arguments[_key11];
55460
55659
  }
55461
- var oIn = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn));
55660
+ var oIn = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn));
55462
55661
  var element = this.generic3.apply(this, [{
55463
55662
  dimension: 2,
55464
55663
  light: null,
@@ -55546,7 +55745,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55546
55745
  drawBorderBuffer: 0,
55547
55746
  simple: false
55548
55747
  };
55549
- var o = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, defaultOptions, optionsIn);
55748
+ var o = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, defaultOptions, optionsIn);
55550
55749
  if (o.linePrimitives === false) {
55551
55750
  o.lineNum = 2;
55552
55751
  }
@@ -55555,19 +55754,19 @@ var FigurePrimitives = /*#__PURE__*/function () {
55555
55754
  var drawBorder;
55556
55755
  var drawBorderBuffer;
55557
55756
  if (o.simple) {
55558
- var _makeFastPolyLine = (0,_geometries_lines_lines__WEBPACK_IMPORTED_MODULE_12__.makeFastPolyLine)(o.points, o.width, o.close);
55757
+ var _makeFastPolyLine = (0,_geometries_lines_lines__WEBPACK_IMPORTED_MODULE_13__.makeFastPolyLine)(o.points, o.width, o.close);
55559
55758
  var _makeFastPolyLine2 = _slicedToArray(_makeFastPolyLine, 3);
55560
55759
  points = _makeFastPolyLine2[0];
55561
55760
  drawBorder = _makeFastPolyLine2[1];
55562
55761
  drawBorderBuffer = _makeFastPolyLine2[2];
55563
55762
  } else if (o.cornersOnly) {
55564
- var _makePolyLineCorners = (0,_geometries_lines_lines__WEBPACK_IMPORTED_MODULE_12__.makePolyLineCorners)(o.points, o.width, o.close, o.cornerLength, o.widthIs, o.cornerStyle, o.cornerSize, o.cornerSides, o.minAutoCornerAngle, o.linePrimitives, o.lineNum, o.drawBorderBuffer);
55763
+ var _makePolyLineCorners = (0,_geometries_lines_lines__WEBPACK_IMPORTED_MODULE_13__.makePolyLineCorners)(o.points, o.width, o.close, o.cornerLength, o.widthIs, o.cornerStyle, o.cornerSize, o.cornerSides, o.minAutoCornerAngle, o.linePrimitives, o.lineNum, o.drawBorderBuffer);
55565
55764
  var _makePolyLineCorners2 = _slicedToArray(_makePolyLineCorners, 3);
55566
55765
  points = _makePolyLineCorners2[0];
55567
55766
  drawBorder = _makePolyLineCorners2[1];
55568
55767
  drawBorderBuffer = _makePolyLineCorners2[2];
55569
55768
  } else {
55570
- var _makePolyLine = (0,_geometries_lines_lines__WEBPACK_IMPORTED_MODULE_12__.makePolyLine)(o.points, o.width, o.close, o.widthIs, o.cornerStyle, o.cornerSize, o.cornerSides, o.minAutoCornerAngle, o.dash, o.linePrimitives, o.lineNum, o.drawBorder, o.drawBorderBuffer, o.arrow);
55769
+ var _makePolyLine = (0,_geometries_lines_lines__WEBPACK_IMPORTED_MODULE_13__.makePolyLine)(o.points, o.width, o.close, o.widthIs, o.cornerStyle, o.cornerSize, o.cornerSides, o.minAutoCornerAngle, o.dash, o.linePrimitives, o.lineNum, o.drawBorder, o.drawBorderBuffer, o.arrow);
55571
55770
  var _makePolyLine2 = _slicedToArray(_makePolyLine, 3);
55572
55771
  points = _makePolyLine2[0];
55573
55772
  drawBorder = _makePolyLine2[1];
@@ -55603,7 +55802,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55603
55802
  for (var _len12 = arguments.length, optionsIn = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
55604
55803
  optionsIn[_key12] = arguments[_key12];
55605
55804
  }
55606
- var options = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn));
55805
+ var options = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn));
55607
55806
  var element = this.generic.apply(this, [{
55608
55807
  transform: new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Transform().scale(1).rotate(0).translate(),
55609
55808
  border: 'draw',
@@ -55628,7 +55827,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55628
55827
  drawBorderBuffer: 0
55629
55828
  };
55630
55829
  element.custom.updatePoints = function (updateOptions) {
55631
- var _this2$getPolylineTri = _this2.getPolylineTris((0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, element.custom.options, updateOptions)),
55830
+ var _this2$getPolylineTri = _this2.getPolylineTris((0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, element.custom.options, updateOptions)),
55632
55831
  _this2$getPolylineTri2 = _slicedToArray(_this2$getPolylineTri, 5),
55633
55832
  o = _this2$getPolylineTri2[0],
55634
55833
  points = _this2$getPolylineTri2[1],
@@ -55636,7 +55835,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55636
55835
  drawBorderBuffer = _this2$getPolylineTri2[3],
55637
55836
  drawType = _this2$getPolylineTri2[4];
55638
55837
  element.custom.options = o;
55639
- element.custom.updateGeneric((0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, o, {
55838
+ element.custom.updateGeneric((0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, o, {
55640
55839
  points: points,
55641
55840
  drawBorder: drawBorder,
55642
55841
  drawBorderBuffer: drawBorderBuffer,
@@ -55663,12 +55862,12 @@ var FigurePrimitives = /*#__PURE__*/function () {
55663
55862
  if (o.sidesToDraw > o.sides) {
55664
55863
  o.sidesToDraw = o.sides;
55665
55864
  }
55666
- var points = (0,_geometries_polygon_polygon__WEBPACK_IMPORTED_MODULE_13__.getPolygonPoints)(o);
55865
+ var points = (0,_geometries_polygon_polygon__WEBPACK_IMPORTED_MODULE_14__.getPolygonPoints)(o);
55667
55866
  // let { drawBorderBuffer } = o;
55668
55867
  var drawBorderOffset = 0;
55669
55868
  var drawBorder;
55670
55869
  if (o.line != null) {
55671
- o.line = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, {
55870
+ o.line = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, {
55672
55871
  width: this.defaultLineWidth,
55673
55872
  widthIs: 'mid'
55674
55873
  }, o.line);
@@ -55706,7 +55905,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55706
55905
  if (drawBorderOffset === 0) {
55707
55906
  drawBorder = [points];
55708
55907
  } else {
55709
- drawBorder = [(0,_geometries_polygon_polygon__WEBPACK_IMPORTED_MODULE_13__.getPolygonPoints)((0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, o, {
55908
+ drawBorder = [(0,_geometries_polygon_polygon__WEBPACK_IMPORTED_MODULE_14__.getPolygonPoints)((0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, o, {
55710
55909
  radius: o.radius + drawBorderOffset
55711
55910
  }))];
55712
55911
  }
@@ -55739,7 +55938,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55739
55938
  return [];
55740
55939
  };
55741
55940
  element.custom.updatePoints = function (updateOptions) {
55742
- var borderOptions = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, element.custom.options, updateOptions);
55941
+ var borderOptions = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, element.custom.options, updateOptions);
55743
55942
  var _element$custom$getBo = element.custom.getBorder(borderOptions),
55744
55943
  _element$custom$getBo2 = _slicedToArray(_element$custom$getBo, 2),
55745
55944
  o = _element$custom$getBo2[0],
@@ -55750,10 +55949,10 @@ var FigurePrimitives = /*#__PURE__*/function () {
55750
55949
  points = _element$custom$getFi2[0],
55751
55950
  drawType = _element$custom$getFi2[1];
55752
55951
  element.custom.options = o;
55753
- element.custom.updateGeneric((0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, o, {
55952
+ element.custom.updateGeneric((0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, o, {
55754
55953
  points: points,
55755
55954
  drawBorder: border,
55756
- drawBorderBuffer: (0,_geometries_buffer__WEBPACK_IMPORTED_MODULE_21__.getBufferBorder)([border], o.drawBorderBuffer, element.custom.skipConcave, element.custom.bufferOffset),
55955
+ drawBorderBuffer: (0,_geometries_buffer__WEBPACK_IMPORTED_MODULE_22__.getBufferBorder)([border], o.drawBorderBuffer, element.custom.skipConcave, element.custom.bufferOffset),
55757
55956
  drawType: drawType
55758
55957
  }));
55759
55958
  } else {
@@ -55768,7 +55967,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55768
55967
  o.line.drawBorder = 'positive';
55769
55968
  bufferOffsetToUse = 'positive';
55770
55969
  }
55771
- var _element$custom$getLi = element.custom.getLine((0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, o.line, {
55970
+ var _element$custom$getLi = element.custom.getLine((0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, o.line, {
55772
55971
  points: border
55773
55972
  })),
55774
55973
  _element$custom$getLi2 = _slicedToArray(_element$custom$getLi, 5),
@@ -55781,8 +55980,8 @@ var FigurePrimitives = /*#__PURE__*/function () {
55781
55980
  if (element.custom.bufferOffset === 'positive') {
55782
55981
  drawBorder.reverse();
55783
55982
  }
55784
- var drawBorderBuffer = (0,_geometries_buffer__WEBPACK_IMPORTED_MODULE_21__.getBufferBorder)(drawBorder, o.drawBorderBuffer, element.custom.skipConcave, bufferOffsetToUse);
55785
- element.custom.updateGeneric((0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, o, {
55983
+ var drawBorderBuffer = (0,_geometries_buffer__WEBPACK_IMPORTED_MODULE_22__.getBufferBorder)(drawBorder, o.drawBorderBuffer, element.custom.skipConcave, bufferOffsetToUse);
55984
+ element.custom.updateGeneric((0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, o, {
55786
55985
  points: _points,
55787
55986
  drawBorder: drawBorder,
55788
55987
  drawBorderBuffer: drawBorderBuffer,
@@ -55810,7 +56009,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55810
56009
  direction: 1,
55811
56010
  rotation: 0,
55812
56011
  offset: new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Point(0, 0)
55813
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56012
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
55814
56013
  element.custom.getBorder = function (o) {
55815
56014
  var border = _this4.getPolygonBorder(o);
55816
56015
  if (o.sidesToDraw !== o.sides) {
@@ -55827,13 +56026,13 @@ var FigurePrimitives = /*#__PURE__*/function () {
55827
56026
  return border;
55828
56027
  };
55829
56028
  element.custom.getFill = function (border, fillOptions) {
55830
- return [(0,_geometries_polygon_polygon__WEBPACK_IMPORTED_MODULE_13__.getTrisFillPolygon)(fillOptions.offset, border, fillOptions.sides, fillOptions.sidesToDraw), 'TRIANGLES'];
56029
+ return [(0,_geometries_polygon_polygon__WEBPACK_IMPORTED_MODULE_14__.getTrisFillPolygon)(fillOptions.offset, border, fillOptions.sides, fillOptions.sidesToDraw), 'TRIANGLES'];
55831
56030
  };
55832
56031
  // element.custom.getLine = (o: OBJ_PolyLineTris) => this.getPolylineTris(o);
55833
56032
 
55834
56033
  element.drawingObject.getPointCountForAngle = function (angle) {
55835
56034
  var optionsToUse = element.custom.options;
55836
- var sidesToDraw = Math.floor(_tools_math__WEBPACK_IMPORTED_MODULE_3__.round(angle, 8) / _tools_math__WEBPACK_IMPORTED_MODULE_3__.round(Math.PI * 2, 8) * optionsToUse.sides);
56035
+ var sidesToDraw = Math.floor(_tools_math__WEBPACK_IMPORTED_MODULE_4__.round(angle, 8) / _tools_math__WEBPACK_IMPORTED_MODULE_4__.round(Math.PI * 2, 8) * optionsToUse.sides);
55837
56036
  if (optionsToUse.line == null) {
55838
56037
  return sidesToDraw * 3;
55839
56038
  }
@@ -55842,7 +56041,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55842
56041
  }
55843
56042
  return sidesToDraw * 6;
55844
56043
  };
55845
- element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56044
+ element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
55846
56045
  return element;
55847
56046
  }
55848
56047
 
@@ -55863,7 +56062,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55863
56062
  direction: 1,
55864
56063
  rotation: 0,
55865
56064
  offset: new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Point(0, 0)
55866
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56065
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
55867
56066
  element.custom.getBorder = function (o) {
55868
56067
  if (o.innerRadius == null) {
55869
56068
  o.innerRadius = o.radius / 3;
@@ -55875,9 +56074,9 @@ var FigurePrimitives = /*#__PURE__*/function () {
55875
56074
  return result;
55876
56075
  };
55877
56076
  element.custom.getFill = function (border, fillOptions) {
55878
- return [(0,_geometries_polygon_polygon__WEBPACK_IMPORTED_MODULE_13__.getTrisFillPolygon)(fillOptions.offset, border, fillOptions.sides, fillOptions.sidesToDraw), 'TRIANGLES'];
56077
+ return [(0,_geometries_polygon_polygon__WEBPACK_IMPORTED_MODULE_14__.getTrisFillPolygon)(fillOptions.offset, border, fillOptions.sides, fillOptions.sidesToDraw), 'TRIANGLES'];
55879
56078
  };
55880
- element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56079
+ element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
55881
56080
  return element;
55882
56081
  }
55883
56082
 
@@ -55901,7 +56100,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55901
56100
  sides: 1
55902
56101
  },
55903
56102
  offset: [0, 0]
55904
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56103
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
55905
56104
  element.custom.getBorder = function (o) {
55906
56105
  if (o.line != null && o.line.widthIs === 'inside') {
55907
56106
  o.line.widthIs = 'positive';
@@ -55912,13 +56111,13 @@ var FigurePrimitives = /*#__PURE__*/function () {
55912
56111
  if (o.offset != null) {
55913
56112
  o.offset = (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getPoint)(o.offset);
55914
56113
  }
55915
- return [o, (0,_geometries_rectangle__WEBPACK_IMPORTED_MODULE_14__.getRectangleBorder)(o)];
56114
+ return [o, (0,_geometries_rectangle__WEBPACK_IMPORTED_MODULE_15__.getRectangleBorder)(o)];
55916
56115
  };
55917
56116
  element.custom.getFill = function (border) {
55918
- return [(0,_geometries_rectangle__WEBPACK_IMPORTED_MODULE_14__.rectangleBorderToTris)(border), 'TRIANGLES'];
56117
+ return [(0,_geometries_rectangle__WEBPACK_IMPORTED_MODULE_15__.rectangleBorderToTris)(border), 'TRIANGLES'];
55919
56118
  };
55920
56119
  // element.custom.getLine = (o: OBJ_PolyLineTris) => this.getPolylineTris(o);
55921
- element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56120
+ element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
55922
56121
  return element;
55923
56122
  }
55924
56123
  }, {
@@ -55937,7 +56136,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
55937
56136
  yAlign: 'baseline',
55938
56137
  transform: new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Transform().scale(1).rotate(0).translate(0, 0),
55939
56138
  // color: this.defaultColor,
55940
- name: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.generateUniqueId)('primitive_'),
56139
+ name: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.generateUniqueId)('primitive_'),
55941
56140
  vertexShader: {
55942
56141
  dimension: 2,
55943
56142
  color: 'texture'
@@ -56004,7 +56203,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56004
56203
  yAlign: 'baseline',
56005
56204
  transform: new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Transform().scale(1).rotate(0).translate(0, 0),
56006
56205
  color: this.defaultColor,
56007
- name: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.generateUniqueId)('primitive_'),
56206
+ name: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.generateUniqueId)('primitive_'),
56008
56207
  vertexShader: {
56009
56208
  dimension: 2,
56010
56209
  color: 'texture'
@@ -56029,7 +56228,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56029
56228
  for (var _len18 = arguments.length, fo = new Array(_len18), _key18 = 0; _key18 < _len18; _key18++) {
56030
56229
  fo[_key18] = arguments[_key18];
56031
56230
  }
56032
- return _construct(_FigureElementPrimitiveGLText__WEBPACK_IMPORTED_MODULE_9__["default"], fo);
56231
+ return _construct(_FigureElementPrimitiveGLText__WEBPACK_IMPORTED_MODULE_10__["default"], fo);
56033
56232
  };
56034
56233
  var element = this.gl(o);
56035
56234
  element.setup(o);
@@ -56060,7 +56259,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56060
56259
  element.scenarios = options.scenarios;
56061
56260
  }
56062
56261
  if (options.scene != null) {
56063
- if (options.scene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_22__["default"]) {
56262
+ if (options.scene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_23__["default"]) {
56064
56263
  element.scene = options.scene;
56065
56264
  } else {
56066
56265
  element.setScene(options.scene);
@@ -56084,7 +56283,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56084
56283
  yAlign: 'baseline',
56085
56284
  transform: new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Transform().scale(1).rotate(0).translate(0, 0),
56086
56285
  color: this.defaultColor,
56087
- name: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.generateUniqueId)('primitive_'),
56286
+ name: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.generateUniqueId)('primitive_'),
56088
56287
  adjustments: {
56089
56288
  width: 0,
56090
56289
  ascent: 0,
@@ -56101,14 +56300,14 @@ var FigurePrimitives = /*#__PURE__*/function () {
56101
56300
  for (var _len20 = arguments.length, fo = new Array(_len20), _key20 = 0; _key20 < _len20; _key20++) {
56102
56301
  fo[_key20] = arguments[_key20];
56103
56302
  }
56104
- return _construct(_FigureElementPrimitiveGLText__WEBPACK_IMPORTED_MODULE_9__["default"], fo);
56303
+ return _construct(_FigureElementPrimitiveGLText__WEBPACK_IMPORTED_MODULE_10__["default"], fo);
56105
56304
  };
56106
56305
  o.transform = (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getTransform)(o.transform);
56107
56306
  if (o.position != null) {
56108
56307
  o.position = (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getPoint)(o.position);
56109
56308
  o.transform.updateTranslation(o.position);
56110
56309
  }
56111
- var element = new _FigureElementPrimitive2DText__WEBPACK_IMPORTED_MODULE_8__["default"](this.draw2D[0], o);
56310
+ var element = new _FigureElementPrimitive2DText__WEBPACK_IMPORTED_MODULE_9__["default"](this.draw2D[0], o);
56112
56311
  return this.elementSetup(element, o);
56113
56312
  }
56114
56313
  }, {
@@ -56128,15 +56327,15 @@ var FigurePrimitives = /*#__PURE__*/function () {
56128
56327
  for (var _len21 = arguments.length, options = new Array(_len21), _key21 = 0; _key21 < _len21; _key21++) {
56129
56328
  options[_key21] = arguments[_key21];
56130
56329
  }
56131
- var combinedOptions = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options));
56330
+ var combinedOptions = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options));
56132
56331
  for (var i = options.length - 1; i >= 0; i -= 1) {
56133
- if (options[i].scene != null && options[i].scene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_22__["default"]) {
56332
+ if (options[i].scene != null && options[i].scene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_23__["default"]) {
56134
56333
  combinedOptions.scene = options[i].scene;
56135
56334
  break;
56136
56335
  }
56137
56336
  }
56138
56337
  for (var _i2 = options.length - 1; _i2 >= 0; _i2 -= 1) {
56139
- if (options[_i2].changeScene != null && options[_i2].changeScene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_22__["default"]) {
56338
+ if (options[_i2].changeScene != null && options[_i2].changeScene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_23__["default"]) {
56140
56339
  combinedOptions.changeScene = options[_i2].changeScene;
56141
56340
  break;
56142
56341
  }
@@ -56145,16 +56344,16 @@ var FigurePrimitives = /*#__PURE__*/function () {
56145
56344
  scene = combinedOptions.scene;
56146
56345
  if (scene == null) {
56147
56346
  scene = this.scene;
56148
- } else if (!(scene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_22__["default"])) {
56149
- scene = new _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_22__["default"](scene);
56347
+ } else if (!(scene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_23__["default"])) {
56348
+ scene = new _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_23__["default"](scene);
56150
56349
  }
56151
- if (changeScene != null && !(changeScene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_22__["default"])) {
56152
- changeScene = new _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_22__["default"](changeScene);
56350
+ if (changeScene != null && !(changeScene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_23__["default"])) {
56351
+ changeScene = new _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_23__["default"](changeScene);
56153
56352
  }
56154
56353
  defaultOptions.width = scene.right - scene.left;
56155
56354
  defaultOptions.height = scene.top - scene.bottom;
56156
56355
  defaultOptions.position = [scene.left + defaultOptions.width / 2, scene.bottom + defaultOptions.height / 2];
56157
- var o = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjectsWithOptions)({}, defaultOptions, combinedOptions);
56356
+ var o = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjectsWithOptions)({}, defaultOptions, combinedOptions);
56158
56357
  var element = this.rectangle({
56159
56358
  width: o.width,
56160
56359
  height: o.height,
@@ -56166,7 +56365,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56166
56365
  for (var _len22 = arguments.length, fo = new Array(_len22), _key22 = 0; _key22 < _len22; _key22++) {
56167
56366
  fo[_key22] = arguments[_key22];
56168
56367
  }
56169
- return _construct(_FigureElementPrimitiveGesture__WEBPACK_IMPORTED_MODULE_23__["default"], fo);
56368
+ return _construct(_FigureElementPrimitiveGesture__WEBPACK_IMPORTED_MODULE_24__["default"], fo);
56170
56369
  }
56171
56370
  });
56172
56371
  element.setup(o);
@@ -56186,7 +56385,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56186
56385
  for (var _len23 = arguments.length, options = new Array(_len23), _key23 = 0; _key23 < _len23; _key23++) {
56187
56386
  options[_key23] = arguments[_key23];
56188
56387
  }
56189
- var o = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjectsWithOptions.apply(void 0, [{
56388
+ var o = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjectsWithOptions.apply(void 0, [{
56190
56389
  except: 'controlScene'
56191
56390
  }, {}, {
56192
56391
  left: 0,
@@ -56218,7 +56417,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56218
56417
  }
56219
56418
  for (var i = options.length - 1; i >= 0; i -= 1) {
56220
56419
  if (options[i].controlScene != null) {
56221
- if (options[i].controlScene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_22__["default"]) {
56420
+ if (options[i].controlScene instanceof _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_23__["default"]) {
56222
56421
  element.custom.sceneToChange = options[i].controlScene;
56223
56422
  i = -1;
56224
56423
  } else if (typeof options[i].controlScene === 'string') {
@@ -56227,7 +56426,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56227
56426
  }
56228
56427
  }
56229
56428
  }
56230
- element.scene = new _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_22__["default"]({
56429
+ element.scene = new _tools_geometry_scene__WEBPACK_IMPORTED_MODULE_23__["default"]({
56231
56430
  style: '2D',
56232
56431
  left: 0,
56233
56432
  right: 1,
@@ -56286,7 +56485,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56286
56485
  }
56287
56486
  if (deltaEl > 0 && angleToLock > Math.PI / 2) {
56288
56487
  angleToLock = Math.PI - angleToLock;
56289
- deltaEl = _tools_math__WEBPACK_IMPORTED_MODULE_3__.round(Math.min(angleToLock - deltaAngle, deltaEl), 4);
56488
+ deltaEl = _tools_math__WEBPACK_IMPORTED_MODULE_4__.round(Math.min(angleToLock - deltaAngle, deltaEl), 4);
56290
56489
  }
56291
56490
  var t = [['r', deltaEl].concat(_toConsumableArray(tiltAxis.toArray())), ['r', deltaAz].concat(_toConsumableArray(panAxis.toArray()))];
56292
56491
  var matrix = (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getTransform)(t).matrix();
@@ -56316,7 +56515,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56316
56515
  xAlign: 'center',
56317
56516
  yAlign: 'middle',
56318
56517
  sides: 20
56319
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56518
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
56320
56519
  element.custom.getBorder = function (o) {
56321
56520
  if (o.line != null && o.line.widthIs === 'inside') {
56322
56521
  o.line.widthIs = 'positive';
@@ -56324,13 +56523,13 @@ var FigurePrimitives = /*#__PURE__*/function () {
56324
56523
  if (o.line != null && o.line.widthIs === 'outside') {
56325
56524
  o.line.widthIs = 'negative';
56326
56525
  }
56327
- return [o, (0,_geometries_ellipse__WEBPACK_IMPORTED_MODULE_15__.getEllipseBorder)(o)];
56526
+ return [o, (0,_geometries_ellipse__WEBPACK_IMPORTED_MODULE_16__.getEllipseBorder)(o)];
56328
56527
  };
56329
56528
  element.custom.getFill = function (border) {
56330
- return [(0,_geometries_ellipse__WEBPACK_IMPORTED_MODULE_15__.ellipseBorderToTris)(border), 'TRIANGLES'];
56529
+ return [(0,_geometries_ellipse__WEBPACK_IMPORTED_MODULE_16__.ellipseBorderToTris)(border), 'TRIANGLES'];
56331
56530
  };
56332
56531
  // element.custom.getLine = (o: OBJ_PolyLineTris) => this.getPolylineTris(o);
56333
- element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56532
+ element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
56334
56533
  return element;
56335
56534
  }
56336
56535
 
@@ -56351,7 +56550,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56351
56550
  angle: 1,
56352
56551
  offset: [0, 0],
56353
56552
  fillCenter: false
56354
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56553
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
56355
56554
  element.custom.getBorder = function (o) {
56356
56555
  if (o.line != null && o.line.widthIs === 'inside') {
56357
56556
  o.line.widthIs = 'positive';
@@ -56363,13 +56562,13 @@ var FigurePrimitives = /*#__PURE__*/function () {
56363
56562
  o.offset = (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getPoint)(o.offset);
56364
56563
  }
56365
56564
  element.custom.close = false;
56366
- return [o, (0,_geometries_arc__WEBPACK_IMPORTED_MODULE_16__.getArcBorder)(o)];
56565
+ return [o, (0,_geometries_arc__WEBPACK_IMPORTED_MODULE_17__.getArcBorder)(o)];
56367
56566
  };
56368
56567
  element.custom.getFill = function (border) {
56369
- return [(0,_geometries_arc__WEBPACK_IMPORTED_MODULE_16__.arcBorderToTris)(border), 'TRIANGLES'];
56568
+ return [(0,_geometries_arc__WEBPACK_IMPORTED_MODULE_17__.arcBorderToTris)(border), 'TRIANGLES'];
56370
56569
  };
56371
56570
  // element.custom.getLine = (o: OBJ_PolyLineTris) => this.getPolylineTris(o);
56372
- element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56571
+ element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
56373
56572
  return element;
56374
56573
  }
56375
56574
 
@@ -56391,7 +56590,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56391
56590
  top: 'center',
56392
56591
  direction: 1,
56393
56592
  rotation: 0
56394
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56593
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
56395
56594
  element.custom.getBorder = function (o) {
56396
56595
  if (o.xAlign == null) {
56397
56596
  if (o.points != null) {
@@ -56418,8 +56617,8 @@ var FigurePrimitives = /*#__PURE__*/function () {
56418
56617
  // } else {
56419
56618
  // element.custom.bufferOffset = 'negative';
56420
56619
  // }
56421
- var border = (0,_geometries_triangle__WEBPACK_IMPORTED_MODULE_17__.getTriangleBorder)(o);
56422
- if (o.direction === -1 || (0,_geometries_triangle__WEBPACK_IMPORTED_MODULE_17__.getTriangleDirection)(border) === -1) {
56620
+ var border = (0,_geometries_triangle__WEBPACK_IMPORTED_MODULE_18__.getTriangleBorder)(o);
56621
+ if (o.direction === -1 || (0,_geometries_triangle__WEBPACK_IMPORTED_MODULE_18__.getTriangleDirection)(border) === -1) {
56423
56622
  border.reverse();
56424
56623
  }
56425
56624
  return [o, border];
@@ -56431,7 +56630,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56431
56630
  element.custom.getFill = function (border) {
56432
56631
  return [border, 'TRIANGLES'];
56433
56632
  };
56434
- element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56633
+ element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
56435
56634
  return element;
56436
56635
  }
56437
56636
 
@@ -56456,7 +56655,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56456
56655
  tail: false,
56457
56656
  drawPosition: new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Point(0, 0)
56458
56657
  // barb: this.defaultLength / 8,
56459
- }, _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56658
+ }, _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
56460
56659
  element.custom.getBorder = function (o) {
56461
56660
  if (o.line != null && o.line.widthIs === 'inside') {
56462
56661
  o.line.widthIs = 'positive';
@@ -56464,17 +56663,17 @@ var FigurePrimitives = /*#__PURE__*/function () {
56464
56663
  if (o.line != null && o.line.widthIs === 'outside') {
56465
56664
  o.line.widthIs = 'negative';
56466
56665
  }
56467
- var optionsWithDefaultArrow = (0,_geometries_arrow__WEBPACK_IMPORTED_MODULE_18__.defaultArrowOptions)(o);
56468
- var _getArrow = (0,_geometries_arrow__WEBPACK_IMPORTED_MODULE_18__.getArrow)(optionsWithDefaultArrow),
56666
+ var optionsWithDefaultArrow = (0,_geometries_arrow__WEBPACK_IMPORTED_MODULE_19__.defaultArrowOptions)(o);
56667
+ var _getArrow = (0,_geometries_arrow__WEBPACK_IMPORTED_MODULE_19__.getArrow)(optionsWithDefaultArrow),
56469
56668
  _getArrow2 = _slicedToArray(_getArrow, 2),
56470
56669
  border = _getArrow2[0],
56471
56670
  borderBuffer = _getArrow2[1];
56472
56671
  return [optionsWithDefaultArrow, border, borderBuffer];
56473
56672
  };
56474
56673
  element.custom.getFill = function (border, o) {
56475
- return [(0,_geometries_arrow__WEBPACK_IMPORTED_MODULE_18__.getArrowTris)(border, o), 'TRIANGLES'];
56674
+ return [(0,_geometries_arrow__WEBPACK_IMPORTED_MODULE_19__.getArrowTris)(border, o), 'TRIANGLES'];
56476
56675
  };
56477
- element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options)));
56676
+ element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options)));
56478
56677
  return element;
56479
56678
  }
56480
56679
 
@@ -56503,7 +56702,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56503
56702
  }
56504
56703
  };
56505
56704
  var getTris = function getTris(points) {
56506
- return (0,_geometries_lines_lines__WEBPACK_IMPORTED_MODULE_12__.makePolyLine)(points, element.custom.options.line.width, false, 'mid', 'auto',
56705
+ return (0,_geometries_lines_lines__WEBPACK_IMPORTED_MODULE_13__.makePolyLine)(points, element.custom.options.line.width, false, 'mid', 'auto',
56507
56706
  // cornerStyle doesn't matter
56508
56707
  0.1,
56509
56708
  // cornerSize doesn't matter
@@ -56514,7 +56713,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56514
56713
  element.custom.options.line.dash, element.custom.options.line.linePrimitives, element.custom.options.line.lineNum, [[]], 0);
56515
56714
  };
56516
56715
  element.custom.updatePoints = function (updateOptions) {
56517
- var o = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, element.custom.options, updateOptions);
56716
+ var o = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, element.custom.options, updateOptions);
56518
56717
  element.custom.options = o;
56519
56718
  // Prioritize Num over Step. Only define Num from Step if Num is undefined.
56520
56719
  var bounds = (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getRect)(o.bounds);
@@ -56567,7 +56766,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56567
56766
  var _getTris = getTris([yLineStart, yLineStop]),
56568
56767
  _getTris2 = _slicedToArray(_getTris, 1),
56569
56768
  yLine = _getTris2[0];
56570
- yTris = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_20__.copyPoints)(yLine, [{
56769
+ yTris = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_21__.copyPoints)(yLine, [{
56571
56770
  along: 'x',
56572
56771
  num: xNum - 1,
56573
56772
  step: xStep
@@ -56577,7 +56776,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56577
56776
  var _getTris3 = getTris([xLineStart, xLineStop]),
56578
56777
  _getTris4 = _slicedToArray(_getTris3, 1),
56579
56778
  xLine = _getTris4[0];
56580
- xTris = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_20__.copyPoints)(xLine, [{
56779
+ xTris = (0,_geometries_copy_copy__WEBPACK_IMPORTED_MODULE_21__.copyPoints)(xLine, [{
56581
56780
  along: 'y',
56582
56781
  num: yNum - 1,
56583
56782
  step: yStep
@@ -56598,14 +56797,14 @@ var FigurePrimitives = /*#__PURE__*/function () {
56598
56797
  drawBorderBuffer = [[border[0].add(-buf, -buf), border[1].add(buf, -buf), border[2].add(buf, buf), border[3].add(-buf, buf)]];
56599
56798
  }
56600
56799
  }
56601
- element.custom.updateGeneric((0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, o, {
56800
+ element.custom.updateGeneric((0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, o, {
56602
56801
  points: [].concat(_toConsumableArray(xTris), _toConsumableArray(yTris)),
56603
56802
  drawBorder: drawBorder,
56604
56803
  drawBorderBuffer: drawBorderBuffer,
56605
56804
  drawType: o.line.linePrimitives ? 'LINES' : 'TRIANGLES'
56606
56805
  }));
56607
56806
  };
56608
- element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(optionsIn)));
56807
+ element.custom.updatePoints(_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(optionsIn)));
56609
56808
  return element;
56610
56809
  }
56611
56810
 
@@ -56619,15 +56818,15 @@ var FigurePrimitives = /*#__PURE__*/function () {
56619
56818
  for (var _len29 = arguments.length, options = new Array(_len29), _key29 = 0; _key29 < _len29; _key29++) {
56620
56819
  options[_key29] = arguments[_key29];
56621
56820
  }
56622
- var element = this.polyline(_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}, {
56821
+ var element = this.polyline(_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}, {
56623
56822
  transform: new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Transform().scale(1).rotate(0).translate()
56624
56823
  }].concat(options, [{
56625
56824
  points: [[0, 0], [0, 1]],
56626
56825
  dash: [],
56627
56826
  arrow: null
56628
56827
  }])));
56629
- var joinedOptions = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}].concat(options));
56630
- element.custom.options = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, element.custom.options, {
56828
+ var joinedOptions = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}].concat(options));
56829
+ element.custom.options = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, element.custom.options, {
56631
56830
  p1: [0, 0],
56632
56831
  angle: 0,
56633
56832
  length: this.defaultLength,
@@ -56665,14 +56864,14 @@ var FigurePrimitives = /*#__PURE__*/function () {
56665
56864
 
56666
56865
  element.custom.updatePolyline = element.custom.updatePoints;
56667
56866
  element.custom.updatePoints = function (updateOptions) {
56668
- var o = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, element.custom.options, updateOptions);
56669
- var _getLine = (0,_geometries_line__WEBPACK_IMPORTED_MODULE_19__["default"])(o),
56867
+ var o = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, element.custom.options, updateOptions);
56868
+ var _getLine = (0,_geometries_line__WEBPACK_IMPORTED_MODULE_20__["default"])(o),
56670
56869
  _getLine2 = _slicedToArray(_getLine, 3),
56671
56870
  updatedPoints = _getLine2[0],
56672
56871
  updatedBorder = _getLine2[1],
56673
56872
  updatedTouchBorder = _getLine2[2];
56674
56873
  // element.custom.setupLine(updatedPoints, o);
56675
- element.custom.updatePolyline((0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, o, {
56874
+ element.custom.updatePolyline((0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, o, {
56676
56875
  points: updatedPoints,
56677
56876
  border: updatedBorder,
56678
56877
  touchBorder: updatedTouchBorder
@@ -56700,7 +56899,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56700
56899
  }, {
56701
56900
  key: "textGL",
56702
56901
  value: function textGL(options) {
56703
- return (0,_Text__WEBPACK_IMPORTED_MODULE_10__["default"])(this.webgl[0], options);
56902
+ return (0,_Text__WEBPACK_IMPORTED_MODULE_11__["default"])(this.webgl[0], options);
56704
56903
  }
56705
56904
 
56706
56905
  /*
@@ -56734,7 +56933,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56734
56933
  for (var _len30 = arguments.length, optionsIn = new Array(_len30), _key30 = 0; _key30 < _len30; _key30++) {
56735
56934
  optionsIn[_key30] = arguments[_key30];
56736
56935
  }
56737
- var options = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}, defaultOptions].concat(optionsIn));
56936
+ var options = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}, defaultOptions].concat(optionsIn));
56738
56937
  for (var i = 0; i < optionsIn.length; i += 1) {
56739
56938
  if (optionsIn[i].font != null) {
56740
56939
  if (optionsIn[i].font.src) {
@@ -56955,7 +57154,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56955
57154
  wrap: true,
56956
57155
  id: "id__temp_".concat(Math.round(Math.random() * 10000))
56957
57156
  };
56958
- var options = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects)({}, defaultOptions, optionsIn);
57157
+ var options = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects)({}, defaultOptions, optionsIn);
56959
57158
  options.element = optionsIn.element;
56960
57159
  var element;
56961
57160
  var parent;
@@ -56984,7 +57183,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
56984
57183
  if (parent == null) {
56985
57184
  parent = this.htmlCanvas;
56986
57185
  }
56987
- var hT = new _DrawingObjects_HTMLObject_HTMLObject__WEBPACK_IMPORTED_MODULE_11__["default"](parent, options.id, new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Point(0, 0), options.yAlign, options.xAlign, options.element);
57186
+ var hT = new _DrawingObjects_HTMLObject_HTMLObject__WEBPACK_IMPORTED_MODULE_12__["default"](parent, options.id, new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Point(0, 0), options.yAlign, options.xAlign, options.element);
56988
57187
  var p = (0,_tools_g2__WEBPACK_IMPORTED_MODULE_0__.getPoint)(options.position);
56989
57188
  var figureElement = new _Element__WEBPACK_IMPORTED_MODULE_2__.FigureElementPrimitive(hT, new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Transform().scale(1, 1).translate(p.x, p.y), [1, 1, 1, 1]);
56990
57189
  figureElement.timeKeeper = this.timeKeeper;
@@ -57016,7 +57215,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
57016
57215
  element.style.position = 'absolute';
57017
57216
  element.setAttribute('id', id);
57018
57217
  this.htmlCanvas.appendChild(element);
57019
- var hT = new _DrawingObjects_HTMLObject_HTMLObject__WEBPACK_IMPORTED_MODULE_11__["default"](this.htmlCanvas, id, new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Point(0, 0), yAlign, xAlign, elementToAdd);
57218
+ var hT = new _DrawingObjects_HTMLObject_HTMLObject__WEBPACK_IMPORTED_MODULE_12__["default"](this.htmlCanvas, id, new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Point(0, 0), yAlign, xAlign, elementToAdd);
57020
57219
  var figureElement = new _Element__WEBPACK_IMPORTED_MODULE_2__.FigureElementPrimitive(hT, new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Transform().scale(1, 1).translate(location.x, location.y), [1, 1, 1, 1]);
57021
57220
  figureElement.timeKeeper = this.timeKeeper;
57022
57221
  figureElement.recorder = this.recorder;
@@ -57026,7 +57225,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
57026
57225
  key: "htmlImage",
57027
57226
  value: function htmlImage() {
57028
57227
  var defaultOptions = {
57029
- id: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.generateUniqueId)('id__html_image_'),
57228
+ id: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.generateUniqueId)('id__html_image_'),
57030
57229
  classes: '',
57031
57230
  position: new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Point(0, 0),
57032
57231
  yAlign: 'middle',
@@ -57036,7 +57235,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
57036
57235
  for (var _len31 = arguments.length, optionsIn = new Array(_len31), _key31 = 0; _key31 < _len31; _key31++) {
57037
57236
  optionsIn[_key31] = arguments[_key31];
57038
57237
  }
57039
- var options = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}, defaultOptions].concat(optionsIn));
57238
+ var options = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}, defaultOptions].concat(optionsIn));
57040
57239
  var image = document.createElement('img');
57041
57240
  image.src = options.src;
57042
57241
  var id = options.id,
@@ -57056,7 +57255,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
57056
57255
  value: function htmlText() {
57057
57256
  var defaultOptions = {
57058
57257
  text: '',
57059
- id: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_4__.generateUniqueId)('id__html_text_'),
57258
+ id: (0,_tools_tools__WEBPACK_IMPORTED_MODULE_5__.generateUniqueId)('id__html_text_'),
57060
57259
  classes: '',
57061
57260
  position: new _tools_g2__WEBPACK_IMPORTED_MODULE_0__.Point(0, 0),
57062
57261
  yAlign: 'middle',
@@ -57066,7 +57265,7 @@ var FigurePrimitives = /*#__PURE__*/function () {
57066
57265
  for (var _len32 = arguments.length, optionsIn = new Array(_len32), _key32 = 0; _key32 < _len32; _key32++) {
57067
57266
  optionsIn[_key32] = arguments[_key32];
57068
57267
  }
57069
- var options = _tools_tools__WEBPACK_IMPORTED_MODULE_4__.joinObjects.apply(void 0, [{}, defaultOptions].concat(optionsIn));
57268
+ var options = _tools_tools__WEBPACK_IMPORTED_MODULE_5__.joinObjects.apply(void 0, [{}, defaultOptions].concat(optionsIn));
57070
57269
  var inside = document.createElement('div');
57071
57270
  (0,_tools_htmlGenerator__WEBPACK_IMPORTED_MODULE_1__.setHTML)(inside, options.text, options.modifiers);
57072
57271
  var id = options.id,
@@ -66072,6 +66271,7 @@ var Atlas = /*#__PURE__*/function () {
66072
66271
 
66073
66272
  __webpack_require__.r(__webpack_exports__);
66074
66273
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
66274
+ /* harmony export */ CHANNELS_PER_MASK: () => (/* binding */ CHANNELS_PER_MASK),
66075
66275
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
66076
66276
  /* harmony export */ });
66077
66277
  /* harmony import */ var _tools_tools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../tools/tools */ "./src/js/tools/tools.ts");
@@ -66088,6 +66288,14 @@ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(
66088
66288
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
66089
66289
 
66090
66290
 
66291
+ /**
66292
+ * Number of recolorable regions a single mask texture provides in the
66293
+ * `textureMap` color mode - one per channel (r, g, b, a). N masks therefore
66294
+ * define `CHANNELS_PER_MASK * N` tints.
66295
+ * @group Shaders
66296
+ */
66297
+ var CHANNELS_PER_MASK = 4;
66298
+
66091
66299
  /**
66092
66300
  * Options used to compose vertex shader source code.
66093
66301
  *
@@ -66143,7 +66351,7 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
66143
66351
  * to fragment shader used when `light = 'point'`
66144
66352
  *
66145
66353
  * @property {2 | 3} [dimension] (`2`)
66146
- * @property {'vertex' | 'uniform' | 'texture'} [color] (`uniform`)
66354
+ * @property {'vertex' | 'uniform' | 'texture' | 'textureMap'} [color] (`uniform`)
66147
66355
  * @property {'point' | 'directional' | null} [light] (`null`)
66148
66356
  * @interface
66149
66357
  * @group Shaders
@@ -66176,7 +66384,16 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
66176
66384
  * - `vec4 u_color`: global color for all vertices used all times. When
66177
66385
  * `color = 'texture'` or `color = 'vertex'`, only the alpha channel of
66178
66386
  * `u_color` is used.
66179
- * - `sampler2D u_texture`: texture used when `color = 'texture'`.
66387
+ * - `sampler2D u_texture`: texture used when `color = 'texture'`,
66388
+ * `color = 'textureAlpha'` or `color = 'textureMap'`.
66389
+ * - `sampler2D u_mask0`, `u_mask1`, ...: mask textures used when
66390
+ * `color = 'textureMap'` (one per mask, set by the `masks` count). Each mask's
66391
+ * `r`, `g`, `b` and `a` channels select four regions of `u_texture` to
66392
+ * recolor. Mask `m`'s four channels map to tints `u_tint{4m+0..3}`.
66393
+ * - `vec4 u_tint0`, `u_tint1`, ...: region tint colors used when
66394
+ * `color = 'textureMap'` (four per mask). The `rgb` channels are the tint
66395
+ * color and the `a` channel is the tint strength (`0` leaves the base texture
66396
+ * unchanged).
66180
66397
  * - `vec3 u_directionalLight`: world space position of directional light
66181
66398
  * source used when `light = 'directional'`
66182
66399
  * - `float u_ambientLight`: ambient light used when `light = 'directional'` or
@@ -66196,7 +66413,7 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
66196
66413
  * from vertex shader used when `light = 'point'`
66197
66414
  *
66198
66415
  * @property {2 | 3} [dimension] (`2`)
66199
- * @property {'vertex' | 'uniform' | 'texture'} [color] (`uniform`)
66416
+ * @property {'vertex' | 'uniform' | 'texture' | 'textureMap'} [color] (`uniform`)
66200
66417
  * @property {'point' | 'directional' | null} [light] (`null`)
66201
66418
  * @interface
66202
66419
  * @group Shaders
@@ -66235,7 +66452,7 @@ function composeVertexShader() {
66235
66452
  src += 'attribute vec4 a_vertex;\n';
66236
66453
  vars.push('a_vertex');
66237
66454
  }
66238
- if (color === 'texture') {
66455
+ if (color === 'texture' || color === 'textureMap') {
66239
66456
  src += 'attribute vec2 a_texcoord;\n';
66240
66457
  src += 'varying vec2 v_texcoord;\n';
66241
66458
  vars.push('a_texcoord');
@@ -66270,7 +66487,7 @@ function composeVertexShader() {
66270
66487
  } else {
66271
66488
  src += ' gl_Position = u_worldViewProjectionMatrix * a_vertex;\n';
66272
66489
  }
66273
- if (color === 'texture') {
66490
+ if (color === 'texture' || color === 'textureMap') {
66274
66491
  src += ' v_texcoord = a_texcoord;\n';
66275
66492
  } else if (color === 'vertex') {
66276
66493
  src += ' v_color = a_color;\n';
@@ -66289,11 +66506,18 @@ function composeFragShader() {
66289
66506
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
66290
66507
  var defaultOptions = {
66291
66508
  color: 'uniform',
66292
- light: null
66509
+ light: null,
66510
+ masks: 1
66293
66511
  };
66294
66512
  var _joinObjects2 = (0,_tools_tools__WEBPACK_IMPORTED_MODULE_0__.joinObjects)(defaultOptions, options),
66295
66513
  light = _joinObjects2.light,
66296
- color = _joinObjects2.color;
66514
+ color = _joinObjects2.color,
66515
+ masks = _joinObjects2.masks;
66516
+ // textureMap recolors the base texture using one or more mask textures. Each
66517
+ // mask contributes CHANNELS_PER_MASK regions (its r, g, b, a channels), so
66518
+ // numMasks masks define CHANNELS_PER_MASK * numMasks tints.
66519
+ var numMasks = color === 'textureMap' ? Math.max(1, masks) : 0;
66520
+ var channels = ['r', 'g', 'b', 'a'];
66297
66521
  var src = '\nprecision mediump float;\n';
66298
66522
  src += 'uniform vec4 u_color;\n';
66299
66523
  var vars = ['u_color'];
@@ -66304,6 +66528,18 @@ function composeFragShader() {
66304
66528
  src += 'uniform sampler2D u_texture;\n';
66305
66529
  src += 'varying vec2 v_texcoord;\n';
66306
66530
  vars.push('u_texture');
66531
+ } else if (color === 'textureMap') {
66532
+ src += 'uniform sampler2D u_texture;\n';
66533
+ vars.push('u_texture');
66534
+ for (var m = 0; m < numMasks; m += 1) {
66535
+ src += "uniform sampler2D u_mask".concat(m, ";\n");
66536
+ vars.push("u_mask".concat(m));
66537
+ }
66538
+ for (var t = 0; t < numMasks * CHANNELS_PER_MASK; t += 1) {
66539
+ src += "uniform vec4 u_tint".concat(t, ";\n");
66540
+ vars.push("u_tint".concat(t));
66541
+ }
66542
+ src += 'varying vec2 v_texcoord;\n';
66307
66543
  }
66308
66544
  if (light === 'directional') {
66309
66545
  src += 'varying vec3 v_normal;\n';
@@ -66338,6 +66574,23 @@ function composeFragShader() {
66338
66574
  // src += ' gl_FragColor.rgb *= gl_FragColor.a * texture2D(u_texture, v_texcoord).a;\n';
66339
66575
  // src += ' gl_FragColor = texture2D(u_texture, v_texcoord).a * u_color;\n';
66340
66576
  src += ' gl_FragColor.rgb *= gl_FragColor.a;\n';
66577
+ } else if (color === 'textureMap') {
66578
+ // Base texture color, with each mask texture retinting up to four regions.
66579
+ // Each mask channel (r, g, b, a) selects a region, and the matching u_tint's
66580
+ // alpha controls how strongly that region is recolored (0 = leave the base
66581
+ // color unchanged). With one mask this is exactly four mixes and one extra
66582
+ // texture fetch; each additional mask adds one fetch and four mixes.
66583
+ src += ' vec4 base = texture2D(u_texture, v_texcoord);\n';
66584
+ src += ' vec3 col = base.rgb;\n';
66585
+ for (var _m = 0; _m < numMasks; _m += 1) {
66586
+ src += " vec4 mask".concat(_m, " = texture2D(u_mask").concat(_m, ", v_texcoord);\n");
66587
+ for (var c = 0; c < CHANNELS_PER_MASK; c += 1) {
66588
+ var _t = _m * CHANNELS_PER_MASK + c;
66589
+ src += " col = mix(col, u_tint".concat(_t, ".rgb, mask").concat(_m, ".").concat(channels[c], " * u_tint").concat(_t, ".a);\n");
66590
+ }
66591
+ }
66592
+ src += ' gl_FragColor = vec4(col, base.a * u_color.a);\n';
66593
+ src += ' gl_FragColor.rgb *= gl_FragColor.a;\n';
66341
66594
  }
66342
66595
 
66343
66596
  // src += ' gl_FragColor.rgb *= gl_FragColor.a;\n';
@@ -81845,8 +82098,8 @@ var tools = {
81845
82098
  */
81846
82099
 
81847
82100
  var Fig = {
81848
- version: "1.7.0",
81849
- gitHash: "8c04ba173",
82101
+ version: "1.8.0",
82102
+ gitHash: "4b64a8de5",
81850
82103
  tools: tools,
81851
82104
  Figure: _js_figure_Figure__WEBPACK_IMPORTED_MODULE_5__["default"],
81852
82105
  Recorder: _js_figure_Recorder_Recorder__WEBPACK_IMPORTED_MODULE_7__.Recorder,