@buerli.io/react-cad 0.11.0 → 0.12.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/build/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { useDrawing, CameraHelper, useBuerli, usePlugin, GlobalTransform, BuerliGeometry, usePluginExists, useFeaturePluginDef } from '@buerli.io/react';
2
2
  import * as React from 'react';
3
- import React__default, { useMemo, forwardRef, useState, useCallback, useEffect, useRef, memo, useContext, useReducer } from 'react';
3
+ import React__default, { useState, useMemo, forwardRef, useCallback, useEffect, useRef, memo, useContext, useReducer } from 'react';
4
4
  import { ccUtils, CCClasses, ccAPI, ReorientedType, FlipType, BooleanOperationType, ExtrusionType, ChamferType, WorkAxisType, WorkPlaneType, WorkPointType, WorkCoordSystemType, DataType } from '@buerli.io/classcad';
5
5
  import * as THREE from 'three';
6
6
  import { Matrix4 } from 'three';
7
- import { getDrawing, createGraphicItem, MemberType, MathUtils, api, showMessage, createInfo, getPlugin, BuerliScope, GraphicType, solidFilter, edgeFilter, loopFilter, planeFilter, EntityTypes, Measure, MeasureResultType, pointFilter, lineFilter, arcFilter, circleFilter, arcCircleFilter, meshFilter } from '@buerli.io/core';
7
+ import { getDrawing, createGraphicItem, MemberType, MathUtils, api, showMessage, createInfo, getPlugin, BuerliScope, GraphicType, solidFilter, edgeFilter, meshFilter, loopFilter, planeFilter, EntityTypes, Measure, MeasureResultType, pointFilter, lineFilter, arcFilter, circleFilter, arcCircleFilter } from '@buerli.io/core';
8
8
  import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
9
9
  import _extends from '@babel/runtime/helpers/esm/extends';
10
10
  import { useFrame, useThree, createPortal, extend } from '@react-three/fiber';
@@ -17,6 +17,7 @@ import { ArrowUpOutlined, CheckOutlined, QuestionCircleFilled, DownOutlined, Rig
17
17
  import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
18
18
  import { findDOMNode } from 'react-dom';
19
19
  import { Tooltip, Input as Input$1, Typography, Tag, Space, Tabs as Tabs$1, Divider as Divider$1, Button, Badge, Modal, Dropdown as Dropdown$1, Skeleton as Skeleton$1 } from 'antd';
20
+ import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';
20
21
  import TabsImpl from 'antd/lib/tabs';
21
22
  import RadioGroupImpl from 'antd/lib/radio/group';
22
23
  import RadioButtonImpl from 'antd/lib/radio/radioButton';
@@ -38,8 +39,8 @@ import { CSS } from '@dnd-kit/utilities';
38
39
  import Tooltip$1 from 'antd/lib/tooltip';
39
40
  import * as deepmerge from 'deepmerge';
40
41
 
41
- function ownKeys$w(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
42
- function _objectSpread$w(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$w(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$w(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
42
+ function ownKeys$x(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
43
+ function _objectSpread$x(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$x(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$x(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
43
44
  function getGraphicId(tree, refOrObjId) {
44
45
  const res = {
45
46
  graphicId: refOrObjId,
@@ -102,7 +103,7 @@ function useSelectedItems(drawingId, refOrObjIds) {
102
103
  window.console.error('Product is not a CC_Part. Assembly is not supported now');
103
104
  }
104
105
  const createSelItem = React__default.useCallback(element => {
105
- return createGraphicItem(prodId, _objectSpread$w(_objectSpread$w({}, element), {}, {
106
+ return createGraphicItem(prodId, _objectSpread$x(_objectSpread$x({}, element), {}, {
106
107
  productId: prodId
107
108
  }));
108
109
  }, [prodId]);
@@ -127,7 +128,7 @@ function useSelectedItems(drawingId, refOrObjIds) {
127
128
  if (grIds && grIds.length > 0) {
128
129
  const elem = cont.map[Number(grIds[0])];
129
130
  if (elem) {
130
- elems.push(_objectSpread$w(_objectSpread$w({}, elem), {}, {
131
+ elems.push(_objectSpread$x(_objectSpread$x({}, elem), {}, {
131
132
  graphicId: contId,
132
133
  type: cont.type
133
134
  }));
@@ -163,8 +164,12 @@ function useSelectedItems(drawingId, refOrObjIds) {
163
164
  return selectedItems;
164
165
  }
165
166
 
166
- function ownKeys$v(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
167
- function _objectSpread$v(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$v(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$v(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
167
+ const EMPTYARRAY = [];
168
+ const NOCCID = Number.MIN_SAFE_INTEGER;
169
+ const EMPTYSTR = '';
170
+
171
+ function ownKeys$w(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
172
+ function _objectSpread$w(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$w(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$w(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
168
173
  function addMembers(drawingId, ccObjId) {
169
174
  const drawingState = getDrawing(drawingId);
170
175
  const objInTree = drawingState.structure.tree[ccObjId];
@@ -175,7 +180,7 @@ function addMembers(drawingId, ccObjId) {
175
180
  const members = {};
176
181
  Object.keys(curMembers).forEach(memberName => {
177
182
  const curMember = curMembers[memberName];
178
- members[memberName] = _objectSpread$v(_objectSpread$v({}, curMember), {}, {
183
+ members[memberName] = _objectSpread$w(_objectSpread$w({}, curMember), {}, {
179
184
  name: memberName
180
185
  });
181
186
  if (curMember.type === MemberType.POINT && Array.isArray(curMember.value)) {
@@ -299,6 +304,13 @@ const is2DConstraint = arg => {
299
304
  const objClass = typeof arg === 'string' ? arg : arg.class;
300
305
  return Boolean(objClass.match(/CC_2D.+Constraint/)) || ccUtils.base.isA(objClass, CCClasses.CCRigidSet);
301
306
  };
307
+ const isSketchRegion = arg => {
308
+ if (arg === undefined) {
309
+ return false;
310
+ }
311
+ const objClass = typeof arg === 'string' ? arg : arg.class;
312
+ return ccUtils.base.isA(objClass, CCClasses.CCSketchRegion);
313
+ };
302
314
  const degreesToRadians = degrees => {
303
315
  return degrees * Math.PI / 180;
304
316
  };
@@ -442,10 +454,37 @@ const solveQuartic = (a, b, c, d, e) => {
442
454
  });
443
455
  return res;
444
456
  };
445
-
446
- const EMPTYARRAY = [];
447
- const NOCCID = Number.MIN_SAFE_INTEGER;
448
- const EMPTYSTR = '';
457
+ function getRegionCoordSys(drawingId, regionObj) {
458
+ let originPos = new THREE.Vector3(0, 0, 0);
459
+ let xAxis = new THREE.Vector3(1, 0, 0);
460
+ let yAxis = new THREE.Vector3(0, 1, 0);
461
+ if (ccUtils.base.isA(regionObj.class, CCClasses.CCCompositeCurve)) {
462
+ var _regionObj$members;
463
+ const refCSys = ((_regionObj$members = regionObj.members) == null ? void 0 : _regionObj$members.refCSys).members.map(member => member.value);
464
+ if (refCSys) {
465
+ const [origin_, xAxis_, yAxis_] = refCSys;
466
+ originPos = origin_ ? new THREE.Vector3(origin_.x, origin_.y, origin_.z) : originPos;
467
+ xAxis = xAxis_ ? new THREE.Vector3(xAxis_.x, xAxis_.y, xAxis_.z) : xAxis;
468
+ yAxis = yAxis_ ? new THREE.Vector3(yAxis_.x, yAxis_.y, yAxis_.z) : yAxis;
469
+ }
470
+ } else {
471
+ let sketchId_ = NOCCID;
472
+ if (ccUtils.base.isA(regionObj.class, CCClasses.CCSketchRegion)) {
473
+ var _regionObj$members2;
474
+ sketchId_ = (_regionObj$members2 = regionObj.members) == null ? void 0 : _regionObj$members2.sketch.value;
475
+ } else {
476
+ sketchId_ = regionObj.parent || 0;
477
+ }
478
+ const sketch = sketchId_ && getDrawing(drawingId).structure.tree[sketchId_];
479
+ if (sketch && sketch.coordinateSystem) {
480
+ const [origin_, xAxis_, yAxis_] = sketch.coordinateSystem;
481
+ originPos = origin_ ? new THREE.Vector3(origin_[0], origin_[1], origin_[2]) : originPos;
482
+ xAxis = xAxis_ ? new THREE.Vector3(xAxis_[0], xAxis_[1], xAxis_[2]) : xAxis;
483
+ yAxis = yAxis_ ? new THREE.Vector3(yAxis_[0], yAxis_[1], yAxis_[2]) : yAxis;
484
+ }
485
+ }
486
+ return [originPos, xAxis, yAxis];
487
+ }
449
488
 
450
489
  /**
451
490
  * Wrapper around useDrawing which allows to avoid ReferenceErrors.
@@ -1124,8 +1163,8 @@ const isAngular = dim => ccUtils.base.isA(dim.class, CCClasses.CCAngularDimensio
1124
1163
  const isRadial = dim => ccUtils.base.isA(dim.class, CCClasses.CCRadialDimension) && !ccUtils.base.isA(dim.class, CCClasses.CCDiameterDimension);
1125
1164
  const isDiameter = dim => ccUtils.base.isA(dim.class, CCClasses.CCDiameterDimension);
1126
1165
 
1127
- function ownKeys$u(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1128
- function _objectSpread$u(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$u(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$u(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1166
+ function ownKeys$v(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1167
+ function _objectSpread$v(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$v(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$v(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1129
1168
  const isFeatureActive = drawingId => {
1130
1169
  const activePlugin = getDrawing(drawingId).plugin.active.feature;
1131
1170
  if (activePlugin) {
@@ -1161,7 +1200,7 @@ const appApi = (set, get) => ({
1161
1200
  const curInstance = api.getState().drawing.refs[drawingId].structure.currentInstance;
1162
1201
  res = state.assemblyTree.prodStack;
1163
1202
  curInstance && res.push(curInstance);
1164
- return _objectSpread$u(_objectSpread$u({}, state), {}, {
1203
+ return _objectSpread$v(_objectSpread$v({}, state), {}, {
1165
1204
  assemblyTree: {
1166
1205
  prodStack: [...res]
1167
1206
  }
@@ -1178,7 +1217,7 @@ const appApi = (set, get) => ({
1178
1217
  set(state => {
1179
1218
  const res = state.assemblyTree.prodStack;
1180
1219
  res.pop();
1181
- return _objectSpread$u(_objectSpread$u({}, state), {}, {
1220
+ return _objectSpread$v(_objectSpread$v({}, state), {}, {
1182
1221
  assemblyTree: {
1183
1222
  prodStack: [...res]
1184
1223
  }
@@ -1187,7 +1226,7 @@ const appApi = (set, get) => ({
1187
1226
  ccAPI.assemblyBuilder.setCurrentInstance(drawingId, prevProd).catch(console.warn);
1188
1227
  },
1189
1228
  clearProdStack: () => {
1190
- set(state => _objectSpread$u(_objectSpread$u({}, state), {}, {
1229
+ set(state => _objectSpread$v(_objectSpread$v({}, state), {}, {
1191
1230
  assemblyTree: {
1192
1231
  prodStack: []
1193
1232
  }
@@ -1196,7 +1235,7 @@ const appApi = (set, get) => ({
1196
1235
  },
1197
1236
  blankDiv: {
1198
1237
  show: callback => {
1199
- set(state => _objectSpread$u(_objectSpread$u({}, state), {}, {
1238
+ set(state => _objectSpread$v(_objectSpread$v({}, state), {}, {
1200
1239
  blankDiv: {
1201
1240
  isActive: true,
1202
1241
  onClose: callback
@@ -1204,7 +1243,7 @@ const appApi = (set, get) => ({
1204
1243
  }));
1205
1244
  },
1206
1245
  hide: () => {
1207
- set(state => _objectSpread$u(_objectSpread$u({}, state), {}, {
1246
+ set(state => _objectSpread$v(_objectSpread$v({}, state), {}, {
1208
1247
  blankDiv: {
1209
1248
  isActive: false,
1210
1249
  onClose: undefined
@@ -2060,7 +2099,7 @@ class ErrorBoundary extends React__default.Component {
2060
2099
  }
2061
2100
  }
2062
2101
 
2063
- function ViewImpl$g({
2102
+ function ViewImpl$j({
2064
2103
  drawingId,
2065
2104
  pluginId
2066
2105
  }) {
@@ -2081,17 +2120,17 @@ function ViewImpl$g({
2081
2120
  objectId: dimSetId
2082
2121
  }) : null;
2083
2122
  }
2084
- function View$g({
2123
+ function View$j({
2085
2124
  drawingId,
2086
2125
  pluginId
2087
2126
  }) {
2088
- return /*#__PURE__*/React__default.createElement(ErrorBoundary, null, /*#__PURE__*/React__default.createElement(ViewImpl$g, {
2127
+ return /*#__PURE__*/React__default.createElement(ErrorBoundary, null, /*#__PURE__*/React__default.createElement(ViewImpl$j, {
2089
2128
  drawingId: drawingId,
2090
2129
  pluginId: pluginId
2091
2130
  }));
2092
2131
  }
2093
2132
 
2094
- function RootImpl$C({
2133
+ function RootImpl$D({
2095
2134
  drawingId,
2096
2135
  pluginId
2097
2136
  }) {
@@ -2131,17 +2170,17 @@ function RootImpl$C({
2131
2170
  })
2132
2171
  })));
2133
2172
  }
2134
- const Root$C = ({
2173
+ const Root$D = ({
2135
2174
  drawingId,
2136
2175
  pluginId
2137
2176
  }) => {
2138
- return /*#__PURE__*/React__default.createElement(ErrorBoundary, null, /*#__PURE__*/React__default.createElement(RootImpl$C, {
2177
+ return /*#__PURE__*/React__default.createElement(ErrorBoundary, null, /*#__PURE__*/React__default.createElement(RootImpl$D, {
2139
2178
  drawingId: drawingId,
2140
2179
  pluginId: pluginId
2141
2180
  }));
2142
2181
  };
2143
2182
 
2144
- const description$C = {
2183
+ const description$D = {
2145
2184
  name: 'Dimensions',
2146
2185
  version: '1.0.0',
2147
2186
  author: 'Ledas',
@@ -2152,11 +2191,11 @@ const description$C = {
2152
2191
  }
2153
2192
  };
2154
2193
 
2155
- var index$C = /*#__PURE__*/Object.freeze({
2194
+ var index$D = /*#__PURE__*/Object.freeze({
2156
2195
  __proto__: null,
2157
- Root: Root$C,
2158
- View: View$g,
2159
- description: description$C
2196
+ Root: Root$D,
2197
+ View: View$j,
2198
+ description: description$D
2160
2199
  });
2161
2200
 
2162
2201
  function useIdParam(drawingId, objId, memberName) {
@@ -2246,8 +2285,8 @@ function useRefsParam(drawingId, objId, memberName) {
2246
2285
  });
2247
2286
  }
2248
2287
 
2249
- function ownKeys$t(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2250
- function _objectSpread$t(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$t(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$t(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2288
+ function ownKeys$u(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2289
+ function _objectSpread$u(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$u(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$u(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2251
2290
  /**
2252
2291
  * Implies the following data structure:
2253
2292
  * data: {
@@ -2472,7 +2511,7 @@ function useTreeObjInteraction(drawingId, objId) {
2472
2511
  const isGSelected = useIsGSelected(drawingId, objId);
2473
2512
  const isSHovered = useIsSHovered(drawingId, objId);
2474
2513
  const isSSelected = useIsSSelected(drawingId, objId);
2475
- const handlers = React__default.useMemo(() => _objectSpread$t(_objectSpread$t({}, hHandlers), sHandlers), [hHandlers, sHandlers]);
2514
+ const handlers = React__default.useMemo(() => _objectSpread$u(_objectSpread$u({}, hHandlers), sHandlers), [hHandlers, sHandlers]);
2476
2515
  return React__default.useMemo(() => {
2477
2516
  // If the handlers are switched off immediately after the selection (workplane selection for the sketcher), then hovered would keep being equal to true, making the mesh color wrong.
2478
2517
  // Thus, we don't want hovered and selected to be true if the object is not selectable.
@@ -2945,8 +2984,8 @@ const SelectionRestorer = ({
2945
2984
  return null;
2946
2985
  };
2947
2986
 
2948
- function ownKeys$s(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2949
- function _objectSpread$s(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$s(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$s(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2987
+ function ownKeys$t(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2988
+ function _objectSpread$t(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$t(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$t(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2950
2989
 
2951
2990
  /**
2952
2991
  * Implies the following data structure:
@@ -3040,7 +3079,7 @@ function useMateSelection(drawingId, matePath, csysId) {
3040
3079
  }));
3041
3080
  const handlers = React__default.useMemo(() => {
3042
3081
  if (isSelectable) {
3043
- return _objectSpread$s(_objectSpread$s({}, hHandlers), sHandlers);
3082
+ return _objectSpread$t(_objectSpread$t({}, hHandlers), sHandlers);
3044
3083
  }
3045
3084
  return {};
3046
3085
  }, [isSelectable, hHandlers, sHandlers]);
@@ -3929,11 +3968,11 @@ const FtPluginValidator = ({
3929
3968
  }, children);
3930
3969
  };
3931
3970
 
3932
- var Members$v;
3971
+ var Members$w;
3933
3972
  (function (Members) {
3934
3973
  Members["Body1"] = "Body1";
3935
3974
  Members["Body2"] = "Body2";
3936
- })(Members$v || (Members$v = {}));
3975
+ })(Members$w || (Members$w = {}));
3937
3976
  const typesCaptions$6 = {
3938
3977
  [BooleanOperationType.INTERSECTION]: 'Intersection',
3939
3978
  [BooleanOperationType.SUBTRACTION]: 'Subtraction',
@@ -3956,7 +3995,7 @@ function useBoolTypeStore(drawingId, objId) {
3956
3995
  isChanged
3957
3996
  });
3958
3997
  }
3959
- function RootImpl$B({
3998
+ function RootImpl$C({
3960
3999
  drawingId,
3961
4000
  pluginId
3962
4001
  }) {
@@ -3964,8 +4003,8 @@ function RootImpl$B({
3964
4003
  objectId
3965
4004
  } = usePlugin(drawingId, pluginId, plugin => plugin);
3966
4005
  const type = useBoolTypeStore(drawingId, objectId);
3967
- const body1 = useIdParam(drawingId, objectId, Members$v.Body1);
3968
- const body2 = useRefsParam(drawingId, objectId, Members$v.Body2);
4006
+ const body1 = useIdParam(drawingId, objectId, Members$w.Body1);
4007
+ const body2 = useRefsParam(drawingId, objectId, Members$w.Body2);
3969
4008
  const update = React__default.useCallback(() => {
3970
4009
  return ccAPI.feature.updateBooleanOperation(drawingId, objectId, type.serverValue, [body1.serverValue, ...body2.serverValue]);
3971
4010
  }, [drawingId, objectId, type, body1, body2]);
@@ -3999,20 +4038,20 @@ function RootImpl$B({
3999
4038
  selectorsOrder: selOrder
4000
4039
  }));
4001
4040
  }
4002
- const Root$B = ({
4041
+ const Root$C = ({
4003
4042
  drawingId,
4004
4043
  pluginId
4005
4044
  }) => {
4006
4045
  return /*#__PURE__*/React__default.createElement(FtPluginValidator, {
4007
4046
  drawingId: drawingId,
4008
4047
  pluginId: pluginId
4009
- }, /*#__PURE__*/React__default.createElement(RootImpl$B, {
4048
+ }, /*#__PURE__*/React__default.createElement(RootImpl$C, {
4010
4049
  drawingId: drawingId,
4011
4050
  pluginId: pluginId
4012
4051
  }));
4013
4052
  };
4014
4053
 
4015
- const description$B = {
4054
+ const description$C = {
4016
4055
  name: 'Boolean',
4017
4056
  version: '1.0.0',
4018
4057
  author: 'Ledas',
@@ -4029,14 +4068,14 @@ const description$B = {
4029
4068
  }
4030
4069
  };
4031
4070
 
4032
- var index$B = /*#__PURE__*/Object.freeze({
4071
+ var index$C = /*#__PURE__*/Object.freeze({
4033
4072
  __proto__: null,
4034
- Root: Root$B,
4035
- description: description$B
4073
+ Root: Root$C,
4074
+ description: description$C
4036
4075
  });
4037
4076
 
4038
- function ownKeys$r(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4039
- function _objectSpread$r(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$r(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$r(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4077
+ function ownKeys$s(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4078
+ function _objectSpread$s(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$s(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$s(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4040
4079
  function parseVal(val) {
4041
4080
  const float = Number(val);
4042
4081
  if (!isNaN(float)) {
@@ -4287,13 +4326,13 @@ const PointEditor = ({
4287
4326
  newVals[i] = val;
4288
4327
  }
4289
4328
  });
4290
- return _objectSpread$r(_objectSpread$r({}, state), {}, {
4329
+ return _objectSpread$s(_objectSpread$s({}, state), {}, {
4291
4330
  displayVals: newVals
4292
4331
  });
4293
4332
  })).catch();
4294
4333
  } else {
4295
4334
  const value = defaults.value;
4296
- setDisplayState(state => _objectSpread$r(_objectSpread$r({}, state), {}, {
4335
+ setDisplayState(state => _objectSpread$s(_objectSpread$s({}, state), {}, {
4297
4336
  displayVals: [value.x, value.y, value.z]
4298
4337
  }));
4299
4338
  }
@@ -4309,7 +4348,7 @@ const PointEditor = ({
4309
4348
  editMode: false,
4310
4349
  displayVals: res_ !== null ? [res_.x, res_.y, res_.z] : [...state.displayVals]
4311
4350
  }));
4312
- }).catch(() => setDisplayState(state => _objectSpread$r(_objectSpread$r({}, state), {}, {
4351
+ }).catch(() => setDisplayState(state => _objectSpread$s(_objectSpread$s({}, state), {}, {
4313
4352
  editMode: false
4314
4353
  })));
4315
4354
  } else {
@@ -4331,7 +4370,7 @@ const PointEditor = ({
4331
4370
  caption: caption,
4332
4371
  highlighted: param.isChanged()
4333
4372
  }, !editMode && /*#__PURE__*/React__default.createElement(DisplayBase, {
4334
- onClick: () => setDisplayState(state => _objectSpread$r(_objectSpread$r({}, state), {}, {
4373
+ onClick: () => setDisplayState(state => _objectSpread$s(_objectSpread$s({}, state), {}, {
4335
4374
  editMode: true
4336
4375
  }))
4337
4376
  }, /*#__PURE__*/React__default.createElement(PluginTooltip, {
@@ -4414,11 +4453,11 @@ const PointEditor = ({
4414
4453
  }, "\u2014")));
4415
4454
  };
4416
4455
 
4417
- function ownKeys$q(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4418
- function _objectSpread$q(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$q(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$q(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4456
+ function ownKeys$r(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4457
+ function _objectSpread$r(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$r(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$r(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4419
4458
  function createPointParam(member) {
4420
4459
  const isExpr = member.expression.length > 0;
4421
- const value = isExpr ? member.expression : _objectSpread$q({}, member.value);
4460
+ const value = isExpr ? member.expression : _objectSpread$r({}, member.value);
4422
4461
  return {
4423
4462
  value,
4424
4463
  isExpr
@@ -4459,9 +4498,9 @@ function usePointParam(drawingId, objId, memberName, options = {
4459
4498
  }, undefined, undefined, options_);
4460
4499
  }
4461
4500
 
4462
- var img$17 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADcSURBVEhL3ZTbDcMgDEVJlsgonabfnanfmaajdIlSS0aU+lWEsaLmCCkhMfheB2fJOadI1nIN49wJlv0Jo0xGURPUrZ05wkskH1OuOl+3ctfQE3bERxaLbnyJ+2WFUSYMy4G9shO63lBqvDJQBVbtThNfi39qHDAhqyOqPSY+fcDV4b63xwunFTjsbTAPa7thXFonQidXdURaq4vEIBhJmnnQAf8l8Eoi3hJp+1bGE3ATAH/odQCACcOHKwHRK3qa4AARdwemJdCw+oCgabQJd3BEieby/yUKTpDSG4InWqXAb1/sAAAAAElFTkSuQmCC";
4501
+ var img$18 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADcSURBVEhL3ZTbDcMgDEVJlsgonabfnanfmaajdIlSS0aU+lWEsaLmCCkhMfheB2fJOadI1nIN49wJlv0Jo0xGURPUrZ05wkskH1OuOl+3ctfQE3bERxaLbnyJ+2WFUSYMy4G9shO63lBqvDJQBVbtThNfi39qHDAhqyOqPSY+fcDV4b63xwunFTjsbTAPa7thXFonQidXdURaq4vEIBhJmnnQAf8l8Eoi3hJp+1bGE3ATAH/odQCACcOHKwHRK3qa4AARdwemJdCw+oCgabQJd3BEieby/yUKTpDSG4InWqXAb1/sAAAAAElFTkSuQmCC";
4463
4502
 
4464
- var img$16 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADjSURBVEhL3ZbbDcIwDEXTLsEoTMM3M/HNNIzCEgRLDpbrRx1iRTyOIrVR09x7ncrqUmstM1nbdRq/LzB4Bsv13u621NOh3b344zOAIuBoc4fLcYXRJhYfShAa78cQELsnxdwShcXtRG5h+s2ECDzmQ9jv632HQ2xaBd8FNc63B04BaANaRi9DqGdkKxBiNDu0ya3xFkYhdBkpB18/nkCURVcJeVtAN2SBWJA6A3Lt2QdGBHZC6EepBAB437EPuF8Rx7TcuSybICT148VDeAczPUFKgFx79oFUiXr47hL1MFmglCeKs2HMN70YFwAAAABJRU5ErkJggg==";
4503
+ var img$17 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADjSURBVEhL3ZbbDcIwDEXTLsEoTMM3M/HNNIzCEgRLDpbrRx1iRTyOIrVR09x7ncrqUmstM1nbdRq/LzB4Bsv13u621NOh3b344zOAIuBoc4fLcYXRJhYfShAa78cQELsnxdwShcXtRG5h+s2ECDzmQ9jv632HQ2xaBd8FNc63B04BaANaRi9DqGdkKxBiNDu0ya3xFkYhdBkpB18/nkCURVcJeVtAN2SBWJA6A3Lt2QdGBHZC6EepBAB437EPuF8Rx7TcuSybICT148VDeAczPUFKgFx79oFUiXr47hL1MFmglCeKs2HMN70YFwAAAABJRU5ErkJggg==";
4465
4504
 
4466
4505
  const invert = (value, inverted) => {
4467
4506
  return inverted ? 1 - value : value;
@@ -4477,7 +4516,7 @@ const BooleanEditor = ({
4477
4516
  Checkbox
4478
4517
  } = useBuerli(buerli => buerli.options.elements);
4479
4518
  const icon_ = Array.isArray(icon) ? true : Boolean(icon);
4480
- const icons = Array.isArray(icon) && icon.length == 2 ? icon : [img$17, img$16];
4519
+ const icons = Array.isArray(icon) && icon.length == 2 ? icon : [img$18, img$17];
4481
4520
  const {
4482
4521
  setUserValue,
4483
4522
  userValue,
@@ -4530,7 +4569,7 @@ function useBoolParam(drawingId, objId, memberName) {
4530
4569
  });
4531
4570
  }
4532
4571
 
4533
- var Members$u;
4572
+ var Members$v;
4534
4573
  (function (Members) {
4535
4574
  Members["Type"] = "extrudeType";
4536
4575
  Members["Direction"] = "extrudeDir";
@@ -4538,10 +4577,10 @@ var Members$u;
4538
4577
  Members["Limit2"] = "limit2";
4539
4578
  Members["taperAngle"] = "taperAngle";
4540
4579
  Members["capEnds"] = "capEnds";
4541
- })(Members$u || (Members$u = {}));
4580
+ })(Members$v || (Members$v = {}));
4542
4581
  var RegionMembers$3;
4543
4582
  (function (RegionMembers) {
4544
- RegionMembers["Curves"] = "curves";
4583
+ RegionMembers["Selected"] = "selected";
4545
4584
  })(RegionMembers$3 || (RegionMembers$3 = {}));
4546
4585
  const typesCaptions$5 = {
4547
4586
  [ExtrusionType.CUSTOM]: 'Custom',
@@ -4549,7 +4588,7 @@ const typesCaptions$5 = {
4549
4588
  [ExtrusionType.SYMMETRIC]: 'Symmetric',
4550
4589
  [ExtrusionType.UP]: 'Up'
4551
4590
  };
4552
- const RootImpl$A = ({
4591
+ const RootImpl$B = ({
4553
4592
  drawingId,
4554
4593
  pluginId
4555
4594
  }) => {
@@ -4560,20 +4599,37 @@ const RootImpl$A = ({
4560
4599
  var _drawing$structure$tr, _drawing$structure$tr2;
4561
4600
  return (_drawing$structure$tr = drawing.structure.tree[objectId]) == null ? void 0 : (_drawing$structure$tr2 = _drawing$structure$tr.members) == null ? void 0 : _drawing$structure$tr2.region.value;
4562
4601
  });
4563
- const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$3.Curves);
4564
- const type = useTypeParam(drawingId, objectId, Members$u.Type);
4565
- const limit1 = useNumParam(drawingId, objectId, Members$u.Limit1);
4566
- const limit2 = useNumParam(drawingId, objectId, Members$u.Limit2);
4567
- const taperAngle = useNumParam(drawingId, objectId, Members$u.taperAngle, {
4602
+ const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$3.Selected);
4603
+ const type = useTypeParam(drawingId, objectId, Members$v.Type);
4604
+ const limit1 = useNumParam(drawingId, objectId, Members$v.Limit1);
4605
+ const limit2 = useNumParam(drawingId, objectId, Members$v.Limit2);
4606
+ const taperAngle = useNumParam(drawingId, objectId, Members$v.taperAngle, {
4568
4607
  angle: true
4569
4608
  });
4570
- const direction = usePointParam(drawingId, objectId, Members$u.Direction);
4571
- const capEnds = useBoolParam(drawingId, objectId, Members$u.capEnds);
4609
+ const direction = usePointParam(drawingId, objectId, Members$v.Direction);
4610
+ const capEnds = useBoolParam(drawingId, objectId, Members$v.capEnds);
4572
4611
  const sketchId = React__default.useRef(NOCCID);
4612
+ React__default.useEffect(() => {
4613
+ const {
4614
+ set
4615
+ } = getPlugin(drawingId, pluginId);
4616
+ if (region.userValue.length > 0) {
4617
+ const regionObj = getDrawing(drawingId).structure.tree[region.userValue[0]];
4618
+ const [originPos, xDir, yDir] = getRegionCoordSys(drawingId, regionObj);
4619
+ set({
4620
+ originPos,
4621
+ xDir,
4622
+ yDir
4623
+ });
4624
+ }
4625
+ }, [drawingId, pluginId, region]);
4573
4626
  React__default.useEffect(() => {
4574
4627
  var _tree$sketchGeometryI;
4575
4628
  const tree = getDrawing(drawingId).structure.tree;
4576
- const sketchGeometryId = region.userValue[0];
4629
+ const sketchGeometryId = region.userValue.find(id => {
4630
+ var _tree$id;
4631
+ return ccUtils.base.isA((_tree$id = tree[id]) == null ? void 0 : _tree$id.class, CCClasses.CCCurve);
4632
+ }) || NOCCID;
4577
4633
  const sketchWithSelectedRegion = ((_tree$sketchGeometryI = tree[sketchGeometryId]) == null ? void 0 : _tree$sketchGeometryI.parent) || NOCCID;
4578
4634
  sketchId.current = sketchWithSelectedRegion;
4579
4635
  }, [drawingId, region]);
@@ -4596,7 +4652,9 @@ const RootImpl$A = ({
4596
4652
  isExpr: false
4597
4653
  }, capEnds.serverValue);
4598
4654
  }, [drawingId, objectId, region, type, limit1, limit2, taperAngle, direction, capEnds]);
4599
- const filter = React__default.useCallback((scope, data) => scope === TreeObjScope && (sketchId.current === NOCCID || data.object.parent === sketchId.current) && ccUtils.base.isA(data.object.class, CCClasses.CCCurve), []);
4655
+ const filter = React__default.useCallback((scope, data) => {
4656
+ return scope === TreeObjScope && ((sketchId.current === NOCCID || data.object.parent === sketchId.current) && ccUtils.base.isA(data.object.class, CCClasses.CCCurve) || ccUtils.base.isA(data.object.class, CCClasses.CCSketchRegion) || ccUtils.base.isA(data.object.class, CCClasses.CCCompositeCurve));
4657
+ }, []);
4600
4658
  return /*#__PURE__*/React__default.createElement(PluginForm, {
4601
4659
  drawingId: drawingId,
4602
4660
  pluginId: pluginId,
@@ -4651,108 +4709,379 @@ const RootImpl$A = ({
4651
4709
  inverted: true
4652
4710
  }));
4653
4711
  };
4654
- const Root$A = ({
4712
+ const Root$B = ({
4655
4713
  drawingId,
4656
4714
  pluginId
4657
4715
  }) => {
4658
4716
  return /*#__PURE__*/React__default.createElement(FtPluginValidator, {
4659
4717
  drawingId: drawingId,
4660
4718
  pluginId: pluginId
4661
- }, /*#__PURE__*/React__default.createElement(RootImpl$A, {
4719
+ }, /*#__PURE__*/React__default.createElement(RootImpl$B, {
4662
4720
  drawingId: drawingId,
4663
4721
  pluginId: pluginId
4664
4722
  }));
4665
4723
  };
4666
4724
 
4667
- const description$A = {
4668
- name: 'Extrusion',
4669
- version: '1.0.0',
4670
- author: 'Ledas',
4671
- persistent: true,
4672
- visible: false,
4673
- global: false,
4674
- initialState: addMembers
4725
+ const Point$2 = ({
4726
+ position,
4727
+ radius,
4728
+ color,
4729
+ opacity = 1,
4730
+ handlers,
4731
+ userData
4732
+ }) => {
4733
+ return /*#__PURE__*/React__default.createElement("mesh", _extends({
4734
+ position: position.clone(),
4735
+ userData: userData
4736
+ }, handlers), /*#__PURE__*/React__default.createElement("sphereGeometry", {
4737
+ attach: "geometry",
4738
+ args: [radius, 32, 16]
4739
+ }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", {
4740
+ attach: "material",
4741
+ color: color,
4742
+ opacity: opacity,
4743
+ transparent: opacity < 1
4744
+ }));
4675
4745
  };
4676
-
4677
- var index$A = /*#__PURE__*/Object.freeze({
4678
- __proto__: null,
4679
- Root: Root$A,
4680
- description: description$A
4681
- });
4682
-
4683
- var Members$t;
4684
- (function (Members) {
4685
- Members["Type"] = "extrudeType";
4686
- Members["Direction"] = "extrudeDir";
4687
- Members["Limit1"] = "limit1";
4688
- Members["Limit2"] = "limit2";
4689
- Members["TwistAngle"] = "twistAngle";
4690
- Members["TwistCenter"] = "twistCenter";
4691
- Members["CapEnds"] = "capEnds";
4692
- })(Members$t || (Members$t = {}));
4693
- var RegionMembers$2;
4694
- (function (RegionMembers) {
4695
- RegionMembers["Curves"] = "curves";
4696
- })(RegionMembers$2 || (RegionMembers$2 = {}));
4697
- const typesCaptions$4 = {
4698
- [ExtrusionType.CUSTOM]: 'Custom',
4699
- [ExtrusionType.DOWN]: 'Down',
4700
- [ExtrusionType.SYMMETRIC]: 'Symmetric',
4701
- [ExtrusionType.UP]: 'Up'
4746
+ const Arrow = ({
4747
+ position,
4748
+ direction,
4749
+ length,
4750
+ width,
4751
+ color,
4752
+ opacity = 1,
4753
+ handlers,
4754
+ userData,
4755
+ withCone = true
4756
+ }) => {
4757
+ const cylinderWith = width;
4758
+ const coneWidth = cylinderWith * 1.5;
4759
+ const coneLength = Math.min(coneWidth / 0.12, length / 2.0);
4760
+ const cylinderLength = withCone ? length - coneLength : length;
4761
+ return /*#__PURE__*/React__default.createElement("group", _extends({
4762
+ position: position.clone(),
4763
+ quaternion: new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 1, 0), direction.clone().normalize())
4764
+ }, handlers, {
4765
+ userData: userData
4766
+ }), /*#__PURE__*/React__default.createElement("mesh", {
4767
+ position: new THREE.Vector3(0, cylinderLength / 2.0, 0),
4768
+ renderOrder: 500,
4769
+ userData: userData
4770
+ }, /*#__PURE__*/React__default.createElement("cylinderGeometry", {
4771
+ attach: "geometry",
4772
+ args: [cylinderWith, cylinderWith, cylinderLength, 24, 1]
4773
+ }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", {
4774
+ attach: "material",
4775
+ color: color,
4776
+ opacity: opacity,
4777
+ transparent: true
4778
+ })), withCone && /*#__PURE__*/React__default.createElement("mesh", {
4779
+ position: new THREE.Vector3(0, cylinderLength + coneLength / 2.0, 0),
4780
+ renderOrder: 500,
4781
+ userData: userData
4782
+ }, /*#__PURE__*/React__default.createElement("coneGeometry", {
4783
+ attach: "geometry",
4784
+ args: [coneWidth, coneLength, 24, 1]
4785
+ }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", {
4786
+ attach: "material",
4787
+ color: color,
4788
+ opacity: opacity,
4789
+ transparent: opacity < 1
4790
+ })));
4702
4791
  };
4703
- const RootImpl$z = ({
4704
- drawingId,
4705
- pluginId
4792
+ const OriginPoint = ({
4793
+ position,
4794
+ color,
4795
+ opacity = 1,
4796
+ handlers,
4797
+ userData
4706
4798
  }) => {
4707
- const {
4708
- objectId
4709
- } = usePlugin(drawingId, pluginId, plugin => plugin);
4710
- const sketchRegionId = useDrawingCCId(drawingId, drawing => {
4711
- var _drawing$structure$tr, _drawing$structure$tr2;
4712
- return (_drawing$structure$tr = drawing.structure.tree[objectId]) == null ? void 0 : (_drawing$structure$tr2 = _drawing$structure$tr.members) == null ? void 0 : _drawing$structure$tr2.region.value;
4799
+ return /*#__PURE__*/React__default.createElement(Point$2, {
4800
+ position: position ? position.clone() : new THREE.Vector3(),
4801
+ radius: 2,
4802
+ color: color,
4803
+ opacity: opacity,
4804
+ handlers: handlers,
4805
+ userData: userData
4713
4806
  });
4714
- const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$2.Curves);
4715
- const type = useTypeParam(drawingId, objectId, Members$t.Type);
4716
- const limit1 = useNumParam(drawingId, objectId, Members$t.Limit1);
4717
- const limit2 = useNumParam(drawingId, objectId, Members$t.Limit2);
4718
- const twistAngle = useNumParam(drawingId, objectId, Members$t.TwistAngle, {
4719
- angle: true
4807
+ };
4808
+ const AxisArrow = ({
4809
+ position,
4810
+ direction,
4811
+ color,
4812
+ opacity = 1,
4813
+ handlers,
4814
+ userData,
4815
+ length,
4816
+ width,
4817
+ withCone = true
4818
+ }) => {
4819
+ return /*#__PURE__*/React__default.createElement(Arrow, {
4820
+ position: position ? position.clone() : new THREE.Vector3(),
4821
+ direction: direction.clone(),
4822
+ length: length || 21,
4823
+ width: width || 1,
4824
+ color: color,
4825
+ opacity: opacity,
4826
+ handlers: handlers,
4827
+ userData: userData,
4828
+ withCone: withCone
4720
4829
  });
4721
- const twistCenter = usePointParam(drawingId, objectId, Members$t.TwistCenter);
4722
- const direction = usePointParam(drawingId, objectId, Members$t.Direction);
4723
- const capEnds = useBoolParam(drawingId, objectId, Members$t.CapEnds);
4724
- const sketchId = React__default.useRef(NOCCID);
4725
- React__default.useEffect(() => {
4726
- var _tree$sketchGeometryI;
4727
- const tree = getDrawing(drawingId).structure.tree;
4728
- const sketchGeometryId = region.userValue[0];
4729
- const sketchWithSelectedRegion = ((_tree$sketchGeometryI = tree[sketchGeometryId]) == null ? void 0 : _tree$sketchGeometryI.parent) || NOCCID;
4730
- sketchId.current = sketchWithSelectedRegion;
4731
- }, [drawingId, region]);
4732
- const updateAndClose = React__default.useCallback(() => {
4733
- return ccAPI.feature.updateTwist(drawingId, objectId, region.serverValue, type.serverValue, type.serverValue === ExtrusionType.CUSTOM ? limit1.serverValue : {
4734
- value: 0.0,
4735
- isExpr: false
4736
- }, limit2.serverValue, type.serverValue === ExtrusionType.CUSTOM ? direction.serverValue : {
4737
- value: {
4738
- x: 0.0,
4739
- y: 0.0,
4740
- z: 1.0
4741
- },
4742
- isExpr: false
4743
- },
4744
- // TODO: This is a workaround to prevent sending both non-zero taperAngle and direction values to the server;
4745
- // this would result in crashing the extrusion functionality somehow
4746
- twistAngle.serverValue, type.userValue === ExtrusionType.CUSTOM ? twistCenter.serverValue : {
4747
- value: {
4748
- x: 0.0,
4830
+ };
4831
+
4832
+ //TODO: don't use any
4833
+ const Csys = ({
4834
+ matrix,
4835
+ opacity,
4836
+ handlers,
4837
+ color,
4838
+ userData
4839
+ }) => {
4840
+ const position = new THREE.Vector3().setFromMatrixPosition(matrix);
4841
+ const ref = useScale$1(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
4842
+ return /*#__PURE__*/React__default.createElement("group", _extends({
4843
+ matrix: matrix,
4844
+ matrixAutoUpdate: false,
4845
+ userData: userData
4846
+ }, handlers), /*#__PURE__*/React__default.createElement("group", {
4847
+ ref: ref
4848
+ }, /*#__PURE__*/React__default.createElement(OriginPoint, {
4849
+ position: new THREE.Vector3(),
4850
+ color: color || 0x000000,
4851
+ opacity: opacity,
4852
+ userData: userData
4853
+ }), /*#__PURE__*/React__default.createElement(AxisArrow, {
4854
+ position: new THREE.Vector3(),
4855
+ direction: new THREE.Vector3(1, 0, 0),
4856
+ color: color || 0xd52828,
4857
+ opacity: opacity,
4858
+ userData: userData
4859
+ }), /*#__PURE__*/React__default.createElement(AxisArrow, {
4860
+ position: new THREE.Vector3(),
4861
+ direction: new THREE.Vector3(0, 1, 0),
4862
+ color: color || 0x28a628,
4863
+ opacity: opacity,
4864
+ userData: userData
4865
+ }), /*#__PURE__*/React__default.createElement(AxisArrow, {
4866
+ position: new THREE.Vector3(),
4867
+ direction: new THREE.Vector3(0, 0, 1),
4868
+ color: color || 0x2828d7,
4869
+ opacity: opacity,
4870
+ userData: userData
4871
+ })));
4872
+ };
4873
+ const SelectedCsys = ({
4874
+ matrix,
4875
+ opacity = 1.0,
4876
+ handlers,
4877
+ color,
4878
+ userData
4879
+ }) => {
4880
+ const position = new THREE.Vector3().setFromMatrixPosition(matrix);
4881
+ const ref = useScale$1(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
4882
+ return /*#__PURE__*/React__default.createElement("group", _extends({
4883
+ matrix: matrix,
4884
+ matrixAutoUpdate: false
4885
+ }, handlers), /*#__PURE__*/React__default.createElement("group", {
4886
+ ref: ref
4887
+ }, /*#__PURE__*/React__default.createElement(OriginPoint, {
4888
+ position: new THREE.Vector3(),
4889
+ color: color || 0x000000,
4890
+ opacity: opacity,
4891
+ userData: userData
4892
+ }), /*#__PURE__*/React__default.createElement(AxisArrow, {
4893
+ position: new THREE.Vector3(),
4894
+ direction: new THREE.Vector3(1, 0, 0),
4895
+ color: color || 0xd52828,
4896
+ opacity: opacity,
4897
+ userData: userData,
4898
+ withCone: false
4899
+ }), /*#__PURE__*/React__default.createElement(AxisArrow, {
4900
+ position: new THREE.Vector3(),
4901
+ direction: new THREE.Vector3(0, 1, 0),
4902
+ color: color || 0x28a628,
4903
+ opacity: opacity,
4904
+ userData: userData,
4905
+ withCone: false
4906
+ }), /*#__PURE__*/React__default.createElement(AxisArrow, {
4907
+ position: new THREE.Vector3(),
4908
+ direction: new THREE.Vector3(0, 0, 1),
4909
+ width: 1.25,
4910
+ length: 45,
4911
+ color: color || 0x2828d7,
4912
+ opacity: opacity,
4913
+ userData: userData
4914
+ })));
4915
+ };
4916
+
4917
+ const virtualScene = new THREE.Scene();
4918
+ const HUD = ({
4919
+ children
4920
+ }) => {
4921
+ const {
4922
+ gl,
4923
+ camera
4924
+ } = useThree();
4925
+ useFrame(() => {
4926
+ gl.autoClear = false;
4927
+ gl.clearDepth();
4928
+ gl.render(virtualScene, camera);
4929
+ }, 3);
4930
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, createPortal( /*#__PURE__*/React__default.createElement("group", null, children), virtualScene));
4931
+ };
4932
+
4933
+ function ViewImpl$i({
4934
+ drawingId,
4935
+ pluginId
4936
+ }) {
4937
+ const {
4938
+ state
4939
+ } = usePlugin(drawingId, pluginId, pluginState => pluginState);
4940
+ const {
4941
+ originPos,
4942
+ xDir,
4943
+ yDir
4944
+ } = state;
4945
+ const isActive = useDrawing(drawingId, drawing => drawing.plugin.active.feature === pluginId);
4946
+ const previewMatrix = React__default.useMemo(() => {
4947
+ const originPos_ = originPos ? originPos : new THREE.Vector3(0.0, 0.0, 0.0);
4948
+ const xDir_ = xDir ? xDir : new THREE.Vector3(1.0, 0.0, 0.0);
4949
+ const yDir_ = yDir ? yDir : new THREE.Vector3(0.0, 1.0, 0.0);
4950
+ const nullVec = new THREE.Vector3(0.0, 0.0, 0.0);
4951
+ return MathUtils.calcluateTransform(originPos_, xDir_, yDir_, nullVec, nullVec, 0);
4952
+ }, [originPos, xDir, yDir]);
4953
+ return /*#__PURE__*/React__default.createElement(HUD, null, /*#__PURE__*/React__default.createElement("group", null, isActive && /*#__PURE__*/React__default.createElement(Csys, {
4954
+ matrix: previewMatrix,
4955
+ opacity: 0.5
4956
+ })));
4957
+ }
4958
+ const View$i = ({
4959
+ drawingId,
4960
+ pluginId
4961
+ }) => {
4962
+ return /*#__PURE__*/React__default.createElement(FtPluginValidator, {
4963
+ drawingId: drawingId,
4964
+ pluginId: pluginId,
4965
+ inCanvas: true
4966
+ }, /*#__PURE__*/React__default.createElement(ViewImpl$i, {
4967
+ drawingId: drawingId,
4968
+ pluginId: pluginId
4969
+ }));
4970
+ };
4971
+
4972
+ const description$B = {
4973
+ name: 'Extrusion',
4974
+ version: '1.0.0',
4975
+ author: 'Ledas',
4976
+ persistent: true,
4977
+ visible: false,
4978
+ global: false,
4979
+ initialState: {
4980
+ originPos: undefined,
4981
+ xDir: undefined,
4982
+ yDir: undefined
4983
+ }
4984
+ };
4985
+
4986
+ var index$B = /*#__PURE__*/Object.freeze({
4987
+ __proto__: null,
4988
+ Root: Root$B,
4989
+ View: View$i,
4990
+ description: description$B
4991
+ });
4992
+
4993
+ var Members$u;
4994
+ (function (Members) {
4995
+ Members["Type"] = "extrudeType";
4996
+ Members["Direction"] = "extrudeDir";
4997
+ Members["Limit1"] = "limit1";
4998
+ Members["Limit2"] = "limit2";
4999
+ Members["TwistAngle"] = "twistAngle";
5000
+ Members["TwistCenter"] = "twistCenter";
5001
+ Members["CapEnds"] = "capEnds";
5002
+ })(Members$u || (Members$u = {}));
5003
+ var RegionMembers$2;
5004
+ (function (RegionMembers) {
5005
+ RegionMembers["Selected"] = "selected";
5006
+ })(RegionMembers$2 || (RegionMembers$2 = {}));
5007
+ const typesCaptions$4 = {
5008
+ [ExtrusionType.CUSTOM]: 'Custom',
5009
+ [ExtrusionType.DOWN]: 'Down',
5010
+ [ExtrusionType.SYMMETRIC]: 'Symmetric',
5011
+ [ExtrusionType.UP]: 'Up'
5012
+ };
5013
+ const RootImpl$A = ({
5014
+ drawingId,
5015
+ pluginId
5016
+ }) => {
5017
+ const {
5018
+ objectId
5019
+ } = usePlugin(drawingId, pluginId, plugin => plugin);
5020
+ const sketchRegionId = useDrawingCCId(drawingId, drawing => {
5021
+ var _drawing$structure$tr, _drawing$structure$tr2;
5022
+ return (_drawing$structure$tr = drawing.structure.tree[objectId]) == null ? void 0 : (_drawing$structure$tr2 = _drawing$structure$tr.members) == null ? void 0 : _drawing$structure$tr2.region.value;
5023
+ });
5024
+ const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$2.Selected);
5025
+ const type = useTypeParam(drawingId, objectId, Members$u.Type);
5026
+ const limit1 = useNumParam(drawingId, objectId, Members$u.Limit1);
5027
+ const limit2 = useNumParam(drawingId, objectId, Members$u.Limit2);
5028
+ const twistAngle = useNumParam(drawingId, objectId, Members$u.TwistAngle, {
5029
+ angle: true
5030
+ });
5031
+ const twistCenter = usePointParam(drawingId, objectId, Members$u.TwistCenter);
5032
+ const direction = usePointParam(drawingId, objectId, Members$u.Direction);
5033
+ const capEnds = useBoolParam(drawingId, objectId, Members$u.CapEnds);
5034
+ const sketchId = React__default.useRef(NOCCID);
5035
+ React__default.useEffect(() => {
5036
+ const {
5037
+ set
5038
+ } = getPlugin(drawingId, pluginId);
5039
+ if (region.userValue.length > 0) {
5040
+ const regionObj = getDrawing(drawingId).structure.tree[region.userValue[0]];
5041
+ const [originPos, xDir, yDir] = getRegionCoordSys(drawingId, regionObj);
5042
+ set({
5043
+ originPos,
5044
+ xDir,
5045
+ yDir
5046
+ });
5047
+ }
5048
+ }, [drawingId, pluginId, region]);
5049
+ React__default.useEffect(() => {
5050
+ var _tree$sketchGeometryI;
5051
+ const tree = getDrawing(drawingId).structure.tree;
5052
+ const sketchGeometryId = region.userValue.find(id => {
5053
+ var _tree$id;
5054
+ return ccUtils.base.isA((_tree$id = tree[id]) == null ? void 0 : _tree$id.class, CCClasses.CCCurve);
5055
+ }) || NOCCID;
5056
+ const sketchWithSelectedRegion = ((_tree$sketchGeometryI = tree[sketchGeometryId]) == null ? void 0 : _tree$sketchGeometryI.parent) || NOCCID;
5057
+ sketchId.current = sketchWithSelectedRegion;
5058
+ }, [drawingId, region]);
5059
+ const updateAndClose = React__default.useCallback(() => {
5060
+ return ccAPI.feature.updateTwist(drawingId, objectId, region.serverValue, type.serverValue, type.serverValue === ExtrusionType.CUSTOM ? limit1.serverValue : {
5061
+ value: 0.0,
5062
+ isExpr: false
5063
+ }, limit2.serverValue, type.serverValue === ExtrusionType.CUSTOM ? direction.serverValue : {
5064
+ value: {
5065
+ x: 0.0,
5066
+ y: 0.0,
5067
+ z: 1.0
5068
+ },
5069
+ isExpr: false
5070
+ },
5071
+ // TODO: This is a workaround to prevent sending both non-zero taperAngle and direction values to the server;
5072
+ // this would result in crashing the extrusion functionality somehow
5073
+ twistAngle.serverValue, type.userValue === ExtrusionType.CUSTOM ? twistCenter.serverValue : {
5074
+ value: {
5075
+ x: 0.0,
4749
5076
  y: 0.0,
4750
5077
  z: 0.0
4751
5078
  },
4752
5079
  isExpr: false
4753
5080
  }, capEnds.serverValue);
4754
5081
  }, [drawingId, objectId, region, type, limit1, limit2, twistAngle, twistCenter, direction, capEnds]);
4755
- const filter = React__default.useCallback((scope, data) => scope === TreeObjScope && (sketchId.current === NOCCID || data.object.parent === sketchId.current) && ccUtils.base.isA(data.object.class, CCClasses.CCCurve), [sketchId]);
5082
+ const filter = React__default.useCallback((scope, data) => {
5083
+ return scope === TreeObjScope && ((sketchId.current === NOCCID || data.object.parent === sketchId.current) && ccUtils.base.isA(data.object.class, CCClasses.CCCurve) || ccUtils.base.isA(data.object.class, CCClasses.CCSketchRegion) || ccUtils.base.isA(data.object.class, CCClasses.CCCompositeCurve));
5084
+ }, []);
4756
5085
  return /*#__PURE__*/React__default.createElement(PluginForm, {
4757
5086
  drawingId: drawingId,
4758
5087
  pluginId: pluginId,
@@ -4812,47 +5141,91 @@ const RootImpl$z = ({
4812
5141
  inverted: true
4813
5142
  }));
4814
5143
  };
4815
- const Root$z = ({
5144
+ const Root$A = ({
4816
5145
  drawingId,
4817
5146
  pluginId
4818
5147
  }) => {
4819
5148
  return /*#__PURE__*/React__default.createElement(FtPluginValidator, {
4820
5149
  drawingId: drawingId,
4821
5150
  pluginId: pluginId
4822
- }, /*#__PURE__*/React__default.createElement(RootImpl$z, {
5151
+ }, /*#__PURE__*/React__default.createElement(RootImpl$A, {
4823
5152
  drawingId: drawingId,
4824
5153
  pluginId: pluginId
4825
5154
  }));
4826
5155
  };
4827
5156
 
4828
- const description$z = {
5157
+ function ViewImpl$h({
5158
+ drawingId,
5159
+ pluginId
5160
+ }) {
5161
+ const {
5162
+ state
5163
+ } = usePlugin(drawingId, pluginId, pluginState => pluginState);
5164
+ const {
5165
+ originPos,
5166
+ xDir,
5167
+ yDir
5168
+ } = state;
5169
+ const isActive = useDrawing(drawingId, drawing => drawing.plugin.active.feature === pluginId);
5170
+ const previewMatrix = React__default.useMemo(() => {
5171
+ const originPos_ = originPos ? originPos : new THREE.Vector3(0.0, 0.0, 0.0);
5172
+ const xDir_ = xDir ? xDir : new THREE.Vector3(1.0, 0.0, 0.0);
5173
+ const yDir_ = yDir ? yDir : new THREE.Vector3(0.0, 1.0, 0.0);
5174
+ const nullVec = new THREE.Vector3(0.0, 0.0, 0.0);
5175
+ return MathUtils.calcluateTransform(originPos_, xDir_, yDir_, nullVec, nullVec, 0);
5176
+ }, [originPos, xDir, yDir]);
5177
+ return /*#__PURE__*/React__default.createElement(HUD, null, /*#__PURE__*/React__default.createElement("group", null, isActive && /*#__PURE__*/React__default.createElement(Csys, {
5178
+ matrix: previewMatrix,
5179
+ opacity: 0.5
5180
+ })));
5181
+ }
5182
+ const View$h = ({
5183
+ drawingId,
5184
+ pluginId
5185
+ }) => {
5186
+ return /*#__PURE__*/React__default.createElement(FtPluginValidator, {
5187
+ drawingId: drawingId,
5188
+ pluginId: pluginId,
5189
+ inCanvas: true
5190
+ }, /*#__PURE__*/React__default.createElement(ViewImpl$h, {
5191
+ drawingId: drawingId,
5192
+ pluginId: pluginId
5193
+ }));
5194
+ };
5195
+
5196
+ const description$A = {
4829
5197
  name: 'Twist',
4830
5198
  version: '1.0.0',
4831
5199
  author: 'Ledas',
4832
5200
  persistent: true,
4833
5201
  visible: false,
4834
5202
  global: false,
4835
- initialState: addMembers
5203
+ initialState: {
5204
+ originPos: undefined,
5205
+ xDir: undefined,
5206
+ yDir: undefined
5207
+ }
4836
5208
  };
4837
5209
 
4838
- var index$z = /*#__PURE__*/Object.freeze({
5210
+ var index$A = /*#__PURE__*/Object.freeze({
4839
5211
  __proto__: null,
4840
- Root: Root$z,
4841
- description: description$z
5212
+ Root: Root$A,
5213
+ View: View$h,
5214
+ description: description$A
4842
5215
  });
4843
5216
 
4844
- var Members$s;
5217
+ var Members$t;
4845
5218
  (function (Members) {
4846
5219
  Members["Axis"] = "references";
4847
5220
  Members["Inverted"] = "inverted";
4848
5221
  Members["StartAngle"] = "startAngle";
4849
5222
  Members["EndAngle"] = "endAngle";
4850
- })(Members$s || (Members$s = {}));
5223
+ })(Members$t || (Members$t = {}));
4851
5224
  var RegionMembers$1;
4852
5225
  (function (RegionMembers) {
4853
- RegionMembers["Curves"] = "curves";
5226
+ RegionMembers["Selected"] = "selected";
4854
5227
  })(RegionMembers$1 || (RegionMembers$1 = {}));
4855
- const RootImpl$y = ({
5228
+ const RootImpl$z = ({
4856
5229
  drawingId,
4857
5230
  pluginId
4858
5231
  }) => {
@@ -4863,27 +5236,32 @@ const RootImpl$y = ({
4863
5236
  var _drawing$structure$tr, _drawing$structure$tr2;
4864
5237
  return (_drawing$structure$tr = drawing.structure.tree[objectId]) == null ? void 0 : (_drawing$structure$tr2 = _drawing$structure$tr.members) == null ? void 0 : _drawing$structure$tr2.region.value;
4865
5238
  });
4866
- const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$1.Curves);
4867
- const axis = useRefsParam(drawingId, objectId, Members$s.Axis);
4868
- const startAngle = useNumParam(drawingId, objectId, Members$s.StartAngle, {
5239
+ const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$1.Selected);
5240
+ const axis = useRefsParam(drawingId, objectId, Members$t.Axis);
5241
+ const startAngle = useNumParam(drawingId, objectId, Members$t.StartAngle, {
4869
5242
  angle: true
4870
5243
  });
4871
- const endAngle = useNumParam(drawingId, objectId, Members$s.EndAngle, {
5244
+ const endAngle = useNumParam(drawingId, objectId, Members$t.EndAngle, {
4872
5245
  angle: true
4873
5246
  });
4874
- const inverted = useBoolParam(drawingId, objectId, Members$s.Inverted);
5247
+ const inverted = useBoolParam(drawingId, objectId, Members$t.Inverted);
4875
5248
  const sketchId = React__default.useRef(NOCCID);
4876
5249
  React__default.useEffect(() => {
4877
5250
  var _tree$sketchGeometryI;
4878
5251
  const tree = getDrawing(drawingId).structure.tree;
4879
- const sketchGeometryId = region.userValue[0];
5252
+ const sketchGeometryId = region.userValue.find(id => {
5253
+ var _tree$id;
5254
+ return ccUtils.base.isA((_tree$id = tree[id]) == null ? void 0 : _tree$id.class, CCClasses.CCCurve);
5255
+ }) || NOCCID;
4880
5256
  const sketchWithSelectedRegion = ((_tree$sketchGeometryI = tree[sketchGeometryId]) == null ? void 0 : _tree$sketchGeometryI.parent) || NOCCID;
4881
5257
  sketchId.current = sketchWithSelectedRegion;
4882
5258
  }, [drawingId, region]);
4883
5259
  const updateAndClose = React__default.useCallback(() => {
4884
5260
  return ccAPI.feature.updateRevolve(drawingId, objectId, region.serverValue, axis.serverValue, startAngle.serverValue, endAngle.serverValue, inverted.serverValue);
4885
5261
  }, [drawingId, objectId, region, axis, startAngle, endAngle, inverted]);
4886
- const regionFilter = React__default.useCallback((scope, data) => scope === TreeObjScope && (sketchId.current === NOCCID || data.object.parent === sketchId.current) && ccUtils.base.isA(data.object.class, CCClasses.CCCurve), []);
5262
+ const filter = React__default.useCallback((scope, data) => {
5263
+ return scope === TreeObjScope && ((sketchId.current === NOCCID || data.object.parent === sketchId.current) && ccUtils.base.isA(data.object.class, CCClasses.CCCurve) || ccUtils.base.isA(data.object.class, CCClasses.CCSketchRegion) || ccUtils.base.isA(data.object.class, CCClasses.CCCompositeCurve));
5264
+ }, []);
4887
5265
  return /*#__PURE__*/React__default.createElement(PluginForm, {
4888
5266
  drawingId: drawingId,
4889
5267
  pluginId: pluginId,
@@ -4899,7 +5277,7 @@ const RootImpl$y = ({
4899
5277
  drawingId: drawingId,
4900
5278
  param: region,
4901
5279
  caption: "Region",
4902
- filter: regionFilter,
5280
+ filter: filter,
4903
5281
  customIdPicker: pickObjId,
4904
5282
  sketchLines: true
4905
5283
  }), /*#__PURE__*/React__default.createElement(RefsEditor, {
@@ -4923,20 +5301,20 @@ const RootImpl$y = ({
4923
5301
  icon: true
4924
5302
  })));
4925
5303
  };
4926
- const Root$y = ({
5304
+ const Root$z = ({
4927
5305
  drawingId,
4928
5306
  pluginId
4929
5307
  }) => {
4930
5308
  return /*#__PURE__*/React__default.createElement(FtPluginValidator, {
4931
5309
  drawingId: drawingId,
4932
5310
  pluginId: pluginId
4933
- }, /*#__PURE__*/React__default.createElement(RootImpl$y, {
5311
+ }, /*#__PURE__*/React__default.createElement(RootImpl$z, {
4934
5312
  drawingId: drawingId,
4935
5313
  pluginId: pluginId
4936
5314
  }));
4937
5315
  };
4938
5316
 
4939
- const description$y = {
5317
+ const description$z = {
4940
5318
  name: 'Revolve',
4941
5319
  version: '1.0.0',
4942
5320
  author: 'Ledas',
@@ -4946,30 +5324,30 @@ const description$y = {
4946
5324
  initialState: addMembers
4947
5325
  };
4948
5326
 
4949
- var index$y = /*#__PURE__*/Object.freeze({
5327
+ var index$z = /*#__PURE__*/Object.freeze({
4950
5328
  __proto__: null,
4951
- Root: Root$y,
4952
- description: description$y
5329
+ Root: Root$z,
5330
+ description: description$z
4953
5331
  });
4954
5332
 
4955
- var Members$r;
5333
+ var Members$s;
4956
5334
  (function (Members) {
4957
5335
  Members["CSys"] = "references";
4958
5336
  Members["Width"] = "width";
4959
5337
  Members["Height"] = "height";
4960
5338
  Members["Length"] = "length";
4961
- })(Members$r || (Members$r = {}));
4962
- function RootImpl$x({
5339
+ })(Members$s || (Members$s = {}));
5340
+ function RootImpl$y({
4963
5341
  drawingId,
4964
5342
  pluginId
4965
5343
  }) {
4966
5344
  const {
4967
5345
  objectId
4968
5346
  } = usePlugin(drawingId, pluginId, plugin => plugin);
4969
- const csys = useRefsParam(drawingId, objectId, Members$r.CSys);
4970
- const width = useNumParam(drawingId, objectId, Members$r.Width);
4971
- const height = useNumParam(drawingId, objectId, Members$r.Height);
4972
- const length = useNumParam(drawingId, objectId, Members$r.Length);
5347
+ const csys = useRefsParam(drawingId, objectId, Members$s.CSys);
5348
+ const width = useNumParam(drawingId, objectId, Members$s.Width);
5349
+ const height = useNumParam(drawingId, objectId, Members$s.Height);
5350
+ const length = useNumParam(drawingId, objectId, Members$s.Length);
4973
5351
  const update = React__default.useCallback(() => {
4974
5352
  return ccAPI.feature.updateBox(drawingId, objectId, csys.serverValue, width.serverValue, length.serverValue, height.serverValue);
4975
5353
  }, [drawingId, objectId, csys, width, height, length]);
@@ -5019,20 +5397,20 @@ function RootImpl$x({
5019
5397
  allowExpr: true
5020
5398
  }));
5021
5399
  }
5022
- const Root$x = ({
5400
+ const Root$y = ({
5023
5401
  drawingId,
5024
5402
  pluginId
5025
5403
  }) => {
5026
5404
  return /*#__PURE__*/React__default.createElement(FtPluginValidator, {
5027
5405
  drawingId: drawingId,
5028
5406
  pluginId: pluginId
5029
- }, /*#__PURE__*/React__default.createElement(RootImpl$x, {
5407
+ }, /*#__PURE__*/React__default.createElement(RootImpl$y, {
5030
5408
  drawingId: drawingId,
5031
5409
  pluginId: pluginId
5032
5410
  }));
5033
5411
  };
5034
5412
 
5035
- const description$x = {
5413
+ const description$y = {
5036
5414
  name: 'Box',
5037
5415
  version: '1.0.0',
5038
5416
  author: 'Ledas',
@@ -5041,26 +5419,26 @@ const description$x = {
5041
5419
  global: false
5042
5420
  };
5043
5421
 
5044
- var index$x = /*#__PURE__*/Object.freeze({
5422
+ var index$y = /*#__PURE__*/Object.freeze({
5045
5423
  __proto__: null,
5046
- Root: Root$x,
5047
- description: description$x
5424
+ Root: Root$y,
5425
+ description: description$y
5048
5426
  });
5049
5427
 
5050
- var Members$q;
5428
+ var Members$r;
5051
5429
  (function (Members) {
5052
5430
  Members["CSys"] = "references";
5053
5431
  Members["Radius"] = "radius";
5054
- })(Members$q || (Members$q = {}));
5055
- function RootImpl$w({
5432
+ })(Members$r || (Members$r = {}));
5433
+ function RootImpl$x({
5056
5434
  drawingId,
5057
5435
  pluginId
5058
5436
  }) {
5059
5437
  const {
5060
5438
  objectId
5061
5439
  } = usePlugin(drawingId, pluginId, plugin => plugin);
5062
- const csys = useRefsParam(drawingId, objectId, Members$q.CSys);
5063
- const radius = useNumParam(drawingId, objectId, Members$q.Radius);
5440
+ const csys = useRefsParam(drawingId, objectId, Members$r.CSys);
5441
+ const radius = useNumParam(drawingId, objectId, Members$r.Radius);
5064
5442
  const update = React__default.useCallback(() => {
5065
5443
  return ccAPI.feature.updateSphere(drawingId, objectId, csys.userValue, radius.userValue);
5066
5444
  }, [drawingId, objectId, csys, radius]);
@@ -5090,20 +5468,20 @@ function RootImpl$w({
5090
5468
  allowExpr: true
5091
5469
  }));
5092
5470
  }
5093
- const Root$w = ({
5471
+ const Root$x = ({
5094
5472
  drawingId,
5095
5473
  pluginId
5096
5474
  }) => {
5097
5475
  return /*#__PURE__*/React__default.createElement(FtPluginValidator, {
5098
5476
  drawingId: drawingId,
5099
5477
  pluginId: pluginId
5100
- }, /*#__PURE__*/React__default.createElement(RootImpl$w, {
5478
+ }, /*#__PURE__*/React__default.createElement(RootImpl$x, {
5101
5479
  drawingId: drawingId,
5102
5480
  pluginId: pluginId
5103
5481
  }));
5104
5482
  };
5105
5483
 
5106
- const description$w = {
5484
+ const description$x = {
5107
5485
  name: 'Sphere',
5108
5486
  version: '1.0.0',
5109
5487
  author: 'Ledas',
@@ -5112,28 +5490,28 @@ const description$w = {
5112
5490
  global: false
5113
5491
  };
5114
5492
 
5115
- var index$w = /*#__PURE__*/Object.freeze({
5493
+ var index$x = /*#__PURE__*/Object.freeze({
5116
5494
  __proto__: null,
5117
- Root: Root$w,
5118
- description: description$w
5495
+ Root: Root$x,
5496
+ description: description$x
5119
5497
  });
5120
5498
 
5121
- var Members$p;
5499
+ var Members$q;
5122
5500
  (function (Members) {
5123
5501
  Members["CSys"] = "references";
5124
5502
  Members["Diameter"] = "diameter";
5125
5503
  Members["Height"] = "height";
5126
- })(Members$p || (Members$p = {}));
5127
- function RootImpl$v({
5504
+ })(Members$q || (Members$q = {}));
5505
+ function RootImpl$w({
5128
5506
  drawingId,
5129
5507
  pluginId
5130
5508
  }) {
5131
5509
  const {
5132
5510
  objectId
5133
5511
  } = usePlugin(drawingId, pluginId, plugin => plugin);
5134
- const csys = useRefsParam(drawingId, objectId, Members$p.CSys);
5135
- const diameter = useNumParam(drawingId, objectId, Members$p.Diameter);
5136
- const height = useNumParam(drawingId, objectId, Members$p.Height);
5512
+ const csys = useRefsParam(drawingId, objectId, Members$q.CSys);
5513
+ const diameter = useNumParam(drawingId, objectId, Members$q.Diameter);
5514
+ const height = useNumParam(drawingId, objectId, Members$q.Height);
5137
5515
  const update = React__default.useCallback(() => {
5138
5516
  return ccAPI.feature.updateCylinder(drawingId, objectId, csys.serverValue, diameter.serverValue, height.serverValue);
5139
5517
  }, [drawingId, objectId, csys, diameter, height]);
@@ -5164,40 +5542,237 @@ function RootImpl$v({
5164
5542
  allowExpr: true
5165
5543
  }), /*#__PURE__*/React__default.createElement(NumberEditor, {
5166
5544
  drawingId: drawingId,
5167
- caption: "Height",
5168
- param: height,
5169
- validator: acceptableRange({
5170
- value: 0,
5171
- isInclusive: false
5172
- }, undefined),
5173
- allowExpr: true
5545
+ caption: "Height",
5546
+ param: height,
5547
+ validator: acceptableRange({
5548
+ value: 0,
5549
+ isInclusive: false
5550
+ }, undefined),
5551
+ allowExpr: true
5552
+ }));
5553
+ }
5554
+ const Root$w = ({
5555
+ drawingId,
5556
+ pluginId
5557
+ }) => {
5558
+ return /*#__PURE__*/React__default.createElement(FtPluginValidator, {
5559
+ drawingId: drawingId,
5560
+ pluginId: pluginId
5561
+ }, /*#__PURE__*/React__default.createElement(RootImpl$w, {
5562
+ drawingId: drawingId,
5563
+ pluginId: pluginId
5564
+ }));
5565
+ };
5566
+
5567
+ const description$w = {
5568
+ name: 'Cylinder',
5569
+ version: '1.0.0',
5570
+ author: 'Ledas',
5571
+ persistent: true,
5572
+ visible: false,
5573
+ global: false
5574
+ };
5575
+
5576
+ var index$w = /*#__PURE__*/Object.freeze({
5577
+ __proto__: null,
5578
+ Root: Root$w,
5579
+ description: description$w
5580
+ });
5581
+
5582
+ var Members$p;
5583
+ (function (Members) {
5584
+ Members["References"] = "references";
5585
+ })(Members$p || (Members$p = {}));
5586
+ const RootImpl$v = ({
5587
+ drawingId,
5588
+ pluginId
5589
+ }) => {
5590
+ const {
5591
+ objectId
5592
+ } = usePlugin(drawingId, pluginId, plugin => plugin);
5593
+ const refs = useRefsParam(drawingId, objectId, Members$p.References);
5594
+ const {
5595
+ Checkbox
5596
+ } = useBuerli(buerli => buerli.options.elements);
5597
+ const [isFaceSelectionActive, setIsFaceSelectionActive] = useState(false);
5598
+ const update = React__default.useCallback(() => {
5599
+ return ccAPI.feature.updateCompositeCurve(drawingId, objectId, refs.serverValue);
5600
+ }, [drawingId, objectId, refs]);
5601
+ return /*#__PURE__*/React__default.createElement(PluginForm, {
5602
+ drawingId: drawingId,
5603
+ pluginId: pluginId,
5604
+ update: update,
5605
+ params: {
5606
+ refs
5607
+ }
5608
+ }, /*#__PURE__*/React__default.createElement(Checkbox, {
5609
+ checked: isFaceSelectionActive,
5610
+ onChange: e => setIsFaceSelectionActive(e.target.checked)
5611
+ }, "Face selection"), isFaceSelectionActive && /*#__PURE__*/React__default.createElement(RefsEditor, {
5612
+ drawingId: drawingId,
5613
+ caption: "Curve References",
5614
+ param: refs,
5615
+ customIdPicker: pickGrOrObjId,
5616
+ filter: (scope, data) => edgeFilter(scope, data) || ccLineFilter(scope, data) || ccArcFilter(scope, data) || ccCircleFilter(scope, data) || meshFilter(scope, data)
5617
+ }), !isFaceSelectionActive && /*#__PURE__*/React__default.createElement(RefsEditor, {
5618
+ drawingId: drawingId,
5619
+ caption: "Curve References",
5620
+ param: refs,
5621
+ customIdPicker: pickGrOrObjId,
5622
+ filter: (scope, data) => edgeFilter(scope, data) || ccLineFilter(scope, data) || ccArcFilter(scope, data) || ccCircleFilter(scope, data) || loopFilter(scope, data)
5623
+ }));
5624
+ };
5625
+ const Root$v = ({
5626
+ drawingId,
5627
+ pluginId
5628
+ }) => {
5629
+ return /*#__PURE__*/React__default.createElement(FtPluginValidator, {
5630
+ drawingId: drawingId,
5631
+ pluginId: pluginId
5632
+ }, /*#__PURE__*/React__default.createElement(RootImpl$v, {
5633
+ drawingId: drawingId,
5634
+ pluginId: pluginId
5635
+ }));
5636
+ };
5637
+
5638
+ const getHighlightedColor = (isGHovered, isGSelected, isSHovered, isSSelected) => {
5639
+ if (isSHovered) {
5640
+ return '#3280ff';
5641
+ }
5642
+ if (isSSelected) {
5643
+ return '#8040c0';
5644
+ }
5645
+ if (isGHovered) {
5646
+ return 'green';
5647
+ }
5648
+ if (isGSelected) {
5649
+ return 'red';
5650
+ }
5651
+ return undefined;
5652
+ };
5653
+
5654
+ const FatLine = ({
5655
+ line,
5656
+ handlers,
5657
+ userData,
5658
+ color,
5659
+ lineWidth = 3.0
5660
+ }) => {
5661
+ const {
5662
+ size
5663
+ } = useThree();
5664
+ const primitive = line.geometry;
5665
+ const lg = React__default.useMemo(() => {
5666
+ return new LineGeometry().setPositions(primitive.attributes.position.array);
5667
+ }, [primitive]);
5668
+ const resolution = React__default.useMemo(() => new THREE.Vector2(size.width, size.height), [size]);
5669
+ return /*#__PURE__*/React__default.createElement("line2", _extends({
5670
+ geometry: lg
5671
+ }, handlers, {
5672
+ userData: userData,
5673
+ renderOrder: 600
5674
+ }), /*#__PURE__*/React__default.createElement("lineMaterial", {
5675
+ attach: "material",
5676
+ color: color || new THREE.Color('black'),
5677
+ opacity: 1.0,
5678
+ linewidth: lineWidth,
5679
+ dashed: false,
5680
+ resolution: resolution,
5681
+ transparent: true,
5682
+ depthTest: true,
5683
+ depthWrite: false,
5684
+ polygonOffset: true,
5685
+ polygonOffsetUnits: -1000
5686
+ }));
5687
+ };
5688
+ const CompositeCurveObj = ({
5689
+ drawingId,
5690
+ color,
5691
+ lineWidth,
5692
+ userData,
5693
+ handlers,
5694
+ objectId
5695
+ }) => {
5696
+ const compCurveObj = useDrawing(drawingId, drawing => drawing.structure.tree[objectId]);
5697
+ const curveEntityIds = compCurveObj == null ? void 0 : compCurveObj.children; // CC_CurveEntity ids
5698
+ const curveEntityId = curveEntityIds ? curveEntityIds[0] : -1;
5699
+ const curveEntityObj = useDrawing(drawingId, drawing => drawing.structure.tree[curveEntityId]);
5700
+ const cadEntityIds = curveEntityIds && (curveEntityObj == null ? void 0 : curveEntityObj.geometryIdList); // cad entity ids
5701
+ const cadEntityId = cadEntityIds ? cadEntityIds[0] : -1;
5702
+ const entity = useDrawing(drawingId, d => d.geometry.cache[cadEntityId]); // cad entity (curve array)
5703
+
5704
+ const items = React__default.useMemo(() => {
5705
+ if (!entity || entity.meshes.length > 0) return [];
5706
+ return [...entity.lines, ...entity.edges, ...entity.arcs];
5707
+ }, [entity]);
5708
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, items.map(item => /*#__PURE__*/React__default.createElement(FatLine, {
5709
+ key: item.graphicId,
5710
+ line: item,
5711
+ handlers: handlers,
5712
+ userData: userData,
5713
+ color: color,
5714
+ lineWidth: lineWidth
5715
+ })));
5716
+ };
5717
+
5718
+ const ViewImpl$g = ({
5719
+ drawingId,
5720
+ pluginId
5721
+ }) => {
5722
+ const {
5723
+ objectId
5724
+ } = usePlugin(drawingId, pluginId, pluginState => pluginState);
5725
+ const isActive = useDrawing(drawingId, drawing => drawing.plugin.active.feature === pluginId);
5726
+ const {
5727
+ isGHovered,
5728
+ isGSelected,
5729
+ isSHovered,
5730
+ isSSelected,
5731
+ handlers
5732
+ } = useTreeObjInteraction(drawingId, objectId);
5733
+ const color = getHighlightedColor(isGHovered, isGSelected, isSHovered, isSSelected) || 0x111111;
5734
+ return /*#__PURE__*/React__default.createElement(HUD, null, !isActive && /*#__PURE__*/React__default.createElement(CompositeCurveObj, {
5735
+ drawingId: drawingId,
5736
+ objectId: objectId // CC_CompositeCurve
5737
+ ,
5738
+ color: color,
5739
+ lineWidth: 2.0 // ?
5740
+ ,
5741
+ userData: {
5742
+ objId: objectId,
5743
+ onHUD: true
5744
+ },
5745
+ handlers: handlers
5174
5746
  }));
5175
- }
5176
- const Root$v = ({
5747
+ };
5748
+ const View$g = ({
5177
5749
  drawingId,
5178
5750
  pluginId
5179
5751
  }) => {
5180
5752
  return /*#__PURE__*/React__default.createElement(FtPluginValidator, {
5181
5753
  drawingId: drawingId,
5182
- pluginId: pluginId
5183
- }, /*#__PURE__*/React__default.createElement(RootImpl$v, {
5754
+ pluginId: pluginId,
5755
+ inCanvas: true
5756
+ }, /*#__PURE__*/React__default.createElement(ViewImpl$g, {
5184
5757
  drawingId: drawingId,
5185
5758
  pluginId: pluginId
5186
5759
  }));
5187
5760
  };
5188
5761
 
5189
5762
  const description$v = {
5190
- name: 'Cylinder',
5763
+ name: 'CompositeCurve',
5191
5764
  version: '1.0.0',
5192
- author: 'Ledas',
5765
+ author: 'AWV',
5193
5766
  persistent: true,
5194
5767
  visible: false,
5195
- global: false
5768
+ global: false,
5769
+ initialState: addMembers
5196
5770
  };
5197
5771
 
5198
5772
  var index$v = /*#__PURE__*/Object.freeze({
5199
5773
  __proto__: null,
5200
5774
  Root: Root$v,
5775
+ View: View$g,
5201
5776
  description: description$v
5202
5777
  });
5203
5778
 
@@ -5428,7 +6003,7 @@ const RootImpl$s = ({
5428
6003
  param: offset1,
5429
6004
  allowExpr: true
5430
6005
  }, type.userValue === ChamferType.TWO_DISTANCES && /*#__PURE__*/React__default.createElement(Button, {
5431
- iconSrc: img$17,
6006
+ iconSrc: img$18,
5432
6007
  onClick: switchDirections
5433
6008
  })), type.userValue === ChamferType.TWO_DISTANCES && /*#__PURE__*/React__default.createElement(NumberEditor, {
5434
6009
  drawingId: drawingId,
@@ -6222,8 +6797,8 @@ const Digits = ({
6222
6797
 
6223
6798
  const vectorToString = (point, digits) => `${point.toArray().map(n => MathUtils.round(n, digits)).join(', ')}`;
6224
6799
 
6225
- function ownKeys$p(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6226
- function _objectSpread$p(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$p(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$p(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6800
+ function ownKeys$q(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6801
+ function _objectSpread$q(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$q(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$q(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6227
6802
  const Excluded = [GraphicType.LOOP].concat(EntityTypes);
6228
6803
  const RootImpl$j = ({
6229
6804
  drawingId,
@@ -6294,7 +6869,7 @@ const Output = ({
6294
6869
  const {
6295
6870
  value
6296
6871
  } = res.measureData;
6297
- return _objectSpread$p(_objectSpread$p({}, res), {}, {
6872
+ return _objectSpread$q(_objectSpread$q({}, res), {}, {
6298
6873
  asString: MathUtils.round(value, digits)
6299
6874
  });
6300
6875
  }
@@ -6304,13 +6879,13 @@ const Output = ({
6304
6879
  const {
6305
6880
  value
6306
6881
  } = res.measureData;
6307
- return _objectSpread$p(_objectSpread$p({}, res), {}, {
6882
+ return _objectSpread$q(_objectSpread$q({}, res), {}, {
6308
6883
  asString: vectorToString(value, digits)
6309
6884
  });
6310
6885
  }
6311
6886
  }
6312
6887
  }
6313
- return _objectSpread$p(_objectSpread$p({}, res), {}, {
6888
+ return _objectSpread$q(_objectSpread$q({}, res), {}, {
6314
6889
  asString: ''
6315
6890
  });
6316
6891
  });
@@ -6341,198 +6916,6 @@ const Root$j = ({
6341
6916
  }));
6342
6917
  };
6343
6918
 
6344
- const Point$2 = ({
6345
- position,
6346
- radius,
6347
- color,
6348
- opacity = 1,
6349
- handlers,
6350
- userData
6351
- }) => {
6352
- return /*#__PURE__*/React__default.createElement("mesh", _extends({
6353
- position: position.clone(),
6354
- userData: userData
6355
- }, handlers), /*#__PURE__*/React__default.createElement("sphereGeometry", {
6356
- attach: "geometry",
6357
- args: [radius, 32, 16]
6358
- }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", {
6359
- attach: "material",
6360
- color: color,
6361
- opacity: opacity,
6362
- transparent: opacity < 1
6363
- }));
6364
- };
6365
- const Arrow = ({
6366
- position,
6367
- direction,
6368
- length,
6369
- width,
6370
- color,
6371
- opacity = 1,
6372
- handlers,
6373
- userData,
6374
- withCone = true
6375
- }) => {
6376
- const cylinderWith = width;
6377
- const coneWidth = cylinderWith * 1.5;
6378
- const coneLength = Math.min(coneWidth / 0.12, length / 2.0);
6379
- const cylinderLength = withCone ? length - coneLength : length;
6380
- return /*#__PURE__*/React__default.createElement("group", _extends({
6381
- position: position.clone(),
6382
- quaternion: new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 1, 0), direction.clone().normalize())
6383
- }, handlers, {
6384
- userData: userData
6385
- }), /*#__PURE__*/React__default.createElement("mesh", {
6386
- position: new THREE.Vector3(0, cylinderLength / 2.0, 0),
6387
- renderOrder: 500,
6388
- userData: userData
6389
- }, /*#__PURE__*/React__default.createElement("cylinderGeometry", {
6390
- attach: "geometry",
6391
- args: [cylinderWith, cylinderWith, cylinderLength, 24, 1]
6392
- }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", {
6393
- attach: "material",
6394
- color: color,
6395
- opacity: opacity,
6396
- transparent: true
6397
- })), withCone && /*#__PURE__*/React__default.createElement("mesh", {
6398
- position: new THREE.Vector3(0, cylinderLength + coneLength / 2.0, 0),
6399
- renderOrder: 500,
6400
- userData: userData
6401
- }, /*#__PURE__*/React__default.createElement("coneGeometry", {
6402
- attach: "geometry",
6403
- args: [coneWidth, coneLength, 24, 1]
6404
- }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", {
6405
- attach: "material",
6406
- color: color,
6407
- opacity: opacity,
6408
- transparent: opacity < 1
6409
- })));
6410
- };
6411
- const OriginPoint = ({
6412
- position,
6413
- color,
6414
- opacity = 1,
6415
- handlers,
6416
- userData
6417
- }) => {
6418
- return /*#__PURE__*/React__default.createElement(Point$2, {
6419
- position: position ? position.clone() : new THREE.Vector3(),
6420
- radius: 2,
6421
- color: color,
6422
- opacity: opacity,
6423
- handlers: handlers,
6424
- userData: userData
6425
- });
6426
- };
6427
- const AxisArrow = ({
6428
- position,
6429
- direction,
6430
- color,
6431
- opacity = 1,
6432
- handlers,
6433
- userData,
6434
- length,
6435
- width,
6436
- withCone = true
6437
- }) => {
6438
- return /*#__PURE__*/React__default.createElement(Arrow, {
6439
- position: position ? position.clone() : new THREE.Vector3(),
6440
- direction: direction.clone(),
6441
- length: length || 21,
6442
- width: width || 1,
6443
- color: color,
6444
- opacity: opacity,
6445
- handlers: handlers,
6446
- userData: userData,
6447
- withCone: withCone
6448
- });
6449
- };
6450
-
6451
- //TODO: don't use any
6452
- const Csys = ({
6453
- matrix,
6454
- opacity,
6455
- handlers,
6456
- color,
6457
- userData
6458
- }) => {
6459
- const position = new THREE.Vector3().setFromMatrixPosition(matrix);
6460
- const ref = useScale$1(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
6461
- return /*#__PURE__*/React__default.createElement("group", _extends({
6462
- matrix: matrix,
6463
- matrixAutoUpdate: false,
6464
- userData: userData
6465
- }, handlers), /*#__PURE__*/React__default.createElement("group", {
6466
- ref: ref
6467
- }, /*#__PURE__*/React__default.createElement(OriginPoint, {
6468
- position: new THREE.Vector3(),
6469
- color: color || 0x000000,
6470
- opacity: opacity,
6471
- userData: userData
6472
- }), /*#__PURE__*/React__default.createElement(AxisArrow, {
6473
- position: new THREE.Vector3(),
6474
- direction: new THREE.Vector3(1, 0, 0),
6475
- color: color || 0xd52828,
6476
- opacity: opacity,
6477
- userData: userData
6478
- }), /*#__PURE__*/React__default.createElement(AxisArrow, {
6479
- position: new THREE.Vector3(),
6480
- direction: new THREE.Vector3(0, 1, 0),
6481
- color: color || 0x28a628,
6482
- opacity: opacity,
6483
- userData: userData
6484
- }), /*#__PURE__*/React__default.createElement(AxisArrow, {
6485
- position: new THREE.Vector3(),
6486
- direction: new THREE.Vector3(0, 0, 1),
6487
- color: color || 0x2828d7,
6488
- opacity: opacity,
6489
- userData: userData
6490
- })));
6491
- };
6492
- const SelectedCsys = ({
6493
- matrix,
6494
- opacity = 1.0,
6495
- handlers,
6496
- color,
6497
- userData
6498
- }) => {
6499
- const position = new THREE.Vector3().setFromMatrixPosition(matrix);
6500
- const ref = useScale$1(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
6501
- return /*#__PURE__*/React__default.createElement("group", _extends({
6502
- matrix: matrix,
6503
- matrixAutoUpdate: false
6504
- }, handlers), /*#__PURE__*/React__default.createElement("group", {
6505
- ref: ref
6506
- }, /*#__PURE__*/React__default.createElement(OriginPoint, {
6507
- position: new THREE.Vector3(),
6508
- color: color || 0x000000,
6509
- opacity: opacity,
6510
- userData: userData
6511
- }), /*#__PURE__*/React__default.createElement(AxisArrow, {
6512
- position: new THREE.Vector3(),
6513
- direction: new THREE.Vector3(1, 0, 0),
6514
- color: color || 0xd52828,
6515
- opacity: opacity,
6516
- userData: userData,
6517
- withCone: false
6518
- }), /*#__PURE__*/React__default.createElement(AxisArrow, {
6519
- position: new THREE.Vector3(),
6520
- direction: new THREE.Vector3(0, 1, 0),
6521
- color: color || 0x28a628,
6522
- opacity: opacity,
6523
- userData: userData,
6524
- withCone: false
6525
- }), /*#__PURE__*/React__default.createElement(AxisArrow, {
6526
- position: new THREE.Vector3(),
6527
- direction: new THREE.Vector3(0, 0, 1),
6528
- width: 1.25,
6529
- length: 45,
6530
- color: color || 0x2828d7,
6531
- opacity: opacity,
6532
- userData: userData
6533
- })));
6534
- };
6535
-
6536
6919
  const dWidthCoeff = 15;
6537
6920
  const Distance = ({
6538
6921
  p1,
@@ -6839,7 +7222,7 @@ let HandlersList;
6839
7222
  HandlersList["TRIM"] = "trim";
6840
7223
  HandlersList["SPLIT"] = "split";
6841
7224
  HandlersList["USEREF"] = "useReference";
6842
- HandlersList["GSELECTION"] = "globalSelection";
7225
+ HandlersList["SSELECT"] = "sSelect";
6843
7226
  })(HandlersList || (HandlersList = {}));
6844
7227
  let TmpObjClasses;
6845
7228
  (function (TmpObjClasses) {
@@ -7025,18 +7408,22 @@ const tolerance$7 = 1e-6;
7025
7408
  */
7026
7409
  const deltaTolerance = 4;
7027
7410
 
7028
- const getInitialState = () => {
7029
- return {
7411
+ const description$i = {
7412
+ name: 'Sketcher',
7413
+ version: '1.0.0',
7414
+ author: 'Ledas',
7415
+ persistent: true,
7416
+ visible: false,
7417
+ global: false,
7418
+ initialState: {
7030
7419
  alwaysShowConstr: false,
7031
7420
  // By default, all constraints are hidden, they appear only if corresponding graphics is hovered. If the flag is true all constrains are shown.
7032
7421
  showCoincidence: false,
7033
7422
  // By default, coincidence constraints are not shown.
7034
- constraintsToGeometry: {},
7035
- // When user hovers a constraint corresponding graphics should be highlighted too. This map is used to highlight graphics.
7036
7423
  showRigidSets: false,
7037
7424
  // Shows only rigidSet. Needed in CopyPattern.
7038
7425
  activeHandler: undefined,
7039
- // Defines which hanlder is acrive now. (When sketcher is just enabled "drag" handler is enabled)
7426
+ // Defines which hanlder is active now. (When sketcher is just enabled "drag" handler is enabled)
7040
7427
  handlers: {},
7041
7428
  // Since handlers also have internal state we need to store it somewhere. This object contains states of all handlers.
7042
7429
  tmpObjects: {},
@@ -7046,8 +7433,11 @@ const getInitialState = () => {
7046
7433
  interaction: {
7047
7434
  cycle: 0,
7048
7435
  objects: [],
7049
- lastPos: new THREE.Vector3()
7436
+ lastHoveredPos: {},
7437
+ // A map for positions where constraints / regions were hovered last time.
7438
+ constraintsToGeometry: {} // When user hovers a constraint corresponding graphics should be highlighted too. This map is used to highlight graphics.
7050
7439
  },
7440
+
7051
7441
  // Contains information about objects under the pointer (`interaction.objects[interaction.cycle]` should equal `hovered`)
7052
7442
  isDragged: false,
7053
7443
  // When used drags some objects, this should equal true.
@@ -7055,8 +7445,6 @@ const getInitialState = () => {
7055
7445
  // Scale for graphics dependent on zoom. (It's used only in Arcs and Circles and should be removed when these object are reimplemented)
7056
7446
  step: 1,
7057
7447
  // Step for sketch grid dependent on camera zoom.
7058
- dimPluginId: undefined,
7059
- // Id of the dimension plugin which is embedded into Sketch plugin.
7060
7448
  mousePos: undefined,
7061
7449
  // A vector contains mouse position.
7062
7450
  drawnObjectsRef: undefined,
@@ -7066,16 +7454,7 @@ const getInitialState = () => {
7066
7454
  cursor: null,
7067
7455
  // A cursor name to be set in the page body; should match some CSS value.
7068
7456
  needsUpdate: 0
7069
- };
7070
- };
7071
- const description$i = {
7072
- name: 'Sketcher',
7073
- version: '1.0.0',
7074
- author: 'Ledas',
7075
- persistent: true,
7076
- visible: false,
7077
- global: false,
7078
- initialState: getInitialState()
7457
+ }
7079
7458
  };
7080
7459
 
7081
7460
  function getSketchState(drawingId, pluginId) {
@@ -7085,9 +7464,9 @@ function getSketchState(drawingId, pluginId) {
7085
7464
  }
7086
7465
  return plugin.state;
7087
7466
  }
7088
-
7089
- function ownKeys$o(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7090
- function _objectSpread$o(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$o(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$o(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7467
+
7468
+ function ownKeys$p(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7469
+ function _objectSpread$p(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$p(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$p(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7091
7470
  function CreateAngle(drawingId, pluginId) {
7092
7471
  const {
7093
7472
  set
@@ -7128,8 +7507,8 @@ function CreateAngle(drawingId, pluginId) {
7128
7507
  set(state_ => {
7129
7508
  const tmpAngularDimension = state_.tmpObjects[tmpDimensionId];
7130
7509
  return {
7131
- tmpObjects: _objectSpread$o(_objectSpread$o({}, state_.tmpObjects), {}, {
7132
- [tmpDimensionId]: _objectSpread$o(_objectSpread$o({}, tmpAngularDimension), params)
7510
+ tmpObjects: _objectSpread$p(_objectSpread$p({}, state_.tmpObjects), {}, {
7511
+ [tmpDimensionId]: _objectSpread$p(_objectSpread$p({}, tmpAngularDimension), params)
7133
7512
  })
7134
7513
  };
7135
7514
  });
@@ -7155,7 +7534,7 @@ function CreateAngle(drawingId, pluginId) {
7155
7534
  const dir1 = linesInfo.dir1;
7156
7535
  const center = linesInfo.center;
7157
7536
  const dimPos = center.clone().addScaledVector(dir0.clone().add(dir1).normalize(), 10);
7158
- const tmpAngularDimension = _objectSpread$o(_objectSpread$o({
7537
+ const tmpAngularDimension = _objectSpread$p(_objectSpread$p({
7159
7538
  class: TmpObjClasses.AngularDimension,
7160
7539
  id: tmpDimensionId
7161
7540
  }, linesInfo), {}, {
@@ -7240,23 +7619,28 @@ const rollUpPoints = (drawingId, id1, id2) => {
7240
7619
  const parent = tree[obj1.parent || NOCCID];
7241
7620
  return ccUtils.base.isA(obj1 == null ? void 0 : obj1.class, CCClasses.CCPoint) && ccUtils.base.isA(obj2 == null ? void 0 : obj2.class, CCClasses.CCPoint) && obj1.parent === obj2.parent && ccUtils.base.isA((parent == null ? void 0 : parent.class) || '', CCClasses.CCLine) ? [obj1.parent] : [id1, id2];
7242
7621
  };
7243
- const getConstrEntities = (drawingId, constrId) => {
7244
- var _constr$members;
7245
- const constr = getDrawing(drawingId).structure.tree[constrId];
7246
- const entities = ((_constr$members = constr.members) == null ? void 0 : _constr$members.entities).members;
7247
- if (ccUtils.base.isA(constr.class, CCClasses.CC2DOffsetConstraint) || ccUtils.base.isA(constr.class, CCClasses.CC2DHorizontalDistanceConstraint) || ccUtils.base.isA(constr.class, CCClasses.CC2DVerticalDistanceConstraint)) {
7248
- const [id1, id2] = entities.map(entity => entity.value);
7622
+ const getEntities = (drawingId, objectId) => {
7623
+ var _obj$members2;
7624
+ const tree = getDrawing(drawingId).structure.tree;
7625
+ const obj = tree[objectId];
7626
+ if (isSketchRegion(obj)) {
7627
+ var _obj$members, _obj$members$curves;
7628
+ return (_obj$members = obj.members) == null ? void 0 : (_obj$members$curves = _obj$members.curves) == null ? void 0 : _obj$members$curves.members.map(curve => curve.value);
7629
+ }
7630
+ const entities = ((_obj$members2 = obj.members) == null ? void 0 : _obj$members2.entities).members.map(entity => entity.value);
7631
+ if (ccUtils.base.isA(obj.class, CCClasses.CC2DOffsetConstraint) || ccUtils.base.isA(obj.class, CCClasses.CC2DHorizontalDistanceConstraint) || ccUtils.base.isA(obj.class, CCClasses.CC2DVerticalDistanceConstraint)) {
7632
+ const [id1, id2] = entities;
7249
7633
  return rollUpPoints(drawingId, id1, id2);
7250
7634
  }
7251
- if (ccUtils.base.isA(constr.class, CCClasses.CC2DMidpointConstraint)) {
7252
- const [id1, id2, id3] = entities.map(entity => entity.value);
7635
+ if (ccUtils.base.isA(obj.class, CCClasses.CC2DMidpointConstraint)) {
7636
+ const [id1, id2, id3] = entities;
7253
7637
  return [...rollUpPoints(drawingId, id1, id3), id2];
7254
7638
  }
7255
- if (ccUtils.base.isA(constr.class, CCClasses.CC2DEqualLengthConstraint)) {
7256
- const [id1, id2, id3, id4] = entities.map(entity => entity.value);
7639
+ if (ccUtils.base.isA(obj.class, CCClasses.CC2DEqualLengthConstraint)) {
7640
+ const [id1, id2, id3, id4] = entities;
7257
7641
  return [...rollUpPoints(drawingId, id1, id2), ...rollUpPoints(drawingId, id3, id4)];
7258
7642
  }
7259
- return entities.map(entity => entity.value);
7643
+ return entities;
7260
7644
  };
7261
7645
 
7262
7646
  function getGeometryPriority(object) {
@@ -7269,7 +7653,7 @@ function getGeometryPriority(object) {
7269
7653
  if (ccUtils.base.isA(object.class, CCClasses.CCCircle)) {
7270
7654
  return 3;
7271
7655
  }
7272
- if (is2DConstraint(object)) {
7656
+ if (is2DConstraint(object) || isSketchRegion(object)) {
7273
7657
  return 4;
7274
7658
  }
7275
7659
  if (ccUtils.base.isA(object.class, CCClasses.CCPoint)) {
@@ -7278,8 +7662,8 @@ function getGeometryPriority(object) {
7278
7662
  return -1;
7279
7663
  }
7280
7664
 
7281
- function ownKeys$n(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7282
- function _objectSpread$n(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$n(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$n(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7665
+ function ownKeys$o(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7666
+ function _objectSpread$o(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$o(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$o(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7283
7667
  let timerId;
7284
7668
  const projectPointOnGeometry = (point, geometryId, tree) => {
7285
7669
  const geometry = tree[geometryId];
@@ -7312,60 +7696,48 @@ const setHoverState = (drawingId, pluginId, cycle, objects, hoverPos) => {
7312
7696
  const tree = drawing.structure.tree;
7313
7697
  const hoveredId = objects[cycle % objects.length];
7314
7698
  const hoveredObject = tree[hoveredId];
7315
- const selected = drawing.interaction.selected || [];
7316
7699
  const setHovered = drawing.api.interaction.setHovered;
7317
- const setSelected = drawing.api.interaction.setSelected;
7318
7700
  if (hoveredObject) {
7319
7701
  setHovered(createInfo({
7320
7702
  objectId: hoveredId,
7321
7703
  prodRefId: curProduct
7322
7704
  }));
7323
- if (is2DConstraint(hoveredObject)) {
7324
- const constrEntities = getConstrEntities(drawingId, hoveredId);
7705
+ if (is2DConstraint(hoveredObject) || isSketchRegion(hoveredObject)) {
7706
+ const entities = getEntities(drawingId, hoveredId);
7325
7707
  set(state_ => {
7326
7708
  const highlighted = state_.highlighted;
7327
- const highlightedConstraints = highlighted.filter(id => is2DConstraint(tree[id]) && id !== hoveredId);
7328
- const lastPos = hoverPos ? state_.interaction.lastPos : undefined;
7709
+ const highlightedNonGeom = highlighted.filter(id => id !== hoveredId && (is2DConstraint(tree[id]) || isSketchRegion(tree[id])));
7329
7710
  return {
7330
- highlighted: [...highlightedConstraints, hoveredId, ...constrEntities],
7331
- interaction: {
7711
+ highlighted: [...highlightedNonGeom, hoveredId, ...entities],
7712
+ interaction: _objectSpread$o(_objectSpread$o({}, state_.interaction), {}, {
7332
7713
  cycle,
7333
- objects,
7334
- lastPos
7335
- }
7714
+ objects
7715
+ })
7336
7716
  };
7337
7717
  });
7338
7718
  } else {
7339
- const linkedConstraints = Object.values(tree).filter(obj => is2DConstraint(obj)).filter(obj => getConstrEntities(drawingId, obj.id).some(entityId => entityId === hoveredId)).map(obj => obj.id);
7340
- const selectedLinked = selected.filter(info => linkedConstraints.indexOf(info.objectId) !== -1);
7341
- const selectedNotLinked = selected.filter(info => linkedConstraints.indexOf(info.objectId) === -1);
7342
- const constraintsToGeometry = {};
7343
- linkedConstraints.forEach(id => {
7719
+ const linked = Object.values(tree).filter(obj => is2DConstraint(obj) || isSketchRegion(obj)).filter(obj => getEntities(drawingId, obj.id).some(entityId => entityId === hoveredId)).map(obj => obj.id);
7720
+ const state = getSketchState(drawingId, pluginId);
7721
+ const constraintsToGeometry = _objectSpread$o({}, state.interaction.constraintsToGeometry);
7722
+ linked.forEach(id => {
7344
7723
  constraintsToGeometry[id] = hoveredId;
7345
7724
  });
7346
- const state = getSketchState(drawingId, pluginId);
7347
7725
  const prevHoveredId = state.interaction.objects[state.interaction.cycle % state.interaction.objects.length];
7348
- let lastPos;
7726
+ const lastHoveredPos = _objectSpread$o({}, state.interaction.lastHoveredPos);
7349
7727
  if (!hoverPos) {
7350
- lastPos = undefined;
7351
- } else {
7352
- lastPos = hoveredId !== prevHoveredId ? projectPointOnGeometry(hoverPos, hoveredId, tree) : state.interaction.lastPos;
7728
+ linked.forEach(id => delete lastHoveredPos[id]);
7729
+ } else if (hoveredId !== prevHoveredId) {
7730
+ const projectedPoint = projectPointOnGeometry(hoverPos, hoveredId, tree);
7731
+ linked.forEach(id => lastHoveredPos[id] = projectedPoint);
7353
7732
  }
7354
- setSelected([...selectedNotLinked, ...selectedLinked.map(info => _objectSpread$n(_objectSpread$n({}, info), {}, {
7355
- userData: {
7356
- hoverPos: lastPos
7733
+ set({
7734
+ highlighted: [hoveredId, ...linked],
7735
+ interaction: {
7736
+ cycle,
7737
+ objects,
7738
+ lastHoveredPos,
7739
+ constraintsToGeometry
7357
7740
  }
7358
- }))]);
7359
- set(state_ => {
7360
- return {
7361
- highlighted: [hoveredId, ...linkedConstraints],
7362
- constraintsToGeometry: _objectSpread$n(_objectSpread$n({}, state_.constraintsToGeometry), constraintsToGeometry),
7363
- interaction: {
7364
- cycle,
7365
- objects,
7366
- lastPos
7367
- }
7368
- };
7369
7741
  });
7370
7742
  }
7371
7743
  if (timerId) {
@@ -7376,14 +7748,13 @@ const setHoverState = (drawingId, pluginId, cycle, objects, hoverPos) => {
7376
7748
  setHovered(null);
7377
7749
  set(state_ => {
7378
7750
  const highlighted = state_.highlighted;
7379
- const highlightedConstraints = highlighted.filter(id => is2DConstraint(tree[id]));
7751
+ const highlightedNonGeom = highlighted.filter(id => is2DConstraint(tree[id]) || isSketchRegion(tree[id]));
7380
7752
  return {
7381
- highlighted: highlightedConstraints,
7382
- interaction: {
7753
+ highlighted: highlightedNonGeom,
7754
+ interaction: _objectSpread$o(_objectSpread$o({}, state_.interaction), {}, {
7383
7755
  cycle,
7384
- objects,
7385
- lastPos: state_.interaction.lastPos
7386
- }
7756
+ objects
7757
+ })
7387
7758
  };
7388
7759
  });
7389
7760
  if (timerId) {
@@ -7419,15 +7790,10 @@ const unhover = (drawingId, pluginId, objId) => {
7419
7790
  const select = (drawingId, pluginId, selectedId) => {
7420
7791
  const drawing = getDrawing(drawingId);
7421
7792
  const curProduct = drawing.structure.currentProduct;
7422
- const selectedObj = getDrawing(drawingId).structure.tree[selectedId];
7423
- const hoverPos = is2DConstraint(selectedObj) ? getSketchState(drawingId, pluginId).interaction.lastPos : undefined;
7424
7793
  const select_ = drawing.api.interaction.select;
7425
7794
  select_(createInfo({
7426
7795
  objectId: selectedId,
7427
- prodRefId: curProduct,
7428
- userData: {
7429
- hoverPos
7430
- }
7796
+ prodRefId: curProduct
7431
7797
  }), true);
7432
7798
  };
7433
7799
  const tab = (drawingId, pluginId) => {
@@ -7453,17 +7819,29 @@ function Hover(drawingId, pluginId) {
7453
7819
  }
7454
7820
  };
7455
7821
  const getSketchObjIds = e => {
7456
- const tree = getDrawing(drawingId).structure.tree;
7822
+ const drawing = getDrawing(drawingId);
7823
+ const tree = drawing.structure.tree;
7824
+ const selection = drawing.selection.refs[drawing.selection.active || ''];
7825
+ const isSelActive = selection !== undefined;
7457
7826
  const objIds = e.intersections.map(intersection => {
7458
7827
  var _intersection$object$;
7459
7828
  return ((_intersection$object$ = intersection.object.userData) == null ? void 0 : _intersection$object$.objId) || undefined;
7460
7829
  });
7461
7830
  return objIds.filter((objId, i) => {
7462
- const obj = tree[objId || NOCCID];
7463
- return obj && (isSketchGeometry(obj) || is2DConstraint(obj)) && objIds.indexOf(objId) === i;
7831
+ var _object$members;
7832
+ const object = tree[objId || NOCCID];
7833
+ const isSelectable = object && (selection == null ? void 0 : selection.isSelectable(TreeObjScope, {
7834
+ object
7835
+ })) || false;
7836
+ const isSketchObj = object && (isSketchGeometry(object) || is2DConstraint(object)) && getAncestorIdByClass(drawingId, object.id, CCClasses.CCSketch) === sketchId;
7837
+ const isSketchRegion_ = object && isSketchRegion(object) && ((_object$members = object.members) == null ? void 0 : _object$members.sketch.value) === sketchId;
7838
+ const canBeSelected = !isSelActive || isSelectable;
7839
+ return object && (isSketchObj || isSketchRegion_) && canBeSelected && objIds.indexOf(objId) === i;
7464
7840
  });
7465
7841
  };
7466
- const onPointerOver = e => {
7842
+
7843
+ // A single handler for both onPointerOver / onPointerOut
7844
+ const onHover = e => {
7467
7845
  const hoveredId = e.object.userData.objId;
7468
7846
  const tree = getDrawing(drawingId).structure.tree;
7469
7847
  if (!tree[hoveredId] || ccUtils.base.isA(tree[hoveredId].class, CCClasses.CCSketch)) {
@@ -7476,28 +7854,17 @@ function Hover(drawingId, pluginId) {
7476
7854
  const obj = tree[objId];
7477
7855
  return ccUtils.base.isA(obj == null ? void 0 : obj.class, CCClasses.CCSketch);
7478
7856
  });
7479
- const lastPos = sketchIntersection ? sketchIntersection.point.clone() : new THREE.Vector3();
7480
- lastPos.applyMatrix4(getGlobalToLocalMatrix(drawingId, sketchId));
7481
- hover(drawingId, pluginId, sketchObjIds, lastPos);
7482
- };
7483
- const onPointerOut = e => {
7484
- const hoveredId = e.object.userData.objId;
7485
- const tree = getDrawing(drawingId).structure.tree;
7486
- if (!tree[hoveredId] || ccUtils.base.isA(tree[hoveredId].class, CCClasses.CCSketch)) {
7487
- return;
7488
- }
7489
- const sketchObjIds = getSketchObjIds(e);
7490
- // Preserve the lastPos set earlier...
7491
- const lastPos = getPlugin(drawingId, pluginId).state.interaction.lastPos;
7492
- hover(drawingId, pluginId, sketchObjIds, lastPos);
7857
+ const hoverPos = sketchIntersection ? sketchIntersection.point.clone() : new THREE.Vector3();
7858
+ hoverPos.applyMatrix4(getGlobalToLocalMatrix(drawingId, sketchId));
7859
+ hover(drawingId, pluginId, sketchObjIds, hoverPos);
7493
7860
  };
7494
7861
  return {
7495
7862
  name: HandlersList.HOVER,
7496
7863
  filter,
7497
7864
  onDeactivate,
7498
7865
  pointerHandlers: {
7499
- onPointerOver,
7500
- onPointerOut
7866
+ onPointerOver: onHover,
7867
+ onPointerOut: onHover
7501
7868
  },
7502
7869
  keyHandlers: {
7503
7870
  keyup: onKeyup
@@ -7839,8 +8206,8 @@ const MergedWrapper = ({
7839
8206
  );
7840
8207
  };
7841
8208
 
7842
- function ownKeys$m(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7843
- function _objectSpread$m(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$m(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$m(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8209
+ function ownKeys$n(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8210
+ function _objectSpread$n(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$n(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$n(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7844
8211
 
7845
8212
  // Artificial delay in 16 ms.
7846
8213
  const artifDelay = 16;
@@ -8107,7 +8474,7 @@ function Drag(drawingId, pluginId, camControls) {
8107
8474
  name: HandlersList.DRAG,
8108
8475
  filter,
8109
8476
  onDeactivate,
8110
- pointerHandlers: _objectSpread$m({
8477
+ pointerHandlers: _objectSpread$n({
8111
8478
  onPointerDown,
8112
8479
  onPointerUp,
8113
8480
  onPointerMove
@@ -8119,8 +8486,8 @@ function Drag(drawingId, pluginId, camControls) {
8119
8486
  };
8120
8487
  }
8121
8488
 
8122
- function ownKeys$l(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8123
- function _objectSpread$l(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$l(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$l(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8489
+ function ownKeys$m(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8490
+ function _objectSpread$m(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$m(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$m(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8124
8491
  function DrawPoint(drawingId, pluginId) {
8125
8492
  const {
8126
8493
  set
@@ -8176,8 +8543,8 @@ function DrawPoint(drawingId, pluginId) {
8176
8543
  const tmpPoint = state.tmpObjects[tmpPointId];
8177
8544
  return {
8178
8545
  mousePos,
8179
- tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8180
- [tmpPointId]: _objectSpread$l(_objectSpread$l({}, tmpPoint), {}, {
8546
+ tmpObjects: _objectSpread$m(_objectSpread$m({}, state.tmpObjects), {}, {
8547
+ [tmpPointId]: _objectSpread$m(_objectSpread$m({}, tmpPoint), {}, {
8181
8548
  position: mousePos
8182
8549
  })
8183
8550
  })
@@ -8197,8 +8564,8 @@ function DrawPoint(drawingId, pluginId) {
8197
8564
  };
8198
8565
  }
8199
8566
 
8200
- function ownKeys$k(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8201
- function _objectSpread$k(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$k(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$k(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8567
+ function ownKeys$l(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8568
+ function _objectSpread$l(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$l(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$l(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8202
8569
  function DrawLine(drawingId, pluginId) {
8203
8570
  // Global hooks:
8204
8571
  const {
@@ -8274,7 +8641,7 @@ function DrawLine(drawingId, pluginId) {
8274
8641
  endPId: tmpEndP.id
8275
8642
  };
8276
8643
  return {
8277
- tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8644
+ tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8278
8645
  [tmpStartP.id]: tmpStartP,
8279
8646
  [tmpLine.id]: tmpLine
8280
8647
  })
@@ -8317,8 +8684,8 @@ function DrawLine(drawingId, pluginId) {
8317
8684
  const tmpStartP = state.tmpObjects[tmpStartPId];
8318
8685
  const tmpEndP = state.tmpObjects[tmpEndPId];
8319
8686
  return {
8320
- tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8321
- [tmpStartPId]: _objectSpread$k(_objectSpread$k({}, tmpStartP), {}, {
8687
+ tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8688
+ [tmpStartPId]: _objectSpread$l(_objectSpread$l({}, tmpStartP), {}, {
8322
8689
  position: tmpEndP.position.clone()
8323
8690
  })
8324
8691
  })
@@ -8335,8 +8702,8 @@ function DrawLine(drawingId, pluginId) {
8335
8702
  const tmpEndP = state.tmpObjects[tmpEndPId];
8336
8703
  return {
8337
8704
  mousePos,
8338
- tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8339
- [tmpEndPId]: _objectSpread$k(_objectSpread$k({}, tmpEndP), {}, {
8705
+ tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8706
+ [tmpEndPId]: _objectSpread$l(_objectSpread$l({}, tmpEndP), {}, {
8340
8707
  position: mousePos
8341
8708
  })
8342
8709
  })
@@ -8359,8 +8726,8 @@ function DrawLine(drawingId, pluginId) {
8359
8726
  };
8360
8727
  }
8361
8728
 
8362
- function ownKeys$j(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8363
- function _objectSpread$j(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$j(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$j(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8729
+ function ownKeys$k(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8730
+ function _objectSpread$k(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$k(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$k(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8364
8731
  function DrawRectangle(drawingId, pluginId, rectType) {
8365
8732
  const {
8366
8733
  set
@@ -8435,7 +8802,7 @@ function DrawRectangle(drawingId, pluginId, rectType) {
8435
8802
  isSquare: e.shiftKey,
8436
8803
  isCentered: rectType === HandlersList.DRAWRECTCENTER
8437
8804
  };
8438
- const newTmpObjects = _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8805
+ const newTmpObjects = _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8439
8806
  [tmpRect.id]: tmpRect
8440
8807
  });
8441
8808
  delete newTmpObjects[tmpPointId];
@@ -8493,19 +8860,19 @@ function DrawRectangle(drawingId, pluginId, rectType) {
8493
8860
  let newTmpObjs = null;
8494
8861
  if (additionIndex === 0) {
8495
8862
  const tmpPoint = state.tmpObjects[tmpPointId];
8496
- newTmpObjs = _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8497
- [tmpPointId]: _objectSpread$j(_objectSpread$j({}, tmpPoint), {}, {
8863
+ newTmpObjs = _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8864
+ [tmpPointId]: _objectSpread$k(_objectSpread$k({}, tmpPoint), {}, {
8498
8865
  position: snappedPos
8499
8866
  })
8500
8867
  });
8501
8868
  } else {
8502
- newTmpObjs = _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8503
- [tmpRectId]: _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpRectId]), {}, {
8869
+ newTmpObjs = _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8870
+ [tmpRectId]: _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpRectId]), {}, {
8504
8871
  end: new THREE.Vector3(snappedPos.x, snappedPos.y, 0)
8505
8872
  })
8506
8873
  });
8507
8874
  }
8508
- return _objectSpread$j(_objectSpread$j({}, state), {}, {
8875
+ return _objectSpread$k(_objectSpread$k({}, state), {}, {
8509
8876
  tmpObjects: newTmpObjs,
8510
8877
  mousePos: snappedPos
8511
8878
  });
@@ -8514,9 +8881,9 @@ function DrawRectangle(drawingId, pluginId, rectType) {
8514
8881
  };
8515
8882
  const keydown = e => {
8516
8883
  if (e.code === 'ShiftLeft' || e.code === 'ShiftRight') {
8517
- set(state => _objectSpread$j(_objectSpread$j({}, state), {}, {
8518
- tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8519
- [tmpRectId]: _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpRectId]), {}, {
8884
+ set(state => _objectSpread$k(_objectSpread$k({}, state), {}, {
8885
+ tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8886
+ [tmpRectId]: _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpRectId]), {}, {
8520
8887
  isSquare: true
8521
8888
  })
8522
8889
  })
@@ -8525,9 +8892,9 @@ function DrawRectangle(drawingId, pluginId, rectType) {
8525
8892
  };
8526
8893
  const keyup = e => {
8527
8894
  if (e.code === 'ShiftLeft' || e.code === 'ShiftRight') {
8528
- set(state => _objectSpread$j(_objectSpread$j({}, state), {}, {
8529
- tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8530
- [tmpRectId]: _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpRectId]), {}, {
8895
+ set(state => _objectSpread$k(_objectSpread$k({}, state), {}, {
8896
+ tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8897
+ [tmpRectId]: _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpRectId]), {}, {
8531
8898
  isSquare: false
8532
8899
  })
8533
8900
  })
@@ -8709,8 +9076,8 @@ const Circle$1 = ({
8709
9076
  }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", materialProps));
8710
9077
  };
8711
9078
 
8712
- function ownKeys$i(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8713
- function _objectSpread$i(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$i(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$i(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9079
+ function ownKeys$j(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9080
+ function _objectSpread$j(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$j(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$j(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8714
9081
  function DrawArc(drawingId, pluginId, arcType) {
8715
9082
  // Global hooks:
8716
9083
  const {
@@ -8763,7 +9130,7 @@ function DrawArc(drawingId, pluginId, arcType) {
8763
9130
  additionIndex = 0;
8764
9131
  lastAddedEndPointId = NOCCID;
8765
9132
  set(state => {
8766
- const tmpStartP = _objectSpread$i(_objectSpread$i({}, state.tmpObjects[tmpStartPId]), {}, {
9133
+ const tmpStartP = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpStartPId]), {}, {
8767
9134
  position: lastMousePos.clone()
8768
9135
  });
8769
9136
  return {
@@ -8776,20 +9143,20 @@ function DrawArc(drawingId, pluginId, arcType) {
8776
9143
  additionIndex = 1;
8777
9144
  set(state => {
8778
9145
  const tmpStartP = state.tmpObjects[tmpStartPId];
8779
- const tmpEndP = _objectSpread$i(_objectSpread$i({}, state.tmpObjects[tmpEndPId]), {}, {
9146
+ const tmpEndP = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpEndPId]), {}, {
8780
9147
  position: lastMousePos.clone()
8781
9148
  });
8782
9149
  const centerPos = calculateCenterPoint(tmpStartP.position, lastMousePos, lastMousePos);
8783
- const tmpCenterP = _objectSpread$i(_objectSpread$i({}, state.tmpObjects[tmpCenterPId]), {}, {
9150
+ const tmpCenterP = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpCenterPId]), {}, {
8784
9151
  position: centerPos ? centerPos : lastMousePos.clone()
8785
9152
  });
8786
- const tmpArc = _objectSpread$i(_objectSpread$i({}, state.tmpObjects[tmpArcId]), {}, {
9153
+ const tmpArc = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpArcId]), {}, {
8787
9154
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
8788
9155
  drawAsLine: centerPos === undefined,
8789
9156
  clockwise: false
8790
9157
  });
8791
9158
  return {
8792
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9159
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8793
9160
  [tmpEndP.id]: tmpEndP,
8794
9161
  [tmpCenterP.id]: tmpCenterP,
8795
9162
  [tmpArc.id]: tmpArc
@@ -8896,7 +9263,7 @@ function DrawArc(drawingId, pluginId, arcType) {
8896
9263
  clockwise: false
8897
9264
  };
8898
9265
  return {
8899
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9266
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8900
9267
  [tmpEndP.id]: tmpEndP,
8901
9268
  [tmpCenterP.id]: tmpCenterP,
8902
9269
  [tmpArc.id]: tmpArc
@@ -8925,7 +9292,7 @@ function DrawArc(drawingId, pluginId, arcType) {
8925
9292
  clockwise: false
8926
9293
  };
8927
9294
  return {
8928
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9295
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8929
9296
  [tmpCenterP.id]: tmpCenterP,
8930
9297
  [tmpArc.id]: tmpArc
8931
9298
  })
@@ -8987,11 +9354,11 @@ function DrawArc(drawingId, pluginId, arcType) {
8987
9354
  const tmpEndP = state.tmpObjects[tmpEndPId];
8988
9355
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
8989
9356
  return {
8990
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
8991
- [tmpStartPId]: _objectSpread$i(_objectSpread$i({}, tmpStartP), {}, {
9357
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9358
+ [tmpStartPId]: _objectSpread$j(_objectSpread$j({}, tmpStartP), {}, {
8992
9359
  position: tmpEndP.position.clone()
8993
9360
  }),
8994
- [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9361
+ [tmpCenterPId]: _objectSpread$j(_objectSpread$j({}, tmpCenterP), {}, {
8995
9362
  position: tmpEndP.position.clone()
8996
9363
  })
8997
9364
  })
@@ -9010,8 +9377,8 @@ function DrawArc(drawingId, pluginId, arcType) {
9010
9377
  const tmpStartP = state.tmpObjects[tmpStartPId];
9011
9378
  return {
9012
9379
  mousePos: lastMousePos,
9013
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9014
- [tmpStartPId]: _objectSpread$i(_objectSpread$i({}, tmpStartP), {}, {
9380
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9381
+ [tmpStartPId]: _objectSpread$j(_objectSpread$j({}, tmpStartP), {}, {
9015
9382
  position: lastMousePos.clone()
9016
9383
  })
9017
9384
  })
@@ -9024,14 +9391,14 @@ function DrawArc(drawingId, pluginId, arcType) {
9024
9391
  const centerPos = calculateCenterPoint(tmpStartP.position, lastMousePos, lastMousePos);
9025
9392
  return {
9026
9393
  mousePos: lastMousePos,
9027
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9028
- [tmpEndPId]: _objectSpread$i(_objectSpread$i({}, tmpEndP), {}, {
9394
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9395
+ [tmpEndPId]: _objectSpread$j(_objectSpread$j({}, tmpEndP), {}, {
9029
9396
  position: lastMousePos.clone()
9030
9397
  }),
9031
- [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9398
+ [tmpCenterPId]: _objectSpread$j(_objectSpread$j({}, tmpCenterP), {}, {
9032
9399
  position: centerPos ? centerPos : lastMousePos.clone()
9033
9400
  }),
9034
- [tmpArcId]: _objectSpread$i(_objectSpread$i({}, tmpArc), {}, {
9401
+ [tmpArcId]: _objectSpread$j(_objectSpread$j({}, tmpArc), {}, {
9035
9402
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
9036
9403
  drawAsLine: centerPos === undefined,
9037
9404
  clockwise: false
@@ -9046,14 +9413,14 @@ function DrawArc(drawingId, pluginId, arcType) {
9046
9413
  const centerPos = calculateCenterPoint(tmpStartP.position, tmpEndP.position, lastMousePos);
9047
9414
  return {
9048
9415
  mousePos: lastMousePos,
9049
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9050
- [tmpEndPId]: _objectSpread$i(_objectSpread$i({}, tmpEndP), {}, {
9416
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9417
+ [tmpEndPId]: _objectSpread$j(_objectSpread$j({}, tmpEndP), {}, {
9051
9418
  position: arcType === HandlersList.DRAWARCTANGENT ? lastMousePos.clone() : tmpEndP.position
9052
9419
  }),
9053
- [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9420
+ [tmpCenterPId]: _objectSpread$j(_objectSpread$j({}, tmpCenterP), {}, {
9054
9421
  position: centerPos ? centerPos : lastMousePos.clone()
9055
9422
  }),
9056
- [tmpArcId]: _objectSpread$i(_objectSpread$i({}, tmpArc), {}, {
9423
+ [tmpArcId]: _objectSpread$j(_objectSpread$j({}, tmpArc), {}, {
9057
9424
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
9058
9425
  drawAsLine: centerPos === undefined,
9059
9426
  clockwise: evaluateClockwise(tmpStartP.position, tmpEndP.position, lastMousePos)
@@ -9079,8 +9446,8 @@ function DrawArc(drawingId, pluginId, arcType) {
9079
9446
  };
9080
9447
  }
9081
9448
 
9082
- function ownKeys$h(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9083
- function _objectSpread$h(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$h(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$h(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9449
+ function ownKeys$i(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9450
+ function _objectSpread$i(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$i(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$i(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9084
9451
  function DrawCircle(drawingId, pluginId) {
9085
9452
  const {
9086
9453
  set
@@ -9124,7 +9491,7 @@ function DrawCircle(drawingId, pluginId) {
9124
9491
  } else {
9125
9492
  additionIndex = 0;
9126
9493
  set(state => {
9127
- const tmpCenterP = _objectSpread$h(_objectSpread$h({}, state.tmpObjects[tmpCenterPId]), {}, {
9494
+ const tmpCenterP = _objectSpread$i(_objectSpread$i({}, state.tmpObjects[tmpCenterPId]), {}, {
9128
9495
  position: lastMousePos.clone()
9129
9496
  });
9130
9497
  return {
@@ -9151,7 +9518,7 @@ function DrawCircle(drawingId, pluginId) {
9151
9518
  radius: 0.001
9152
9519
  };
9153
9520
  return {
9154
- tmpObjects: _objectSpread$h(_objectSpread$h({}, state.tmpObjects), {}, {
9521
+ tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9155
9522
  [tmpCenterP.id]: tmpCenterP,
9156
9523
  [tmpCircle.id]: tmpCircle
9157
9524
  })
@@ -9175,7 +9542,7 @@ function DrawCircle(drawingId, pluginId) {
9175
9542
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
9176
9543
  return {
9177
9544
  tmpObjects: {
9178
- [tmpCenterPId]: _objectSpread$h(_objectSpread$h({}, tmpCenterP), {}, {
9545
+ [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9179
9546
  position: e.point.clone().applyMatrix4(getGlobalToLocalMatrix(drawingId, sketchId))
9180
9547
  })
9181
9548
  }
@@ -9194,8 +9561,8 @@ function DrawCircle(drawingId, pluginId) {
9194
9561
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
9195
9562
  return {
9196
9563
  mousePos: lastMousePos,
9197
- tmpObjects: _objectSpread$h(_objectSpread$h({}, state.tmpObjects), {}, {
9198
- [tmpCenterPId]: _objectSpread$h(_objectSpread$h({}, tmpCenterP), {}, {
9564
+ tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9565
+ [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9199
9566
  position: snappedPos || localPos
9200
9567
  })
9201
9568
  })
@@ -9205,8 +9572,8 @@ function DrawCircle(drawingId, pluginId) {
9205
9572
  const tmpCircle = state.tmpObjects[tmpCircleId];
9206
9573
  return {
9207
9574
  mousePos: lastMousePos,
9208
- tmpObjects: _objectSpread$h(_objectSpread$h({}, state.tmpObjects), {}, {
9209
- [tmpCircleId]: _objectSpread$h(_objectSpread$h({}, tmpCircle), {}, {
9575
+ tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9576
+ [tmpCircleId]: _objectSpread$i(_objectSpread$i({}, tmpCircle), {}, {
9210
9577
  radius: Math.max(tmpCenterP.position.distanceTo(localPos), 0.001)
9211
9578
  })
9212
9579
  })
@@ -9230,107 +9597,109 @@ function DrawCircle(drawingId, pluginId) {
9230
9597
  };
9231
9598
  }
9232
9599
 
9233
- var img$15 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M98.6501 57.944V63.1826H71.546V80.9483H28.9538V63.1826H1.84961V57.944H28.9538V38.3561H36.0145V33.8008C36.0145 26.0568 42.3919 19.4515 50.3638 19.4515C58.3356 19.4515 64.713 25.829 64.713 33.8008V38.3561H71.7738V57.944H98.6501ZM66.9907 76.393V42.9114H59.9299V33.8008C59.9299 28.5622 55.6024 24.0069 50.136 24.0069C44.6696 24.0069 40.5698 28.5622 40.5698 33.8008V42.9114H33.5091V76.393H66.9907Z' fill='black'/%3e%3cpath d='M66.9918 42.9114V76.393H33.5103V42.9114H40.571V33.8008C40.571 28.5622 44.8985 24.0068 50.3649 24.0068C55.8313 24.0068 60.1589 28.3344 60.1589 33.8008V42.9114H66.9918ZM56.7424 40.6338V34.0285C56.7424 30.612 53.7814 27.6511 50.3649 27.6511C46.9484 27.6511 43.9875 30.612 43.9875 34.0285V40.6338H56.7424ZM55.6036 65.9158V56.5774C55.6036 53.6164 53.3259 51.3388 50.3649 51.3388C47.404 51.3388 45.1263 53.6164 45.1263 56.5774V65.9158H55.6036Z' fill='%239D9D9C'/%3e%3cpath d='M56.7412 34.0286V40.6338H43.9863V34.0286C43.9863 30.6121 46.9473 27.6511 50.3638 27.6511C53.7803 27.6511 56.7412 30.3843 56.7412 34.0286ZM52.1859 36.0785V34.0286C52.1859 33.1175 51.2748 32.2064 50.3638 32.2064C49.4527 32.2064 48.5416 32.8897 48.5416 34.0286V36.0785H52.1859Z' fill='black'/%3e%3cpath d='M55.6027 56.5774V65.9158H45.1255V56.5774C45.1255 53.6164 47.4031 51.3387 50.3641 51.3387C53.0973 51.3387 55.6027 53.6164 55.6027 56.5774Z' fill='black'/%3e%3c/svg%3e";
9234
- var fixation = img$15;
9600
+ var img$16 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M98.6501 57.944V63.1826H71.546V80.9483H28.9538V63.1826H1.84961V57.944H28.9538V38.3561H36.0145V33.8008C36.0145 26.0568 42.3919 19.4515 50.3638 19.4515C58.3356 19.4515 64.713 25.829 64.713 33.8008V38.3561H71.7738V57.944H98.6501ZM66.9907 76.393V42.9114H59.9299V33.8008C59.9299 28.5622 55.6024 24.0069 50.136 24.0069C44.6696 24.0069 40.5698 28.5622 40.5698 33.8008V42.9114H33.5091V76.393H66.9907Z' fill='black'/%3e%3cpath d='M66.9918 42.9114V76.393H33.5103V42.9114H40.571V33.8008C40.571 28.5622 44.8985 24.0068 50.3649 24.0068C55.8313 24.0068 60.1589 28.3344 60.1589 33.8008V42.9114H66.9918ZM56.7424 40.6338V34.0285C56.7424 30.612 53.7814 27.6511 50.3649 27.6511C46.9484 27.6511 43.9875 30.612 43.9875 34.0285V40.6338H56.7424ZM55.6036 65.9158V56.5774C55.6036 53.6164 53.3259 51.3388 50.3649 51.3388C47.404 51.3388 45.1263 53.6164 45.1263 56.5774V65.9158H55.6036Z' fill='%239D9D9C'/%3e%3cpath d='M56.7412 34.0286V40.6338H43.9863V34.0286C43.9863 30.6121 46.9473 27.6511 50.3638 27.6511C53.7803 27.6511 56.7412 30.3843 56.7412 34.0286ZM52.1859 36.0785V34.0286C52.1859 33.1175 51.2748 32.2064 50.3638 32.2064C49.4527 32.2064 48.5416 32.8897 48.5416 34.0286V36.0785H52.1859Z' fill='black'/%3e%3cpath d='M55.6027 56.5774V65.9158H45.1255V56.5774C45.1255 53.6164 47.4031 51.3387 50.3641 51.3387C53.0973 51.3387 55.6027 53.6164 55.6027 56.5774Z' fill='black'/%3e%3c/svg%3e";
9601
+ var fixation = img$16;
9602
+
9603
+ var img$15 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M93.7715 47.5999H6.8291V53H93.7715V47.5999Z' fill='black'/%3e%3c/svg%3e";
9604
+ var horizontality = img$15;
9235
9605
 
9236
- var img$14 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M93.7715 47.5999H6.8291V53H93.7715V47.5999Z' fill='black'/%3e%3c/svg%3e";
9237
- var horizontality = img$14;
9606
+ var img$14 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M53 12H47.6006V88.5999H53V12Z' fill='black'/%3e%3c/svg%3e";
9607
+ var verticality = img$14;
9238
9608
 
9239
- var img$13 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M53 12H47.6006V88.5999H53V12Z' fill='black'/%3e%3c/svg%3e";
9240
- var verticality = img$13;
9609
+ var img$13 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M44.05 49.7792L50 55.6417L55.95 49.7792L50 43.9167L44.05 49.7792ZM54.8167 40.8458L80.0333 16L84 19.9083L58.7833 44.7542L63.6 49.5L58.7833 54.2458L84 79.0917L80.0333 83L54.8167 58.1542L50 62.9L45.1833 58.1542L19.9667 83L16 79.0917L41.2167 54.2458L36.4 49.5L50.2833 35.8208L54.8167 40.8458Z' fill='black'/%3e%3c/svg%3e";
9610
+ var coincident = img$13;
9241
9611
 
9242
- var img$12 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M44.05 49.7792L50 55.6417L55.95 49.7792L50 43.9167L44.05 49.7792ZM54.8167 40.8458L80.0333 16L84 19.9083L58.7833 44.7542L63.6 49.5L58.7833 54.2458L84 79.0917L80.0333 83L54.8167 58.1542L50 62.9L45.1833 58.1542L19.9667 83L16 79.0917L41.2167 54.2458L36.4 49.5L50.2833 35.8208L54.8167 40.8458Z' fill='black'/%3e%3c/svg%3e";
9243
- var coincident = img$12;
9612
+ var img$12 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M63 46C67.3243 46 71.973 46.8784 75 50C78.027 53.1216 80.5 59.2635 80.5 63.5C80.5 67.9595 77.2703 71.973 74.2432 75.0946C71.2162 78.2162 67.1081 80 63 80C58.6757 80 54.7838 78.2162 51.7568 75.0946C48.7297 71.973 46.5 67.7365 46.5 63.5C46.5 59.0406 46.973 54.1216 50 51C52.8108 47.8784 58.6757 46 63 46Z' fill='%239D9D9C'/%3e%3cpath d='M46.796 63.1473C46.796 67.5666 48.5637 71.5439 51.6572 74.6374C54.7507 77.7309 58.949 79.4986 63.1473 79.4986C67.5666 79.4986 71.5439 77.7309 74.6374 74.6374C77.7309 71.5439 79.4986 67.3456 79.4986 63.1473C79.4986 58.728 77.7309 54.7507 74.6374 51.6572C71.5439 48.5637 67.3456 46.796 63.1473 46.796C58.728 46.796 54.7507 48.5637 51.6572 51.6572C48.5637 54.7507 46.796 58.728 46.796 63.1473ZM63.1473 83.9178C57.8442 83.9178 52.5411 81.9292 48.5637 77.7309C43.9235 73.0906 41.9348 66.4617 42.5977 60.4957L14.0935 89L11 85.9065L85.9065 11L89 14.0935L60.4957 42.5977C66.6827 41.7139 73.0906 43.7025 77.7309 48.5637C85.9065 56.7394 85.9065 69.7762 77.7309 77.9518C73.7535 81.9292 68.4504 83.9178 63.1473 83.9178Z' fill='black'/%3e%3c/svg%3e";
9613
+ var tangency = img$12;
9244
9614
 
9245
- var img$11 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M63 46C67.3243 46 71.973 46.8784 75 50C78.027 53.1216 80.5 59.2635 80.5 63.5C80.5 67.9595 77.2703 71.973 74.2432 75.0946C71.2162 78.2162 67.1081 80 63 80C58.6757 80 54.7838 78.2162 51.7568 75.0946C48.7297 71.973 46.5 67.7365 46.5 63.5C46.5 59.0406 46.973 54.1216 50 51C52.8108 47.8784 58.6757 46 63 46Z' fill='%239D9D9C'/%3e%3cpath d='M46.796 63.1473C46.796 67.5666 48.5637 71.5439 51.6572 74.6374C54.7507 77.7309 58.949 79.4986 63.1473 79.4986C67.5666 79.4986 71.5439 77.7309 74.6374 74.6374C77.7309 71.5439 79.4986 67.3456 79.4986 63.1473C79.4986 58.728 77.7309 54.7507 74.6374 51.6572C71.5439 48.5637 67.3456 46.796 63.1473 46.796C58.728 46.796 54.7507 48.5637 51.6572 51.6572C48.5637 54.7507 46.796 58.728 46.796 63.1473ZM63.1473 83.9178C57.8442 83.9178 52.5411 81.9292 48.5637 77.7309C43.9235 73.0906 41.9348 66.4617 42.5977 60.4957L14.0935 89L11 85.9065L85.9065 11L89 14.0935L60.4957 42.5977C66.6827 41.7139 73.0906 43.7025 77.7309 48.5637C85.9065 56.7394 85.9065 69.7762 77.7309 77.9518C73.7535 81.9292 68.4504 83.9178 63.1473 83.9178Z' fill='black'/%3e%3c/svg%3e";
9246
- var tangency = img$11;
9615
+ var img$11 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M88 36.7379L36.7561 88L33 84.2621L84.2439 33L88 36.7379Z' fill='black'/%3e%3cpath d='M67 16.0777L15.7561 68L12 64.1942L63.2439 12L67 16.0777Z' fill='black'/%3e%3c/svg%3e";
9616
+ var parallelity = img$11;
9247
9617
 
9248
- var img$10 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M88 36.7379L36.7561 88L33 84.2621L84.2439 33L88 36.7379Z' fill='black'/%3e%3cpath d='M67 16.0777L15.7561 68L12 64.1942L63.2439 12L67 16.0777Z' fill='black'/%3e%3c/svg%3e";
9249
- var parallelity = img$10;
9618
+ var img$10 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12 75H50.5M88 75H50.5M50.5 75V24.5' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9619
+ var perpendicularity = img$10;
9250
9620
 
9251
- var img$$ = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12 75H50.5M88 75H50.5M50.5 75V24.5' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9252
- var perpendicularity = img$$;
9621
+ var img$$ = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M60.4698 20.5082L56.6826 16.7236L16.9448 56.4895L20.7321 60.2741L60.4698 20.5082Z' fill='black'/%3e%3cpath d='M82.8491 21.6999L79.0635 17.9143L18.115 78.8628L21.9006 82.6484L82.8491 21.6999Z' fill='black'/%3e%3cpath d='M83.9996 44.0778L80.2124 40.2932L40.4746 80.0591L44.2619 83.8437L83.9996 44.0778Z' fill='black'/%3e%3c/svg%3e";
9622
+ var colinear = img$$;
9253
9623
 
9254
- var img$_ = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M60.4698 20.5082L56.6826 16.7236L16.9448 56.4895L20.7321 60.2741L60.4698 20.5082Z' fill='black'/%3e%3cpath d='M82.8491 21.6999L79.0635 17.9143L18.115 78.8628L21.9006 82.6484L82.8491 21.6999Z' fill='black'/%3e%3cpath d='M83.9996 44.0778L80.2124 40.2932L40.4746 80.0591L44.2619 83.8437L83.9996 44.0778Z' fill='black'/%3e%3c/svg%3e";
9255
- var colinear = img$_;
9624
+ var img$_ = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='50' cy='50' r='32.5' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='50' cy='50' r='19.5' stroke='black' stroke-width='5'/%3e%3crect x='44' y='44' width='12' height='12' fill='white' stroke='black' stroke-width='4'/%3e%3c/svg%3e";
9625
+ var concentric = img$_;
9256
9626
 
9257
- var img$Z = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='50' cy='50' r='32.5' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='50' cy='50' r='19.5' stroke='black' stroke-width='5'/%3e%3crect x='44' y='44' width='12' height='12' fill='white' stroke='black' stroke-width='4'/%3e%3c/svg%3e";
9258
- var concentric = img$Z;
9627
+ var img$Z = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M34.6614 51.5994L48.7943 65.8707L62.9272 51.5994L48.7943 37.3281L34.6614 51.5994ZM69.75 51.5994L48.7943 72.7603L40.2658 64.1483L15.8987 89L12 84.817L36.6108 60.2114L27.8386 51.5994L48.7943 30.4385L57.3228 39.0505L85.1013 11L89 14.9369L61.2215 43.2334L69.75 51.5994Z' fill='black'/%3e%3c/svg%3e";
9628
+ var midpoint = img$Z;
9259
9629
 
9260
- var img$Y = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M34.6614 51.5994L48.7943 65.8707L62.9272 51.5994L48.7943 37.3281L34.6614 51.5994ZM69.75 51.5994L48.7943 72.7603L40.2658 64.1483L15.8987 89L12 84.817L36.6108 60.2114L27.8386 51.5994L48.7943 30.4385L57.3228 39.0505L85.1013 11L89 14.9369L61.2215 43.2334L69.75 51.5994Z' fill='black'/%3e%3c/svg%3e";
9261
- var midpoint = img$Y;
9630
+ var img$Y = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M87.5 27L80 52.5L89 78.5H63V27H87.5Z' fill='%239D9D9C'/%3e%3cpath d='M53 79H48V84H53V79Z' fill='black'/%3e%3cpath d='M53 71H48V75H53V71Z' fill='black'/%3e%3cpath d='M53 61H48V66H53V61Z' fill='black'/%3e%3cpath d='M53 53H48V57H53V53Z' fill='black'/%3e%3cpath d='M53 43H48V48H53V43Z' fill='black'/%3e%3cpath d='M53 34H48V39H53V34Z' fill='black'/%3e%3cpath d='M53 25H48V30H53V25Z' fill='black'/%3e%3cpath d='M53 16H48V21H53V16Z' fill='black'/%3e%3cpath d='M38 27L38.5 78L13.5 77L20.5 52L12.5 27.5L38 27Z' fill='%239D9D9C'/%3e%3cpath d='M14.2877 28.4358L21.9726 52.3891L14.2877 76.5642H37.5753V28.4358H14.2877ZM42 24V81H8L17.0822 52.3891L8 24H42Z' fill='black'/%3e%3cpath d='M63.6259 76.5642H86.7551L78.8912 52.3891L86.5238 28.214H63.3946V76.5642H63.6259ZM59 81V24H93L83.7483 52.3891L92.7687 81H59Z' fill='black'/%3e%3c/svg%3e";
9631
+ var symmetric = img$Y;
9262
9632
 
9263
- var img$X = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M87.5 27L80 52.5L89 78.5H63V27H87.5Z' fill='%239D9D9C'/%3e%3cpath d='M53 79H48V84H53V79Z' fill='black'/%3e%3cpath d='M53 71H48V75H53V71Z' fill='black'/%3e%3cpath d='M53 61H48V66H53V61Z' fill='black'/%3e%3cpath d='M53 53H48V57H53V53Z' fill='black'/%3e%3cpath d='M53 43H48V48H53V43Z' fill='black'/%3e%3cpath d='M53 34H48V39H53V34Z' fill='black'/%3e%3cpath d='M53 25H48V30H53V25Z' fill='black'/%3e%3cpath d='M53 16H48V21H53V16Z' fill='black'/%3e%3cpath d='M38 27L38.5 78L13.5 77L20.5 52L12.5 27.5L38 27Z' fill='%239D9D9C'/%3e%3cpath d='M14.2877 28.4358L21.9726 52.3891L14.2877 76.5642H37.5753V28.4358H14.2877ZM42 24V81H8L17.0822 52.3891L8 24H42Z' fill='black'/%3e%3cpath d='M63.6259 76.5642H86.7551L78.8912 52.3891L86.5238 28.214H63.3946V76.5642H63.6259ZM59 81V24H93L83.7483 52.3891L92.7687 81H59Z' fill='black'/%3e%3c/svg%3e";
9264
- var symmetric = img$X;
9633
+ var img$X = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M87.0685 59.9326H13.5317V66.7416H87.0685V59.9326Z' fill='black'/%3e%3cpath d='M87.0685 34.0582H13.5317V40.8672H87.0685V34.0582Z' fill='black'/%3e%3c/svg%3e";
9634
+ var equal = img$X;
9265
9635
 
9266
- var img$W = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M87.0685 59.9326H13.5317V66.7416H87.0685V59.9326Z' fill='black'/%3e%3cpath d='M87.0685 34.0582H13.5317V40.8672H87.0685V34.0582Z' fill='black'/%3e%3c/svg%3e";
9267
- var equal = img$W;
9636
+ var img$W = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M80 50H19' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M74 59L82 50.3692L74 42' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M26 42L19 50.3692V50.6308L25.75 59' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M5 30V70' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M96 30V70' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3c/svg%3e";
9637
+ var hdimension = img$W;
9268
9638
 
9269
- var img$V = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M80 50H19' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M74 59L82 50.3692L74 42' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M26 42L19 50.3692V50.6308L25.75 59' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M5 30V70' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M96 30V70' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3c/svg%3e";
9270
- var hdimension = img$V;
9639
+ var img$V = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M31 95H69' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M50 21V81' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M58 27L49.8769 20L42 27' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M42 74L50.1231 81L58 74.25' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M31 6H69' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3c/svg%3e";
9640
+ var vdimension = img$V;
9271
9641
 
9272
- var img$U = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M31 95H69' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M50 21V81' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M58 27L49.8769 20L42 27' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M42 74L50.1231 81L58 74.25' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M31 6H69' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3c/svg%3e";
9273
- var vdimension = img$U;
9642
+ var img$U = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M68.0001 32L31.2217 69L34.2036 66' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M69 40L68.3478 30.6522L59 30' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M30 59L30.8696 68.3478L40 69' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M10 65L34 89' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M65 10L89 34' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3c/svg%3e";
9274
9643
 
9275
- var img$T = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M68.0001 32L31.2217 69L34.2036 66' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M69 40L68.3478 30.6522L59 30' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M30 59L30.8696 68.3478L40 69' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M10 65L34 89' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3cpath d='M65 10L89 34' stroke='black' stroke-width='4' stroke-miterlimit='10'/%3e%3c/svg%3e";
9644
+ var img$T = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='50' cy='50' r='35.5' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='43.5' y='43.5' width='12' height='12' fill='white' stroke='black' stroke-width='5'/%3e%3cline x1='55.2322' y1='43.2322' x2='73.2322' y2='25.2322' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9645
+ var radius = img$T;
9276
9646
 
9277
- var img$S = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='50' cy='50' r='35.5' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='43.5' y='43.5' width='12' height='12' fill='white' stroke='black' stroke-width='5'/%3e%3cline x1='55.2322' y1='43.2322' x2='73.2322' y2='25.2322' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9278
- var radius = img$S;
9647
+ var img$S = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M49.8772 47C40.8772 47 34.5 54.036 34.5 54.036L27.5 42.7085C27.5 42.7085 36.2983 33 49.8772 33C63.4562 33 71.6769 42 71.6769 42L64.6502 53C64.6502 53 58.8772 47 49.8772 47Z' fill='%23C4C4C4'/%3e%3cpath d='M34.5 54.036L48.9999 77.5L64.6502 53C64.6502 53 58.8772 47 49.8772 47C40.8772 47 34.5 54.036 34.5 54.036Z' fill='%23C4C4C4'/%3e%3cpath d='M15.1406 22.7083L48.9999 77.5M48.9999 77.5L84.0002 22.7083M48.9999 77.5L34.5 54.036M48.9999 77.5L64.6502 53M34.5 54.036C34.5 54.036 40.8772 47 49.8772 47C58.8772 47 64.6502 53 64.6502 53M34.5 54.036L27.5 42.7085C27.5 42.7085 36.2983 33 49.8772 33C63.4562 33 71.6769 42 71.6769 42L64.6502 53' stroke='black' stroke-width='4'/%3e%3c/svg%3e";
9648
+ var angle = img$S;
9279
9649
 
9280
- var img$R = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M49.8772 47C40.8772 47 34.5 54.036 34.5 54.036L27.5 42.7085C27.5 42.7085 36.2983 33 49.8772 33C63.4562 33 71.6769 42 71.6769 42L64.6502 53C64.6502 53 58.8772 47 49.8772 47Z' fill='%23C4C4C4'/%3e%3cpath d='M34.5 54.036L48.9999 77.5L64.6502 53C64.6502 53 58.8772 47 49.8772 47C40.8772 47 34.5 54.036 34.5 54.036Z' fill='%23C4C4C4'/%3e%3cpath d='M15.1406 22.7083L48.9999 77.5M48.9999 77.5L84.0002 22.7083M48.9999 77.5L34.5 54.036M48.9999 77.5L64.6502 53M34.5 54.036C34.5 54.036 40.8772 47 49.8772 47C58.8772 47 64.6502 53 64.6502 53M34.5 54.036L27.5 42.7085C27.5 42.7085 36.2983 33 49.8772 33C63.4562 33 71.6769 42 71.6769 42L64.6502 53' stroke='black' stroke-width='4'/%3e%3c/svg%3e";
9281
- var angle = img$R;
9650
+ var img$R = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M65 16.5L15.5 66H80.5M80.5 66L74 59M80.5 66L75 73' stroke='black' stroke-width='5'/%3e%3cpath d='M55.9524 46.4372L53 51L48.5 42.5H58.5L55.9524 46.4372Z' fill='black'/%3e%3cpath d='M56.5 61.5C56.5 61.5 59.5 58.5 59.5 54C59.5 49.5 55.5 46 55.5 46M53 51L58.5 42.5H48.5L53 51Z' stroke='black' stroke-width='2'/%3e%3cpath d='M77.0859 82.5469L79.2188 78.625H81.9141L78.6016 84.2656L82 90H79.2734L77.0859 86.0156L74.8984 90H72.1719L75.5703 84.2656L72.2578 78.625H74.9531L77.0859 82.5469Z' fill='black'/%3e%3c/svg%3e";
9651
+ var angleox = img$R;
9282
9652
 
9283
- var img$Q = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M65 16.5L15.5 66H80.5M80.5 66L74 59M80.5 66L75 73' stroke='black' stroke-width='5'/%3e%3cpath d='M55.9524 46.4372L53 51L48.5 42.5H58.5L55.9524 46.4372Z' fill='black'/%3e%3cpath d='M56.5 61.5C56.5 61.5 59.5 58.5 59.5 54C59.5 49.5 55.5 46 55.5 46M53 51L58.5 42.5H48.5L53 51Z' stroke='black' stroke-width='2'/%3e%3cpath d='M77.0859 82.5469L79.2188 78.625H81.9141L78.6016 84.2656L82 90H79.2734L77.0859 86.0156L74.8984 90H72.1719L75.5703 84.2656L72.2578 78.625H74.9531L77.0859 82.5469Z' fill='black'/%3e%3c/svg%3e";
9284
- var angleox = img$Q;
9653
+ var img$Q = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect x='18.5' y='18.5' width='64' height='64' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3cpath d='M60.5352 58.7656C59.5859 59.9023 58.2441 60.7871 56.5098 61.4199C54.7754 62.041 52.8535 62.3516 50.7441 62.3516C48.5293 62.3516 46.584 61.8711 44.9082 60.9102C43.2441 59.9375 41.9551 58.5312 41.041 56.6914C40.1387 54.8516 39.6758 52.6895 39.6523 50.2051V48.4648C39.6523 45.9102 40.0801 43.7012 40.9355 41.8379C41.8027 39.9629 43.0449 38.5332 44.6621 37.5488C46.291 36.5527 48.1953 36.0547 50.375 36.0547C53.4102 36.0547 55.7832 36.7812 57.4941 38.2344C59.2051 39.6758 60.2188 41.7793 60.5352 44.5449H55.4023C55.168 43.0801 54.6465 42.0078 53.8379 41.3281C53.041 40.6484 51.9395 40.3086 50.5332 40.3086C48.7402 40.3086 47.375 40.9824 46.4375 42.3301C45.5 43.6777 45.0254 45.6816 45.0137 48.3418V49.9766C45.0137 52.6602 45.5234 54.6875 46.543 56.0586C47.5625 57.4297 49.0566 58.1152 51.0254 58.1152C53.0059 58.1152 54.418 57.6934 55.2617 56.8496V52.4375H50.4629V48.5527H60.5352V58.7656Z' fill='black'/%3e%3c/svg%3e";
9654
+ var rigidSet = img$Q;
9285
9655
 
9286
- var img$P = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect x='18.5' y='18.5' width='64' height='64' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3cpath d='M60.5352 58.7656C59.5859 59.9023 58.2441 60.7871 56.5098 61.4199C54.7754 62.041 52.8535 62.3516 50.7441 62.3516C48.5293 62.3516 46.584 61.8711 44.9082 60.9102C43.2441 59.9375 41.9551 58.5312 41.041 56.6914C40.1387 54.8516 39.6758 52.6895 39.6523 50.2051V48.4648C39.6523 45.9102 40.0801 43.7012 40.9355 41.8379C41.8027 39.9629 43.0449 38.5332 44.6621 37.5488C46.291 36.5527 48.1953 36.0547 50.375 36.0547C53.4102 36.0547 55.7832 36.7812 57.4941 38.2344C59.2051 39.6758 60.2188 41.7793 60.5352 44.5449H55.4023C55.168 43.0801 54.6465 42.0078 53.8379 41.3281C53.041 40.6484 51.9395 40.3086 50.5332 40.3086C48.7402 40.3086 47.375 40.9824 46.4375 42.3301C45.5 43.6777 45.0254 45.6816 45.0137 48.3418V49.9766C45.0137 52.6602 45.5234 54.6875 46.543 56.0586C47.5625 57.4297 49.0566 58.1152 51.0254 58.1152C53.0059 58.1152 54.418 57.6934 55.2617 56.8496V52.4375H50.4629V48.5527H60.5352V58.7656Z' fill='black'/%3e%3c/svg%3e";
9287
- var rigidSet = img$P;
9656
+ var img$P = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M54 53V79.6063L46 84V57.6378L54 53Z' fill='%239D9D9C'/%3e%3cpath d='M52.5 49L43.5 54L21 40.25L29.5 34.5L52.5 49Z' fill='%239D9D9C'/%3e%3cpath d='M42.5 56.5V84.5L18 70.6667V44L42.5 56.5Z' fill='%239D9D9C'/%3e%3cpath d='M82.1815 79.7636V36.9565L67.967 45.1793V87.9864L82.1815 79.7636ZM79.2904 33.087L42.9109 11.3207L28.6964 19.5435L65.5578 40.8261L79.2904 33.087ZM53.9934 79.2799V52.9185L46.2838 57.5136V83.6331L53.9934 79.2799ZM63.1485 45.1793L26.2871 23.6549V31.6359L27.7327 30.9103H27.9736L29.1782 30.1848L59.0528 48.0815V82.1821L55.6799 83.6331L63.1485 87.9864V45.1793ZM41.4653 57.5136L18.8185 44.4538V70.5734L41.4653 83.6331V57.5136ZM21.2277 40.1005L43.8746 53.1603L51.3432 48.8071L29.1782 35.5054L21.2277 40.1005ZM21.4686 34.538V18.3342L22.6733 17.6087L41.7063 6.72554L42.9109 6L87 32.1196V82.6658L65.5578 95L50.8614 86.5353L43.6337 90.6467L14 73.2337V38.8913L15.2046 38.1658L21.4686 34.538Z' fill='black'/%3e%3c/svg%3e";
9288
9657
 
9289
- var img$O = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M54 53V79.6063L46 84V57.6378L54 53Z' fill='%239D9D9C'/%3e%3cpath d='M52.5 49L43.5 54L21 40.25L29.5 34.5L52.5 49Z' fill='%239D9D9C'/%3e%3cpath d='M42.5 56.5V84.5L18 70.6667V44L42.5 56.5Z' fill='%239D9D9C'/%3e%3cpath d='M82.1815 79.7636V36.9565L67.967 45.1793V87.9864L82.1815 79.7636ZM79.2904 33.087L42.9109 11.3207L28.6964 19.5435L65.5578 40.8261L79.2904 33.087ZM53.9934 79.2799V52.9185L46.2838 57.5136V83.6331L53.9934 79.2799ZM63.1485 45.1793L26.2871 23.6549V31.6359L27.7327 30.9103H27.9736L29.1782 30.1848L59.0528 48.0815V82.1821L55.6799 83.6331L63.1485 87.9864V45.1793ZM41.4653 57.5136L18.8185 44.4538V70.5734L41.4653 83.6331V57.5136ZM21.2277 40.1005L43.8746 53.1603L51.3432 48.8071L29.1782 35.5054L21.2277 40.1005ZM21.4686 34.538V18.3342L22.6733 17.6087L41.7063 6.72554L42.9109 6L87 32.1196V82.6658L65.5578 95L50.8614 86.5353L43.6337 90.6467L14 73.2337V38.8913L15.2046 38.1658L21.4686 34.538Z' fill='black'/%3e%3c/svg%3e";
9658
+ var img$O = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M46.9476 18C64.6143 18 79 32.5294 79 50.3726C79 68.2157 64.6143 83 46.9476 83C39.3762 83 32.5619 80.451 27.0095 76.1176C29.281 75.3529 31.8048 74.3333 34.0762 72.549C37.1048 70 39.1238 67.1961 40.1333 64.1373C42.1524 65.1569 44.4238 65.6667 46.9476 65.6667C55.2762 65.6667 62.0905 58.7843 62.0905 50.3726C62.0905 41.9608 55.2762 35.5 46.9476 35.5C44.1714 35.5 41.2714 36.7255 39 38C37.9905 35.1961 35.2762 31.7941 32.5 29.5C30.2286 27.7157 28.0238 26.5098 25.5 26C31.3048 21.1569 39.1238 18 46.9476 18Z' fill='%239D9D9C'/%3e%3cpath d='M31.5682 68.64C29.1136 70.6 26.6591 71.72 24.4773 72C24.2045 72 23.9318 72 23.6591 72C22.5682 72 21.75 71.72 21.4773 71.16L21.2045 70.6C20.9318 70.04 20.9318 68.92 21.2045 67.8C22.0227 65.56 23.6591 63.32 25.8409 61.36C28.2955 59.4 31.2955 58 33.4773 58C34.2955 58 35.1136 58 35.6591 58.84C36.2045 59.4 35.9318 60.52 35.9318 61.36C35.9318 63.88 34.0227 66.68 31.5682 68.64Z' fill='white'/%3e%3cpath d='M20.3098 30.8104C20.8464 30.2701 21.9197 30 22.993 30C25.1395 30.2701 27.8226 31.3506 29.9691 33.2414C32.3839 35.1323 34.2621 37.5634 34.7988 39.7243C35.0671 40.5347 35.0671 41.345 34.7988 41.8853L34.5304 42.1554C33.9938 42.6956 33.1889 42.9658 32.6523 42.9658C30.2374 43.2359 27.286 41.8853 24.8712 39.7243C22.7246 38.1036 21.1148 35.9426 20.3098 33.7817C20.0415 33.2414 19.7732 31.6207 20.3098 30.8104Z' fill='white'/%3e%3cpath d='M24.4306 71.3333C26.4499 71.0808 28.7216 70.0707 30.9933 68.303C33.265 66.5354 35.0319 64.0101 35.2843 61.9899C35.5367 61.4848 35.5367 60.4747 35.0319 59.7172C34.5271 59.2121 33.5174 58.9596 33.0126 58.9596C30.9933 58.9596 28.2168 59.9697 25.9451 61.9899C23.9258 63.7576 22.1589 65.7778 21.654 67.798C21.4016 68.8081 21.4016 69.8182 21.654 70.3232L21.9065 70.5758C22.4113 71.0808 22.9161 71.3333 23.9258 71.3333C23.9258 71.3333 24.1782 71.3333 24.4306 71.3333ZM20.8968 31.4343C20.1396 32.4444 20.6444 33.7071 20.8968 34.4646C21.654 36.4848 23.1685 38.5051 25.1878 40.0202C27.4595 42.0404 30.4885 43.0505 32.5078 43.0505C33.0126 43.0505 34.0223 42.798 34.2747 42.2929L34.5271 42.0404C34.7795 41.5354 34.7795 40.7778 34.5271 40.0202C34.0223 38 32.2554 35.7273 29.9837 33.9596C27.9644 32.1919 25.4402 31.1818 23.4209 30.9293C22.4113 30.6768 21.4016 30.9293 20.8968 31.4343ZM84 50.6263C84 71.0808 67.3408 88 46.8953 88C35.2843 88 24.9354 82.697 18.1203 74.3636C17.8679 74.1111 17.8679 74.1111 17.6154 73.8586C17.6154 73.6061 17.363 73.6061 17.363 73.3535L17.1106 73.101C17.1106 72.8485 16.8582 72.8485 16.8582 72.596C16.101 70.8283 16.101 68.8081 16.8582 66.2828C17.8679 63.5051 19.8872 60.4747 22.9161 58.202C26.1975 55.6768 29.9837 54.1616 33.265 54.1616C35.5368 54.1616 37.5561 54.9192 39.0705 56.4343L39.3229 56.6869C39.5754 56.6869 39.5754 56.9394 39.5754 57.1919C41.3422 59.4646 44.1188 60.7273 47.1477 60.7273C52.7008 60.7273 57.2442 56.1818 57.2442 50.6263C57.2442 45.0707 52.7008 40.5253 47.1477 40.5253C43.8664 40.5253 40.8374 42.0404 39.0705 44.5657C38.8181 44.8182 38.8181 45.0707 38.5657 45.3232C37.3036 46.8384 35.5367 47.8485 33.0126 47.8485C32.7602 47.8485 32.7602 47.8485 32.5078 47.8485C29.2264 47.8485 25.4402 46.3333 22.4113 43.8081C19.6347 41.5354 17.6154 38.7576 16.6058 35.9798C15.5961 32.9495 15.8486 30.1717 17.363 28.1515L17.6154 27.6465L17.8679 27.3939C24.683 18.8081 35.2843 13 47.1477 13C67.3408 13.2525 84 29.9192 84 50.6263ZM78.9517 50.6263C78.9517 32.9495 64.5642 18.5556 46.8953 18.5556C39.0705 18.5556 31.7506 21.3333 26.1975 26.1313C28.7216 26.6364 31.2457 27.899 33.5174 29.6667C36.294 31.9394 38.3133 34.7172 39.3229 37.495C41.5947 36.2323 44.1188 35.4747 47.1477 35.4747C55.4774 35.4747 62.2925 42.2929 62.2925 50.6263C62.2925 58.9596 55.4774 65.7778 47.1477 65.7778C44.6236 65.7778 42.3519 65.2727 40.3326 64.2626C39.5754 67.0404 37.3036 70.0707 34.2747 72.596C32.003 74.3636 29.7313 75.6263 27.2071 76.1313C32.7602 80.4242 39.5754 82.9495 47.1477 82.9495C64.5642 82.697 78.9517 68.303 78.9517 50.6263Z' fill='black'/%3e%3c/svg%3e";
9290
9659
 
9291
- var img$N = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M46.9476 18C64.6143 18 79 32.5294 79 50.3726C79 68.2157 64.6143 83 46.9476 83C39.3762 83 32.5619 80.451 27.0095 76.1176C29.281 75.3529 31.8048 74.3333 34.0762 72.549C37.1048 70 39.1238 67.1961 40.1333 64.1373C42.1524 65.1569 44.4238 65.6667 46.9476 65.6667C55.2762 65.6667 62.0905 58.7843 62.0905 50.3726C62.0905 41.9608 55.2762 35.5 46.9476 35.5C44.1714 35.5 41.2714 36.7255 39 38C37.9905 35.1961 35.2762 31.7941 32.5 29.5C30.2286 27.7157 28.0238 26.5098 25.5 26C31.3048 21.1569 39.1238 18 46.9476 18Z' fill='%239D9D9C'/%3e%3cpath d='M31.5682 68.64C29.1136 70.6 26.6591 71.72 24.4773 72C24.2045 72 23.9318 72 23.6591 72C22.5682 72 21.75 71.72 21.4773 71.16L21.2045 70.6C20.9318 70.04 20.9318 68.92 21.2045 67.8C22.0227 65.56 23.6591 63.32 25.8409 61.36C28.2955 59.4 31.2955 58 33.4773 58C34.2955 58 35.1136 58 35.6591 58.84C36.2045 59.4 35.9318 60.52 35.9318 61.36C35.9318 63.88 34.0227 66.68 31.5682 68.64Z' fill='white'/%3e%3cpath d='M20.3098 30.8104C20.8464 30.2701 21.9197 30 22.993 30C25.1395 30.2701 27.8226 31.3506 29.9691 33.2414C32.3839 35.1323 34.2621 37.5634 34.7988 39.7243C35.0671 40.5347 35.0671 41.345 34.7988 41.8853L34.5304 42.1554C33.9938 42.6956 33.1889 42.9658 32.6523 42.9658C30.2374 43.2359 27.286 41.8853 24.8712 39.7243C22.7246 38.1036 21.1148 35.9426 20.3098 33.7817C20.0415 33.2414 19.7732 31.6207 20.3098 30.8104Z' fill='white'/%3e%3cpath d='M24.4306 71.3333C26.4499 71.0808 28.7216 70.0707 30.9933 68.303C33.265 66.5354 35.0319 64.0101 35.2843 61.9899C35.5367 61.4848 35.5367 60.4747 35.0319 59.7172C34.5271 59.2121 33.5174 58.9596 33.0126 58.9596C30.9933 58.9596 28.2168 59.9697 25.9451 61.9899C23.9258 63.7576 22.1589 65.7778 21.654 67.798C21.4016 68.8081 21.4016 69.8182 21.654 70.3232L21.9065 70.5758C22.4113 71.0808 22.9161 71.3333 23.9258 71.3333C23.9258 71.3333 24.1782 71.3333 24.4306 71.3333ZM20.8968 31.4343C20.1396 32.4444 20.6444 33.7071 20.8968 34.4646C21.654 36.4848 23.1685 38.5051 25.1878 40.0202C27.4595 42.0404 30.4885 43.0505 32.5078 43.0505C33.0126 43.0505 34.0223 42.798 34.2747 42.2929L34.5271 42.0404C34.7795 41.5354 34.7795 40.7778 34.5271 40.0202C34.0223 38 32.2554 35.7273 29.9837 33.9596C27.9644 32.1919 25.4402 31.1818 23.4209 30.9293C22.4113 30.6768 21.4016 30.9293 20.8968 31.4343ZM84 50.6263C84 71.0808 67.3408 88 46.8953 88C35.2843 88 24.9354 82.697 18.1203 74.3636C17.8679 74.1111 17.8679 74.1111 17.6154 73.8586C17.6154 73.6061 17.363 73.6061 17.363 73.3535L17.1106 73.101C17.1106 72.8485 16.8582 72.8485 16.8582 72.596C16.101 70.8283 16.101 68.8081 16.8582 66.2828C17.8679 63.5051 19.8872 60.4747 22.9161 58.202C26.1975 55.6768 29.9837 54.1616 33.265 54.1616C35.5368 54.1616 37.5561 54.9192 39.0705 56.4343L39.3229 56.6869C39.5754 56.6869 39.5754 56.9394 39.5754 57.1919C41.3422 59.4646 44.1188 60.7273 47.1477 60.7273C52.7008 60.7273 57.2442 56.1818 57.2442 50.6263C57.2442 45.0707 52.7008 40.5253 47.1477 40.5253C43.8664 40.5253 40.8374 42.0404 39.0705 44.5657C38.8181 44.8182 38.8181 45.0707 38.5657 45.3232C37.3036 46.8384 35.5367 47.8485 33.0126 47.8485C32.7602 47.8485 32.7602 47.8485 32.5078 47.8485C29.2264 47.8485 25.4402 46.3333 22.4113 43.8081C19.6347 41.5354 17.6154 38.7576 16.6058 35.9798C15.5961 32.9495 15.8486 30.1717 17.363 28.1515L17.6154 27.6465L17.8679 27.3939C24.683 18.8081 35.2843 13 47.1477 13C67.3408 13.2525 84 29.9192 84 50.6263ZM78.9517 50.6263C78.9517 32.9495 64.5642 18.5556 46.8953 18.5556C39.0705 18.5556 31.7506 21.3333 26.1975 26.1313C28.7216 26.6364 31.2457 27.899 33.5174 29.6667C36.294 31.9394 38.3133 34.7172 39.3229 37.495C41.5947 36.2323 44.1188 35.4747 47.1477 35.4747C55.4774 35.4747 62.2925 42.2929 62.2925 50.6263C62.2925 58.9596 55.4774 65.7778 47.1477 65.7778C44.6236 65.7778 42.3519 65.2727 40.3326 64.2626C39.5754 67.0404 37.3036 70.0707 34.2747 72.596C32.003 74.3636 29.7313 75.6263 27.2071 76.1313C32.7602 80.4242 39.5754 82.9495 47.1477 82.9495C64.5642 82.697 78.9517 68.303 78.9517 50.6263Z' fill='black'/%3e%3c/svg%3e";
9660
+ var img$N = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M54.5901 49.2615V54.9931H48.7076H42.8252V49.2615V43.5299H48.7076H54.5901V49.2615Z' fill='white'/%3e%3cpath d='M48.7074 54.9931V79.8303M42.825 43.5299L34.0766 35.0832L42.825 43.5299ZM42.825 43.5299V49.2615V43.5299ZM42.825 43.5299H48.7074H42.825ZM42.825 54.9931L34.0766 64.1437L42.825 54.9931ZM42.825 54.9931V49.2615V54.9931ZM42.825 54.9931H48.7074H42.825ZM54.5899 54.9931L63.0365 64.1437L54.5899 54.9931ZM54.5899 54.9931V49.2615V54.9931ZM54.5899 54.9931H48.7074H54.5899ZM54.5899 43.5299L63.0365 35.0832L54.5899 43.5299ZM54.5899 43.5299V49.2615V43.5299ZM54.5899 43.5299H48.7074H54.5899ZM54.5899 49.2615H79.1253H54.5899ZM42.825 49.2615H17.9878H42.825ZM48.7074 43.5299V18.9944V43.5299Z' stroke='black' stroke-width='4'/%3e%3c/svg%3e";
9292
9661
 
9293
- var img$M = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M54.5901 49.2615V54.9931H48.7076H42.8252V49.2615V43.5299H48.7076H54.5901V49.2615Z' fill='white'/%3e%3cpath d='M48.7074 54.9931V79.8303M42.825 43.5299L34.0766 35.0832L42.825 43.5299ZM42.825 43.5299V49.2615V43.5299ZM42.825 43.5299H48.7074H42.825ZM42.825 54.9931L34.0766 64.1437L42.825 54.9931ZM42.825 54.9931V49.2615V54.9931ZM42.825 54.9931H48.7074H42.825ZM54.5899 54.9931L63.0365 64.1437L54.5899 54.9931ZM54.5899 54.9931V49.2615V54.9931ZM54.5899 54.9931H48.7074H54.5899ZM54.5899 43.5299L63.0365 35.0832L54.5899 43.5299ZM54.5899 43.5299V49.2615V43.5299ZM54.5899 43.5299H48.7074H54.5899ZM54.5899 49.2615H79.1253H54.5899ZM42.825 49.2615H17.9878H42.825ZM48.7074 43.5299V18.9944V43.5299Z' stroke='black' stroke-width='4'/%3e%3c/svg%3e";
9662
+ var img$M = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M82 23.5C82 25.8684 80.0541 28 77.3784 28C76.6486 28 75.9189 27.7632 75.1892 27.5263C74.2162 27.0526 73.4865 26.1053 73.2432 25.1579C73 24.6842 73 24.2105 73 23.5C73 21.1316 74.9459 19 77.6216 19C80.0541 19 82 21.1316 82 23.5Z' fill='%239D9D9C'/%3e%3cpath d='M73.359 25.2051C73.6026 26.1795 74.5769 27.1538 75.3077 27.641C76.0385 28.1282 76.7692 28.1282 77.5 28.1282C79.9359 28.1282 82.1282 26.1795 82.1282 23.5C82.1282 20.8205 80.1795 18.8718 77.5 18.8718C75.0641 18.8718 72.8718 20.8205 72.8718 23.5C73.1154 23.9872 73.1154 24.7179 73.359 25.2051ZM77.5 14C82.6154 14 87 18.141 87 23.5C87 28.859 82.859 33 77.5 33C76.0385 33 74.3333 32.5128 73.1154 31.7821C72.8718 31.7821 72.6282 31.5385 72.6282 31.2949C71.1667 30.5641 70.1923 29.1026 69.2179 27.641C68.9744 27.3974 68.9744 26.9103 68.7308 26.6667C68.2436 25.6923 68 24.4744 68 23.2564C68.2436 18.3846 72.3846 14 77.5 14Z' fill='black'/%3e%3cpath d='M69.5946 28C70.3243 29.4516 71.5405 30.6613 73 31.629L31.4054 73C30.4324 71.5484 29.2162 70.3387 28 69.6129L69.5946 28Z' fill='black'/%3e%3cpath d='M19 77.6216C19 75.1892 20.8947 73 23.5 73C24.2105 73 24.6842 73.2432 25.3947 73.2432C26.3421 73.7297 27.2895 74.4595 27.5263 75.4324C27.7632 75.9189 28 76.6487 28 77.3784C28 79.8108 26.1053 82 23.5 82C20.8947 82 19 80.0541 19 77.6216Z' fill='%239D9D9C'/%3e%3cpath d='M23.5 81.8846C25.9359 81.8846 28.1282 79.9359 28.1282 77.2564C28.1282 76.5256 27.8846 75.7949 27.641 75.3077C27.1538 74.3333 26.4231 73.6026 25.4487 73.1154C24.9615 72.8718 24.2308 72.8718 23.5 72.8718C21.0641 72.8718 18.8718 74.8205 18.8718 77.5C19.1154 79.9359 21.0641 81.8846 23.5 81.8846ZM32.0256 73.359C32.7564 74.5769 33 76.0385 33 77.5C33 82.6154 28.859 87 23.5 87C18.3846 87 14 82.859 14 77.5C14 72.141 18.141 68 23.5 68C24.7179 68 25.9359 68.2436 27.1538 68.7308C27.3974 68.9744 27.641 68.9744 27.8846 69.2179C29.3462 69.9487 30.5641 71.1667 31.2949 72.6282C31.7821 72.8718 32.0256 73.1154 32.0256 73.359Z' fill='black'/%3e%3c/svg%3e";
9663
+ var line$1 = img$M;
9294
9664
 
9295
- var img$L = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M82 23.5C82 25.8684 80.0541 28 77.3784 28C76.6486 28 75.9189 27.7632 75.1892 27.5263C74.2162 27.0526 73.4865 26.1053 73.2432 25.1579C73 24.6842 73 24.2105 73 23.5C73 21.1316 74.9459 19 77.6216 19C80.0541 19 82 21.1316 82 23.5Z' fill='%239D9D9C'/%3e%3cpath d='M73.359 25.2051C73.6026 26.1795 74.5769 27.1538 75.3077 27.641C76.0385 28.1282 76.7692 28.1282 77.5 28.1282C79.9359 28.1282 82.1282 26.1795 82.1282 23.5C82.1282 20.8205 80.1795 18.8718 77.5 18.8718C75.0641 18.8718 72.8718 20.8205 72.8718 23.5C73.1154 23.9872 73.1154 24.7179 73.359 25.2051ZM77.5 14C82.6154 14 87 18.141 87 23.5C87 28.859 82.859 33 77.5 33C76.0385 33 74.3333 32.5128 73.1154 31.7821C72.8718 31.7821 72.6282 31.5385 72.6282 31.2949C71.1667 30.5641 70.1923 29.1026 69.2179 27.641C68.9744 27.3974 68.9744 26.9103 68.7308 26.6667C68.2436 25.6923 68 24.4744 68 23.2564C68.2436 18.3846 72.3846 14 77.5 14Z' fill='black'/%3e%3cpath d='M69.5946 28C70.3243 29.4516 71.5405 30.6613 73 31.629L31.4054 73C30.4324 71.5484 29.2162 70.3387 28 69.6129L69.5946 28Z' fill='black'/%3e%3cpath d='M19 77.6216C19 75.1892 20.8947 73 23.5 73C24.2105 73 24.6842 73.2432 25.3947 73.2432C26.3421 73.7297 27.2895 74.4595 27.5263 75.4324C27.7632 75.9189 28 76.6487 28 77.3784C28 79.8108 26.1053 82 23.5 82C20.8947 82 19 80.0541 19 77.6216Z' fill='%239D9D9C'/%3e%3cpath d='M23.5 81.8846C25.9359 81.8846 28.1282 79.9359 28.1282 77.2564C28.1282 76.5256 27.8846 75.7949 27.641 75.3077C27.1538 74.3333 26.4231 73.6026 25.4487 73.1154C24.9615 72.8718 24.2308 72.8718 23.5 72.8718C21.0641 72.8718 18.8718 74.8205 18.8718 77.5C19.1154 79.9359 21.0641 81.8846 23.5 81.8846ZM32.0256 73.359C32.7564 74.5769 33 76.0385 33 77.5C33 82.6154 28.859 87 23.5 87C18.3846 87 14 82.859 14 77.5C14 72.141 18.141 68 23.5 68C24.7179 68 25.9359 68.2436 27.1538 68.7308C27.3974 68.9744 27.641 68.9744 27.8846 69.2179C29.3462 69.9487 30.5641 71.1667 31.2949 72.6282C31.7821 72.8718 32.0256 73.1154 32.0256 73.359Z' fill='black'/%3e%3c/svg%3e";
9296
- var line$1 = img$L;
9665
+ var img$L = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect x='12.5' y='22.5' width='77' height='53' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='89' cy='24' r='8.5' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='13' cy='76' r='8.5' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9666
+ var rect2points = img$L;
9297
9667
 
9298
- var img$K = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect x='12.5' y='22.5' width='77' height='53' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='89' cy='24' r='8.5' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='13' cy='76' r='8.5' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9299
- var rect2points = img$K;
9668
+ var img$K = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M74.0328 31C74.459 34.401 76.8033 37.1642 80 38.0145V75H14L13 30L74.0328 31Z' fill='%239D9D9C'/%3e%3cpath d='M82 25C84.1053 25 86 27.6842 86 30C86 32.1053 84.3158 35 82 35C79.8947 35 77.5 32.3158 77.5 30C77.5 27.6842 79.8947 25 82 25Z' fill='%239D9D9C'/%3e%3cpath d='M50 50H44V56H50V50Z' fill='white'/%3e%3cpath d='M44.3478 49.3478V55.6522H50.6522V49.3478H44.3478ZM40 60V45H55V60H40Z' fill='black'/%3e%3cpath d='M79.5187 38.1041C76.3102 37.2565 73.7433 34.5019 73.5294 31.1115H14.2781V74.974H79.5187V38.1041ZM81.6578 34.0781C83.7968 34.0781 85.7219 32.3829 85.7219 30.052C85.7219 27.9331 84.0107 26.026 81.6578 26.026C79.5187 26.026 77.5936 27.7212 77.5936 30.052C77.5936 32.3829 79.5187 34.0781 81.6578 34.0781ZM90 30.052C90 33.8662 87.4332 37.0446 83.7968 37.8922V79H10V26.8736H74.1711C75.4546 23.9071 78.4492 22 81.6578 22C86.1497 22 90 25.6022 90 30.052Z' fill='black'/%3e%3c/svg%3e";
9300
9669
 
9301
- var img$J = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M74.0328 31C74.459 34.401 76.8033 37.1642 80 38.0145V75H14L13 30L74.0328 31Z' fill='%239D9D9C'/%3e%3cpath d='M82 25C84.1053 25 86 27.6842 86 30C86 32.1053 84.3158 35 82 35C79.8947 35 77.5 32.3158 77.5 30C77.5 27.6842 79.8947 25 82 25Z' fill='%239D9D9C'/%3e%3cpath d='M50 50H44V56H50V50Z' fill='white'/%3e%3cpath d='M44.3478 49.3478V55.6522H50.6522V49.3478H44.3478ZM40 60V45H55V60H40Z' fill='black'/%3e%3cpath d='M79.5187 38.1041C76.3102 37.2565 73.7433 34.5019 73.5294 31.1115H14.2781V74.974H79.5187V38.1041ZM81.6578 34.0781C83.7968 34.0781 85.7219 32.3829 85.7219 30.052C85.7219 27.9331 84.0107 26.026 81.6578 26.026C79.5187 26.026 77.5936 27.7212 77.5936 30.052C77.5936 32.3829 79.5187 34.0781 81.6578 34.0781ZM90 30.052C90 33.8662 87.4332 37.0446 83.7968 37.8922V79H10V26.8736H74.1711C75.4546 23.9071 78.4492 22 81.6578 22C86.1497 22 90 25.6022 90 30.052Z' fill='black'/%3e%3c/svg%3e";
9670
+ var img$J = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M45 17.5C45 14.6053 47.3158 12 50.5 12C53.3947 12 56 14.3158 56 17.5C56 20.3947 53.6842 23 50.5 23C47.3158 22.7105 45 20.3947 45 17.5Z' fill='%239D9D9C'/%3e%3cpath d='M84 53.72C84 71.92 68.8594 87 50 87V62.82H58.5V45.5H50V27C54.25 27 57.7031 24.64 59.2969 21C75 25 84 38.64 84 53.72Z' fill='%239D9D9C'/%3e%3cpath d='M46.4 49.9565V57.5217H53.8571V49.9565H46.4ZM50 63H41V45H50H59V63H50V63Z' fill='black'/%3e%3cpath d='M37 15H31V20H37V15Z' fill='black'/%3e%3cpath d='M16 15H10V20H16V15Z' fill='black'/%3e%3cpath d='M26 15H21V20H26V15Z' fill='black'/%3e%3cpath d='M89 53.1728C89 74.4228 71.7059 92 50.2193 92V89.3765V86.7531C68.5615 86.7531 83.7594 71.7994 83.7594 53.1728C83.7594 37.9568 73.5401 25.1019 59.6524 21.1667C58.0802 24.8395 54.4118 27.463 50.2193 27.463C44.7166 27.463 40 23.0031 40 17.2315C40 11.7222 44.4545 7 50.2193 7C55.4599 7 59.6524 10.9352 60.1765 15.9198C76.6845 20.3796 89 35.3333 89 53.1728ZM50.2193 12.2469C47.5989 12.2469 45.2406 14.3457 45.2406 17.2315C45.2406 19.8549 47.3369 22.216 50.2193 22.216C52.8396 22.216 55.1979 20.1173 55.1979 17.2315C55.1979 14.3457 53.1016 12.2469 50.2193 12.2469Z' fill='black'/%3e%3c/svg%3e";
9671
+ var arcTangential = img$J;
9302
9672
 
9303
- var img$I = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M45 17.5C45 14.6053 47.3158 12 50.5 12C53.3947 12 56 14.3158 56 17.5C56 20.3947 53.6842 23 50.5 23C47.3158 22.7105 45 20.3947 45 17.5Z' fill='%239D9D9C'/%3e%3cpath d='M84 53.72C84 71.92 68.8594 87 50 87V62.82H58.5V45.5H50V27C54.25 27 57.7031 24.64 59.2969 21C75 25 84 38.64 84 53.72Z' fill='%239D9D9C'/%3e%3cpath d='M46.4 49.9565V57.5217H53.8571V49.9565H46.4ZM50 63H41V45H50H59V63H50V63Z' fill='black'/%3e%3cpath d='M37 15H31V20H37V15Z' fill='black'/%3e%3cpath d='M16 15H10V20H16V15Z' fill='black'/%3e%3cpath d='M26 15H21V20H26V15Z' fill='black'/%3e%3cpath d='M89 53.1728C89 74.4228 71.7059 92 50.2193 92V89.3765V86.7531C68.5615 86.7531 83.7594 71.7994 83.7594 53.1728C83.7594 37.9568 73.5401 25.1019 59.6524 21.1667C58.0802 24.8395 54.4118 27.463 50.2193 27.463C44.7166 27.463 40 23.0031 40 17.2315C40 11.7222 44.4545 7 50.2193 7C55.4599 7 59.6524 10.9352 60.1765 15.9198C76.6845 20.3796 89 35.3333 89 53.1728ZM50.2193 12.2469C47.5989 12.2469 45.2406 14.3457 45.2406 17.2315C45.2406 19.8549 47.3369 22.216 50.2193 22.216C52.8396 22.216 55.1979 20.1173 55.1979 17.2315C55.1979 14.3457 53.1016 12.2469 50.2193 12.2469Z' fill='black'/%3e%3c/svg%3e";
9304
- var arcTangential = img$I;
9673
+ var img$I = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cmask id='path-1-inside-1' fill='white'%3e%3cpath d='M10.6184 60.8555C10.6184 50.4737 14.7426 40.5171 22.0836 33.1761C29.4246 25.8351 39.3812 21.7109 49.7629 21.7109C60.1447 21.7109 70.1013 25.8351 77.4423 33.1761C84.7833 40.5171 88.9074 50.4737 88.9074 60.8554L49.7629 60.8555L10.6184 60.8555Z'/%3e%3c/mask%3e%3cpath d='M10.6184 60.8555C10.6184 50.4737 14.7426 40.5171 22.0836 33.1761C29.4246 25.8351 39.3812 21.7109 49.7629 21.7109C60.1447 21.7109 70.1013 25.8351 77.4423 33.1761C84.7833 40.5171 88.9074 50.4737 88.9074 60.8554L49.7629 60.8555L10.6184 60.8555Z' stroke='black' stroke-width='12' mask='url(%23path-1-inside-1)'/%3e%3cpath d='M82.9238 60.8556C82.9238 52.0608 79.43 43.6262 73.2112 37.4074C66.9924 31.1885 58.5578 27.6948 49.763 27.6948C40.9683 27.6948 32.5337 31.1885 26.3149 37.4074C20.096 43.6262 16.6023 52.0608 16.6023 60.8556L49.763 60.8556H82.9238Z' fill='%23C4C4C4'/%3e%3ccircle cx='13.5545' cy='60.8554' r='7.04754' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='86.4455' cy='60.8554' r='7.04754' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='43.5242' y='53.8079' width='12.4774' height='12.4774' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9674
+ var arcCenter = img$I;
9305
9675
 
9306
- var img$H = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cmask id='path-1-inside-1' fill='white'%3e%3cpath d='M10.6184 60.8555C10.6184 50.4737 14.7426 40.5171 22.0836 33.1761C29.4246 25.8351 39.3812 21.7109 49.7629 21.7109C60.1447 21.7109 70.1013 25.8351 77.4423 33.1761C84.7833 40.5171 88.9074 50.4737 88.9074 60.8554L49.7629 60.8555L10.6184 60.8555Z'/%3e%3c/mask%3e%3cpath d='M10.6184 60.8555C10.6184 50.4737 14.7426 40.5171 22.0836 33.1761C29.4246 25.8351 39.3812 21.7109 49.7629 21.7109C60.1447 21.7109 70.1013 25.8351 77.4423 33.1761C84.7833 40.5171 88.9074 50.4737 88.9074 60.8554L49.7629 60.8555L10.6184 60.8555Z' stroke='black' stroke-width='12' mask='url(%23path-1-inside-1)'/%3e%3cpath d='M82.9238 60.8556C82.9238 52.0608 79.43 43.6262 73.2112 37.4074C66.9924 31.1885 58.5578 27.6948 49.763 27.6948C40.9683 27.6948 32.5337 31.1885 26.3149 37.4074C20.096 43.6262 16.6023 52.0608 16.6023 60.8556L49.763 60.8556H82.9238Z' fill='%23C4C4C4'/%3e%3ccircle cx='13.5545' cy='60.8554' r='7.04754' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='86.4455' cy='60.8554' r='7.04754' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='43.5242' y='53.8079' width='12.4774' height='12.4774' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9307
- var arcCenter = img$H;
9676
+ var img$H = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M84 63.5C84 58.9694 83.1076 54.4832 81.3738 50.2974C79.6401 46.1117 77.0988 42.3084 73.8952 39.1048C70.6916 35.9012 66.8883 33.3599 62.7026 31.6262C58.5168 29.8924 54.0306 29 49.5 29C44.9694 29 40.4832 29.8924 36.2974 31.6262C32.1117 33.3599 28.3084 35.9012 25.1048 39.1048C21.9012 42.3084 19.3599 46.1117 17.6262 50.2974C15.8924 54.4832 15 58.9694 15 63.5L49.5 63.5H84Z' fill='%23C4C4C4'/%3e%3cpath d='M84 63.5C84 58.9694 83.1076 54.4832 81.3738 50.2974C79.6401 46.1117 77.0988 42.3084 73.8952 39.1048C70.6916 35.9012 66.8883 33.3599 62.7026 31.6262C58.5168 29.8924 54.0306 29 49.5 29C44.9694 29 40.4832 29.8924 36.2974 31.6262C32.1117 33.3599 28.3084 35.9012 25.1048 39.1048C21.9012 42.3084 19.3599 46.1117 17.6262 50.2974C15.8924 54.4832 15 58.9694 15 63.5' stroke='black' stroke-width='5'/%3e%3ccircle cx='17.5' cy='63.5' r='8' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='81.5' cy='63.5' r='8' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='49.5' cy='31.5' r='8' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9677
+ var arc3points = img$H;
9308
9678
 
9309
- var img$G = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M84 63.5C84 58.9694 83.1076 54.4832 81.3738 50.2974C79.6401 46.1117 77.0988 42.3084 73.8952 39.1048C70.6916 35.9012 66.8883 33.3599 62.7026 31.6262C58.5168 29.8924 54.0306 29 49.5 29C44.9694 29 40.4832 29.8924 36.2974 31.6262C32.1117 33.3599 28.3084 35.9012 25.1048 39.1048C21.9012 42.3084 19.3599 46.1117 17.6262 50.2974C15.8924 54.4832 15 58.9694 15 63.5L49.5 63.5H84Z' fill='%23C4C4C4'/%3e%3cpath d='M84 63.5C84 58.9694 83.1076 54.4832 81.3738 50.2974C79.6401 46.1117 77.0988 42.3084 73.8952 39.1048C70.6916 35.9012 66.8883 33.3599 62.7026 31.6262C58.5168 29.8924 54.0306 29 49.5 29C44.9694 29 40.4832 29.8924 36.2974 31.6262C32.1117 33.3599 28.3084 35.9012 25.1048 39.1048C21.9012 42.3084 19.3599 46.1117 17.6262 50.2974C15.8924 54.4832 15 58.9694 15 63.5' stroke='black' stroke-width='5'/%3e%3ccircle cx='17.5' cy='63.5' r='8' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='81.5' cy='63.5' r='8' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3ccircle cx='49.5' cy='31.5' r='8' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9310
- var arc3points = img$G;
9679
+ var img$G = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M49.7712 85C30.6811 85 15 68.9977 15 49.6349C15 30.2721 30.5448 15 49.9076 15C56.4528 15 63.3478 16.7601 68.5294 20.0327C67.984 21.3963 67.1569 23.2443 67.1569 24.6078C67.1569 30.3349 71.2225 34.6732 77.2222 34.6732C78.5858 34.6732 80.249 34.3036 81.3399 33.7582C83.5216 38.3943 85 44.3169 85 49.7712C85 69.1341 68.8613 85 49.7712 85ZM58.4641 58.4641V41.0784H41.0784V58.4641H58.4641Z' fill='%239D9D9C'/%3e%3cpath d='M55 46H46V55H55V46Z' fill='white'/%3e%3cpath d='M72 25C72 21.8421 74.3158 19 77.5 19C80.3947 19 83 21.5263 83 25C83 28.1579 80.6842 31 77.5 31C74.3158 31 72 28.1579 72 25Z' fill='%239D9D9C'/%3e%3cpath d='M77.4136 30.0678C80.0915 30.0678 82.5017 27.8983 82.5017 24.9153C82.5017 22.2034 80.3593 19.7627 77.4136 19.7627C74.7356 19.7627 72.3254 21.9322 72.3254 24.9153C72.5932 27.6271 74.7356 30.0678 77.4136 30.0678ZM50.6339 84.5763C69.3797 84.5763 84.6441 69.1186 84.6441 49.8644C84.6441 44.4407 83.3051 39.2881 81.1627 34.678C80.0915 34.9492 78.7525 35.4915 77.6814 35.4915C72.0576 35.4915 67.2373 30.8814 67.2373 24.9153C67.2373 23.2881 67.5051 21.9322 68.3085 20.5763C63.2203 17.322 57.061 15.4237 50.6339 15.4237C31.8881 15.4237 16.3559 30.8814 16.3559 50.1356C16.3559 69.3898 31.6203 84.5763 50.6339 84.5763ZM71.522 16.2373C73.1288 15.1525 75.2712 14.339 77.4136 14.339C83.0373 14.339 87.8576 18.9492 87.8576 24.9153C87.8576 27.3559 86.7864 29.7966 85.4475 31.4237C88.3932 37.1186 90 43.3559 90 49.8644C90 72.1017 72.3254 90 50.6339 90C28.9424 90 11 72.1017 11 49.8644C11 27.6271 28.6746 10 50.6339 10C58.4 10 65.6305 12.4407 71.522 16.2373Z' fill='black'/%3e%3cpath d='M46.2174 53.7826H53.7826V46.2174H46.2174V53.7826ZM41 41H59V59H41V41V41Z' fill='black'/%3e%3c/svg%3e";
9680
+ var circleCenterRadius = img$G;
9311
9681
 
9312
- var img$F = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M49.7712 85C30.6811 85 15 68.9977 15 49.6349C15 30.2721 30.5448 15 49.9076 15C56.4528 15 63.3478 16.7601 68.5294 20.0327C67.984 21.3963 67.1569 23.2443 67.1569 24.6078C67.1569 30.3349 71.2225 34.6732 77.2222 34.6732C78.5858 34.6732 80.249 34.3036 81.3399 33.7582C83.5216 38.3943 85 44.3169 85 49.7712C85 69.1341 68.8613 85 49.7712 85ZM58.4641 58.4641V41.0784H41.0784V58.4641H58.4641Z' fill='%239D9D9C'/%3e%3cpath d='M55 46H46V55H55V46Z' fill='white'/%3e%3cpath d='M72 25C72 21.8421 74.3158 19 77.5 19C80.3947 19 83 21.5263 83 25C83 28.1579 80.6842 31 77.5 31C74.3158 31 72 28.1579 72 25Z' fill='%239D9D9C'/%3e%3cpath d='M77.4136 30.0678C80.0915 30.0678 82.5017 27.8983 82.5017 24.9153C82.5017 22.2034 80.3593 19.7627 77.4136 19.7627C74.7356 19.7627 72.3254 21.9322 72.3254 24.9153C72.5932 27.6271 74.7356 30.0678 77.4136 30.0678ZM50.6339 84.5763C69.3797 84.5763 84.6441 69.1186 84.6441 49.8644C84.6441 44.4407 83.3051 39.2881 81.1627 34.678C80.0915 34.9492 78.7525 35.4915 77.6814 35.4915C72.0576 35.4915 67.2373 30.8814 67.2373 24.9153C67.2373 23.2881 67.5051 21.9322 68.3085 20.5763C63.2203 17.322 57.061 15.4237 50.6339 15.4237C31.8881 15.4237 16.3559 30.8814 16.3559 50.1356C16.3559 69.3898 31.6203 84.5763 50.6339 84.5763ZM71.522 16.2373C73.1288 15.1525 75.2712 14.339 77.4136 14.339C83.0373 14.339 87.8576 18.9492 87.8576 24.9153C87.8576 27.3559 86.7864 29.7966 85.4475 31.4237C88.3932 37.1186 90 43.3559 90 49.8644C90 72.1017 72.3254 90 50.6339 90C28.9424 90 11 72.1017 11 49.8644C11 27.6271 28.6746 10 50.6339 10C58.4 10 65.6305 12.4407 71.522 16.2373Z' fill='black'/%3e%3cpath d='M46.2174 53.7826H53.7826V46.2174H46.2174V53.7826ZM41 41H59V59H41V41V41Z' fill='black'/%3e%3c/svg%3e";
9313
- var circleCenterRadius = img$F;
9682
+ var img$F = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M61.8771 19.8479C71.6505 19.8479 79.795 27.6795 79.795 37.6715V61.9765V71.4284V75.7493V79.5301H75.9942H71.6505H62.1486H37.7152H28.2133H23.8696H20.0688V75.7493V71.4284V61.9765V37.6715V28.2196V23.8987V20.118H23.8696H28.2133H37.7152H61.8771V19.8479Z' fill='%239D9D9C'/%3e%3cpath d='M84.2997 84.2994H62.0418H38.1941H16.2012V62.0415V38.1937V16.2008H38.4591H62.3068C65.7515 16.2008 69.1962 16.9957 72.1109 18.5856C73.4358 19.3805 74.7606 20.1754 75.8205 20.9704C77.1454 22.0303 78.4703 23.3551 79.5302 24.68C80.3251 25.7399 81.385 27.0648 81.915 28.3897C83.5048 31.3044 84.2997 34.7491 84.2997 38.4587V62.3065V84.2994V84.2994ZM79.5302 38.4587C79.5302 28.9196 71.5809 20.9704 62.0418 20.9704H38.1941H28.92H24.6804H20.9707V24.68V28.9196V38.1937V62.0415V71.3156V75.5552V79.2649H24.6804H28.92H38.1941H62.0418H71.316H75.5556H79.2652V75.5552V71.3156V62.0415V38.4587H79.5302Z' fill='black'/%3e%3c/svg%3e";
9683
+ var filletSketch = img$F;
9314
9684
 
9315
- var img$E = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M61.8771 19.8479C71.6505 19.8479 79.795 27.6795 79.795 37.6715V61.9765V71.4284V75.7493V79.5301H75.9942H71.6505H62.1486H37.7152H28.2133H23.8696H20.0688V75.7493V71.4284V61.9765V37.6715V28.2196V23.8987V20.118H23.8696H28.2133H37.7152H61.8771V19.8479Z' fill='%239D9D9C'/%3e%3cpath d='M84.2997 84.2994H62.0418H38.1941H16.2012V62.0415V38.1937V16.2008H38.4591H62.3068C65.7515 16.2008 69.1962 16.9957 72.1109 18.5856C73.4358 19.3805 74.7606 20.1754 75.8205 20.9704C77.1454 22.0303 78.4703 23.3551 79.5302 24.68C80.3251 25.7399 81.385 27.0648 81.915 28.3897C83.5048 31.3044 84.2997 34.7491 84.2997 38.4587V62.3065V84.2994V84.2994ZM79.5302 38.4587C79.5302 28.9196 71.5809 20.9704 62.0418 20.9704H38.1941H28.92H24.6804H20.9707V24.68V28.9196V38.1937V62.0415V71.3156V75.5552V79.2649H24.6804H28.92H38.1941H62.0418H71.316H75.5556H79.2652V75.5552V71.3156V62.0415V38.4587H79.5302Z' fill='black'/%3e%3c/svg%3e";
9316
- var filletSketch = img$E;
9685
+ var img$E = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3c!-- Created with Inkscape (http://www.inkscape.org/) --%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg%3e %3cpath d='m10 50h40' fill='%23202020' stroke='%23282828' stroke-dasharray='5%2c 5' stroke-dashoffset='10' stroke-width='5'/%3e %3cg transform='rotate(45 -33.625 89.376)' stroke='black' stroke-dashoffset='64.252' stroke-linecap='round' stroke-linejoin='round' stroke-width='6'%3e %3cpath d='m-25 0h60' fill='%23c4c4c4'/%3e %3ccircle cx='-33' r='8' fill='none'/%3e %3c/g%3e %3cpath d='m58 50h32' fill='%23202020' stroke='%23282828' stroke-dasharray='5%2c 5%2c 60' stroke-width='5'/%3e %3cg transform='rotate(-45 86.975 -39.422)' stroke='black' stroke-dashoffset='64.252' stroke-linecap='round' stroke-linejoin='round' stroke-width='6'%3e %3cpath d='m-25 0h60' fill='%23c4c4c4'/%3e %3ccircle cx='-33' r='8' fill='none'/%3e %3c/g%3e %3c/g%3e%3c/svg%3e";
9686
+ var trim = img$E;
9317
9687
 
9318
- var img$D = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3c!-- Created with Inkscape (http://www.inkscape.org/) --%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg%3e %3cpath d='m10 50h40' fill='%23202020' stroke='%23282828' stroke-dasharray='5%2c 5' stroke-dashoffset='10' stroke-width='5'/%3e %3cg transform='rotate(45 -33.625 89.376)' stroke='black' stroke-dashoffset='64.252' stroke-linecap='round' stroke-linejoin='round' stroke-width='6'%3e %3cpath d='m-25 0h60' fill='%23c4c4c4'/%3e %3ccircle cx='-33' r='8' fill='none'/%3e %3c/g%3e %3cpath d='m58 50h32' fill='%23202020' stroke='%23282828' stroke-dasharray='5%2c 5%2c 60' stroke-width='5'/%3e %3cg transform='rotate(-45 86.975 -39.422)' stroke='black' stroke-dashoffset='64.252' stroke-linecap='round' stroke-linejoin='round' stroke-width='6'%3e %3cpath d='m-25 0h60' fill='%23c4c4c4'/%3e %3ccircle cx='-33' r='8' fill='none'/%3e %3c/g%3e %3c/g%3e%3c/svg%3e";
9319
- var trim = img$D;
9688
+ var img$D = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3c!-- Created with Inkscape (http://www.inkscape.org/) --%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black' stroke-dashoffset='64.252' stroke-width='5'%3e %3cg fill='none'%3e %3cpath d='m30.721 89.746a60 60 0 0 1 60-60' style='paint-order:normal'/%3e %3cpath d='m20 20 60 60' style='paint-order:normal'/%3e %3cpath d='m28 48h40' style='paint-order:normal'/%3e %3cpath d='m48 28v40' style='paint-order:normal'/%3e %3c/g%3e %3ccircle cx='48' cy='48' r='8' fill='%23c4c4c4' style='paint-order:normal'/%3e %3c/g%3e%3c/svg%3e";
9689
+ var split = img$D;
9320
9690
 
9321
- var img$C = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3c!-- Created with Inkscape (http://www.inkscape.org/) --%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black' stroke-dashoffset='64.252' stroke-width='5'%3e %3cg fill='none'%3e %3cpath d='m30.721 89.746a60 60 0 0 1 60-60' style='paint-order:normal'/%3e %3cpath d='m20 20 60 60' style='paint-order:normal'/%3e %3cpath d='m28 48h40' style='paint-order:normal'/%3e %3cpath d='m48 28v40' style='paint-order:normal'/%3e %3c/g%3e %3ccircle cx='48' cy='48' r='8' fill='%23c4c4c4' style='paint-order:normal'/%3e %3c/g%3e%3c/svg%3e";
9322
- var split = img$C;
9691
+ var img$C = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect x='12.5' y='10.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='12.5' y='70.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='69.5' y='70.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3cpath d='M21.5 62V47.5' stroke='black' stroke-width='3'/%3e%3cpath d='M26 47H17L21.5 39L26 47Z' fill='black' stroke='black'/%3e%3cpath d='M39 80.5L53.5 80.5' stroke='black' stroke-width='3'/%3e%3cpath d='M54 85L54 76L62 80.5L54 85Z' fill='black' stroke='black'/%3e%3c/svg%3e";
9692
+ var copyRect = img$C;
9323
9693
 
9324
- var img$B = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect x='12.5' y='10.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='12.5' y='70.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='69.5' y='70.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3cpath d='M21.5 62V47.5' stroke='black' stroke-width='3'/%3e%3cpath d='M26 47H17L21.5 39L26 47Z' fill='black' stroke='black'/%3e%3cpath d='M39 80.5L53.5 80.5' stroke='black' stroke-width='3'/%3e%3cpath d='M54 85L54 76L62 80.5L54 85Z' fill='black' stroke='black'/%3e%3c/svg%3e";
9325
- var copyRect = img$B;
9694
+ var img$B = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect x='56.5' y='40.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='24.5' y='70.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='24.5' y='10.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3cpath d='M64 23L64 26L59 23L64 20L64 23Z' fill='black'/%3e%3cpath d='M70 32C70 32 69.9661 27.6452 68.5 25.5C67.0339 23.3548 64 23 64 23M64 26L64 20L59 23L64 26Z' stroke='black' stroke-width='2'/%3e%3cpath d='M67.0001 73.9992L64.0001 73.9984L67 69L70.0001 74L67.0001 73.9992Z' fill='black'/%3e%3cpath d='M58.0001 80C58.0001 80 62.1802 80 64.5 78.5C66.8198 77 67.0001 73.9992 67.0001 73.9992M64.0001 73.9984L70.0001 74L67 69L64.0001 73.9984Z' stroke='black' stroke-width='2'/%3e%3ccircle cx='34' cy='50' r='6.5' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9695
+ var copyCirc = img$B;
9326
9696
 
9327
- var img$A = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect x='56.5' y='40.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='24.5' y='70.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='24.5' y='10.5' width='19' height='19' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3cpath d='M64 23L64 26L59 23L64 20L64 23Z' fill='black'/%3e%3cpath d='M70 32C70 32 69.9661 27.6452 68.5 25.5C67.0339 23.3548 64 23 64 23M64 26L64 20L59 23L64 26Z' stroke='black' stroke-width='2'/%3e%3cpath d='M67.0001 73.9992L64.0001 73.9984L67 69L70.0001 74L67.0001 73.9992Z' fill='black'/%3e%3cpath d='M58.0001 80C58.0001 80 62.1802 80 64.5 78.5C66.8198 77 67.0001 73.9992 67.0001 73.9992M64.0001 73.9984L70.0001 74L67 69L64.0001 73.9984Z' stroke='black' stroke-width='2'/%3e%3ccircle cx='34' cy='50' r='6.5' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9328
- var copyCirc = img$A;
9697
+ var img$A = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cline x1='49.5' y1='16' x2='49.5' y2='85' stroke='black' stroke-width='5'/%3e%3crect x='11.5' y='37.5' width='25' height='25' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='63.5' y='37.5' width='25' height='25' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9329
9698
 
9330
- var img$z = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cline x1='49.5' y1='16' x2='49.5' y2='85' stroke='black' stroke-width='5'/%3e%3crect x='11.5' y='37.5' width='25' height='25' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3crect x='63.5' y='37.5' width='25' height='25' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3c/svg%3e";
9699
+ var img$z = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect x='18.5' y='18.5' width='64' height='64' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3cpath d='M48.6562 36.4062V53.2637C48.6562 56.0645 47.7773 58.2793 46.0195 59.9082C44.2734 61.5371 41.8828 62.3516 38.8477 62.3516C35.8594 62.3516 33.4863 61.5605 31.7285 59.9785C29.9707 58.3965 29.0742 56.2227 29.0391 53.457V36.4062H34.3125V53.2988C34.3125 54.9746 34.7109 56.1992 35.5078 56.9727C36.3164 57.7344 37.4297 58.1152 38.8477 58.1152C41.8125 58.1152 43.3184 56.5566 43.3652 53.4395V36.4062H48.6562ZM66.252 55.2852C66.252 54.2891 65.9004 53.5273 65.1973 53C64.4941 52.4609 63.2285 51.8984 61.4004 51.3125C59.5723 50.7148 58.125 50.1289 57.0586 49.5547C54.1523 47.9844 52.6992 45.8691 52.6992 43.209C52.6992 41.8262 53.0859 40.5957 53.8594 39.5176C54.6445 38.4277 55.7637 37.5781 57.2168 36.9688C58.6816 36.3594 60.3223 36.0547 62.1387 36.0547C63.9668 36.0547 65.5957 36.3887 67.0254 37.0566C68.4551 37.7129 69.5625 38.6445 70.3477 39.8516C71.1445 41.0586 71.543 42.4297 71.543 43.9648H66.2695C66.2695 42.793 65.9004 41.8848 65.1621 41.2402C64.4238 40.584 63.3867 40.2559 62.0508 40.2559C60.7617 40.2559 59.7598 40.5312 59.0449 41.082C58.3301 41.6211 57.9727 42.3359 57.9727 43.2266C57.9727 44.0586 58.3887 44.7559 59.2207 45.3184C60.0645 45.8809 61.3008 46.4082 62.9297 46.9004C65.9297 47.8027 68.1152 48.9219 69.4863 50.2578C70.8574 51.5938 71.543 53.2578 71.543 55.25C71.543 57.4648 70.7051 59.2051 69.0293 60.4707C67.3535 61.7246 65.0977 62.3516 62.2617 62.3516C60.293 62.3516 58.5 61.9941 56.8828 61.2793C55.2656 60.5527 54.0293 59.5625 53.1738 58.3086C52.3301 57.0547 51.9082 55.6016 51.9082 53.9492H57.1992C57.1992 56.7734 58.8867 58.1855 62.2617 58.1855C63.5156 58.1855 64.4941 57.9336 65.1973 57.4297C65.9004 56.9141 66.252 56.1992 66.252 55.2852Z' fill='black'/%3e%3c/svg%3e";
9700
+ var useReference = img$z;
9331
9701
 
9332
- var img$y = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect x='18.5' y='18.5' width='64' height='64' fill='%23C4C4C4' stroke='black' stroke-width='5'/%3e%3cpath d='M48.6562 36.4062V53.2637C48.6562 56.0645 47.7773 58.2793 46.0195 59.9082C44.2734 61.5371 41.8828 62.3516 38.8477 62.3516C35.8594 62.3516 33.4863 61.5605 31.7285 59.9785C29.9707 58.3965 29.0742 56.2227 29.0391 53.457V36.4062H34.3125V53.2988C34.3125 54.9746 34.7109 56.1992 35.5078 56.9727C36.3164 57.7344 37.4297 58.1152 38.8477 58.1152C41.8125 58.1152 43.3184 56.5566 43.3652 53.4395V36.4062H48.6562ZM66.252 55.2852C66.252 54.2891 65.9004 53.5273 65.1973 53C64.4941 52.4609 63.2285 51.8984 61.4004 51.3125C59.5723 50.7148 58.125 50.1289 57.0586 49.5547C54.1523 47.9844 52.6992 45.8691 52.6992 43.209C52.6992 41.8262 53.0859 40.5957 53.8594 39.5176C54.6445 38.4277 55.7637 37.5781 57.2168 36.9688C58.6816 36.3594 60.3223 36.0547 62.1387 36.0547C63.9668 36.0547 65.5957 36.3887 67.0254 37.0566C68.4551 37.7129 69.5625 38.6445 70.3477 39.8516C71.1445 41.0586 71.543 42.4297 71.543 43.9648H66.2695C66.2695 42.793 65.9004 41.8848 65.1621 41.2402C64.4238 40.584 63.3867 40.2559 62.0508 40.2559C60.7617 40.2559 59.7598 40.5312 59.0449 41.082C58.3301 41.6211 57.9727 42.3359 57.9727 43.2266C57.9727 44.0586 58.3887 44.7559 59.2207 45.3184C60.0645 45.8809 61.3008 46.4082 62.9297 46.9004C65.9297 47.8027 68.1152 48.9219 69.4863 50.2578C70.8574 51.5938 71.543 53.2578 71.543 55.25C71.543 57.4648 70.7051 59.2051 69.0293 60.4707C67.3535 61.7246 65.0977 62.3516 62.2617 62.3516C60.293 62.3516 58.5 61.9941 56.8828 61.2793C55.2656 60.5527 54.0293 59.5625 53.1738 58.3086C52.3301 57.0547 51.9082 55.6016 51.9082 53.9492H57.1992C57.1992 56.7734 58.8867 58.1855 62.2617 58.1855C63.5156 58.1855 64.4941 57.9336 65.1973 57.4297C65.9004 56.9141 66.252 56.1992 66.252 55.2852Z' fill='black'/%3e%3c/svg%3e";
9333
- var useReference = img$y;
9702
+ var img$y = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M52.9688 53.0938H42.2812V71.5H36.25V26H51.3125C56.4375 26 60.375 27.1667 63.125 29.5C65.8958 31.8333 67.2812 35.2292 67.2812 39.6875C67.2812 42.5208 66.5104 44.9896 64.9688 47.0938C63.4479 49.1979 61.3229 50.7708 58.5938 51.8125L69.2812 71.125V71.5H62.8438L52.9688 53.0938ZM42.2812 48.1875H51.5C54.4792 48.1875 56.8438 47.4167 58.5938 45.875C60.3646 44.3333 61.25 42.2708 61.25 39.6875C61.25 36.875 60.4062 34.7188 58.7188 33.2188C57.0521 31.7188 54.6354 30.9583 51.4688 30.9375H42.2812V48.1875Z' fill='%235E5E5E'/%3e%3cpath d='M52.9688 53.0938L53.8499 52.621L53.5671 52.0938H52.9688V53.0938ZM42.2812 53.0938V52.0938H41.2812V53.0938H42.2812ZM42.2812 71.5V72.5H43.2812V71.5H42.2812ZM36.25 71.5H35.25V72.5H36.25V71.5ZM36.25 26V25H35.25V26H36.25ZM63.125 29.5L62.478 30.2625L62.4809 30.2649L63.125 29.5ZM64.9688 47.0938L64.1621 46.5027L64.1583 46.508L64.9688 47.0938ZM58.5938 51.8125L58.2372 50.8782L57.1611 51.2889L57.7188 52.2967L58.5938 51.8125ZM69.2812 71.125H70.2812V70.8668L70.1562 70.6408L69.2812 71.125ZM69.2812 71.5V72.5H70.2812V71.5H69.2812ZM62.8438 71.5L61.9626 71.9728L62.2454 72.5H62.8438V71.5ZM42.2812 48.1875H41.2812V49.1875H42.2812V48.1875ZM58.5938 45.875L57.9371 45.1208L57.9327 45.1246L58.5938 45.875ZM58.7188 33.2188L58.0498 33.9621L58.0544 33.9662L58.7188 33.2188ZM51.4688 30.9375L51.4753 29.9375H51.4688V30.9375ZM42.2812 30.9375V29.9375H41.2812V30.9375H42.2812ZM52.9688 52.0938H42.2812V54.0938H52.9688V52.0938ZM41.2812 53.0938V71.5H43.2812V53.0938H41.2812ZM42.2812 70.5H36.25V72.5H42.2812V70.5ZM37.25 71.5V26H35.25V71.5H37.25ZM36.25 27H51.3125V25H36.25V27ZM51.3125 27C56.2989 27 59.9717 28.136 62.478 30.2625L63.772 28.7375C60.7783 26.1974 56.5761 25 51.3125 25V27ZM62.4809 30.2649C64.9748 32.3651 66.2812 35.4498 66.2812 39.6875H68.2812C68.2812 35.0085 66.8169 31.3016 63.7691 28.7351L62.4809 30.2649ZM66.2812 39.6875C66.2812 42.3276 65.5672 44.585 64.1621 46.5027L65.7754 47.6848C67.4537 45.3942 68.2812 42.714 68.2812 39.6875H66.2812ZM64.1583 46.508C62.7655 48.435 60.8079 49.8971 58.2372 50.8782L58.9503 52.7468C61.838 51.6446 64.1304 49.9608 65.7792 47.6795L64.1583 46.508ZM57.7188 52.2967L68.4063 71.6092L70.1562 70.6408L59.4687 51.3283L57.7188 52.2967ZM68.2812 71.125V71.5H70.2812V71.125H68.2812ZM69.2812 70.5H62.8438V72.5H69.2812V70.5ZM63.7249 71.0272L53.8499 52.621L52.0876 53.5665L61.9626 71.9728L63.7249 71.0272ZM42.2812 49.1875H51.5V47.1875H42.2812V49.1875ZM51.5 49.1875C54.6531 49.1875 57.276 48.3686 59.2548 46.6254L57.9327 45.1246C56.4115 46.4648 54.3053 47.1875 51.5 47.1875V49.1875ZM59.2504 46.6292C61.2628 44.8772 62.25 42.5275 62.25 39.6875H60.25C60.25 42.0142 59.4664 43.7894 57.9371 45.1208L59.2504 46.6292ZM62.25 39.6875C62.25 36.665 61.3348 34.2062 59.3831 32.4713L58.0544 33.9662C59.4777 35.2313 60.25 37.085 60.25 39.6875H62.25ZM59.3877 32.4755C57.4763 30.7552 54.7864 29.9593 51.4753 29.9375L51.4622 31.9375C54.4844 31.9574 56.6279 32.6823 58.0498 33.962L59.3877 32.4755ZM51.4688 29.9375H42.2812V31.9375H51.4688V29.9375ZM41.2812 30.9375V48.1875H43.2812V30.9375H41.2812Z' fill='%235E5E5E'/%3e%3c/svg%3e";
9334
9703
 
9335
9704
  const RootContext = /*#__PURE__*/React__default.createContext({
9336
9705
  drawingId: -1,
@@ -9987,19 +10356,20 @@ const resources = {
9987
10356
  [CCClasses.CC2DEqualRadiusConstraint]: equal,
9988
10357
  [CCClasses.CC2DHorizontalDistanceConstraint]: hdimension,
9989
10358
  [CCClasses.CC2DVerticalDistanceConstraint]: vdimension,
9990
- [CCClasses.CC2DOffsetConstraint]: img$T,
10359
+ [CCClasses.CC2DOffsetConstraint]: img$U,
9991
10360
  [CCClasses.CC2DRadiusConstraint]: radius,
9992
- [CCClasses.CC2DDiameterConstraint]: img$T,
10361
+ [CCClasses.CC2DDiameterConstraint]: img$U,
9993
10362
  [CCClasses.CC2DAngleConstraint]: angle,
9994
10363
  [CCClasses.CC2DAngleOXConstraint]: angleox,
9995
10364
  [CCClasses.CCRigidSet]: rigidSet,
9996
10365
  [CCClasses.CCUse]: useReference,
9997
- [CCClasses.CCExtrusion]: img$O,
9998
- [CCClasses.CCRevolve]: img$N,
9999
- [HandlersList.DRAWPOINT]: img$M,
10366
+ [CCClasses.CCExtrusion]: img$P,
10367
+ [CCClasses.CCRevolve]: img$O,
10368
+ [CCClasses.CCSketchRegion]: img$y,
10369
+ [HandlersList.DRAWPOINT]: img$N,
10000
10370
  [HandlersList.DRAWLINE]: line$1,
10001
10371
  [HandlersList.DRAWRECT2POINTS]: rect2points,
10002
- [HandlersList.DRAWRECTCENTER]: img$J,
10372
+ [HandlersList.DRAWRECTCENTER]: img$K,
10003
10373
  [HandlersList.DRAWARCTANGENT]: arcTangential,
10004
10374
  [HandlersList.DRAWARCCENTER]: arcCenter,
10005
10375
  [HandlersList.DRAWARCMIDDLE]: arc3points,
@@ -10010,7 +10380,7 @@ const resources = {
10010
10380
  [HandlersList.USEREF]: useReference,
10011
10381
  [Patterns.RECTANGULAR]: copyRect,
10012
10382
  [Patterns.CIRCULAR]: copyCirc,
10013
- [Patterns.MIRROR]: img$z
10383
+ [Patterns.MIRROR]: img$A
10014
10384
  };
10015
10385
  const textures = {};
10016
10386
  const textureLoader = new THREE.TextureLoader();
@@ -10783,8 +11153,8 @@ function recognizeFilletByArc(object, tree, sketchId) {
10783
11153
  };
10784
11154
  }
10785
11155
 
10786
- function ownKeys$g(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10787
- function _objectSpread$g(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$g(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$g(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11156
+ function ownKeys$h(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11157
+ function _objectSpread$h(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$h(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$h(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10788
11158
  function Fillet(drawingId, pluginId) {
10789
11159
  const plugin = getPlugin(drawingId, pluginId);
10790
11160
  const set = plugin.set;
@@ -10916,7 +11286,7 @@ function Fillet(drawingId, pluginId) {
10916
11286
  if (!data) {
10917
11287
  return;
10918
11288
  }
10919
- ccAPI.sketcher.createFillet(drawingId, sketchId, data.info.lines.map(line => line.id), data.info.lineStarts.map(lineStart => lineStart.id), data.info.incidence, data.info.control, data.params.start, getArcAngles(_objectSpread$g(_objectSpread$g({}, data.params), {}, {
11289
+ ccAPI.sketcher.createFillet(drawingId, sketchId, data.info.lines.map(line => line.id), data.info.lineStarts.map(lineStart => lineStart.id), data.info.incidence, data.info.control, data.params.start, getArcAngles(_objectSpread$h(_objectSpread$h({}, data.params), {}, {
10920
11290
  radius: 1
10921
11291
  })).mid, data.params.end).catch(console.warn);
10922
11292
  set({
@@ -11020,8 +11390,8 @@ function Trim(drawingId, pluginId) {
11020
11390
  };
11021
11391
  }
11022
11392
 
11023
- function ownKeys$f(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11024
- function _objectSpread$f(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$f(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$f(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11393
+ function ownKeys$g(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11394
+ function _objectSpread$g(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$g(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$g(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11025
11395
  const tolerance$5 = 1e-6;
11026
11396
  const tMinClosed = 1e-3;
11027
11397
  const tMaxClosed = 1 - 1e-3;
@@ -11191,7 +11561,7 @@ function intersectCircleCircle(circle1, circle2) {
11191
11561
  const c = w * w - dy * dy;
11192
11562
  let res = solveQuadratic(a, b, c).filter(u => u >= -1 && u <= 1).map(u => Math.acos(u) / (2 * Math.PI));
11193
11563
  res = [...res, ...res.map(u => -u)];
11194
- const points = res.map(t => getParameterizedPosition(t, _objectSpread$f(_objectSpread$f({}, circle1), {}, {
11564
+ const points = res.map(t => getParameterizedPosition(t, _objectSpread$g(_objectSpread$g({}, circle1), {}, {
11195
11565
  class: CCClasses.CCCircle
11196
11566
  }))).filter(point => Math.abs(point.distanceTo(circle1.center) - circle1.radius) < tolerance$5 && Math.abs(point.distanceTo(circle2.center) - circle2.radius) < tolerance$5);
11197
11567
  const circle1Intersections = points.map(point => getNormalizedPosition(point, circle1));
@@ -11562,9 +11932,69 @@ function UseRef(drawingId, pluginId) {
11562
11932
  };
11563
11933
  }
11564
11934
 
11935
+ function ownKeys$f(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11936
+ function _objectSpread$f(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$f(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$f(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11937
+ function SSelect(drawingId, pluginId) {
11938
+ const hoverHandler = Hover(drawingId, pluginId);
11939
+ const filter = object => true;
11940
+ const onDeactivate = () => {
11941
+ hoverHandler.onDeactivate && hoverHandler.onDeactivate();
11942
+ const {
11943
+ set
11944
+ } = getPlugin(drawingId, pluginId);
11945
+ set({
11946
+ highlighted: [],
11947
+ interaction: {
11948
+ cycle: 0,
11949
+ objects: [],
11950
+ lastHoveredPos: {},
11951
+ constraintsToGeometry: {}
11952
+ }
11953
+ });
11954
+ };
11955
+ const onClick = e => {
11956
+ if (e.delta > 1) {
11957
+ return;
11958
+ }
11959
+ const {
11960
+ cycle,
11961
+ objects
11962
+ } = getSketchState(drawingId, pluginId).interaction;
11963
+ const pressedId = objects.length > 0 ? objects[cycle % objects.length] : e.object.userData.objId;
11964
+ const drawing = getDrawing(drawingId);
11965
+ const productId = drawing.structure.currentProduct;
11966
+ const object = drawing.structure.tree[pressedId];
11967
+ const selection = drawing.selection.refs[drawing.selection.active || ''];
11968
+ const isSelectable = (selection == null ? void 0 : selection.isSelectable(TreeObjScope, {
11969
+ object
11970
+ })) || false;
11971
+ if (!isSelectable || !productId) {
11972
+ return;
11973
+ }
11974
+ e.stopPropagation();
11975
+ if (selection != null && selection.isSelectable(TreeObjScope, {
11976
+ object
11977
+ })) {
11978
+ const item = createTreeObjSelItem(productId, object);
11979
+ const selApi = drawing.api.selection;
11980
+ selApi.isItemSelected(item) ? selApi.unselect(item) : selApi.select(item);
11981
+ }
11982
+ };
11983
+ return {
11984
+ name: HandlersList.SSELECT,
11985
+ filter,
11986
+ onDeactivate,
11987
+ pointerHandlers: _objectSpread$f({
11988
+ onClick
11989
+ }, hoverHandler.pointerHandlers),
11990
+ keyHandlers: _objectSpread$f({}, hoverHandler.keyHandlers)
11991
+ };
11992
+ }
11993
+
11565
11994
  const HandlersConstructors = {
11566
11995
  [HandlersList.CREATEANGLE]: CreateAngle,
11567
11996
  [HandlersList.DRAG]: Drag,
11997
+ [HandlersList.SSELECT]: SSelect,
11568
11998
  [HandlersList.DRAWPOINT]: DrawPoint,
11569
11999
  [HandlersList.DRAWLINE]: DrawLine,
11570
12000
  [HandlersList.DRAWCIRCLE]: DrawCircle,
@@ -11680,9 +12110,9 @@ const getLineColor = objState => {
11680
12110
  isHighlighted,
11681
12111
  lgsState
11682
12112
  } = objState;
11683
- if (!isSketchActive) return 0x009999;
11684
12113
  if (isSelected) return 0xffa500;
11685
12114
  if (isGHovered || isHighlighted) return 0x00ff00;
12115
+ if (!isSketchActive) return 0x009999;
11686
12116
  if (isWelldefined(lgsState)) return 0x000000;
11687
12117
  if (isOverdefined(lgsState)) return 0x990000;
11688
12118
  return 0x0066ff;
@@ -11695,9 +12125,9 @@ const getArcColor = objState => {
11695
12125
  isHighlighted,
11696
12126
  lgsState
11697
12127
  } = objState;
11698
- if (!isSketchActive) return 0x009999;
11699
12128
  if (isSelected) return 0xffa500;
11700
12129
  if (isGHovered || isHighlighted) return 0x00ff00;
12130
+ if (!isSketchActive) return 0x009999;
11701
12131
  if (isWelldefined(lgsState)) return 0x000000;
11702
12132
  if (isOverdefined(lgsState)) return 0x990000;
11703
12133
  return 0x0066ff;
@@ -11717,6 +12147,17 @@ const getConstrColor = objState => {
11717
12147
  if (isHighlighted) return 0xbbecdd;
11718
12148
  return 0xdddddd;
11719
12149
  };
12150
+ const getRegionColor = objState => {
12151
+ const {
12152
+ isSelected,
12153
+ isGHovered,
12154
+ isHighlighted
12155
+ } = objState;
12156
+ if (isSelected) return 0xffff00;
12157
+ if (isGHovered) return 0x28d79f;
12158
+ if (isHighlighted) return 0xbbecdd;
12159
+ return 0xdddddd;
12160
+ };
11720
12161
  const getColor = (object, objState) => {
11721
12162
  const {
11722
12163
  isSketchActive,
@@ -11739,6 +12180,8 @@ const getColor = (object, objState) => {
11739
12180
  return getArcColor(objState);
11740
12181
  } else if (is2DConstraint(object)) {
11741
12182
  return getConstrColor(objState);
12183
+ } else if (isSketchRegion(object)) {
12184
+ return getRegionColor(objState);
11742
12185
  }
11743
12186
  return 0x000000;
11744
12187
  };
@@ -11781,9 +12224,9 @@ const useColor = objId => {
11781
12224
  var _d$interaction$select2;
11782
12225
  return ((_d$interaction$select2 = d.interaction.selected) == null ? void 0 : _d$interaction$select2.findIndex(info => info.objectId === objId)) !== -1;
11783
12226
  }) || false;
11784
- // gHovered - true if object is selector-hovered
12227
+ // sHovered - true if object is selector-hovered
11785
12228
  const sHovered = useIsSHovered(drawingId, objId);
11786
- // gSelected - true if object is selector-selected
12229
+ // sSelected - true if object is selector-selected
11787
12230
  const sSelected = useIsSSelected(drawingId, objId);
11788
12231
  const isSelected = gSelected || sSelected;
11789
12232
  const isHighlighted = useSketchState(drawingId, pluginId, state => state.highlighted.indexOf(objId) !== -1);
@@ -11834,10 +12277,7 @@ const defaultHandlers = {
11834
12277
  };
11835
12278
 
11836
12279
  const useHandlersAndColor = (drawingId, objId) => {
11837
- const isSelActive = useDrawing(drawingId, d => d.selection.active);
11838
- const treeObjInteraction = useTreeObjInteraction(drawingId, objId);
11839
- const sketchPointerHandlers = useSketchHandlers(objId);
11840
- const pointerHandlers = isSelActive ? treeObjInteraction.handlers : sketchPointerHandlers;
12280
+ const pointerHandlers = useSketchHandlers(objId);
11841
12281
  const color = useColor(objId);
11842
12282
  return React__default.useMemo(() => ({
11843
12283
  handlers: pointerHandlers || defaultHandlers,
@@ -11845,22 +12285,6 @@ const useHandlersAndColor = (drawingId, objId) => {
11845
12285
  }), [pointerHandlers, color]);
11846
12286
  };
11847
12287
 
11848
- const virtualScene = new THREE.Scene();
11849
- const HUD = ({
11850
- children
11851
- }) => {
11852
- const {
11853
- gl,
11854
- camera
11855
- } = useThree();
11856
- useFrame(() => {
11857
- gl.autoClear = false;
11858
- gl.clearDepth();
11859
- gl.render(virtualScene, camera);
11860
- }, 3);
11861
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, createPortal( /*#__PURE__*/React__default.createElement("group", null, children), virtualScene));
11862
- };
11863
-
11864
12288
  /*
11865
12289
  * For correct drawing of objects that lie in the same plane, polygonOffset is used.
11866
12290
  * https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glPolygonOffset.xhtml
@@ -11871,22 +12295,21 @@ const HUD = ({
11871
12295
  * factor parameter is redundant for this purpose, so only units parameter is used.
11872
12296
  */
11873
12297
 
11874
- const constrSize = 2.5;
12298
+ const iconSize = 2.5;
11875
12299
  const hoverZone = 0.8;
11876
- const constrBox = new THREE.Box3();
12300
+ const iconBox = new THREE.Box3();
11877
12301
  const boxMin = new THREE.Vector3();
11878
12302
  const boxMax = new THREE.Vector3();
11879
12303
  const target$2 = new THREE.Vector3();
11880
- const Constraint$1 = props => {
12304
+ const Icon$3 = ({
12305
+ objId,
12306
+ position
12307
+ }) => {
11881
12308
  const {
11882
12309
  drawingId,
11883
12310
  pluginId
11884
12311
  } = React__default.useContext(ViewContext);
11885
- const {
11886
- objId,
11887
- position
11888
- } = props;
11889
- const constraint = useDrawing(drawingId, drawing => drawing.structure.tree[objId]);
12312
+ const object = useDrawing(drawingId, drawing => drawing.structure.tree[objId]);
11890
12313
  const {
11891
12314
  handlers,
11892
12315
  color
@@ -11897,15 +12320,15 @@ const Constraint$1 = props => {
11897
12320
  renderOrder,
11898
12321
  polygonOffsetUnits
11899
12322
  } = useGeomParams(objId);
11900
- const texture = textures[constraint.class];
11901
- const constraintRaycast = React__default.useCallback(function (raycaster, intersects) {
12323
+ const texture = textures[object.class];
12324
+ const raycast = React__default.useCallback(function (raycaster, intersects) {
11902
12325
  const sketchScale = getScale(drawingId, pluginId);
11903
- const halfWidth = (constrSize + hoverZone) * sketchScale * 0.5;
12326
+ const halfWidth = (iconSize + hoverZone) * sketchScale * 0.5;
11904
12327
  boxMin.set(-halfWidth, -halfWidth, 0.0);
11905
12328
  boxMax.set(halfWidth, halfWidth, 0.0);
11906
- constrBox.set(boxMin, boxMax);
11907
- constrBox.applyMatrix4(this.matrixWorld);
11908
- const success = raycaster.ray.intersectBox(constrBox, target$2) !== null;
12329
+ iconBox.set(boxMin, boxMax);
12330
+ iconBox.applyMatrix4(this.matrixWorld);
12331
+ const success = raycaster.ray.intersectBox(iconBox, target$2) !== null;
11909
12332
  if (success) {
11910
12333
  intersects.push({
11911
12334
  distance: 0,
@@ -11921,10 +12344,10 @@ const Constraint$1 = props => {
11921
12344
  renderOrder: renderOrder - 0.5
11922
12345
  }, handlers, {
11923
12346
  userData: userData,
11924
- raycast: constraintRaycast
12347
+ raycast: raycast
11925
12348
  }), /*#__PURE__*/React__default.createElement("planeGeometry", {
11926
12349
  attach: "geometry",
11927
- args: [(constrSize + hoverZone) * scale, (constrSize + hoverZone) * scale, 1, 1]
12350
+ args: [(iconSize + hoverZone) * scale, (iconSize + hoverZone) * scale, 1, 1]
11928
12351
  }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", {
11929
12352
  attach: "material",
11930
12353
  transparent: true,
@@ -11934,7 +12357,7 @@ const Constraint$1 = props => {
11934
12357
  renderOrder: renderOrder - 0.5
11935
12358
  }, /*#__PURE__*/React__default.createElement("planeGeometry", {
11936
12359
  attach: "geometry",
11937
- args: [constrSize * scale, constrSize * scale, 1, 1]
12360
+ args: [iconSize * scale, iconSize * scale, 1, 1]
11938
12361
  }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", {
11939
12362
  attach: "material",
11940
12363
  side: THREE.DoubleSide,
@@ -11946,7 +12369,7 @@ const Constraint$1 = props => {
11946
12369
  renderOrder: renderOrder
11947
12370
  }, /*#__PURE__*/React__default.createElement("planeGeometry", {
11948
12371
  attach: "geometry",
11949
- args: [constrSize * scale, constrSize * scale, 1, 1]
12372
+ args: [iconSize * scale, iconSize * scale, 1, 1]
11950
12373
  }), /*#__PURE__*/React__default.createElement("meshBasicMaterial", {
11951
12374
  attach: "material",
11952
12375
  side: THREE.DoubleSide,
@@ -11975,23 +12398,78 @@ const getObjCenterPoint = (id, tree) => {
11975
12398
  }
11976
12399
  return new THREE.Vector3();
11977
12400
  };
11978
- const Constraints$1 = props => {
12401
+ const IconGroups = ({
12402
+ sketchId,
12403
+ ids,
12404
+ showAll
12405
+ }) => {
11979
12406
  const {
11980
12407
  drawingId,
11981
- pluginId
12408
+ pluginId,
12409
+ isActive
11982
12410
  } = React__default.useContext(ViewContext);
12411
+ const sketch = useDrawing(drawingId, drawing => drawing.structure.tree[sketchId]);
12412
+ const lastHoveredPos = useSketchState(drawingId, pluginId, state => state.interaction.lastHoveredPos);
12413
+ const constraintsToGeometry = useSketchState(drawingId, pluginId, state => state.interaction.constraintsToGeometry);
12414
+ const scale = useSketchState(drawingId, pluginId, state => state.scale);
12415
+ const positions = React__default.useMemo(() => {
12416
+ if (!sketch.children) {
12417
+ return {};
12418
+ }
12419
+ const tree = getDrawing(drawingId).structure.tree;
12420
+ const rows = [];
12421
+ ids.forEach(id => {
12422
+ let position = lastHoveredPos[id];
12423
+ if (!position || showAll) {
12424
+ var _constraintsToGeometr;
12425
+ const geometryId = (_constraintsToGeometr = constraintsToGeometry[id]) != null ? _constraintsToGeometr : getEntities(drawingId, id)[0];
12426
+ position = getObjCenterPoint(geometryId, tree);
12427
+ }
12428
+ const suitableRow = rows.find(row => row.position.distanceTo(position) < tolerance$7);
12429
+ if (suitableRow) {
12430
+ suitableRow.ids.push(id);
12431
+ } else {
12432
+ rows.push({
12433
+ position,
12434
+ ids: [id]
12435
+ });
12436
+ }
12437
+ });
12438
+ const positionsNew = {};
12439
+ rows.forEach(row => {
12440
+ row.ids.forEach((id, index) => {
12441
+ const offset = new THREE.Vector3((-(row.ids.length - 1) / 2 + index) * iconSize * 1.1 * scale, 3 * scale, 0);
12442
+ positionsNew[id] = row.position.clone().add(offset);
12443
+ });
12444
+ });
12445
+ return positionsNew;
12446
+ }, [drawingId, ids, showAll, constraintsToGeometry, scale, sketch.children, lastHoveredPos]);
12447
+ const csys = useDrawing(drawingId, drawing => sketchId >= 0 && drawing.structure.tree[sketchId].coordinateSystem);
12448
+ const transformMatrix = React__default.useMemo(() => csys ? MathUtils.convertToMatrix4(csys) : new THREE.Matrix4(), [csys]);
12449
+ const icons = /*#__PURE__*/React__default.createElement(React__default.Fragment, null, ids.map(id => /*#__PURE__*/React__default.createElement(Icon$3, {
12450
+ key: id,
12451
+ objId: id,
12452
+ position: positions[id]
12453
+ })));
12454
+ return isActive ? /*#__PURE__*/React__default.createElement(HUD, null, /*#__PURE__*/React__default.createElement("group", {
12455
+ matrix: transformMatrix,
12456
+ matrixAutoUpdate: false
12457
+ }, icons)) : icons;
12458
+ };
12459
+
12460
+ const Constraints$1 = ({
12461
+ sketchId
12462
+ }) => {
11983
12463
  const {
11984
- sketchId
11985
- } = props;
12464
+ drawingId,
12465
+ pluginId
12466
+ } = React__default.useContext(ViewContext);
11986
12467
  const sketch = useDrawing(drawingId, drawing => drawing.structure.tree[sketchId]);
11987
12468
  const selected = useDrawingArr(drawingId, d => d.interaction.selected);
11988
12469
  const alwaysShow = useSketchState(drawingId, pluginId, state => state.alwaysShowConstr);
11989
12470
  const showCoincidence = useSketchState(drawingId, pluginId, state => state.showCoincidence);
11990
12471
  const showRigidSets = useSketchState(drawingId, pluginId, s => s.showRigidSets);
11991
12472
  const highlighted = useSketchState(drawingId, pluginId, state => state.highlighted);
11992
- const lastPos = useSketchState(drawingId, pluginId, state => state.interaction.lastPos);
11993
- const constraintsToGeometry = useSketchState(drawingId, pluginId, state => state.constraintsToGeometry);
11994
- const scale = useSketchState(drawingId, pluginId, state => state.scale);
11995
12473
  const constraintIds = React__default.useMemo(() => {
11996
12474
  var _sketch$children;
11997
12475
  const tree = getDrawing(drawingId).structure.tree;
@@ -12019,50 +12497,11 @@ const Constraints$1 = props => {
12019
12497
 
12020
12498
  return result;
12021
12499
  }, [sketch.children, highlighted, selected, alwaysShow, showCoincidence, drawingId, showRigidSets]);
12022
- const constrPositions = React__default.useMemo(() => {
12023
- if (!sketch.children) {
12024
- return {};
12025
- }
12026
- const selConstrPositions = {};
12027
- const tree = getDrawing(drawingId).structure.tree;
12028
- selected.filter(info => is2DConstraint(tree[info.objectId]) && info.userData.hoverPos).forEach(info => selConstrPositions[info.objectId] = info.userData.hoverPos);
12029
- const constrRows = [];
12030
- constraintIds.forEach(id => {
12031
- const constraint = tree[id];
12032
- const geometryId = constraintsToGeometry[id] ? constraintsToGeometry[id] : getConstrEntities(drawingId, id)[0];
12033
- let position = selConstrPositions[id] || lastPos;
12034
- if (!position || alwaysShow) {
12035
- position = getObjCenterPoint(geometryId, tree);
12036
- }
12037
- const suitableRow = constrRows.find(row => row.position.distanceTo(position) < tolerance$7);
12038
- if (suitableRow) {
12039
- suitableRow.constrIds.push(constraint.id);
12040
- } else {
12041
- constrRows.push({
12042
- position,
12043
- constrIds: [constraint.id]
12044
- });
12045
- }
12046
- });
12047
- const constrPositionsNew = {};
12048
- constrRows.forEach(constrRow => {
12049
- constrRow.constrIds.forEach((constrId, index) => {
12050
- const offset = new THREE.Vector3((-(constrRow.constrIds.length - 1) / 2 + index) * constrSize * 1.1 * scale, 3 * scale, 0);
12051
- constrPositionsNew[constrId] = constrRow.position.clone().add(offset);
12052
- });
12053
- });
12054
- return constrPositionsNew;
12055
- }, [constraintIds, constraintsToGeometry, scale, drawingId, sketch.children, alwaysShow, selected, lastPos]);
12056
- const csys = useDrawing(drawingId, drawing => sketchId >= 0 && drawing.structure.tree[sketchId].coordinateSystem);
12057
- const transformMatrix = React__default.useMemo(() => csys ? MathUtils.convertToMatrix4(csys) : new THREE.Matrix4(), [csys]);
12058
- return /*#__PURE__*/React__default.createElement(HUD, null, /*#__PURE__*/React__default.createElement("group", {
12059
- matrix: transformMatrix,
12060
- matrixAutoUpdate: false
12061
- }, constraintIds.map(constraintId => /*#__PURE__*/React__default.createElement(Constraint$1, {
12062
- key: constraintId,
12063
- objId: constraintId,
12064
- position: constrPositions[constraintId]
12065
- }))));
12500
+ return /*#__PURE__*/React__default.createElement(IconGroups, {
12501
+ sketchId: sketchId,
12502
+ ids: constraintIds,
12503
+ showAll: alwaysShow
12504
+ });
12066
12505
  };
12067
12506
 
12068
12507
  class InfinityPlane extends THREE.Object3D {
@@ -12473,6 +12912,53 @@ const Circle = ({
12473
12912
  }));
12474
12913
  };
12475
12914
 
12915
+ const useSketchRegions = (drawingId, sketchId) => {
12916
+ const partId = getAncestorIdByClass(drawingId, sketchId, CCClasses.CCPart) || NOCCID;
12917
+ const geometrySetId = useDrawingCCId(drawingId, d => {
12918
+ var _d$structure$tree$par;
12919
+ return (_d$structure$tree$par = d.structure.tree[partId]) == null ? void 0 : _d$structure$tree$par.geometrySet;
12920
+ });
12921
+ const geometrySetChildren = useDrawingArr(drawingId, d => {
12922
+ var _d$structure$tree$geo;
12923
+ return (_d$structure$tree$geo = d.structure.tree[geometrySetId]) == null ? void 0 : _d$structure$tree$geo.children;
12924
+ });
12925
+ return React__default.useMemo(() => {
12926
+ const tree = getDrawing(drawingId).structure.tree;
12927
+ const ids = geometrySetChildren.filter(child => {
12928
+ var _tree$child$members, _tree$child$members$s;
12929
+ return isSketchRegion(tree[child]) && ((_tree$child$members = tree[child].members) == null ? void 0 : (_tree$child$members$s = _tree$child$members.sketch) == null ? void 0 : _tree$child$members$s.value) === sketchId;
12930
+ });
12931
+ return ids;
12932
+ }, [drawingId, sketchId, geometrySetChildren]);
12933
+ };
12934
+
12935
+ const Regions$1 = ({
12936
+ sketchId
12937
+ }) => {
12938
+ const {
12939
+ drawingId,
12940
+ pluginId
12941
+ } = React__default.useContext(ViewContext);
12942
+ const highlighted = useSketchState(drawingId, pluginId, state => state.highlighted);
12943
+ const selection = useDrawing(drawingId, d => d.selection.refs[d.selection.active || '']);
12944
+ const selItems = (selection == null ? void 0 : selection.items) || [];
12945
+ const selected = selItems.map(item => {
12946
+ var _item$data$object;
12947
+ return (_item$data$object = item.data.object) == null ? void 0 : _item$data$object.id;
12948
+ }).filter(item => item !== undefined);
12949
+ const regions = useSketchRegions(drawingId, sketchId);
12950
+ const displayedRegions = React__default.useMemo(() => {
12951
+ const tree = getDrawing(drawingId).structure.tree;
12952
+ return regions.filter(regionId => (highlighted.indexOf(regionId) !== -1 || selected.findIndex(selId => selId === regionId) !== -1) && (selection == null ? void 0 : selection.isSelectable(TreeObjScope, {
12953
+ object: tree[regionId]
12954
+ })));
12955
+ }, [drawingId, regions, highlighted, selection, selected]);
12956
+ return /*#__PURE__*/React__default.createElement(IconGroups, {
12957
+ sketchId: sketchId,
12958
+ ids: displayedRegions
12959
+ });
12960
+ };
12961
+
12476
12962
  function ownKeys$e(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12477
12963
  function _objectSpread$e(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$e(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$e(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12478
12964
 
@@ -12733,13 +13219,14 @@ const SketchPlane = ({
12733
13219
  }) => {
12734
13220
  const {
12735
13221
  drawingId,
12736
- pluginId
13222
+ pluginId,
13223
+ isActive
12737
13224
  } = React__default.useContext(ViewContext);
12738
13225
  const ref = React__default.useRef(null);
12739
13226
  const handlers = useSketchHandlers(objId);
12740
13227
  const step = useSketchState(drawingId, pluginId, state => state.step);
12741
13228
  useFrame(state => {
12742
- if (!ref.current) {
13229
+ if (!ref.current || !isActive) {
12743
13230
  return;
12744
13231
  }
12745
13232
  const sketchPlane = new THREE.Plane().setFromNormalAndCoplanarPoint(new THREE.Vector3(0, 1, 0), new THREE.Vector3(0, 0, 0)).applyMatrix4(ref.current.matrixWorld);
@@ -12758,7 +13245,7 @@ const SketchPlane = ({
12758
13245
  userData: {
12759
13246
  objId
12760
13247
  }
12761
- })), /*#__PURE__*/React__default.createElement(Grid, {
13248
+ })), isActive && /*#__PURE__*/React__default.createElement(Grid, {
12762
13249
  ref: ref,
12763
13250
  args: [10, 10],
12764
13251
  rotation: gridRotation,
@@ -12841,13 +13328,15 @@ const Sketch = ({
12841
13328
  drawnObjectsRef
12842
13329
  });
12843
13330
  }, [set]);
12844
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, isActive && /*#__PURE__*/React__default.createElement(SketchPlane, {
13331
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(SketchPlane, {
12845
13332
  objId: objId
12846
13333
  }), /*#__PURE__*/React__default.createElement(MergedWrapper, null, drawnObjects && /*#__PURE__*/React__default.createElement("group", {
12847
13334
  ref: drawnObjectsRef,
12848
13335
  name: "sketch"
12849
13336
  }, drawnObjects, isActive && containerIds && containerIds.length === 0 && /*#__PURE__*/React__default.createElement(Constraints$1, {
12850
13337
  sketchId: objId
13338
+ }), !isActive && /*#__PURE__*/React__default.createElement(Regions$1, {
13339
+ sketchId: objId
12851
13340
  }))));
12852
13341
  };
12853
13342
 
@@ -13564,30 +14053,133 @@ function useSetScale(drawingId, pluginId) {
13564
14053
  });
13565
14054
  }
13566
14055
 
14056
+ // Adds handlers to pluginState when sketcher changes its state to active / view only / inactive state
14057
+ function useHandlers(drawingId, pluginId) {
14058
+ const camControls = useThree(state => state.controls);
14059
+ const activePlugin = useDrawing(drawingId, drawing => drawing.plugin.active.feature);
14060
+ const isActive = activePlugin === pluginId;
14061
+ React__default.useEffect(() => {
14062
+ const handlers = {};
14063
+ let defaultHandler = undefined;
14064
+ if (isActive) {
14065
+ // Use all handlers in the drawing mode
14066
+ Object.values(HandlersConstructors).forEach(handlerConstr => {
14067
+ const handler = handlerConstr(drawingId, pluginId, camControls);
14068
+ handlers[handler.name] = handler;
14069
+ });
14070
+ defaultHandler = HandlersList.DRAG;
14071
+ } else {
14072
+ // Only use SSELECT handler in the view only mode
14073
+ const handler = HandlersConstructors.sSelect(drawingId, pluginId);
14074
+ handlers[handler.name] = handler;
14075
+ }
14076
+ const {
14077
+ set
14078
+ } = getPlugin(drawingId, pluginId);
14079
+ set({
14080
+ handlers,
14081
+ activeHandler: defaultHandler
14082
+ });
14083
+ }, [drawingId, pluginId, camControls, isActive]);
14084
+ }
14085
+ function useKeyHandlers(drawingId, pluginId) {
14086
+ // Add key handlers to the window
14087
+ React__default.useEffect(() => {
14088
+ function keyupHandler(e) {
14089
+ if (e.repeat) return; // There is no need to fire handlers multiple times
14090
+
14091
+ const pluginState = getSketchState(drawingId, pluginId);
14092
+ const curHandlerName = pluginState.activeHandler;
14093
+ if (curHandlerName === undefined) {
14094
+ return;
14095
+ }
14096
+ const handler = pluginState.handlers[curHandlerName];
14097
+ if (e.code === 'Escape') {
14098
+ var _handler$keyHandlers;
14099
+ const escapeH = (_handler$keyHandlers = handler.keyHandlers) == null ? void 0 : _handler$keyHandlers.escape;
14100
+ const switchToDrag = escapeH !== undefined ? escapeH(e) : true;
14101
+ if (switchToDrag) {
14102
+ // If handler doesn't have escape handler or escape handler returns true, the drag handler will be enabled.
14103
+ const {
14104
+ set
14105
+ } = getPlugin(drawingId, pluginId);
14106
+ set({
14107
+ activeHandler: HandlersList.DRAG
14108
+ });
14109
+ }
14110
+ } else {
14111
+ if (handler.keyHandlers && handler.keyHandlers.keyup) {
14112
+ handler.keyHandlers.keyup(e);
14113
+ }
14114
+ }
14115
+ }
14116
+ function keydownHandler(e) {
14117
+ if (e.repeat) return; // There is no need to fire handlers multiple times
14118
+
14119
+ const pluginState = getSketchState(drawingId, pluginId);
14120
+ const curHandlerName = pluginState.activeHandler;
14121
+ if (curHandlerName === undefined) {
14122
+ return;
14123
+ }
14124
+ const handler = pluginState.handlers[curHandlerName];
14125
+ if (handler.keyHandlers && handler.keyHandlers.keydown) {
14126
+ handler.keyHandlers.keydown(e);
14127
+ }
14128
+ }
14129
+ window.addEventListener('keyup', keyupHandler);
14130
+ window.addEventListener('keydown', keydownHandler);
14131
+ return () => {
14132
+ window.removeEventListener('keyup', keyupHandler);
14133
+ window.removeEventListener('keydown', keydownHandler);
14134
+ };
14135
+ }, [drawingId, pluginId]);
14136
+ }
14137
+ function useSwitchHandlers(drawingId, pluginId) {
14138
+ const activeHandler = useSketchState(drawingId, pluginId, state => state.activeHandler);
14139
+ const currentHandler = React__default.useRef();
14140
+ React__default.useEffect(() => {
14141
+ // Switching handlers (call onActivate and onDeactivate)
14142
+ const handlers = getSketchState(drawingId, pluginId).handlers;
14143
+ const switchHandlers = async () => {
14144
+ if (currentHandler.current) {
14145
+ const h = handlers[currentHandler.current];
14146
+ h && h.onDeactivate && (await h.onDeactivate());
14147
+ }
14148
+ if (activeHandler) {
14149
+ const handler = handlers[activeHandler];
14150
+ handler && handler.onActivate && handler.onActivate();
14151
+ }
14152
+ currentHandler.current = activeHandler;
14153
+ };
14154
+ switchHandlers();
14155
+ }, [drawingId, pluginId, activeHandler]);
14156
+ }
14157
+
13567
14158
  // Turn off all handlers and hide sketch selection if global selection is active
13568
- function useHandleGSelection(drawingId, pluginId, activeHandler) {
14159
+ function useHandleSSelection(drawingId, pluginId) {
13569
14160
  const {
13570
14161
  set
13571
14162
  } = getPlugin(drawingId, pluginId);
13572
14163
  const setSelected = getDrawing(drawingId).api.interaction.setSelected;
13573
14164
  const activeSelection = useDrawing(drawingId, d => d.selection.active);
13574
- const prevHandler = React__default.useRef();
14165
+ const activeHandler = useSketchState(drawingId, pluginId, state => state.activeHandler);
14166
+ const prevHandler = React__default.useRef(null);
13575
14167
  const prevSelected = React__default.useRef([]);
13576
14168
  React__default.useEffect(() => {
13577
14169
  // Disable all handlers if global selection is active
13578
- if (activeSelection && activeSelection !== 'UseRef' && !prevHandler.current) {
14170
+ if (activeSelection && activeSelection !== 'UseRef' && prevHandler.current === null) {
13579
14171
  prevHandler.current = activeHandler;
13580
14172
  prevSelected.current = getDrawing(drawingId).interaction.selected || [];
13581
14173
  setSelected([]);
13582
14174
  set({
13583
- activeHandler: undefined
14175
+ activeHandler: HandlersList.SSELECT
13584
14176
  });
13585
- } else if (!activeSelection && prevHandler.current) {
14177
+ } else if (!activeSelection && prevHandler.current !== null) {
13586
14178
  setSelected(prevSelected.current);
13587
14179
  set({
13588
14180
  activeHandler: prevHandler.current
13589
14181
  });
13590
- prevHandler.current = undefined;
14182
+ prevHandler.current = null;
13591
14183
  }
13592
14184
  }, [drawingId, pluginId, activeSelection, activeHandler, set, setSelected]);
13593
14185
  }
@@ -13643,7 +14235,8 @@ function useInteractionReset(drawingId, pluginId) {
13643
14235
  state_.interaction = {
13644
14236
  cycle: 0,
13645
14237
  objects: cursorOverValid,
13646
- lastPos: undefined
14238
+ lastHoveredPos: {},
14239
+ constraintsToGeometry: {}
13647
14240
  };
13648
14241
  }
13649
14242
  if (state_.highlighted || state_.interaction) {
@@ -13651,6 +14244,30 @@ function useInteractionReset(drawingId, pluginId) {
13651
14244
  }
13652
14245
  }, [drawingId, pluginId, children]);
13653
14246
  }
14247
+ function useStateReset(drawingId, pluginId) {
14248
+ React__default.useEffect(() => {
14249
+ return () => {
14250
+ var _getPlugin;
14251
+ return (_getPlugin = getPlugin(drawingId, pluginId)) == null ? void 0 : _getPlugin.set({
14252
+ activeHandler: undefined,
14253
+ handlers: {},
14254
+ tmpObjects: {},
14255
+ highlighted: [],
14256
+ interaction: {
14257
+ cycle: 0,
14258
+ objects: [],
14259
+ lastHoveredPos: {},
14260
+ constraintsToGeometry: {}
14261
+ },
14262
+ isDragged: false,
14263
+ mousePos: undefined,
14264
+ drawnObjectsRef: undefined,
14265
+ rubberBandRectangle: undefined,
14266
+ cursor: null
14267
+ });
14268
+ };
14269
+ }, [drawingId, pluginId]);
14270
+ }
13654
14271
 
13655
14272
  // Changes cursor if it's set in plugin state
13656
14273
  function useChangeCursor() {
@@ -13671,101 +14288,9 @@ const DrawingMode = ({
13671
14288
  }) => {
13672
14289
  const sketchId = usePlugin(drawingId, pluginId, plugin => plugin.objectId);
13673
14290
  // TODO: what about useSketchPlugin which return only sketcher state and never undefined?
13674
- const {
13675
- set
13676
- } = getPlugin(drawingId, pluginId);
14291
+
13677
14292
  useChangeCursor();
13678
14293
  useOverrideGeometryColor('sketch', 10, overrideValues);
13679
- const camControls = useThree(state => state.controls);
13680
-
13681
- // Add handlers to pluginState when sketcher is enabled
13682
- React__default.useEffect(() => {
13683
- const handlers = {};
13684
- Object.values(HandlersConstructors).forEach(handlerConstr => {
13685
- const handler = handlerConstr(drawingId, pluginId, camControls);
13686
- handlers[handler.name] = handler;
13687
- });
13688
- set({
13689
- handlers
13690
- });
13691
- function keyupHandler(e) {
13692
- if (e.repeat) return; // There is no need to fire handlers multiple times
13693
-
13694
- const pluginState = getSketchState(drawingId, pluginId);
13695
- const curHandlerName = pluginState.activeHandler;
13696
- if (curHandlerName === undefined) {
13697
- return;
13698
- }
13699
- const handler = pluginState.handlers[curHandlerName];
13700
- if (e.code === 'Escape') {
13701
- var _handler$keyHandlers;
13702
- const escapeH = (_handler$keyHandlers = handler.keyHandlers) == null ? void 0 : _handler$keyHandlers.escape;
13703
- const switchToDrag = escapeH !== undefined ? escapeH(e) : true;
13704
- if (switchToDrag) {
13705
- // If handler doesn't have escape handler or escape handler returns true, the drag handler will be enabled.
13706
- set({
13707
- activeHandler: HandlersList.DRAG
13708
- });
13709
- }
13710
- } else {
13711
- if (handler.keyHandlers && handler.keyHandlers.keyup) {
13712
- handler.keyHandlers.keyup(e);
13713
- }
13714
- }
13715
- }
13716
- function keydownHandler(e) {
13717
- if (e.repeat) return; // There is no need to fire handlers multiple times
13718
-
13719
- const pluginState = getSketchState(drawingId, pluginId);
13720
- const curHandlerName = pluginState.activeHandler;
13721
- if (curHandlerName === undefined) {
13722
- return;
13723
- }
13724
- const handler = pluginState.handlers[curHandlerName];
13725
- if (handler.keyHandlers && handler.keyHandlers.keydown) {
13726
- handler.keyHandlers.keydown(e);
13727
- }
13728
- }
13729
- window.addEventListener('keyup', keyupHandler);
13730
- window.addEventListener('keydown', keydownHandler);
13731
- return () => {
13732
- window.removeEventListener('keyup', keyupHandler);
13733
- window.removeEventListener('keydown', keydownHandler);
13734
- };
13735
- }, [drawingId, pluginId, set, camControls]);
13736
-
13737
- // Enable drag handler by default.
13738
- React__default.useEffect(() => {
13739
- set({
13740
- activeHandler: HandlersList.DRAG
13741
- });
13742
- return () => {
13743
- const plugin = getPlugin(drawingId, pluginId);
13744
- plugin && plugin.set({
13745
- activeHandler: undefined
13746
- });
13747
- };
13748
- }, [drawingId, pluginId, set]);
13749
- useSetScale(drawingId, pluginId);
13750
- const activeHandler = useSketchState(drawingId, pluginId, state => state.activeHandler);
13751
- const currentHandler = React__default.useRef();
13752
- React__default.useEffect(() => {
13753
- // Switching handlers (call onActivate and onDeactivate)
13754
- const handlers = getSketchState(drawingId, pluginId).handlers;
13755
- const switchHandlers = async () => {
13756
- if (currentHandler.current) {
13757
- const h = handlers[currentHandler.current];
13758
- h.onDeactivate && (await h.onDeactivate());
13759
- }
13760
- if (activeHandler) {
13761
- const handler = handlers[activeHandler];
13762
- handler && handler.onActivate && handler.onActivate();
13763
- }
13764
- currentHandler.current = activeHandler;
13765
- };
13766
- switchHandlers();
13767
- }, [drawingId, pluginId, activeHandler]);
13768
- useHandleGSelection(drawingId, pluginId, activeHandler);
13769
14294
  useUseRef(drawingId, sketchId);
13770
14295
  useInteractionReset(drawingId, pluginId);
13771
14296
  const dimId = useDimensionSetId(drawingId, sketchId);
@@ -13784,7 +14309,6 @@ const ViewOnlyMode = ({
13784
14309
  pluginId
13785
14310
  }) => {
13786
14311
  const sketchId = usePlugin(drawingId, pluginId, plugin => plugin.objectId);
13787
- useSetScale(drawingId, pluginId);
13788
14312
 
13789
14313
  // Transform matrix is applied in buerli/packages/react/src/components/Plugin.tsx -> View component for every plugin graphics
13790
14314
  // But it makes no sense to apply matrix to HUD. So we have to do it here.
@@ -13813,6 +14337,12 @@ const ViewImpl$e = ({
13813
14337
  const planeSelection = planeRef === 0;
13814
14338
  const activePlugin = useDrawing(drawingId, drawing => drawing.plugin.active.feature);
13815
14339
  const isActive = activePlugin === pluginId;
14340
+ useHandlers(drawingId, pluginId);
14341
+ useKeyHandlers(drawingId, pluginId);
14342
+ useSwitchHandlers(drawingId, pluginId);
14343
+ useHandleSSelection(drawingId, pluginId);
14344
+ useSetScale(drawingId, pluginId);
14345
+ useStateReset(drawingId, pluginId);
13816
14346
  const contextValue = React__default.useMemo(() => ({
13817
14347
  drawingId,
13818
14348
  pluginId,
@@ -15136,7 +15666,7 @@ const AddRegion = () => {
15136
15666
  };
15137
15667
  var RegionMembers;
15138
15668
  (function (RegionMembers) {
15139
- RegionMembers["Curves"] = "curves";
15669
+ RegionMembers["Selected"] = "selected";
15140
15670
  })(RegionMembers || (RegionMembers = {}));
15141
15671
  const EditRegion = ({
15142
15672
  sketchId,
@@ -15149,7 +15679,7 @@ const EditRegion = ({
15149
15679
  const {
15150
15680
  drawingId
15151
15681
  } = React__default.useContext(RootContext);
15152
- const curves = useRefsParam(drawingId, regionId, RegionMembers.Curves);
15682
+ const curves = useRefsParam(drawingId, regionId, RegionMembers.Selected);
15153
15683
  const name = useDrawingStr(drawingId, d => {
15154
15684
  var _d$structure$tree$reg;
15155
15685
  return (_d$structure$tree$reg = d.structure.tree[regionId]) == null ? void 0 : _d$structure$tree$reg.name;
@@ -15218,7 +15748,7 @@ const EditRegion = ({
15218
15748
  menuInfo: menuInfo,
15219
15749
  caption: "Region",
15220
15750
  icon: /*#__PURE__*/React__default.createElement(Icon$2, {
15221
- url: img$J,
15751
+ url: img$K,
15222
15752
  size: 14
15223
15753
  }),
15224
15754
  onHide: onHide,
@@ -15257,23 +15787,7 @@ const Regions = () => {
15257
15787
  pluginId
15258
15788
  } = React__default.useContext(RootContext);
15259
15789
  const sketchId = usePlugin(drawingId, pluginId, plugin => plugin.objectId);
15260
- const partId = getAncestorIdByClass(drawingId, sketchId, CCClasses.CCPart) || NOCCID;
15261
- const geometrySetId = useDrawingCCId(drawingId, d => {
15262
- var _d$structure$tree$par;
15263
- return (_d$structure$tree$par = d.structure.tree[partId]) == null ? void 0 : _d$structure$tree$par.geometrySet;
15264
- });
15265
- const geometrySetChildren = useDrawingArr(drawingId, d => {
15266
- var _d$structure$tree$geo;
15267
- return (_d$structure$tree$geo = d.structure.tree[geometrySetId]) == null ? void 0 : _d$structure$tree$geo.children;
15268
- });
15269
- const regions = React__default.useMemo(() => {
15270
- const tree = getDrawing(drawingId).structure.tree;
15271
- const ids = geometrySetChildren.filter(child => {
15272
- var _tree$child$members, _tree$child$members$s;
15273
- return ccUtils.base.isA(tree[child].class, CCClasses.CCSketchRegion) && ((_tree$child$members = tree[child].members) == null ? void 0 : (_tree$child$members$s = _tree$child$members.sketch) == null ? void 0 : _tree$child$members$s.value) === sketchId;
15274
- });
15275
- return ids;
15276
- }, [drawingId, sketchId, geometrySetChildren]);
15790
+ const regions = useSketchRegions(drawingId, sketchId);
15277
15791
  const editedRegions = useEditedRegionsParam();
15278
15792
  const updateAvailable = React__default.useMemo(() => {
15279
15793
  return editedRegions.value.every(region => region.curves.length > 0) && editedRegions.isChanged();
@@ -15394,7 +15908,9 @@ const RootImpl$i = ({
15394
15908
  React__default.useEffect(() => {
15395
15909
  return () => {
15396
15910
  var _getPlugin;
15397
- return (_getPlugin = getPlugin(drawingId, pluginId)) == null ? void 0 : _getPlugin.set(getInitialState());
15911
+ return (_getPlugin = getPlugin(drawingId, pluginId)) == null ? void 0 : _getPlugin.set({
15912
+ needsUpdate: 0
15913
+ });
15398
15914
  };
15399
15915
  }, [drawingId, pluginId]);
15400
15916
  const Component = planeSelected ? SketchMode : PlaneSelectionMode;
@@ -15608,22 +16124,6 @@ const WorkAxisObj = ({
15608
16124
  }));
15609
16125
  };
15610
16126
 
15611
- const getHighlightedColor = (isGHovered, isGSelected, isSHovered, isSSelected) => {
15612
- if (isSHovered) {
15613
- return '#3280ff';
15614
- }
15615
- if (isSSelected) {
15616
- return '#8040c0';
15617
- }
15618
- if (isGHovered) {
15619
- return 'green';
15620
- }
15621
- if (isGSelected) {
15622
- return 'red';
15623
- }
15624
- return undefined;
15625
- };
15626
-
15627
16127
  const tolerance$4 = 1e-6;
15628
16128
  function getBaseColor(direction, type) {
15629
16129
  if (direction.distanceTo(new THREE.Vector3(1, 0, 0)) < tolerance$4 && type === WorkAxisType.WA_FIXED) {
@@ -18592,11 +19092,11 @@ const ccClassHeaderMap = {
18592
19092
  },
18593
19093
  [CCClasses.CCExtrusion]: {
18594
19094
  name: 'Extrusion',
18595
- icon: img$O
19095
+ icon: img$P
18596
19096
  },
18597
19097
  [CCClasses.CCRevolve]: {
18598
19098
  name: 'Revolve',
18599
- icon: img$N
19099
+ icon: img$O
18600
19100
  },
18601
19101
  [CCClasses.CCUnion]: {
18602
19102
  name: 'Boolean',
@@ -18636,7 +19136,7 @@ const ccClassHeaderMap = {
18636
19136
  },
18637
19137
  [CCClasses.CCMirror]: {
18638
19138
  name: 'Mirror',
18639
- icon: img$z
19139
+ icon: img$A
18640
19140
  },
18641
19141
  [CCClasses.CCTranslation]: {
18642
19142
  name: 'Translation',
@@ -22801,7 +23301,21 @@ const useVisibleSolids = drawingId => {
22801
23301
  solids = solidsIds;
22802
23302
  }
22803
23303
  const solidsUnique = solids.filter((id, i) => solids.indexOf(id) === i);
22804
- return solidsUnique;
23304
+
23305
+ // filter out entities of composite curves
23306
+ const filteredSolids = [];
23307
+ const cache = useDrawing(drawingId, d => d.geometry.cache);
23308
+ if (tree && cache) {
23309
+ solidsUnique.forEach(solidId => {
23310
+ var _cache$solidId, _tree$ccEntityId;
23311
+ const ccEntityId = (_cache$solidId = cache[solidId]) == null ? void 0 : _cache$solidId.container.ownerId; // CC_CurveEntity id
23312
+ const ccOperation = (_tree$ccEntityId = tree[ccEntityId]) == null ? void 0 : _tree$ccEntityId.parent; // CC_CompositeCurve id
23313
+ if (ccOperation && tree[ccOperation].class !== CCClasses.CCCompositeCurve) {
23314
+ filteredSolids.push(solidId);
23315
+ }
23316
+ });
23317
+ }
23318
+ return filteredSolids;
22805
23319
  };
22806
23320
 
22807
23321
  const mateNames = ['firstRefMate', 'secondRefMate'];
@@ -23017,7 +23531,7 @@ const Constraint = ({
23017
23531
  menuInfo: menuInfo,
23018
23532
  caption: "Constraint",
23019
23533
  icon: /*#__PURE__*/React__default.createElement(Icon$2, {
23020
- url: img$T,
23534
+ url: img$U,
23021
23535
  size: 14
23022
23536
  }),
23023
23537
  onHide: onHide,
@@ -25324,6 +25838,8 @@ const SideBar = ({
25324
25838
  var css_248z = ".toolbar-dropdown .ant-dropdown-menu-root {\n margin-left: -24px;\n}\n";
25325
25839
  styleInject(css_248z);
25326
25840
 
25841
+ var img$8 = "data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8'%3f%3e%3csvg width='100' height='100' version='1.1' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3e %3cg stroke='black' stroke-width='5'%3e %3cpath d='m20 20 20 20c-37.015 3.8681-19.657 36.676 0 30l20-40c27.5 15 15 15 0 30l20 20' fill='none' stroke-linecap='round' stroke-linejoin='round' style='paint-order:stroke markers fill'/%3e %3cpath d='m88 80a8 8 0 0 1-8 8 8 8 0 0 1-8-8 8 8 0 0 1 8-8 8 8 0 0 1 8 8zm-60-60a8 8 0 0 1-8 8 8 8 0 0 1-8-8 8 8 0 0 1 8-8 8 8 0 0 1 8 8z' fill='white' style='paint-order:markers fill stroke'/%3e %3cpath d='m63 60a3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3zm0-30a3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3zm-20 40a3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3zm0-30a3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3z' style='paint-order:markers fill stroke'/%3e %3c/g%3e%3c/svg%3e";
25842
+
25327
25843
  const Icon = ({
25328
25844
  url
25329
25845
  }) => {
@@ -25393,13 +25909,13 @@ const PartModeCmds = (drawingId, rootId) => {
25393
25909
  Solid: [{
25394
25910
  label: 'Extrusion',
25395
25911
  icon: /*#__PURE__*/React__default.createElement(Icon, {
25396
- url: img$O
25912
+ url: img$P
25397
25913
  }),
25398
25914
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCExtrusion, 'Extrusion'))
25399
25915
  }, {
25400
25916
  label: 'Revolve',
25401
25917
  icon: /*#__PURE__*/React__default.createElement(Icon, {
25402
- url: img$N
25918
+ url: img$O
25403
25919
  }),
25404
25920
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCRevolve, 'Revolve'))
25405
25921
  }, {
@@ -25457,7 +25973,7 @@ const PartModeCmds = (drawingId, rootId) => {
25457
25973
  }, {
25458
25974
  label: 'Mirror',
25459
25975
  icon: /*#__PURE__*/React__default.createElement(Icon, {
25460
- url: img$z
25976
+ url: img$A
25461
25977
  }),
25462
25978
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCMirror, 'Mirror'))
25463
25979
  }],
@@ -25512,6 +26028,13 @@ const PartModeCmds = (drawingId, rootId) => {
25512
26028
  }),
25513
26029
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCImport, 'Import'))
25514
26030
  },
26031
+ CompositeCurve: {
26032
+ label: 'Composite Curve',
26033
+ icon: /*#__PURE__*/React__default.createElement(Icon, {
26034
+ url: img$8
26035
+ }),
26036
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, CCClasses.CCCompositeCurve, 'Composite Curve'))
26037
+ },
25515
26038
  Deletion: {
25516
26039
  label: 'Delete Entity',
25517
26040
  icon: /*#__PURE__*/React__default.createElement(Icon, {
@@ -25522,13 +26045,11 @@ const PartModeCmds = (drawingId, rootId) => {
25522
26045
  };
25523
26046
  };
25524
26047
 
25525
- var img$8 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M40.375 51.4062H21.2812V71.5H15.2812V26H43.4688V30.9375H21.2812V46.5H40.375V51.4062ZM85.6562 50.2188C85.6562 54.6771 84.9062 58.5729 83.4062 61.9062C81.9062 65.2188 79.7812 67.75 77.0312 69.5C74.2812 71.25 71.0729 72.125 67.4062 72.125C63.8229 72.125 60.6458 71.25 57.875 69.5C55.1042 67.7292 52.9479 65.2188 51.4062 61.9688C49.8854 58.6979 49.1042 54.9167 49.0625 50.625V47.3438C49.0625 42.9688 49.8229 39.1042 51.3438 35.75C52.8646 32.3958 55.0104 29.8333 57.7812 28.0625C60.5729 26.2708 63.7604 25.375 67.3438 25.375C70.9896 25.375 74.1979 26.2604 76.9688 28.0312C79.7604 29.7812 81.9062 32.3333 83.4062 35.6875C84.9062 39.0208 85.6562 42.9062 85.6562 47.3438V50.2188ZM79.6875 47.2812C79.6875 41.8854 78.6042 37.75 76.4375 34.875C74.2708 31.9792 71.2396 30.5312 67.3438 30.5312C63.5521 30.5312 60.5625 31.9792 58.375 34.875C56.2083 37.75 55.0938 41.75 55.0312 46.875V50.2188C55.0312 55.4479 56.125 59.5625 58.3125 62.5625C60.5208 65.5417 63.5521 67.0312 67.4062 67.0312C71.2812 67.0312 74.2812 65.625 76.4062 62.8125C78.5312 59.9792 79.625 55.9271 79.6875 50.6562V47.2812Z' fill='%235E5E5E'/%3e%3cpath d='M40.375 51.4062V52.4062H41.375V51.4062H40.375ZM21.2812 51.4062V50.4062H20.2812V51.4062H21.2812ZM21.2812 71.5V72.5H22.2812V71.5H21.2812ZM15.2812 71.5H14.2812V72.5H15.2812V71.5ZM15.2812 26V25H14.2812V26H15.2812ZM43.4688 26H44.4688V25H43.4688V26ZM43.4688 30.9375V31.9375H44.4688V30.9375H43.4688ZM21.2812 30.9375V29.9375H20.2812V30.9375H21.2812ZM21.2812 46.5H20.2812V47.5H21.2812V46.5ZM40.375 46.5H41.375V45.5H40.375V46.5ZM40.375 50.4062H21.2812V52.4062H40.375V50.4062ZM20.2812 51.4062V71.5H22.2812V51.4062H20.2812ZM21.2812 70.5H15.2812V72.5H21.2812V70.5ZM16.2812 71.5V26H14.2812V71.5H16.2812ZM15.2812 27H43.4688V25H15.2812V27ZM42.4688 26V30.9375H44.4688V26H42.4688ZM43.4688 29.9375H21.2812V31.9375H43.4688V29.9375ZM20.2812 30.9375V46.5H22.2812V30.9375H20.2812ZM21.2812 47.5H40.375V45.5H21.2812V47.5ZM39.375 46.5V51.4062H41.375V46.5H39.375ZM83.4062 61.9062L84.3172 62.3188L84.3182 62.3166L83.4062 61.9062ZM57.875 69.5L57.3365 70.3426L57.341 70.3455L57.875 69.5ZM51.4062 61.9688L50.4995 62.3904L50.5027 62.3973L51.4062 61.9688ZM49.0625 50.625H48.0625L48.0625 50.6347L49.0625 50.625ZM57.7812 28.0625L58.3198 28.9051L58.3214 28.9041L57.7812 28.0625ZM76.9688 28.0312L76.4302 28.8739L76.4376 28.8785L76.9688 28.0312ZM83.4062 35.6875L82.4934 36.0957L82.4943 36.0979L83.4062 35.6875ZM76.4375 34.875L75.6368 35.4741L75.6389 35.4769L76.4375 34.875ZM58.375 34.875L57.5771 34.2722L57.5764 34.2731L58.375 34.875ZM55.0312 46.875L54.0312 46.8628V46.875H55.0312ZM58.3125 62.5625L57.5045 63.1517L57.5091 63.158L58.3125 62.5625ZM76.4062 62.8125L77.2041 63.4153L77.2062 63.4125L76.4062 62.8125ZM79.6875 50.6562L80.6875 50.6681V50.6562H79.6875ZM84.6562 50.2188C84.6562 54.566 83.925 58.3167 82.4943 61.4959L84.3182 62.3166C85.8875 58.8292 86.6562 54.7882 86.6562 50.2188H84.6562ZM82.4953 61.4937C81.0659 64.6504 79.0619 67.0225 76.4944 68.6563L77.5681 70.3437C80.5006 68.4775 82.7466 65.7871 84.3172 62.3188L82.4953 61.4937ZM76.4944 68.6563C73.9243 70.2919 70.9072 71.125 67.4062 71.125V73.125C71.2386 73.125 74.6382 72.2081 77.5681 70.3437L76.4944 68.6563ZM67.4062 71.125C63.9936 71.125 61.0052 70.2942 58.409 68.6545L57.341 70.3455C60.2865 72.2058 63.6522 73.125 67.4062 73.125V71.125ZM58.4135 68.6574C55.8155 66.997 53.7788 64.6371 52.3098 61.5402L50.5027 62.3973C52.117 65.8004 54.3928 68.4613 57.3365 70.3426L58.4135 68.6574ZM52.313 61.5471C50.8625 58.4276 50.103 54.7912 50.0625 50.6153L48.0625 50.6347C48.1053 55.0421 48.9083 58.9683 50.4995 62.3904L52.313 61.5471ZM50.0625 50.625V47.3438H48.0625V50.625H50.0625ZM50.0625 47.3438C50.0625 43.0848 50.8025 39.3653 52.2545 36.163L50.433 35.337C48.8433 38.843 48.0625 42.8527 48.0625 47.3438H50.0625ZM52.2545 36.163C53.7053 32.9632 55.7311 30.5595 58.3198 28.9051L57.2427 27.2199C54.2898 29.1071 52.0238 31.8285 50.433 35.337L52.2545 36.163ZM58.3214 28.9041C60.9389 27.2242 63.9359 26.375 67.3438 26.375V24.375C63.5849 24.375 60.2069 25.3175 57.2411 27.2209L58.3214 28.9041ZM67.3438 26.375C70.8202 26.375 73.8374 27.2168 76.4302 28.8739L77.5073 27.1886C74.5584 25.304 71.159 24.375 67.3438 24.375V26.375ZM76.4376 28.8785C79.0423 30.5113 81.0646 32.9009 82.4934 36.0957L84.3191 35.2793C82.7479 31.7658 80.4785 29.0512 77.4999 27.184L76.4376 28.8785ZM82.4943 36.0979C83.9252 39.2776 84.6562 43.0181 84.6562 47.3438H86.6562C86.6562 42.7944 85.8873 38.764 84.3182 35.2771L82.4943 36.0979ZM84.6562 47.3438V50.2188H86.6562V47.3438H84.6562ZM80.6875 47.2812C80.6875 41.7713 79.5843 37.389 77.2361 34.2731L75.6389 35.4769C77.6241 38.111 78.6875 41.9995 78.6875 47.2812H80.6875ZM77.2382 34.2759C74.8664 31.1059 71.5265 29.5312 67.3438 29.5312V31.5312C70.9527 31.5312 73.6753 32.8524 75.6368 35.4741L77.2382 34.2759ZM67.3438 29.5312C63.2549 29.5312 59.9632 31.1134 57.5771 34.2722L59.1729 35.4778C61.1618 32.8449 63.8492 31.5312 67.3438 31.5312V29.5312ZM57.5764 34.2731C55.2374 37.3768 54.0954 41.6121 54.0313 46.8628L56.0312 46.8872C56.0921 41.8879 57.1792 38.1232 59.1736 35.4769L57.5764 34.2731ZM54.0312 46.875V50.2188H56.0312V46.875H54.0312ZM54.0312 50.2188C54.0312 55.5758 55.1505 59.9233 57.5045 63.1517L59.1205 61.9733C57.0995 59.2017 56.0312 55.3201 56.0312 50.2188H54.0312ZM57.5091 63.158C59.9146 66.4031 63.25 68.0312 67.4062 68.0312V66.0312C63.8542 66.0312 61.127 64.6802 59.1159 61.967L57.5091 63.158ZM67.4062 68.0312C71.5589 68.0312 74.8695 66.5053 77.2041 63.4153L75.6084 62.2097C73.693 64.7447 71.0036 66.0312 67.4062 66.0312V68.0312ZM77.2062 63.4125C79.5072 60.3445 80.6236 56.0527 80.6874 50.6681L78.6876 50.6444C78.6264 55.8015 77.5553 59.6138 75.6063 62.2125L77.2062 63.4125ZM80.6875 50.6562V47.2812H78.6875V50.6562H80.6875Z' fill='%235E5E5E'/%3e%3c/svg%3e";
25526
-
25527
- var img$7 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M62.375 51.4062H43.2812V71.5H37.2812V26H65.4688V30.9375H43.2812V46.5H62.375V51.4062Z' fill='%235E5E5E'/%3e%3cpath d='M62.375 51.4062V52.4062H63.375V51.4062H62.375ZM43.2812 51.4062V50.4062H42.2812V51.4062H43.2812ZM43.2812 71.5V72.5H44.2812V71.5H43.2812ZM37.2812 71.5H36.2812V72.5H37.2812V71.5ZM37.2812 26V25H36.2812V26H37.2812ZM65.4688 26H66.4688V25H65.4688V26ZM65.4688 30.9375V31.9375H66.4688V30.9375H65.4688ZM43.2812 30.9375V29.9375H42.2812V30.9375H43.2812ZM43.2812 46.5H42.2812V47.5H43.2812V46.5ZM62.375 46.5H63.375V45.5H62.375V46.5ZM62.375 50.4062H43.2812V52.4062H62.375V50.4062ZM42.2812 51.4062V71.5H44.2812V51.4062H42.2812ZM43.2812 70.5H37.2812V72.5H43.2812V70.5ZM38.2812 71.5V26H36.2812V71.5H38.2812ZM37.2812 27H65.4688V25H37.2812V27ZM64.4688 26V30.9375H66.4688V26H64.4688ZM65.4688 29.9375H43.2812V31.9375H65.4688V29.9375ZM42.2812 30.9375V46.5H44.2812V30.9375H42.2812ZM43.2812 47.5H62.375V45.5H43.2812V47.5ZM61.375 46.5V51.4062H63.375V46.5H61.375Z' fill='%235E5E5E'/%3e%3c/svg%3e";
26048
+ var img$7 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M40.375 51.4062H21.2812V71.5H15.2812V26H43.4688V30.9375H21.2812V46.5H40.375V51.4062ZM85.6562 50.2188C85.6562 54.6771 84.9062 58.5729 83.4062 61.9062C81.9062 65.2188 79.7812 67.75 77.0312 69.5C74.2812 71.25 71.0729 72.125 67.4062 72.125C63.8229 72.125 60.6458 71.25 57.875 69.5C55.1042 67.7292 52.9479 65.2188 51.4062 61.9688C49.8854 58.6979 49.1042 54.9167 49.0625 50.625V47.3438C49.0625 42.9688 49.8229 39.1042 51.3438 35.75C52.8646 32.3958 55.0104 29.8333 57.7812 28.0625C60.5729 26.2708 63.7604 25.375 67.3438 25.375C70.9896 25.375 74.1979 26.2604 76.9688 28.0312C79.7604 29.7812 81.9062 32.3333 83.4062 35.6875C84.9062 39.0208 85.6562 42.9062 85.6562 47.3438V50.2188ZM79.6875 47.2812C79.6875 41.8854 78.6042 37.75 76.4375 34.875C74.2708 31.9792 71.2396 30.5312 67.3438 30.5312C63.5521 30.5312 60.5625 31.9792 58.375 34.875C56.2083 37.75 55.0938 41.75 55.0312 46.875V50.2188C55.0312 55.4479 56.125 59.5625 58.3125 62.5625C60.5208 65.5417 63.5521 67.0312 67.4062 67.0312C71.2812 67.0312 74.2812 65.625 76.4062 62.8125C78.5312 59.9792 79.625 55.9271 79.6875 50.6562V47.2812Z' fill='%235E5E5E'/%3e%3cpath d='M40.375 51.4062V52.4062H41.375V51.4062H40.375ZM21.2812 51.4062V50.4062H20.2812V51.4062H21.2812ZM21.2812 71.5V72.5H22.2812V71.5H21.2812ZM15.2812 71.5H14.2812V72.5H15.2812V71.5ZM15.2812 26V25H14.2812V26H15.2812ZM43.4688 26H44.4688V25H43.4688V26ZM43.4688 30.9375V31.9375H44.4688V30.9375H43.4688ZM21.2812 30.9375V29.9375H20.2812V30.9375H21.2812ZM21.2812 46.5H20.2812V47.5H21.2812V46.5ZM40.375 46.5H41.375V45.5H40.375V46.5ZM40.375 50.4062H21.2812V52.4062H40.375V50.4062ZM20.2812 51.4062V71.5H22.2812V51.4062H20.2812ZM21.2812 70.5H15.2812V72.5H21.2812V70.5ZM16.2812 71.5V26H14.2812V71.5H16.2812ZM15.2812 27H43.4688V25H15.2812V27ZM42.4688 26V30.9375H44.4688V26H42.4688ZM43.4688 29.9375H21.2812V31.9375H43.4688V29.9375ZM20.2812 30.9375V46.5H22.2812V30.9375H20.2812ZM21.2812 47.5H40.375V45.5H21.2812V47.5ZM39.375 46.5V51.4062H41.375V46.5H39.375ZM83.4062 61.9062L84.3172 62.3188L84.3182 62.3166L83.4062 61.9062ZM57.875 69.5L57.3365 70.3426L57.341 70.3455L57.875 69.5ZM51.4062 61.9688L50.4995 62.3904L50.5027 62.3973L51.4062 61.9688ZM49.0625 50.625H48.0625L48.0625 50.6347L49.0625 50.625ZM57.7812 28.0625L58.3198 28.9051L58.3214 28.9041L57.7812 28.0625ZM76.9688 28.0312L76.4302 28.8739L76.4376 28.8785L76.9688 28.0312ZM83.4062 35.6875L82.4934 36.0957L82.4943 36.0979L83.4062 35.6875ZM76.4375 34.875L75.6368 35.4741L75.6389 35.4769L76.4375 34.875ZM58.375 34.875L57.5771 34.2722L57.5764 34.2731L58.375 34.875ZM55.0312 46.875L54.0312 46.8628V46.875H55.0312ZM58.3125 62.5625L57.5045 63.1517L57.5091 63.158L58.3125 62.5625ZM76.4062 62.8125L77.2041 63.4153L77.2062 63.4125L76.4062 62.8125ZM79.6875 50.6562L80.6875 50.6681V50.6562H79.6875ZM84.6562 50.2188C84.6562 54.566 83.925 58.3167 82.4943 61.4959L84.3182 62.3166C85.8875 58.8292 86.6562 54.7882 86.6562 50.2188H84.6562ZM82.4953 61.4937C81.0659 64.6504 79.0619 67.0225 76.4944 68.6563L77.5681 70.3437C80.5006 68.4775 82.7466 65.7871 84.3172 62.3188L82.4953 61.4937ZM76.4944 68.6563C73.9243 70.2919 70.9072 71.125 67.4062 71.125V73.125C71.2386 73.125 74.6382 72.2081 77.5681 70.3437L76.4944 68.6563ZM67.4062 71.125C63.9936 71.125 61.0052 70.2942 58.409 68.6545L57.341 70.3455C60.2865 72.2058 63.6522 73.125 67.4062 73.125V71.125ZM58.4135 68.6574C55.8155 66.997 53.7788 64.6371 52.3098 61.5402L50.5027 62.3973C52.117 65.8004 54.3928 68.4613 57.3365 70.3426L58.4135 68.6574ZM52.313 61.5471C50.8625 58.4276 50.103 54.7912 50.0625 50.6153L48.0625 50.6347C48.1053 55.0421 48.9083 58.9683 50.4995 62.3904L52.313 61.5471ZM50.0625 50.625V47.3438H48.0625V50.625H50.0625ZM50.0625 47.3438C50.0625 43.0848 50.8025 39.3653 52.2545 36.163L50.433 35.337C48.8433 38.843 48.0625 42.8527 48.0625 47.3438H50.0625ZM52.2545 36.163C53.7053 32.9632 55.7311 30.5595 58.3198 28.9051L57.2427 27.2199C54.2898 29.1071 52.0238 31.8285 50.433 35.337L52.2545 36.163ZM58.3214 28.9041C60.9389 27.2242 63.9359 26.375 67.3438 26.375V24.375C63.5849 24.375 60.2069 25.3175 57.2411 27.2209L58.3214 28.9041ZM67.3438 26.375C70.8202 26.375 73.8374 27.2168 76.4302 28.8739L77.5073 27.1886C74.5584 25.304 71.159 24.375 67.3438 24.375V26.375ZM76.4376 28.8785C79.0423 30.5113 81.0646 32.9009 82.4934 36.0957L84.3191 35.2793C82.7479 31.7658 80.4785 29.0512 77.4999 27.184L76.4376 28.8785ZM82.4943 36.0979C83.9252 39.2776 84.6562 43.0181 84.6562 47.3438H86.6562C86.6562 42.7944 85.8873 38.764 84.3182 35.2771L82.4943 36.0979ZM84.6562 47.3438V50.2188H86.6562V47.3438H84.6562ZM80.6875 47.2812C80.6875 41.7713 79.5843 37.389 77.2361 34.2731L75.6389 35.4769C77.6241 38.111 78.6875 41.9995 78.6875 47.2812H80.6875ZM77.2382 34.2759C74.8664 31.1059 71.5265 29.5312 67.3438 29.5312V31.5312C70.9527 31.5312 73.6753 32.8524 75.6368 35.4741L77.2382 34.2759ZM67.3438 29.5312C63.2549 29.5312 59.9632 31.1134 57.5771 34.2722L59.1729 35.4778C61.1618 32.8449 63.8492 31.5312 67.3438 31.5312V29.5312ZM57.5764 34.2731C55.2374 37.3768 54.0954 41.6121 54.0313 46.8628L56.0312 46.8872C56.0921 41.8879 57.1792 38.1232 59.1736 35.4769L57.5764 34.2731ZM54.0312 46.875V50.2188H56.0312V46.875H54.0312ZM54.0312 50.2188C54.0312 55.5758 55.1505 59.9233 57.5045 63.1517L59.1205 61.9733C57.0995 59.2017 56.0312 55.3201 56.0312 50.2188H54.0312ZM57.5091 63.158C59.9146 66.4031 63.25 68.0312 67.4062 68.0312V66.0312C63.8542 66.0312 61.127 64.6802 59.1159 61.967L57.5091 63.158ZM67.4062 68.0312C71.5589 68.0312 74.8695 66.5053 77.2041 63.4153L75.6084 62.2097C73.693 64.7447 71.0036 66.0312 67.4062 66.0312V68.0312ZM77.2062 63.4125C79.5072 60.3445 80.6236 56.0527 80.6874 50.6681L78.6876 50.6444C78.6264 55.8015 77.5553 59.6138 75.6063 62.2125L77.2062 63.4125ZM80.6875 50.6562V47.2812H78.6875V50.6562H80.6875Z' fill='%235E5E5E'/%3e%3c/svg%3e";
25528
26049
 
25529
- var img$6 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M49.6875 51.2188C44.5417 49.7396 40.7917 47.9271 38.4375 45.7812C36.1042 43.6146 34.9375 40.9479 34.9375 37.7812C34.9375 34.1979 36.3646 31.2396 39.2188 28.9062C42.0938 26.5521 45.8229 25.375 50.4062 25.375C53.5312 25.375 56.3125 25.9792 58.75 27.1875C61.2083 28.3958 63.1042 30.0625 64.4375 32.1875C65.7917 34.3125 66.4688 36.6354 66.4688 39.1562H60.4375C60.4375 36.4062 59.5625 34.25 57.8125 32.6875C56.0625 31.1042 53.5938 30.3125 50.4062 30.3125C47.4479 30.3125 45.1354 30.9688 43.4688 32.2812C41.8229 33.5729 41 35.375 41 37.6875C41 39.5417 41.7812 41.1146 43.3438 42.4062C44.9271 43.6771 47.6042 44.8438 51.375 45.9062C55.1667 46.9688 58.125 48.1458 60.25 49.4375C62.3958 50.7083 63.9792 52.1979 65 53.9062C66.0417 55.6146 66.5625 57.625 66.5625 59.9375C66.5625 63.625 65.125 66.5833 62.25 68.8125C59.375 71.0208 55.5312 72.125 50.7188 72.125C47.5938 72.125 44.6771 71.5312 41.9688 70.3438C39.2604 69.1354 37.1667 67.4896 35.6875 65.4062C34.2292 63.3229 33.5 60.9583 33.5 58.3125H39.5312C39.5312 61.0625 40.5417 63.2396 42.5625 64.8438C44.6042 66.4271 47.3229 67.2188 50.7188 67.2188C53.8854 67.2188 56.3125 66.5729 58 65.2812C59.6875 63.9896 60.5312 62.2292 60.5312 60C60.5312 57.7708 59.75 56.0521 58.1875 54.8438C56.625 53.6146 53.7917 52.4062 49.6875 51.2188Z' fill='%235E5E5E'/%3e%3cpath d='M49.6875 51.2188L49.9654 50.2582L49.9638 50.2577L49.6875 51.2188ZM38.4375 45.7812L37.757 46.5141L37.7639 46.5203L38.4375 45.7812ZM39.2188 28.9062L39.8517 29.6805L39.8523 29.68L39.2188 28.9062ZM58.75 27.1875L58.3058 28.0835L58.3089 28.0849L58.75 27.1875ZM64.4375 32.1875L63.5904 32.719L63.5942 32.7249L64.4375 32.1875ZM66.4688 39.1562V40.1562H67.4688V39.1562H66.4688ZM60.4375 39.1562H59.4375V40.1562H60.4375V39.1562ZM57.8125 32.6875L57.1416 33.4291L57.1465 33.4334L57.8125 32.6875ZM43.4688 32.2812L44.0861 33.0679L44.0874 33.0669L43.4688 32.2812ZM43.3438 42.4062L42.7066 43.177L42.7122 43.1816L42.7178 43.1861L43.3438 42.4062ZM51.375 45.9062L51.1038 46.8688L51.1052 46.8692L51.375 45.9062ZM60.25 49.4375L59.7306 50.2921L59.7404 50.2979L60.25 49.4375ZM65 53.9062L64.1416 54.4192L64.1462 54.4269L65 53.9062ZM62.25 68.8125L62.8592 69.6056L62.8628 69.6028L62.25 68.8125ZM41.9688 70.3438L41.5613 71.257L41.5672 71.2596L41.9688 70.3438ZM35.6875 65.4062L34.8682 65.9797L34.8721 65.9852L35.6875 65.4062ZM33.5 58.3125V57.3125H32.5V58.3125H33.5ZM39.5312 58.3125H40.5312V57.3125H39.5312V58.3125ZM42.5625 64.8438L41.9407 65.627L41.9497 65.634L42.5625 64.8438ZM58.1875 54.8438L57.5692 55.6297L57.5758 55.6348L58.1875 54.8438ZM49.9638 50.2577C44.8778 48.7957 41.2993 47.0367 39.1111 45.0422L37.7639 46.5203C40.284 48.8174 44.2055 50.6834 49.4112 52.1798L49.9638 50.2577ZM39.118 45.0485C36.9871 43.0698 35.9375 40.6681 35.9375 37.7812H33.9375C33.9375 41.2277 35.2212 44.1594 37.757 46.514L39.118 45.0485ZM35.9375 37.7812C35.9375 34.5079 37.2221 31.8302 39.8517 29.6805L38.5858 28.132C35.5071 30.649 33.9375 33.888 33.9375 37.7812H35.9375ZM39.8523 29.68C42.5099 27.5038 45.9983 26.375 50.4062 26.375V24.375C45.6475 24.375 41.6776 25.6003 38.5852 28.1325L39.8523 29.68ZM50.4062 26.375C53.4001 26.375 56.0256 26.9531 58.3059 28.0835L59.1941 26.2915C56.5994 25.0053 53.6624 24.375 50.4062 24.375V26.375ZM58.3089 28.0849C60.6164 29.2192 62.3648 30.7656 63.5904 32.719L65.2846 31.656C63.8435 29.3594 61.8003 27.5725 59.1911 26.2901L58.3089 28.0849ZM63.5942 32.7249C64.846 34.6893 65.4688 36.8257 65.4688 39.1562H67.4688C67.4688 36.4451 66.7374 33.9357 65.2808 31.6501L63.5942 32.7249ZM66.4688 38.1562H60.4375V40.1562H66.4688V38.1562ZM61.4375 39.1562C61.4375 36.1753 60.4781 33.7269 58.4785 31.9416L57.1465 33.4334C58.6469 34.7731 59.4375 36.6372 59.4375 39.1562H61.4375ZM58.4834 31.946C56.4933 30.1454 53.7536 29.3125 50.4062 29.3125V31.3125C53.4339 31.3125 55.6317 32.063 57.1416 33.429L58.4834 31.946ZM50.4062 29.3125C47.3105 29.3125 44.751 29.9986 42.8501 31.4956L44.0874 33.0669C45.5198 31.9389 47.5853 31.3125 50.4062 31.3125V29.3125ZM42.8514 31.4946C40.9363 32.9975 40 35.1049 40 37.6875H42C42 35.6451 42.7095 34.1483 44.0861 33.0679L42.8514 31.4946ZM40 37.6875C40 39.8701 40.9387 41.7155 42.7066 43.177L43.9809 41.6355C42.6238 40.5137 42 39.2133 42 37.6875H40ZM42.7178 43.1861C44.4635 44.5873 47.3015 45.7974 51.1038 46.8688L51.6462 44.9437C47.9069 43.8901 45.3907 42.7669 43.9697 41.6264L42.7178 43.1861ZM51.1052 46.8692C54.8538 47.9196 57.7151 49.0669 59.7306 50.292L60.7694 48.583C58.5349 47.2248 55.4795 46.0179 51.6448 44.9433L51.1052 46.8692ZM59.7404 50.2979C61.7785 51.5049 63.2253 52.8858 64.1416 54.4192L65.8584 53.3933C64.7331 51.5101 63.0132 49.9117 60.7596 48.5771L59.7404 50.2979ZM64.1462 54.4269C65.0782 55.9553 65.5625 57.7796 65.5625 59.9375H67.5625C67.5625 57.4704 67.0052 55.2739 65.8538 53.3856L64.1462 54.4269ZM65.5625 59.9375C65.5625 63.3208 64.2641 65.9855 61.6372 68.0222L62.8628 69.6028C65.9859 67.1812 67.5625 63.9292 67.5625 59.9375H65.5625ZM61.6408 68.0194C58.9901 70.0555 55.3829 71.125 50.7188 71.125V73.125C55.6796 73.125 59.7599 71.9862 62.8592 69.6056L61.6408 68.0194ZM50.7188 71.125C47.724 71.125 44.9449 70.5568 42.3703 69.4279L41.5672 71.2596C44.4092 72.5057 47.4635 73.125 50.7188 73.125V71.125ZM42.3762 69.4305C39.8047 68.2832 37.8628 66.7427 36.5029 64.8273L34.8721 65.9852C36.4706 68.2365 38.7161 69.9876 41.5613 71.257L42.3762 69.4305ZM36.5067 64.8328C35.171 62.9246 34.5 60.762 34.5 58.3125H32.5C32.5 61.1547 33.2873 63.7212 34.8683 65.9797L36.5067 64.8328ZM33.5 59.3125H39.5312V57.3125H33.5V59.3125ZM38.5312 58.3125C38.5312 61.3445 39.6634 63.8192 41.9408 65.627L43.1842 64.0605C41.4199 62.66 40.5312 60.7805 40.5312 58.3125H38.5312ZM41.9497 65.634C44.2149 67.3907 47.1709 68.2188 50.7188 68.2188V66.2188C47.4749 66.2188 44.9934 65.4635 43.1753 64.0535L41.9497 65.634ZM50.7188 68.2188C54.0023 68.2188 56.6788 67.5519 58.6078 66.0753L57.3922 64.4872C55.9462 65.5939 53.7686 66.2188 50.7188 66.2188V68.2188ZM58.6078 66.0753C60.5563 64.5839 61.5312 62.5227 61.5312 60H59.5312C59.5312 61.9356 58.8187 63.3953 57.3922 64.4872L58.6078 66.0753ZM61.5312 60C61.5312 57.5066 60.6404 55.4765 58.7992 54.0527L57.5758 55.6348C58.8596 56.6276 59.5312 58.0351 59.5312 60H61.5312ZM58.8058 54.0578C57.0802 52.7003 54.0838 51.4498 49.9654 50.2582L49.4096 52.1793C53.4995 53.3627 56.1698 54.5288 57.5692 55.6297L58.8058 54.0578Z' fill='%235E5E5E'/%3e%3c/svg%3e";
26050
+ var img$6 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M62.375 51.4062H43.2812V71.5H37.2812V26H65.4688V30.9375H43.2812V46.5H62.375V51.4062Z' fill='%235E5E5E'/%3e%3cpath d='M62.375 51.4062V52.4062H63.375V51.4062H62.375ZM43.2812 51.4062V50.4062H42.2812V51.4062H43.2812ZM43.2812 71.5V72.5H44.2812V71.5H43.2812ZM37.2812 71.5H36.2812V72.5H37.2812V71.5ZM37.2812 26V25H36.2812V26H37.2812ZM65.4688 26H66.4688V25H65.4688V26ZM65.4688 30.9375V31.9375H66.4688V30.9375H65.4688ZM43.2812 30.9375V29.9375H42.2812V30.9375H43.2812ZM43.2812 46.5H42.2812V47.5H43.2812V46.5ZM62.375 46.5H63.375V45.5H62.375V46.5ZM62.375 50.4062H43.2812V52.4062H62.375V50.4062ZM42.2812 51.4062V71.5H44.2812V51.4062H42.2812ZM43.2812 70.5H37.2812V72.5H43.2812V70.5ZM38.2812 71.5V26H36.2812V71.5H38.2812ZM37.2812 27H65.4688V25H37.2812V27ZM64.4688 26V30.9375H66.4688V26H64.4688ZM65.4688 29.9375H43.2812V31.9375H65.4688V29.9375ZM42.2812 30.9375V46.5H44.2812V30.9375H42.2812ZM43.2812 47.5H62.375V45.5H43.2812V47.5ZM61.375 46.5V51.4062H63.375V46.5H61.375Z' fill='%235E5E5E'/%3e%3c/svg%3e";
25530
26051
 
25531
- var img$5 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M52.9688 53.0938H42.2812V71.5H36.25V26H51.3125C56.4375 26 60.375 27.1667 63.125 29.5C65.8958 31.8333 67.2812 35.2292 67.2812 39.6875C67.2812 42.5208 66.5104 44.9896 64.9688 47.0938C63.4479 49.1979 61.3229 50.7708 58.5938 51.8125L69.2812 71.125V71.5H62.8438L52.9688 53.0938ZM42.2812 48.1875H51.5C54.4792 48.1875 56.8438 47.4167 58.5938 45.875C60.3646 44.3333 61.25 42.2708 61.25 39.6875C61.25 36.875 60.4062 34.7188 58.7188 33.2188C57.0521 31.7188 54.6354 30.9583 51.4688 30.9375H42.2812V48.1875Z' fill='%235E5E5E'/%3e%3cpath d='M52.9688 53.0938L53.8499 52.621L53.5671 52.0938H52.9688V53.0938ZM42.2812 53.0938V52.0938H41.2812V53.0938H42.2812ZM42.2812 71.5V72.5H43.2812V71.5H42.2812ZM36.25 71.5H35.25V72.5H36.25V71.5ZM36.25 26V25H35.25V26H36.25ZM63.125 29.5L62.478 30.2625L62.4809 30.2649L63.125 29.5ZM64.9688 47.0938L64.1621 46.5027L64.1583 46.508L64.9688 47.0938ZM58.5938 51.8125L58.2372 50.8782L57.1611 51.2889L57.7188 52.2967L58.5938 51.8125ZM69.2812 71.125H70.2812V70.8668L70.1562 70.6408L69.2812 71.125ZM69.2812 71.5V72.5H70.2812V71.5H69.2812ZM62.8438 71.5L61.9626 71.9728L62.2454 72.5H62.8438V71.5ZM42.2812 48.1875H41.2812V49.1875H42.2812V48.1875ZM58.5938 45.875L57.9371 45.1208L57.9327 45.1246L58.5938 45.875ZM58.7188 33.2188L58.0498 33.9621L58.0544 33.9662L58.7188 33.2188ZM51.4688 30.9375L51.4753 29.9375H51.4688V30.9375ZM42.2812 30.9375V29.9375H41.2812V30.9375H42.2812ZM52.9688 52.0938H42.2812V54.0938H52.9688V52.0938ZM41.2812 53.0938V71.5H43.2812V53.0938H41.2812ZM42.2812 70.5H36.25V72.5H42.2812V70.5ZM37.25 71.5V26H35.25V71.5H37.25ZM36.25 27H51.3125V25H36.25V27ZM51.3125 27C56.2989 27 59.9717 28.136 62.478 30.2625L63.772 28.7375C60.7783 26.1974 56.5761 25 51.3125 25V27ZM62.4809 30.2649C64.9748 32.3651 66.2812 35.4498 66.2812 39.6875H68.2812C68.2812 35.0085 66.8169 31.3016 63.7691 28.7351L62.4809 30.2649ZM66.2812 39.6875C66.2812 42.3276 65.5672 44.585 64.1621 46.5027L65.7754 47.6848C67.4537 45.3942 68.2812 42.714 68.2812 39.6875H66.2812ZM64.1583 46.508C62.7655 48.435 60.8079 49.8971 58.2372 50.8782L58.9503 52.7468C61.838 51.6446 64.1304 49.9608 65.7792 47.6795L64.1583 46.508ZM57.7188 52.2967L68.4063 71.6092L70.1562 70.6408L59.4687 51.3283L57.7188 52.2967ZM68.2812 71.125V71.5H70.2812V71.125H68.2812ZM69.2812 70.5H62.8438V72.5H69.2812V70.5ZM63.7249 71.0272L53.8499 52.621L52.0876 53.5665L61.9626 71.9728L63.7249 71.0272ZM42.2812 49.1875H51.5V47.1875H42.2812V49.1875ZM51.5 49.1875C54.6531 49.1875 57.276 48.3686 59.2548 46.6254L57.9327 45.1246C56.4115 46.4648 54.3053 47.1875 51.5 47.1875V49.1875ZM59.2504 46.6292C61.2628 44.8772 62.25 42.5275 62.25 39.6875H60.25C60.25 42.0142 59.4664 43.7894 57.9371 45.1208L59.2504 46.6292ZM62.25 39.6875C62.25 36.665 61.3348 34.2062 59.3831 32.4713L58.0544 33.9662C59.4777 35.2313 60.25 37.085 60.25 39.6875H62.25ZM59.3877 32.4755C57.4763 30.7552 54.7864 29.9593 51.4753 29.9375L51.4622 31.9375C54.4844 31.9574 56.6279 32.6823 58.0498 33.962L59.3877 32.4755ZM51.4688 29.9375H42.2812V31.9375H51.4688V29.9375ZM41.2812 30.9375V48.1875H43.2812V30.9375H41.2812Z' fill='%235E5E5E'/%3e%3c/svg%3e";
26052
+ var img$5 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M49.6875 51.2188C44.5417 49.7396 40.7917 47.9271 38.4375 45.7812C36.1042 43.6146 34.9375 40.9479 34.9375 37.7812C34.9375 34.1979 36.3646 31.2396 39.2188 28.9062C42.0938 26.5521 45.8229 25.375 50.4062 25.375C53.5312 25.375 56.3125 25.9792 58.75 27.1875C61.2083 28.3958 63.1042 30.0625 64.4375 32.1875C65.7917 34.3125 66.4688 36.6354 66.4688 39.1562H60.4375C60.4375 36.4062 59.5625 34.25 57.8125 32.6875C56.0625 31.1042 53.5938 30.3125 50.4062 30.3125C47.4479 30.3125 45.1354 30.9688 43.4688 32.2812C41.8229 33.5729 41 35.375 41 37.6875C41 39.5417 41.7812 41.1146 43.3438 42.4062C44.9271 43.6771 47.6042 44.8438 51.375 45.9062C55.1667 46.9688 58.125 48.1458 60.25 49.4375C62.3958 50.7083 63.9792 52.1979 65 53.9062C66.0417 55.6146 66.5625 57.625 66.5625 59.9375C66.5625 63.625 65.125 66.5833 62.25 68.8125C59.375 71.0208 55.5312 72.125 50.7188 72.125C47.5938 72.125 44.6771 71.5312 41.9688 70.3438C39.2604 69.1354 37.1667 67.4896 35.6875 65.4062C34.2292 63.3229 33.5 60.9583 33.5 58.3125H39.5312C39.5312 61.0625 40.5417 63.2396 42.5625 64.8438C44.6042 66.4271 47.3229 67.2188 50.7188 67.2188C53.8854 67.2188 56.3125 66.5729 58 65.2812C59.6875 63.9896 60.5312 62.2292 60.5312 60C60.5312 57.7708 59.75 56.0521 58.1875 54.8438C56.625 53.6146 53.7917 52.4062 49.6875 51.2188Z' fill='%235E5E5E'/%3e%3cpath d='M49.6875 51.2188L49.9654 50.2582L49.9638 50.2577L49.6875 51.2188ZM38.4375 45.7812L37.757 46.5141L37.7639 46.5203L38.4375 45.7812ZM39.2188 28.9062L39.8517 29.6805L39.8523 29.68L39.2188 28.9062ZM58.75 27.1875L58.3058 28.0835L58.3089 28.0849L58.75 27.1875ZM64.4375 32.1875L63.5904 32.719L63.5942 32.7249L64.4375 32.1875ZM66.4688 39.1562V40.1562H67.4688V39.1562H66.4688ZM60.4375 39.1562H59.4375V40.1562H60.4375V39.1562ZM57.8125 32.6875L57.1416 33.4291L57.1465 33.4334L57.8125 32.6875ZM43.4688 32.2812L44.0861 33.0679L44.0874 33.0669L43.4688 32.2812ZM43.3438 42.4062L42.7066 43.177L42.7122 43.1816L42.7178 43.1861L43.3438 42.4062ZM51.375 45.9062L51.1038 46.8688L51.1052 46.8692L51.375 45.9062ZM60.25 49.4375L59.7306 50.2921L59.7404 50.2979L60.25 49.4375ZM65 53.9062L64.1416 54.4192L64.1462 54.4269L65 53.9062ZM62.25 68.8125L62.8592 69.6056L62.8628 69.6028L62.25 68.8125ZM41.9688 70.3438L41.5613 71.257L41.5672 71.2596L41.9688 70.3438ZM35.6875 65.4062L34.8682 65.9797L34.8721 65.9852L35.6875 65.4062ZM33.5 58.3125V57.3125H32.5V58.3125H33.5ZM39.5312 58.3125H40.5312V57.3125H39.5312V58.3125ZM42.5625 64.8438L41.9407 65.627L41.9497 65.634L42.5625 64.8438ZM58.1875 54.8438L57.5692 55.6297L57.5758 55.6348L58.1875 54.8438ZM49.9638 50.2577C44.8778 48.7957 41.2993 47.0367 39.1111 45.0422L37.7639 46.5203C40.284 48.8174 44.2055 50.6834 49.4112 52.1798L49.9638 50.2577ZM39.118 45.0485C36.9871 43.0698 35.9375 40.6681 35.9375 37.7812H33.9375C33.9375 41.2277 35.2212 44.1594 37.757 46.514L39.118 45.0485ZM35.9375 37.7812C35.9375 34.5079 37.2221 31.8302 39.8517 29.6805L38.5858 28.132C35.5071 30.649 33.9375 33.888 33.9375 37.7812H35.9375ZM39.8523 29.68C42.5099 27.5038 45.9983 26.375 50.4062 26.375V24.375C45.6475 24.375 41.6776 25.6003 38.5852 28.1325L39.8523 29.68ZM50.4062 26.375C53.4001 26.375 56.0256 26.9531 58.3059 28.0835L59.1941 26.2915C56.5994 25.0053 53.6624 24.375 50.4062 24.375V26.375ZM58.3089 28.0849C60.6164 29.2192 62.3648 30.7656 63.5904 32.719L65.2846 31.656C63.8435 29.3594 61.8003 27.5725 59.1911 26.2901L58.3089 28.0849ZM63.5942 32.7249C64.846 34.6893 65.4688 36.8257 65.4688 39.1562H67.4688C67.4688 36.4451 66.7374 33.9357 65.2808 31.6501L63.5942 32.7249ZM66.4688 38.1562H60.4375V40.1562H66.4688V38.1562ZM61.4375 39.1562C61.4375 36.1753 60.4781 33.7269 58.4785 31.9416L57.1465 33.4334C58.6469 34.7731 59.4375 36.6372 59.4375 39.1562H61.4375ZM58.4834 31.946C56.4933 30.1454 53.7536 29.3125 50.4062 29.3125V31.3125C53.4339 31.3125 55.6317 32.063 57.1416 33.429L58.4834 31.946ZM50.4062 29.3125C47.3105 29.3125 44.751 29.9986 42.8501 31.4956L44.0874 33.0669C45.5198 31.9389 47.5853 31.3125 50.4062 31.3125V29.3125ZM42.8514 31.4946C40.9363 32.9975 40 35.1049 40 37.6875H42C42 35.6451 42.7095 34.1483 44.0861 33.0679L42.8514 31.4946ZM40 37.6875C40 39.8701 40.9387 41.7155 42.7066 43.177L43.9809 41.6355C42.6238 40.5137 42 39.2133 42 37.6875H40ZM42.7178 43.1861C44.4635 44.5873 47.3015 45.7974 51.1038 46.8688L51.6462 44.9437C47.9069 43.8901 45.3907 42.7669 43.9697 41.6264L42.7178 43.1861ZM51.1052 46.8692C54.8538 47.9196 57.7151 49.0669 59.7306 50.292L60.7694 48.583C58.5349 47.2248 55.4795 46.0179 51.6448 44.9433L51.1052 46.8692ZM59.7404 50.2979C61.7785 51.5049 63.2253 52.8858 64.1416 54.4192L65.8584 53.3933C64.7331 51.5101 63.0132 49.9117 60.7596 48.5771L59.7404 50.2979ZM64.1462 54.4269C65.0782 55.9553 65.5625 57.7796 65.5625 59.9375H67.5625C67.5625 57.4704 67.0052 55.2739 65.8538 53.3856L64.1462 54.4269ZM65.5625 59.9375C65.5625 63.3208 64.2641 65.9855 61.6372 68.0222L62.8628 69.6028C65.9859 67.1812 67.5625 63.9292 67.5625 59.9375H65.5625ZM61.6408 68.0194C58.9901 70.0555 55.3829 71.125 50.7188 71.125V73.125C55.6796 73.125 59.7599 71.9862 62.8592 69.6056L61.6408 68.0194ZM50.7188 71.125C47.724 71.125 44.9449 70.5568 42.3703 69.4279L41.5672 71.2596C44.4092 72.5057 47.4635 73.125 50.7188 73.125V71.125ZM42.3762 69.4305C39.8047 68.2832 37.8628 66.7427 36.5029 64.8273L34.8721 65.9852C36.4706 68.2365 38.7161 69.9876 41.5613 71.257L42.3762 69.4305ZM36.5067 64.8328C35.171 62.9246 34.5 60.762 34.5 58.3125H32.5C32.5 61.1547 33.2873 63.7212 34.8683 65.9797L36.5067 64.8328ZM33.5 59.3125H39.5312V57.3125H33.5V59.3125ZM38.5312 58.3125C38.5312 61.3445 39.6634 63.8192 41.9408 65.627L43.1842 64.0605C41.4199 62.66 40.5312 60.7805 40.5312 58.3125H38.5312ZM41.9497 65.634C44.2149 67.3907 47.1709 68.2188 50.7188 68.2188V66.2188C47.4749 66.2188 44.9934 65.4635 43.1753 64.0535L41.9497 65.634ZM50.7188 68.2188C54.0023 68.2188 56.6788 67.5519 58.6078 66.0753L57.3922 64.4872C55.9462 65.5939 53.7686 66.2188 50.7188 66.2188V68.2188ZM58.6078 66.0753C60.5563 64.5839 61.5312 62.5227 61.5312 60H59.5312C59.5312 61.9356 58.8187 63.3953 57.3922 64.4872L58.6078 66.0753ZM61.5312 60C61.5312 57.5066 60.6404 55.4765 58.7992 54.0527L57.5758 55.6348C58.8596 56.6276 59.5312 58.0351 59.5312 60H61.5312ZM58.8058 54.0578C57.0802 52.7003 54.0838 51.4498 49.9654 50.2582L49.4096 52.1793C53.4995 53.3627 56.1698 54.5288 57.5692 55.6297L58.8058 54.0578Z' fill='%235E5E5E'/%3e%3c/svg%3e";
25532
26053
 
25533
26054
  var img$4 = "data:image/svg+xml,%3csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M70.75 57.0625C70.1875 61.875 68.4062 65.5938 65.4062 68.2188C62.4271 70.8229 58.4583 72.125 53.5 72.125C48.125 72.125 43.8125 70.1979 40.5625 66.3438C37.3333 62.4896 35.7188 57.3333 35.7188 50.875V46.5C35.7188 42.2708 36.4688 38.5521 37.9688 35.3438C39.4896 32.1354 41.6354 29.6771 44.4062 27.9688C47.1771 26.2396 50.3854 25.375 54.0312 25.375C58.8646 25.375 62.7396 26.7292 65.6562 29.4375C68.5729 32.125 70.2708 35.8542 70.75 40.625H64.7188C64.1979 37 63.0625 34.375 61.3125 32.75C59.5833 31.125 57.1562 30.3125 54.0312 30.3125C50.1979 30.3125 47.1875 31.7292 45 34.5625C42.8333 37.3958 41.75 41.4271 41.75 46.6562V51.0625C41.75 56 42.7812 59.9271 44.8438 62.8438C46.9062 65.7604 49.7917 67.2188 53.5 67.2188C56.8333 67.2188 59.3854 66.4688 61.1562 64.9688C62.9479 63.4479 64.1354 60.8125 64.7188 57.0625H70.75Z' fill='%235E5E5E'/%3e%3cpath d='M70.75 57.0625L71.7432 57.1786L71.8737 56.0625H70.75V57.0625ZM65.4062 68.2188L66.0644 68.9717L66.0648 68.9713L65.4062 68.2188ZM40.5625 66.3438L39.796 66.986L39.798 66.9884L40.5625 66.3438ZM37.9688 35.3438L37.0651 34.9154L37.0629 34.9202L37.9688 35.3438ZM44.4062 27.9688L44.9311 28.82L44.9357 28.8171L44.4062 27.9688ZM65.6562 29.4375L64.9758 30.1703L64.9786 30.1729L65.6562 29.4375ZM70.75 40.625V41.625H71.8555L71.745 40.5251L70.75 40.625ZM64.7188 40.625L63.7289 40.7672L63.8522 41.625H64.7188V40.625ZM61.3125 32.75L60.6277 33.4787L60.632 33.4828L61.3125 32.75ZM45 34.5625L44.2085 33.9514L44.2056 33.955L45 34.5625ZM61.1562 64.9688L61.8026 65.7318L61.8034 65.7311L61.1562 64.9688ZM64.7188 57.0625V56.0625H63.8623L63.7306 56.9088L64.7188 57.0625ZM69.7568 56.9464C69.2165 61.5683 67.5228 65.038 64.7477 67.4662L66.0648 68.9713C69.2897 66.1495 71.1585 62.1817 71.7432 57.1786L69.7568 56.9464ZM64.7481 67.4658C61.9938 69.8734 58.2797 71.125 53.5 71.125V73.125C58.637 73.125 62.8603 71.7724 66.0644 68.9717L64.7481 67.4658ZM53.5 71.125C48.3975 71.125 44.3731 69.3115 41.327 65.6991L39.798 66.9884C43.2519 71.0843 47.8525 73.125 53.5 73.125V71.125ZM41.329 65.7015C38.2893 62.0735 36.7188 57.1666 36.7188 50.875H34.7188C34.7188 57.5 36.3774 62.9057 39.796 66.986L41.329 65.7015ZM36.7188 50.875V46.5H34.7188V50.875H36.7188ZM36.7188 46.5C36.7188 42.3892 37.4475 38.8198 38.8746 35.7673L37.0629 34.9202C35.49 38.2844 34.7188 42.1525 34.7188 46.5H36.7188ZM38.8724 35.7721C40.3183 32.7219 42.3396 30.4177 44.9311 28.82L43.8814 27.1175C40.9313 28.9364 38.6609 31.549 37.0651 34.9154L38.8724 35.7721ZM44.9357 28.8171C47.5297 27.1983 50.5502 26.375 54.0312 26.375V24.375C50.2206 24.375 46.8245 25.2809 43.8768 27.1204L44.9357 28.8171ZM54.0312 26.375C58.6692 26.375 62.282 27.6689 64.9758 30.1703L66.3367 28.7047C63.1971 25.7894 59.06 24.375 54.0312 24.375V26.375ZM64.9786 30.1729C67.6794 32.6615 69.2949 36.1442 69.755 40.7249L71.745 40.5251C71.2467 35.5641 69.4664 31.5885 66.3339 28.7021L64.9786 30.1729ZM70.75 39.625H64.7188V41.625H70.75V39.625ZM65.7086 40.4828C65.1717 36.7462 63.9795 33.8618 61.993 32.0172L60.632 33.4828C62.1455 34.8882 63.2241 37.2538 63.7289 40.7672L65.7086 40.4828ZM61.9973 32.0213C60.03 30.1725 57.3278 29.3125 54.0312 29.3125V31.3125C56.9847 31.3125 59.1366 32.0775 60.6277 33.4787L61.9973 32.0213ZM54.0312 29.3125C49.9135 29.3125 46.6003 30.8534 44.2085 33.9514L45.7915 35.1736C47.7747 32.605 50.4823 31.3125 54.0312 31.3125V29.3125ZM44.2056 33.955C41.8562 37.0275 40.75 41.3059 40.75 46.6562H42.75C42.75 41.5483 43.8105 37.7642 45.7944 35.17L44.2056 33.955ZM40.75 46.6562V51.0625H42.75V46.6562H40.75ZM40.75 51.0625C40.75 56.1298 41.8075 60.2821 44.0273 63.4211L45.6602 62.2664C43.755 59.5721 42.75 55.8702 42.75 51.0625H40.75ZM44.0273 63.4211C46.2855 66.6146 49.4817 68.2188 53.5 68.2188V66.2188C50.1016 66.2188 47.527 64.9062 45.6602 62.2664L44.0273 63.4211ZM53.5 68.2188C56.9687 68.2188 59.7865 67.4395 61.8026 65.7318L60.5099 64.2057C58.9843 65.498 56.698 66.2188 53.5 66.2188V68.2188ZM61.8034 65.7311C63.8616 63.9841 65.1079 61.0665 65.7069 57.2162L63.7306 56.9088C63.1629 60.5585 62.0343 62.9118 60.5091 64.2064L61.8034 65.7311ZM64.7188 58.0625H70.75V56.0625H64.7188V58.0625Z' fill='%235E5E5E'/%3e%3c/svg%3e";
25534
26055
 
@@ -25567,28 +26088,28 @@ const AssemblyModeCmds = (drawingId, rootId) => {
25567
26088
  FastenedOrigin: {
25568
26089
  label: 'Add Fastened Origin',
25569
26090
  icon: /*#__PURE__*/React__default.createElement(Icon, {
25570
- url: img$8
26091
+ url: img$7
25571
26092
  }),
25572
26093
  callback: wrapper(addFastenedOrigin)
25573
26094
  },
25574
26095
  Fastened: {
25575
26096
  label: 'Add Fastened',
25576
26097
  icon: /*#__PURE__*/React__default.createElement(Icon, {
25577
- url: img$7
26098
+ url: img$6
25578
26099
  }),
25579
26100
  callback: wrapper(addFastened)
25580
26101
  },
25581
26102
  Slider: {
25582
26103
  label: 'Add Slider',
25583
26104
  icon: /*#__PURE__*/React__default.createElement(Icon, {
25584
- url: img$6
26105
+ url: img$5
25585
26106
  }),
25586
26107
  callback: wrapper(addSlider)
25587
26108
  },
25588
26109
  Revolute: {
25589
26110
  label: 'Add Revolute',
25590
26111
  icon: /*#__PURE__*/React__default.createElement(Icon, {
25591
- url: img$5
26112
+ url: img$y
25592
26113
  }),
25593
26114
  callback: wrapper(addRevolute)
25594
26115
  },
@@ -25792,7 +26313,7 @@ const useOptionCommands = () => {
25792
26313
  }, {
25793
26314
  label: 'Vertices',
25794
26315
  icon: /*#__PURE__*/React__default.createElement(Icon, {
25795
- url: img$M
26316
+ url: img$N
25796
26317
  }),
25797
26318
  isChecked: showVertices,
25798
26319
  command: () => setShowVertices(!showVertices)
@@ -26109,4 +26630,4 @@ const Menu = _ref => {
26109
26630
  }, "..."));
26110
26631
  };
26111
26632
 
26112
- export { index$a as AppearanceEditor, index$B as Boolean, index$c as BoundingBoxInfo, index$x as Box, CADApi, CSysDisplay, index$s as Chamfer, index$l as CircularPattern, index$u as Cone, Constraints, ContextMenu, index$v as Cylinder, index$5 as Cylindrical, index$C as Dimensions, Drawing, EditMode, index$1 as EntityDeletion, index$b as Expressions, index$A as Extrusion, index$8 as Fastened, index$9 as FastenedOrigin, FeaturePlugin, index$t as Fillet, FtVisibilityController$1 as FtVisibilityController, GeometryOverridesManager, GlobalPlugins, HUD, HoveredConstraintDisplay, index$2 as Import, index$m as LinearPattern, MateScope, index$j as Measure, Menu, Messages, index$k as Mirror, ModelTree, Outline, index$3 as Parallel, index$4 as Planar, PluginGeometryBounds, index as ProductManagement, Readfile$1 as Readfile, index$6 as Revolute, index$y as Revolve, index$q as Rotate, SelectedMateObj, SideBar, index$i as Sketch, index$o as Slice, index$n as SliceBySheet, index$7 as Slider, Solids, index$w as Sphere, ToolBar, index$p as TransformByCsys, index$r as Translate, TreeObjScope, index$z as Twist, ViewOptionButtons, ViewPlugButtons, index$h as WorkAxis, WorkAxisObj, index$d as WorkCSys, WorkCSysObj, index$e as WorkCoordSystem, WorkCoordSystemObj, index$g as WorkPlane, WorkPlaneObj, index$f as WorkPoint, WorkPointObj, getCADState, getMateRefIds, useAllObjects, useCADStore, useEditMode, useHasPending, useIsLoading, useIsSketchActive, useOperationSequence, useOverrideGeometryColor, useVisibleSolids };
26633
+ export { index$a as AppearanceEditor, index$C as Boolean, index$c as BoundingBoxInfo, index$y as Box, CADApi, CSysDisplay, index$s as Chamfer, index$l as CircularPattern, index$v as CompositeCurve, CompositeCurveObj, index$u as Cone, Constraints, ContextMenu, index$w as Cylinder, index$5 as Cylindrical, index$D as Dimensions, Drawing, EditMode, index$1 as EntityDeletion, index$b as Expressions, index$B as Extrusion, index$8 as Fastened, index$9 as FastenedOrigin, FeaturePlugin, index$t as Fillet, FtVisibilityController$1 as FtVisibilityController, GeometryOverridesManager, GlobalPlugins, HUD, HoveredConstraintDisplay, index$2 as Import, index$m as LinearPattern, MateScope, index$j as Measure, Menu, Messages, index$k as Mirror, ModelTree, Outline, index$3 as Parallel, index$4 as Planar, PluginGeometryBounds, index as ProductManagement, Readfile$1 as Readfile, index$6 as Revolute, index$z as Revolve, index$q as Rotate, SelectedMateObj, SideBar, index$i as Sketch, index$o as Slice, index$n as SliceBySheet, index$7 as Slider, Solids, index$x as Sphere, ToolBar, index$p as TransformByCsys, index$r as Translate, TreeObjScope, index$A as Twist, ViewOptionButtons, ViewPlugButtons, index$h as WorkAxis, WorkAxisObj, index$d as WorkCSys, WorkCSysObj, index$e as WorkCoordSystem, WorkCoordSystemObj, index$g as WorkPlane, WorkPlaneObj, index$f as WorkPoint, WorkPointObj, getCADState, getMateRefIds, useAllObjects, useCADStore, useEditMode, useHasPending, useIsLoading, useIsSketchActive, useOperationSequence, useOverrideGeometryColor, useVisibleSolids };