@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.
@@ -19,6 +19,7 @@ var icons = require('@ant-design/icons');
19
19
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
20
20
  var reactDom = require('react-dom');
21
21
  var antd = require('antd');
22
+ var LineGeometry = require('three/examples/jsm/lines/LineGeometry');
22
23
  var TabsImpl = require('antd/lib/tabs');
23
24
  var RadioGroupImpl = require('antd/lib/radio/group');
24
25
  var RadioButtonImpl = require('antd/lib/radio/radioButton');
@@ -61,8 +62,8 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
61
62
  var THREE__namespace = /*#__PURE__*/_interopNamespaceDefault(THREE);
62
63
  var deepmerge__namespace = /*#__PURE__*/_interopNamespaceDefault(deepmerge);
63
64
 
64
- 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; }
65
- 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; }
65
+ 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; }
66
+ 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; }
66
67
  function getGraphicId(tree, refOrObjId) {
67
68
  const res = {
68
69
  graphicId: refOrObjId,
@@ -125,7 +126,7 @@ function useSelectedItems(drawingId, refOrObjIds) {
125
126
  window.console.error('Product is not a CC_Part. Assembly is not supported now');
126
127
  }
127
128
  const createSelItem = React.useCallback(element => {
128
- return core.createGraphicItem(prodId, _objectSpread$w(_objectSpread$w({}, element), {}, {
129
+ return core.createGraphicItem(prodId, _objectSpread$x(_objectSpread$x({}, element), {}, {
129
130
  productId: prodId
130
131
  }));
131
132
  }, [prodId]);
@@ -150,7 +151,7 @@ function useSelectedItems(drawingId, refOrObjIds) {
150
151
  if (grIds && grIds.length > 0) {
151
152
  const elem = cont.map[Number(grIds[0])];
152
153
  if (elem) {
153
- elems.push(_objectSpread$w(_objectSpread$w({}, elem), {}, {
154
+ elems.push(_objectSpread$x(_objectSpread$x({}, elem), {}, {
154
155
  graphicId: contId,
155
156
  type: cont.type
156
157
  }));
@@ -186,8 +187,12 @@ function useSelectedItems(drawingId, refOrObjIds) {
186
187
  return selectedItems;
187
188
  }
188
189
 
189
- 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; }
190
- 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; }
190
+ const EMPTYARRAY = [];
191
+ const NOCCID = Number.MIN_SAFE_INTEGER;
192
+ const EMPTYSTR = '';
193
+
194
+ 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; }
195
+ 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; }
191
196
  function addMembers(drawingId, ccObjId) {
192
197
  const drawingState = core.getDrawing(drawingId);
193
198
  const objInTree = drawingState.structure.tree[ccObjId];
@@ -198,7 +203,7 @@ function addMembers(drawingId, ccObjId) {
198
203
  const members = {};
199
204
  Object.keys(curMembers).forEach(memberName => {
200
205
  const curMember = curMembers[memberName];
201
- members[memberName] = _objectSpread$v(_objectSpread$v({}, curMember), {}, {
206
+ members[memberName] = _objectSpread$w(_objectSpread$w({}, curMember), {}, {
202
207
  name: memberName
203
208
  });
204
209
  if (curMember.type === core.MemberType.POINT && Array.isArray(curMember.value)) {
@@ -322,6 +327,13 @@ const is2DConstraint = arg => {
322
327
  const objClass = typeof arg === 'string' ? arg : arg.class;
323
328
  return Boolean(objClass.match(/CC_2D.+Constraint/)) || classcad.ccUtils.base.isA(objClass, classcad.CCClasses.CCRigidSet);
324
329
  };
330
+ const isSketchRegion = arg => {
331
+ if (arg === undefined) {
332
+ return false;
333
+ }
334
+ const objClass = typeof arg === 'string' ? arg : arg.class;
335
+ return classcad.ccUtils.base.isA(objClass, classcad.CCClasses.CCSketchRegion);
336
+ };
325
337
  const degreesToRadians = degrees => {
326
338
  return degrees * Math.PI / 180;
327
339
  };
@@ -465,10 +477,37 @@ const solveQuartic = (a, b, c, d, e) => {
465
477
  });
466
478
  return res;
467
479
  };
468
-
469
- const EMPTYARRAY = [];
470
- const NOCCID = Number.MIN_SAFE_INTEGER;
471
- const EMPTYSTR = '';
480
+ function getRegionCoordSys(drawingId, regionObj) {
481
+ let originPos = new THREE__namespace.Vector3(0, 0, 0);
482
+ let xAxis = new THREE__namespace.Vector3(1, 0, 0);
483
+ let yAxis = new THREE__namespace.Vector3(0, 1, 0);
484
+ if (classcad.ccUtils.base.isA(regionObj.class, classcad.CCClasses.CCCompositeCurve)) {
485
+ var _regionObj$members;
486
+ const refCSys = ((_regionObj$members = regionObj.members) == null ? void 0 : _regionObj$members.refCSys).members.map(member => member.value);
487
+ if (refCSys) {
488
+ const [origin_, xAxis_, yAxis_] = refCSys;
489
+ originPos = origin_ ? new THREE__namespace.Vector3(origin_.x, origin_.y, origin_.z) : originPos;
490
+ xAxis = xAxis_ ? new THREE__namespace.Vector3(xAxis_.x, xAxis_.y, xAxis_.z) : xAxis;
491
+ yAxis = yAxis_ ? new THREE__namespace.Vector3(yAxis_.x, yAxis_.y, yAxis_.z) : yAxis;
492
+ }
493
+ } else {
494
+ let sketchId_ = NOCCID;
495
+ if (classcad.ccUtils.base.isA(regionObj.class, classcad.CCClasses.CCSketchRegion)) {
496
+ var _regionObj$members2;
497
+ sketchId_ = (_regionObj$members2 = regionObj.members) == null ? void 0 : _regionObj$members2.sketch.value;
498
+ } else {
499
+ sketchId_ = regionObj.parent || 0;
500
+ }
501
+ const sketch = sketchId_ && core.getDrawing(drawingId).structure.tree[sketchId_];
502
+ if (sketch && sketch.coordinateSystem) {
503
+ const [origin_, xAxis_, yAxis_] = sketch.coordinateSystem;
504
+ originPos = origin_ ? new THREE__namespace.Vector3(origin_[0], origin_[1], origin_[2]) : originPos;
505
+ xAxis = xAxis_ ? new THREE__namespace.Vector3(xAxis_[0], xAxis_[1], xAxis_[2]) : xAxis;
506
+ yAxis = yAxis_ ? new THREE__namespace.Vector3(yAxis_[0], yAxis_[1], yAxis_[2]) : yAxis;
507
+ }
508
+ }
509
+ return [originPos, xAxis, yAxis];
510
+ }
472
511
 
473
512
  /**
474
513
  * Wrapper around useDrawing which allows to avoid ReferenceErrors.
@@ -1147,8 +1186,8 @@ const isAngular = dim => classcad.ccUtils.base.isA(dim.class, classcad.CCClasses
1147
1186
  const isRadial = dim => classcad.ccUtils.base.isA(dim.class, classcad.CCClasses.CCRadialDimension) && !classcad.ccUtils.base.isA(dim.class, classcad.CCClasses.CCDiameterDimension);
1148
1187
  const isDiameter = dim => classcad.ccUtils.base.isA(dim.class, classcad.CCClasses.CCDiameterDimension);
1149
1188
 
1150
- 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; }
1151
- 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; }
1189
+ 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; }
1190
+ 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; }
1152
1191
  const isFeatureActive = drawingId => {
1153
1192
  const activePlugin = core.getDrawing(drawingId).plugin.active.feature;
1154
1193
  if (activePlugin) {
@@ -1184,7 +1223,7 @@ const appApi = (set, get) => ({
1184
1223
  const curInstance = core.api.getState().drawing.refs[drawingId].structure.currentInstance;
1185
1224
  res = state.assemblyTree.prodStack;
1186
1225
  curInstance && res.push(curInstance);
1187
- return _objectSpread$u(_objectSpread$u({}, state), {}, {
1226
+ return _objectSpread$v(_objectSpread$v({}, state), {}, {
1188
1227
  assemblyTree: {
1189
1228
  prodStack: [...res]
1190
1229
  }
@@ -1201,7 +1240,7 @@ const appApi = (set, get) => ({
1201
1240
  set(state => {
1202
1241
  const res = state.assemblyTree.prodStack;
1203
1242
  res.pop();
1204
- return _objectSpread$u(_objectSpread$u({}, state), {}, {
1243
+ return _objectSpread$v(_objectSpread$v({}, state), {}, {
1205
1244
  assemblyTree: {
1206
1245
  prodStack: [...res]
1207
1246
  }
@@ -1210,7 +1249,7 @@ const appApi = (set, get) => ({
1210
1249
  classcad.ccAPI.assemblyBuilder.setCurrentInstance(drawingId, prevProd).catch(console.warn);
1211
1250
  },
1212
1251
  clearProdStack: () => {
1213
- set(state => _objectSpread$u(_objectSpread$u({}, state), {}, {
1252
+ set(state => _objectSpread$v(_objectSpread$v({}, state), {}, {
1214
1253
  assemblyTree: {
1215
1254
  prodStack: []
1216
1255
  }
@@ -1219,7 +1258,7 @@ const appApi = (set, get) => ({
1219
1258
  },
1220
1259
  blankDiv: {
1221
1260
  show: callback => {
1222
- set(state => _objectSpread$u(_objectSpread$u({}, state), {}, {
1261
+ set(state => _objectSpread$v(_objectSpread$v({}, state), {}, {
1223
1262
  blankDiv: {
1224
1263
  isActive: true,
1225
1264
  onClose: callback
@@ -1227,7 +1266,7 @@ const appApi = (set, get) => ({
1227
1266
  }));
1228
1267
  },
1229
1268
  hide: () => {
1230
- set(state => _objectSpread$u(_objectSpread$u({}, state), {}, {
1269
+ set(state => _objectSpread$v(_objectSpread$v({}, state), {}, {
1231
1270
  blankDiv: {
1232
1271
  isActive: false,
1233
1272
  onClose: undefined
@@ -2083,7 +2122,7 @@ class ErrorBoundary extends React.Component {
2083
2122
  }
2084
2123
  }
2085
2124
 
2086
- function ViewImpl$g({
2125
+ function ViewImpl$j({
2087
2126
  drawingId,
2088
2127
  pluginId
2089
2128
  }) {
@@ -2104,17 +2143,17 @@ function ViewImpl$g({
2104
2143
  objectId: dimSetId
2105
2144
  }) : null;
2106
2145
  }
2107
- function View$g({
2146
+ function View$j({
2108
2147
  drawingId,
2109
2148
  pluginId
2110
2149
  }) {
2111
- return /*#__PURE__*/React.createElement(ErrorBoundary, null, /*#__PURE__*/React.createElement(ViewImpl$g, {
2150
+ return /*#__PURE__*/React.createElement(ErrorBoundary, null, /*#__PURE__*/React.createElement(ViewImpl$j, {
2112
2151
  drawingId: drawingId,
2113
2152
  pluginId: pluginId
2114
2153
  }));
2115
2154
  }
2116
2155
 
2117
- function RootImpl$C({
2156
+ function RootImpl$D({
2118
2157
  drawingId,
2119
2158
  pluginId
2120
2159
  }) {
@@ -2154,17 +2193,17 @@ function RootImpl$C({
2154
2193
  })
2155
2194
  })));
2156
2195
  }
2157
- const Root$C = ({
2196
+ const Root$D = ({
2158
2197
  drawingId,
2159
2198
  pluginId
2160
2199
  }) => {
2161
- return /*#__PURE__*/React.createElement(ErrorBoundary, null, /*#__PURE__*/React.createElement(RootImpl$C, {
2200
+ return /*#__PURE__*/React.createElement(ErrorBoundary, null, /*#__PURE__*/React.createElement(RootImpl$D, {
2162
2201
  drawingId: drawingId,
2163
2202
  pluginId: pluginId
2164
2203
  }));
2165
2204
  };
2166
2205
 
2167
- const description$C = {
2206
+ const description$D = {
2168
2207
  name: 'Dimensions',
2169
2208
  version: '1.0.0',
2170
2209
  author: 'Ledas',
@@ -2175,11 +2214,11 @@ const description$C = {
2175
2214
  }
2176
2215
  };
2177
2216
 
2178
- var index$C = /*#__PURE__*/Object.freeze({
2217
+ var index$D = /*#__PURE__*/Object.freeze({
2179
2218
  __proto__: null,
2180
- Root: Root$C,
2181
- View: View$g,
2182
- description: description$C
2219
+ Root: Root$D,
2220
+ View: View$j,
2221
+ description: description$D
2183
2222
  });
2184
2223
 
2185
2224
  function useIdParam(drawingId, objId, memberName) {
@@ -2269,8 +2308,8 @@ function useRefsParam(drawingId, objId, memberName) {
2269
2308
  });
2270
2309
  }
2271
2310
 
2272
- 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; }
2273
- 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; }
2311
+ 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; }
2312
+ 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; }
2274
2313
  /**
2275
2314
  * Implies the following data structure:
2276
2315
  * data: {
@@ -2495,7 +2534,7 @@ function useTreeObjInteraction(drawingId, objId) {
2495
2534
  const isGSelected = useIsGSelected(drawingId, objId);
2496
2535
  const isSHovered = useIsSHovered(drawingId, objId);
2497
2536
  const isSSelected = useIsSSelected(drawingId, objId);
2498
- const handlers = React.useMemo(() => _objectSpread$t(_objectSpread$t({}, hHandlers), sHandlers), [hHandlers, sHandlers]);
2537
+ const handlers = React.useMemo(() => _objectSpread$u(_objectSpread$u({}, hHandlers), sHandlers), [hHandlers, sHandlers]);
2499
2538
  return React.useMemo(() => {
2500
2539
  // 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.
2501
2540
  // Thus, we don't want hovered and selected to be true if the object is not selectable.
@@ -2968,8 +3007,8 @@ const SelectionRestorer = ({
2968
3007
  return null;
2969
3008
  };
2970
3009
 
2971
- 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; }
2972
- 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; }
3010
+ 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; }
3011
+ 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; }
2973
3012
 
2974
3013
  /**
2975
3014
  * Implies the following data structure:
@@ -3063,7 +3102,7 @@ function useMateSelection(drawingId, matePath, csysId) {
3063
3102
  }));
3064
3103
  const handlers = React.useMemo(() => {
3065
3104
  if (isSelectable) {
3066
- return _objectSpread$s(_objectSpread$s({}, hHandlers), sHandlers);
3105
+ return _objectSpread$t(_objectSpread$t({}, hHandlers), sHandlers);
3067
3106
  }
3068
3107
  return {};
3069
3108
  }, [isSelectable, hHandlers, sHandlers]);
@@ -3952,11 +3991,11 @@ const FtPluginValidator = ({
3952
3991
  }, children);
3953
3992
  };
3954
3993
 
3955
- var Members$v;
3994
+ var Members$w;
3956
3995
  (function (Members) {
3957
3996
  Members["Body1"] = "Body1";
3958
3997
  Members["Body2"] = "Body2";
3959
- })(Members$v || (Members$v = {}));
3998
+ })(Members$w || (Members$w = {}));
3960
3999
  const typesCaptions$6 = {
3961
4000
  [classcad.BooleanOperationType.INTERSECTION]: 'Intersection',
3962
4001
  [classcad.BooleanOperationType.SUBTRACTION]: 'Subtraction',
@@ -3979,7 +4018,7 @@ function useBoolTypeStore(drawingId, objId) {
3979
4018
  isChanged
3980
4019
  });
3981
4020
  }
3982
- function RootImpl$B({
4021
+ function RootImpl$C({
3983
4022
  drawingId,
3984
4023
  pluginId
3985
4024
  }) {
@@ -3987,8 +4026,8 @@ function RootImpl$B({
3987
4026
  objectId
3988
4027
  } = react.usePlugin(drawingId, pluginId, plugin => plugin);
3989
4028
  const type = useBoolTypeStore(drawingId, objectId);
3990
- const body1 = useIdParam(drawingId, objectId, Members$v.Body1);
3991
- const body2 = useRefsParam(drawingId, objectId, Members$v.Body2);
4029
+ const body1 = useIdParam(drawingId, objectId, Members$w.Body1);
4030
+ const body2 = useRefsParam(drawingId, objectId, Members$w.Body2);
3992
4031
  const update = React.useCallback(() => {
3993
4032
  return classcad.ccAPI.feature.updateBooleanOperation(drawingId, objectId, type.serverValue, [body1.serverValue, ...body2.serverValue]);
3994
4033
  }, [drawingId, objectId, type, body1, body2]);
@@ -4022,20 +4061,20 @@ function RootImpl$B({
4022
4061
  selectorsOrder: selOrder
4023
4062
  }));
4024
4063
  }
4025
- const Root$B = ({
4064
+ const Root$C = ({
4026
4065
  drawingId,
4027
4066
  pluginId
4028
4067
  }) => {
4029
4068
  return /*#__PURE__*/React.createElement(FtPluginValidator, {
4030
4069
  drawingId: drawingId,
4031
4070
  pluginId: pluginId
4032
- }, /*#__PURE__*/React.createElement(RootImpl$B, {
4071
+ }, /*#__PURE__*/React.createElement(RootImpl$C, {
4033
4072
  drawingId: drawingId,
4034
4073
  pluginId: pluginId
4035
4074
  }));
4036
4075
  };
4037
4076
 
4038
- const description$B = {
4077
+ const description$C = {
4039
4078
  name: 'Boolean',
4040
4079
  version: '1.0.0',
4041
4080
  author: 'Ledas',
@@ -4052,14 +4091,14 @@ const description$B = {
4052
4091
  }
4053
4092
  };
4054
4093
 
4055
- var index$B = /*#__PURE__*/Object.freeze({
4094
+ var index$C = /*#__PURE__*/Object.freeze({
4056
4095
  __proto__: null,
4057
- Root: Root$B,
4058
- description: description$B
4096
+ Root: Root$C,
4097
+ description: description$C
4059
4098
  });
4060
4099
 
4061
- 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; }
4062
- 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; }
4100
+ 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; }
4101
+ 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; }
4063
4102
  function parseVal(val) {
4064
4103
  const float = Number(val);
4065
4104
  if (!isNaN(float)) {
@@ -4310,13 +4349,13 @@ const PointEditor = ({
4310
4349
  newVals[i] = val;
4311
4350
  }
4312
4351
  });
4313
- return _objectSpread$r(_objectSpread$r({}, state), {}, {
4352
+ return _objectSpread$s(_objectSpread$s({}, state), {}, {
4314
4353
  displayVals: newVals
4315
4354
  });
4316
4355
  })).catch();
4317
4356
  } else {
4318
4357
  const value = defaults.value;
4319
- setDisplayState(state => _objectSpread$r(_objectSpread$r({}, state), {}, {
4358
+ setDisplayState(state => _objectSpread$s(_objectSpread$s({}, state), {}, {
4320
4359
  displayVals: [value.x, value.y, value.z]
4321
4360
  }));
4322
4361
  }
@@ -4332,7 +4371,7 @@ const PointEditor = ({
4332
4371
  editMode: false,
4333
4372
  displayVals: res_ !== null ? [res_.x, res_.y, res_.z] : [...state.displayVals]
4334
4373
  }));
4335
- }).catch(() => setDisplayState(state => _objectSpread$r(_objectSpread$r({}, state), {}, {
4374
+ }).catch(() => setDisplayState(state => _objectSpread$s(_objectSpread$s({}, state), {}, {
4336
4375
  editMode: false
4337
4376
  })));
4338
4377
  } else {
@@ -4354,7 +4393,7 @@ const PointEditor = ({
4354
4393
  caption: caption,
4355
4394
  highlighted: param.isChanged()
4356
4395
  }, !editMode && /*#__PURE__*/React.createElement(DisplayBase, {
4357
- onClick: () => setDisplayState(state => _objectSpread$r(_objectSpread$r({}, state), {}, {
4396
+ onClick: () => setDisplayState(state => _objectSpread$s(_objectSpread$s({}, state), {}, {
4358
4397
  editMode: true
4359
4398
  }))
4360
4399
  }, /*#__PURE__*/React.createElement(PluginTooltip, {
@@ -4437,11 +4476,11 @@ const PointEditor = ({
4437
4476
  }, "\u2014")));
4438
4477
  };
4439
4478
 
4440
- 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; }
4441
- 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; }
4479
+ 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; }
4480
+ 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; }
4442
4481
  function createPointParam(member) {
4443
4482
  const isExpr = member.expression.length > 0;
4444
- const value = isExpr ? member.expression : _objectSpread$q({}, member.value);
4483
+ const value = isExpr ? member.expression : _objectSpread$r({}, member.value);
4445
4484
  return {
4446
4485
  value,
4447
4486
  isExpr
@@ -4482,9 +4521,9 @@ function usePointParam(drawingId, objId, memberName, options = {
4482
4521
  }, undefined, undefined, options_);
4483
4522
  }
4484
4523
 
4485
- var img$17 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADcSURBVEhL3ZTbDcMgDEVJlsgonabfnanfmaajdIlSS0aU+lWEsaLmCCkhMfheB2fJOadI1nIN49wJlv0Jo0xGURPUrZ05wkskH1OuOl+3ctfQE3bERxaLbnyJ+2WFUSYMy4G9shO63lBqvDJQBVbtThNfi39qHDAhqyOqPSY+fcDV4b63xwunFTjsbTAPa7thXFonQidXdURaq4vEIBhJmnnQAf8l8Eoi3hJp+1bGE3ATAH/odQCACcOHKwHRK3qa4AARdwemJdCw+oCgabQJd3BEieby/yUKTpDSG4InWqXAb1/sAAAAAElFTkSuQmCC";
4524
+ var img$18 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADcSURBVEhL3ZTbDcMgDEVJlsgonabfnanfmaajdIlSS0aU+lWEsaLmCCkhMfheB2fJOadI1nIN49wJlv0Jo0xGURPUrZ05wkskH1OuOl+3ctfQE3bERxaLbnyJ+2WFUSYMy4G9shO63lBqvDJQBVbtThNfi39qHDAhqyOqPSY+fcDV4b63xwunFTjsbTAPa7thXFonQidXdURaq4vEIBhJmnnQAf8l8Eoi3hJp+1bGE3ATAH/odQCACcOHKwHRK3qa4AARdwemJdCw+oCgabQJd3BEieby/yUKTpDSG4InWqXAb1/sAAAAAElFTkSuQmCC";
4486
4525
 
4487
- var img$16 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADjSURBVEhL3ZbbDcIwDEXTLsEoTMM3M/HNNIzCEgRLDpbrRx1iRTyOIrVR09x7ncrqUmstM1nbdRq/LzB4Bsv13u621NOh3b344zOAIuBoc4fLcYXRJhYfShAa78cQELsnxdwShcXtRG5h+s2ECDzmQ9jv632HQ2xaBd8FNc63B04BaANaRi9DqGdkKxBiNDu0ya3xFkYhdBkpB18/nkCURVcJeVtAN2SBWJA6A3Lt2QdGBHZC6EepBAB437EPuF8Rx7TcuSybICT148VDeAczPUFKgFx79oFUiXr47hL1MFmglCeKs2HMN70YFwAAAABJRU5ErkJggg==";
4526
+ var img$17 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADjSURBVEhL3ZbbDcIwDEXTLsEoTMM3M/HNNIzCEgRLDpbrRx1iRTyOIrVR09x7ncrqUmstM1nbdRq/LzB4Bsv13u621NOh3b344zOAIuBoc4fLcYXRJhYfShAa78cQELsnxdwShcXtRG5h+s2ECDzmQ9jv632HQ2xaBd8FNc63B04BaANaRi9DqGdkKxBiNDu0ya3xFkYhdBkpB18/nkCURVcJeVtAN2SBWJA6A3Lt2QdGBHZC6EepBAB437EPuF8Rx7TcuSybICT148VDeAczPUFKgFx79oFUiXr47hL1MFmglCeKs2HMN70YFwAAAABJRU5ErkJggg==";
4488
4527
 
4489
4528
  const invert = (value, inverted) => {
4490
4529
  return inverted ? 1 - value : value;
@@ -4500,7 +4539,7 @@ const BooleanEditor = ({
4500
4539
  Checkbox
4501
4540
  } = react.useBuerli(buerli => buerli.options.elements);
4502
4541
  const icon_ = Array.isArray(icon) ? true : Boolean(icon);
4503
- const icons = Array.isArray(icon) && icon.length == 2 ? icon : [img$17, img$16];
4542
+ const icons = Array.isArray(icon) && icon.length == 2 ? icon : [img$18, img$17];
4504
4543
  const {
4505
4544
  setUserValue,
4506
4545
  userValue,
@@ -4553,7 +4592,7 @@ function useBoolParam(drawingId, objId, memberName) {
4553
4592
  });
4554
4593
  }
4555
4594
 
4556
- var Members$u;
4595
+ var Members$v;
4557
4596
  (function (Members) {
4558
4597
  Members["Type"] = "extrudeType";
4559
4598
  Members["Direction"] = "extrudeDir";
@@ -4561,10 +4600,10 @@ var Members$u;
4561
4600
  Members["Limit2"] = "limit2";
4562
4601
  Members["taperAngle"] = "taperAngle";
4563
4602
  Members["capEnds"] = "capEnds";
4564
- })(Members$u || (Members$u = {}));
4603
+ })(Members$v || (Members$v = {}));
4565
4604
  var RegionMembers$3;
4566
4605
  (function (RegionMembers) {
4567
- RegionMembers["Curves"] = "curves";
4606
+ RegionMembers["Selected"] = "selected";
4568
4607
  })(RegionMembers$3 || (RegionMembers$3 = {}));
4569
4608
  const typesCaptions$5 = {
4570
4609
  [classcad.ExtrusionType.CUSTOM]: 'Custom',
@@ -4572,7 +4611,7 @@ const typesCaptions$5 = {
4572
4611
  [classcad.ExtrusionType.SYMMETRIC]: 'Symmetric',
4573
4612
  [classcad.ExtrusionType.UP]: 'Up'
4574
4613
  };
4575
- const RootImpl$A = ({
4614
+ const RootImpl$B = ({
4576
4615
  drawingId,
4577
4616
  pluginId
4578
4617
  }) => {
@@ -4583,20 +4622,37 @@ const RootImpl$A = ({
4583
4622
  var _drawing$structure$tr, _drawing$structure$tr2;
4584
4623
  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;
4585
4624
  });
4586
- const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$3.Curves);
4587
- const type = useTypeParam(drawingId, objectId, Members$u.Type);
4588
- const limit1 = useNumParam(drawingId, objectId, Members$u.Limit1);
4589
- const limit2 = useNumParam(drawingId, objectId, Members$u.Limit2);
4590
- const taperAngle = useNumParam(drawingId, objectId, Members$u.taperAngle, {
4625
+ const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$3.Selected);
4626
+ const type = useTypeParam(drawingId, objectId, Members$v.Type);
4627
+ const limit1 = useNumParam(drawingId, objectId, Members$v.Limit1);
4628
+ const limit2 = useNumParam(drawingId, objectId, Members$v.Limit2);
4629
+ const taperAngle = useNumParam(drawingId, objectId, Members$v.taperAngle, {
4591
4630
  angle: true
4592
4631
  });
4593
- const direction = usePointParam(drawingId, objectId, Members$u.Direction);
4594
- const capEnds = useBoolParam(drawingId, objectId, Members$u.capEnds);
4632
+ const direction = usePointParam(drawingId, objectId, Members$v.Direction);
4633
+ const capEnds = useBoolParam(drawingId, objectId, Members$v.capEnds);
4595
4634
  const sketchId = React.useRef(NOCCID);
4635
+ React.useEffect(() => {
4636
+ const {
4637
+ set
4638
+ } = core.getPlugin(drawingId, pluginId);
4639
+ if (region.userValue.length > 0) {
4640
+ const regionObj = core.getDrawing(drawingId).structure.tree[region.userValue[0]];
4641
+ const [originPos, xDir, yDir] = getRegionCoordSys(drawingId, regionObj);
4642
+ set({
4643
+ originPos,
4644
+ xDir,
4645
+ yDir
4646
+ });
4647
+ }
4648
+ }, [drawingId, pluginId, region]);
4596
4649
  React.useEffect(() => {
4597
4650
  var _tree$sketchGeometryI;
4598
4651
  const tree = core.getDrawing(drawingId).structure.tree;
4599
- const sketchGeometryId = region.userValue[0];
4652
+ const sketchGeometryId = region.userValue.find(id => {
4653
+ var _tree$id;
4654
+ return classcad.ccUtils.base.isA((_tree$id = tree[id]) == null ? void 0 : _tree$id.class, classcad.CCClasses.CCCurve);
4655
+ }) || NOCCID;
4600
4656
  const sketchWithSelectedRegion = ((_tree$sketchGeometryI = tree[sketchGeometryId]) == null ? void 0 : _tree$sketchGeometryI.parent) || NOCCID;
4601
4657
  sketchId.current = sketchWithSelectedRegion;
4602
4658
  }, [drawingId, region]);
@@ -4619,7 +4675,9 @@ const RootImpl$A = ({
4619
4675
  isExpr: false
4620
4676
  }, capEnds.serverValue);
4621
4677
  }, [drawingId, objectId, region, type, limit1, limit2, taperAngle, direction, capEnds]);
4622
- const filter = React.useCallback((scope, data) => scope === TreeObjScope && (sketchId.current === NOCCID || data.object.parent === sketchId.current) && classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCCurve), []);
4678
+ const filter = React.useCallback((scope, data) => {
4679
+ return scope === TreeObjScope && ((sketchId.current === NOCCID || data.object.parent === sketchId.current) && classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCCurve) || classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCSketchRegion) || classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCCompositeCurve));
4680
+ }, []);
4623
4681
  return /*#__PURE__*/React.createElement(PluginForm, {
4624
4682
  drawingId: drawingId,
4625
4683
  pluginId: pluginId,
@@ -4674,108 +4732,379 @@ const RootImpl$A = ({
4674
4732
  inverted: true
4675
4733
  }));
4676
4734
  };
4677
- const Root$A = ({
4735
+ const Root$B = ({
4678
4736
  drawingId,
4679
4737
  pluginId
4680
4738
  }) => {
4681
4739
  return /*#__PURE__*/React.createElement(FtPluginValidator, {
4682
4740
  drawingId: drawingId,
4683
4741
  pluginId: pluginId
4684
- }, /*#__PURE__*/React.createElement(RootImpl$A, {
4742
+ }, /*#__PURE__*/React.createElement(RootImpl$B, {
4685
4743
  drawingId: drawingId,
4686
4744
  pluginId: pluginId
4687
4745
  }));
4688
4746
  };
4689
4747
 
4690
- const description$A = {
4691
- name: 'Extrusion',
4692
- version: '1.0.0',
4693
- author: 'Ledas',
4694
- persistent: true,
4695
- visible: false,
4696
- global: false,
4697
- initialState: addMembers
4748
+ const Point$2 = ({
4749
+ position,
4750
+ radius,
4751
+ color,
4752
+ opacity = 1,
4753
+ handlers,
4754
+ userData
4755
+ }) => {
4756
+ return /*#__PURE__*/React.createElement("mesh", _extends({
4757
+ position: position.clone(),
4758
+ userData: userData
4759
+ }, handlers), /*#__PURE__*/React.createElement("sphereGeometry", {
4760
+ attach: "geometry",
4761
+ args: [radius, 32, 16]
4762
+ }), /*#__PURE__*/React.createElement("meshBasicMaterial", {
4763
+ attach: "material",
4764
+ color: color,
4765
+ opacity: opacity,
4766
+ transparent: opacity < 1
4767
+ }));
4698
4768
  };
4699
-
4700
- var index$A = /*#__PURE__*/Object.freeze({
4701
- __proto__: null,
4702
- Root: Root$A,
4703
- description: description$A
4704
- });
4705
-
4706
- var Members$t;
4707
- (function (Members) {
4708
- Members["Type"] = "extrudeType";
4709
- Members["Direction"] = "extrudeDir";
4710
- Members["Limit1"] = "limit1";
4711
- Members["Limit2"] = "limit2";
4712
- Members["TwistAngle"] = "twistAngle";
4713
- Members["TwistCenter"] = "twistCenter";
4714
- Members["CapEnds"] = "capEnds";
4715
- })(Members$t || (Members$t = {}));
4716
- var RegionMembers$2;
4717
- (function (RegionMembers) {
4718
- RegionMembers["Curves"] = "curves";
4719
- })(RegionMembers$2 || (RegionMembers$2 = {}));
4720
- const typesCaptions$4 = {
4721
- [classcad.ExtrusionType.CUSTOM]: 'Custom',
4722
- [classcad.ExtrusionType.DOWN]: 'Down',
4723
- [classcad.ExtrusionType.SYMMETRIC]: 'Symmetric',
4724
- [classcad.ExtrusionType.UP]: 'Up'
4769
+ const Arrow = ({
4770
+ position,
4771
+ direction,
4772
+ length,
4773
+ width,
4774
+ color,
4775
+ opacity = 1,
4776
+ handlers,
4777
+ userData,
4778
+ withCone = true
4779
+ }) => {
4780
+ const cylinderWith = width;
4781
+ const coneWidth = cylinderWith * 1.5;
4782
+ const coneLength = Math.min(coneWidth / 0.12, length / 2.0);
4783
+ const cylinderLength = withCone ? length - coneLength : length;
4784
+ return /*#__PURE__*/React.createElement("group", _extends({
4785
+ position: position.clone(),
4786
+ quaternion: new THREE__namespace.Quaternion().setFromUnitVectors(new THREE__namespace.Vector3(0, 1, 0), direction.clone().normalize())
4787
+ }, handlers, {
4788
+ userData: userData
4789
+ }), /*#__PURE__*/React.createElement("mesh", {
4790
+ position: new THREE__namespace.Vector3(0, cylinderLength / 2.0, 0),
4791
+ renderOrder: 500,
4792
+ userData: userData
4793
+ }, /*#__PURE__*/React.createElement("cylinderGeometry", {
4794
+ attach: "geometry",
4795
+ args: [cylinderWith, cylinderWith, cylinderLength, 24, 1]
4796
+ }), /*#__PURE__*/React.createElement("meshBasicMaterial", {
4797
+ attach: "material",
4798
+ color: color,
4799
+ opacity: opacity,
4800
+ transparent: true
4801
+ })), withCone && /*#__PURE__*/React.createElement("mesh", {
4802
+ position: new THREE__namespace.Vector3(0, cylinderLength + coneLength / 2.0, 0),
4803
+ renderOrder: 500,
4804
+ userData: userData
4805
+ }, /*#__PURE__*/React.createElement("coneGeometry", {
4806
+ attach: "geometry",
4807
+ args: [coneWidth, coneLength, 24, 1]
4808
+ }), /*#__PURE__*/React.createElement("meshBasicMaterial", {
4809
+ attach: "material",
4810
+ color: color,
4811
+ opacity: opacity,
4812
+ transparent: opacity < 1
4813
+ })));
4725
4814
  };
4726
- const RootImpl$z = ({
4727
- drawingId,
4728
- pluginId
4815
+ const OriginPoint = ({
4816
+ position,
4817
+ color,
4818
+ opacity = 1,
4819
+ handlers,
4820
+ userData
4729
4821
  }) => {
4730
- const {
4731
- objectId
4732
- } = react.usePlugin(drawingId, pluginId, plugin => plugin);
4733
- const sketchRegionId = useDrawingCCId(drawingId, drawing => {
4734
- var _drawing$structure$tr, _drawing$structure$tr2;
4735
- 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;
4822
+ return /*#__PURE__*/React.createElement(Point$2, {
4823
+ position: position ? position.clone() : new THREE__namespace.Vector3(),
4824
+ radius: 2,
4825
+ color: color,
4826
+ opacity: opacity,
4827
+ handlers: handlers,
4828
+ userData: userData
4736
4829
  });
4737
- const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$2.Curves);
4738
- const type = useTypeParam(drawingId, objectId, Members$t.Type);
4739
- const limit1 = useNumParam(drawingId, objectId, Members$t.Limit1);
4740
- const limit2 = useNumParam(drawingId, objectId, Members$t.Limit2);
4741
- const twistAngle = useNumParam(drawingId, objectId, Members$t.TwistAngle, {
4742
- angle: true
4830
+ };
4831
+ const AxisArrow = ({
4832
+ position,
4833
+ direction,
4834
+ color,
4835
+ opacity = 1,
4836
+ handlers,
4837
+ userData,
4838
+ length,
4839
+ width,
4840
+ withCone = true
4841
+ }) => {
4842
+ return /*#__PURE__*/React.createElement(Arrow, {
4843
+ position: position ? position.clone() : new THREE__namespace.Vector3(),
4844
+ direction: direction.clone(),
4845
+ length: length || 21,
4846
+ width: width || 1,
4847
+ color: color,
4848
+ opacity: opacity,
4849
+ handlers: handlers,
4850
+ userData: userData,
4851
+ withCone: withCone
4743
4852
  });
4744
- const twistCenter = usePointParam(drawingId, objectId, Members$t.TwistCenter);
4745
- const direction = usePointParam(drawingId, objectId, Members$t.Direction);
4746
- const capEnds = useBoolParam(drawingId, objectId, Members$t.CapEnds);
4747
- const sketchId = React.useRef(NOCCID);
4748
- React.useEffect(() => {
4749
- var _tree$sketchGeometryI;
4750
- const tree = core.getDrawing(drawingId).structure.tree;
4751
- const sketchGeometryId = region.userValue[0];
4752
- const sketchWithSelectedRegion = ((_tree$sketchGeometryI = tree[sketchGeometryId]) == null ? void 0 : _tree$sketchGeometryI.parent) || NOCCID;
4753
- sketchId.current = sketchWithSelectedRegion;
4754
- }, [drawingId, region]);
4755
- const updateAndClose = React.useCallback(() => {
4756
- return classcad.ccAPI.feature.updateTwist(drawingId, objectId, region.serverValue, type.serverValue, type.serverValue === classcad.ExtrusionType.CUSTOM ? limit1.serverValue : {
4757
- value: 0.0,
4758
- isExpr: false
4759
- }, limit2.serverValue, type.serverValue === classcad.ExtrusionType.CUSTOM ? direction.serverValue : {
4760
- value: {
4761
- x: 0.0,
4762
- y: 0.0,
4763
- z: 1.0
4764
- },
4765
- isExpr: false
4766
- },
4767
- // TODO: This is a workaround to prevent sending both non-zero taperAngle and direction values to the server;
4768
- // this would result in crashing the extrusion functionality somehow
4769
- twistAngle.serverValue, type.userValue === classcad.ExtrusionType.CUSTOM ? twistCenter.serverValue : {
4770
- value: {
4771
- x: 0.0,
4853
+ };
4854
+
4855
+ //TODO: don't use any
4856
+ const Csys = ({
4857
+ matrix,
4858
+ opacity,
4859
+ handlers,
4860
+ color,
4861
+ userData
4862
+ }) => {
4863
+ const position = new THREE__namespace.Vector3().setFromMatrixPosition(matrix);
4864
+ const ref = useScale$1(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
4865
+ return /*#__PURE__*/React.createElement("group", _extends({
4866
+ matrix: matrix,
4867
+ matrixAutoUpdate: false,
4868
+ userData: userData
4869
+ }, handlers), /*#__PURE__*/React.createElement("group", {
4870
+ ref: ref
4871
+ }, /*#__PURE__*/React.createElement(OriginPoint, {
4872
+ position: new THREE__namespace.Vector3(),
4873
+ color: color || 0x000000,
4874
+ opacity: opacity,
4875
+ userData: userData
4876
+ }), /*#__PURE__*/React.createElement(AxisArrow, {
4877
+ position: new THREE__namespace.Vector3(),
4878
+ direction: new THREE__namespace.Vector3(1, 0, 0),
4879
+ color: color || 0xd52828,
4880
+ opacity: opacity,
4881
+ userData: userData
4882
+ }), /*#__PURE__*/React.createElement(AxisArrow, {
4883
+ position: new THREE__namespace.Vector3(),
4884
+ direction: new THREE__namespace.Vector3(0, 1, 0),
4885
+ color: color || 0x28a628,
4886
+ opacity: opacity,
4887
+ userData: userData
4888
+ }), /*#__PURE__*/React.createElement(AxisArrow, {
4889
+ position: new THREE__namespace.Vector3(),
4890
+ direction: new THREE__namespace.Vector3(0, 0, 1),
4891
+ color: color || 0x2828d7,
4892
+ opacity: opacity,
4893
+ userData: userData
4894
+ })));
4895
+ };
4896
+ const SelectedCsys = ({
4897
+ matrix,
4898
+ opacity = 1.0,
4899
+ handlers,
4900
+ color,
4901
+ userData
4902
+ }) => {
4903
+ const position = new THREE__namespace.Vector3().setFromMatrixPosition(matrix);
4904
+ const ref = useScale$1(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
4905
+ return /*#__PURE__*/React.createElement("group", _extends({
4906
+ matrix: matrix,
4907
+ matrixAutoUpdate: false
4908
+ }, handlers), /*#__PURE__*/React.createElement("group", {
4909
+ ref: ref
4910
+ }, /*#__PURE__*/React.createElement(OriginPoint, {
4911
+ position: new THREE__namespace.Vector3(),
4912
+ color: color || 0x000000,
4913
+ opacity: opacity,
4914
+ userData: userData
4915
+ }), /*#__PURE__*/React.createElement(AxisArrow, {
4916
+ position: new THREE__namespace.Vector3(),
4917
+ direction: new THREE__namespace.Vector3(1, 0, 0),
4918
+ color: color || 0xd52828,
4919
+ opacity: opacity,
4920
+ userData: userData,
4921
+ withCone: false
4922
+ }), /*#__PURE__*/React.createElement(AxisArrow, {
4923
+ position: new THREE__namespace.Vector3(),
4924
+ direction: new THREE__namespace.Vector3(0, 1, 0),
4925
+ color: color || 0x28a628,
4926
+ opacity: opacity,
4927
+ userData: userData,
4928
+ withCone: false
4929
+ }), /*#__PURE__*/React.createElement(AxisArrow, {
4930
+ position: new THREE__namespace.Vector3(),
4931
+ direction: new THREE__namespace.Vector3(0, 0, 1),
4932
+ width: 1.25,
4933
+ length: 45,
4934
+ color: color || 0x2828d7,
4935
+ opacity: opacity,
4936
+ userData: userData
4937
+ })));
4938
+ };
4939
+
4940
+ const virtualScene = new THREE__namespace.Scene();
4941
+ const HUD = ({
4942
+ children
4943
+ }) => {
4944
+ const {
4945
+ gl,
4946
+ camera
4947
+ } = fiber.useThree();
4948
+ fiber.useFrame(() => {
4949
+ gl.autoClear = false;
4950
+ gl.clearDepth();
4951
+ gl.render(virtualScene, camera);
4952
+ }, 3);
4953
+ return /*#__PURE__*/React.createElement(React.Fragment, null, fiber.createPortal( /*#__PURE__*/React.createElement("group", null, children), virtualScene));
4954
+ };
4955
+
4956
+ function ViewImpl$i({
4957
+ drawingId,
4958
+ pluginId
4959
+ }) {
4960
+ const {
4961
+ state
4962
+ } = react.usePlugin(drawingId, pluginId, pluginState => pluginState);
4963
+ const {
4964
+ originPos,
4965
+ xDir,
4966
+ yDir
4967
+ } = state;
4968
+ const isActive = react.useDrawing(drawingId, drawing => drawing.plugin.active.feature === pluginId);
4969
+ const previewMatrix = React.useMemo(() => {
4970
+ const originPos_ = originPos ? originPos : new THREE__namespace.Vector3(0.0, 0.0, 0.0);
4971
+ const xDir_ = xDir ? xDir : new THREE__namespace.Vector3(1.0, 0.0, 0.0);
4972
+ const yDir_ = yDir ? yDir : new THREE__namespace.Vector3(0.0, 1.0, 0.0);
4973
+ const nullVec = new THREE__namespace.Vector3(0.0, 0.0, 0.0);
4974
+ return core.MathUtils.calcluateTransform(originPos_, xDir_, yDir_, nullVec, nullVec, 0);
4975
+ }, [originPos, xDir, yDir]);
4976
+ return /*#__PURE__*/React.createElement(HUD, null, /*#__PURE__*/React.createElement("group", null, isActive && /*#__PURE__*/React.createElement(Csys, {
4977
+ matrix: previewMatrix,
4978
+ opacity: 0.5
4979
+ })));
4980
+ }
4981
+ const View$i = ({
4982
+ drawingId,
4983
+ pluginId
4984
+ }) => {
4985
+ return /*#__PURE__*/React.createElement(FtPluginValidator, {
4986
+ drawingId: drawingId,
4987
+ pluginId: pluginId,
4988
+ inCanvas: true
4989
+ }, /*#__PURE__*/React.createElement(ViewImpl$i, {
4990
+ drawingId: drawingId,
4991
+ pluginId: pluginId
4992
+ }));
4993
+ };
4994
+
4995
+ const description$B = {
4996
+ name: 'Extrusion',
4997
+ version: '1.0.0',
4998
+ author: 'Ledas',
4999
+ persistent: true,
5000
+ visible: false,
5001
+ global: false,
5002
+ initialState: {
5003
+ originPos: undefined,
5004
+ xDir: undefined,
5005
+ yDir: undefined
5006
+ }
5007
+ };
5008
+
5009
+ var index$B = /*#__PURE__*/Object.freeze({
5010
+ __proto__: null,
5011
+ Root: Root$B,
5012
+ View: View$i,
5013
+ description: description$B
5014
+ });
5015
+
5016
+ var Members$u;
5017
+ (function (Members) {
5018
+ Members["Type"] = "extrudeType";
5019
+ Members["Direction"] = "extrudeDir";
5020
+ Members["Limit1"] = "limit1";
5021
+ Members["Limit2"] = "limit2";
5022
+ Members["TwistAngle"] = "twistAngle";
5023
+ Members["TwistCenter"] = "twistCenter";
5024
+ Members["CapEnds"] = "capEnds";
5025
+ })(Members$u || (Members$u = {}));
5026
+ var RegionMembers$2;
5027
+ (function (RegionMembers) {
5028
+ RegionMembers["Selected"] = "selected";
5029
+ })(RegionMembers$2 || (RegionMembers$2 = {}));
5030
+ const typesCaptions$4 = {
5031
+ [classcad.ExtrusionType.CUSTOM]: 'Custom',
5032
+ [classcad.ExtrusionType.DOWN]: 'Down',
5033
+ [classcad.ExtrusionType.SYMMETRIC]: 'Symmetric',
5034
+ [classcad.ExtrusionType.UP]: 'Up'
5035
+ };
5036
+ const RootImpl$A = ({
5037
+ drawingId,
5038
+ pluginId
5039
+ }) => {
5040
+ const {
5041
+ objectId
5042
+ } = react.usePlugin(drawingId, pluginId, plugin => plugin);
5043
+ const sketchRegionId = useDrawingCCId(drawingId, drawing => {
5044
+ var _drawing$structure$tr, _drawing$structure$tr2;
5045
+ 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;
5046
+ });
5047
+ const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$2.Selected);
5048
+ const type = useTypeParam(drawingId, objectId, Members$u.Type);
5049
+ const limit1 = useNumParam(drawingId, objectId, Members$u.Limit1);
5050
+ const limit2 = useNumParam(drawingId, objectId, Members$u.Limit2);
5051
+ const twistAngle = useNumParam(drawingId, objectId, Members$u.TwistAngle, {
5052
+ angle: true
5053
+ });
5054
+ const twistCenter = usePointParam(drawingId, objectId, Members$u.TwistCenter);
5055
+ const direction = usePointParam(drawingId, objectId, Members$u.Direction);
5056
+ const capEnds = useBoolParam(drawingId, objectId, Members$u.CapEnds);
5057
+ const sketchId = React.useRef(NOCCID);
5058
+ React.useEffect(() => {
5059
+ const {
5060
+ set
5061
+ } = core.getPlugin(drawingId, pluginId);
5062
+ if (region.userValue.length > 0) {
5063
+ const regionObj = core.getDrawing(drawingId).structure.tree[region.userValue[0]];
5064
+ const [originPos, xDir, yDir] = getRegionCoordSys(drawingId, regionObj);
5065
+ set({
5066
+ originPos,
5067
+ xDir,
5068
+ yDir
5069
+ });
5070
+ }
5071
+ }, [drawingId, pluginId, region]);
5072
+ React.useEffect(() => {
5073
+ var _tree$sketchGeometryI;
5074
+ const tree = core.getDrawing(drawingId).structure.tree;
5075
+ const sketchGeometryId = region.userValue.find(id => {
5076
+ var _tree$id;
5077
+ return classcad.ccUtils.base.isA((_tree$id = tree[id]) == null ? void 0 : _tree$id.class, classcad.CCClasses.CCCurve);
5078
+ }) || NOCCID;
5079
+ const sketchWithSelectedRegion = ((_tree$sketchGeometryI = tree[sketchGeometryId]) == null ? void 0 : _tree$sketchGeometryI.parent) || NOCCID;
5080
+ sketchId.current = sketchWithSelectedRegion;
5081
+ }, [drawingId, region]);
5082
+ const updateAndClose = React.useCallback(() => {
5083
+ return classcad.ccAPI.feature.updateTwist(drawingId, objectId, region.serverValue, type.serverValue, type.serverValue === classcad.ExtrusionType.CUSTOM ? limit1.serverValue : {
5084
+ value: 0.0,
5085
+ isExpr: false
5086
+ }, limit2.serverValue, type.serverValue === classcad.ExtrusionType.CUSTOM ? direction.serverValue : {
5087
+ value: {
5088
+ x: 0.0,
5089
+ y: 0.0,
5090
+ z: 1.0
5091
+ },
5092
+ isExpr: false
5093
+ },
5094
+ // TODO: This is a workaround to prevent sending both non-zero taperAngle and direction values to the server;
5095
+ // this would result in crashing the extrusion functionality somehow
5096
+ twistAngle.serverValue, type.userValue === classcad.ExtrusionType.CUSTOM ? twistCenter.serverValue : {
5097
+ value: {
5098
+ x: 0.0,
4772
5099
  y: 0.0,
4773
5100
  z: 0.0
4774
5101
  },
4775
5102
  isExpr: false
4776
5103
  }, capEnds.serverValue);
4777
5104
  }, [drawingId, objectId, region, type, limit1, limit2, twistAngle, twistCenter, direction, capEnds]);
4778
- const filter = React.useCallback((scope, data) => scope === TreeObjScope && (sketchId.current === NOCCID || data.object.parent === sketchId.current) && classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCCurve), [sketchId]);
5105
+ const filter = React.useCallback((scope, data) => {
5106
+ return scope === TreeObjScope && ((sketchId.current === NOCCID || data.object.parent === sketchId.current) && classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCCurve) || classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCSketchRegion) || classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCCompositeCurve));
5107
+ }, []);
4779
5108
  return /*#__PURE__*/React.createElement(PluginForm, {
4780
5109
  drawingId: drawingId,
4781
5110
  pluginId: pluginId,
@@ -4835,47 +5164,91 @@ const RootImpl$z = ({
4835
5164
  inverted: true
4836
5165
  }));
4837
5166
  };
4838
- const Root$z = ({
5167
+ const Root$A = ({
4839
5168
  drawingId,
4840
5169
  pluginId
4841
5170
  }) => {
4842
5171
  return /*#__PURE__*/React.createElement(FtPluginValidator, {
4843
5172
  drawingId: drawingId,
4844
5173
  pluginId: pluginId
4845
- }, /*#__PURE__*/React.createElement(RootImpl$z, {
5174
+ }, /*#__PURE__*/React.createElement(RootImpl$A, {
4846
5175
  drawingId: drawingId,
4847
5176
  pluginId: pluginId
4848
5177
  }));
4849
5178
  };
4850
5179
 
4851
- const description$z = {
5180
+ function ViewImpl$h({
5181
+ drawingId,
5182
+ pluginId
5183
+ }) {
5184
+ const {
5185
+ state
5186
+ } = react.usePlugin(drawingId, pluginId, pluginState => pluginState);
5187
+ const {
5188
+ originPos,
5189
+ xDir,
5190
+ yDir
5191
+ } = state;
5192
+ const isActive = react.useDrawing(drawingId, drawing => drawing.plugin.active.feature === pluginId);
5193
+ const previewMatrix = React.useMemo(() => {
5194
+ const originPos_ = originPos ? originPos : new THREE__namespace.Vector3(0.0, 0.0, 0.0);
5195
+ const xDir_ = xDir ? xDir : new THREE__namespace.Vector3(1.0, 0.0, 0.0);
5196
+ const yDir_ = yDir ? yDir : new THREE__namespace.Vector3(0.0, 1.0, 0.0);
5197
+ const nullVec = new THREE__namespace.Vector3(0.0, 0.0, 0.0);
5198
+ return core.MathUtils.calcluateTransform(originPos_, xDir_, yDir_, nullVec, nullVec, 0);
5199
+ }, [originPos, xDir, yDir]);
5200
+ return /*#__PURE__*/React.createElement(HUD, null, /*#__PURE__*/React.createElement("group", null, isActive && /*#__PURE__*/React.createElement(Csys, {
5201
+ matrix: previewMatrix,
5202
+ opacity: 0.5
5203
+ })));
5204
+ }
5205
+ const View$h = ({
5206
+ drawingId,
5207
+ pluginId
5208
+ }) => {
5209
+ return /*#__PURE__*/React.createElement(FtPluginValidator, {
5210
+ drawingId: drawingId,
5211
+ pluginId: pluginId,
5212
+ inCanvas: true
5213
+ }, /*#__PURE__*/React.createElement(ViewImpl$h, {
5214
+ drawingId: drawingId,
5215
+ pluginId: pluginId
5216
+ }));
5217
+ };
5218
+
5219
+ const description$A = {
4852
5220
  name: 'Twist',
4853
5221
  version: '1.0.0',
4854
5222
  author: 'Ledas',
4855
5223
  persistent: true,
4856
5224
  visible: false,
4857
5225
  global: false,
4858
- initialState: addMembers
5226
+ initialState: {
5227
+ originPos: undefined,
5228
+ xDir: undefined,
5229
+ yDir: undefined
5230
+ }
4859
5231
  };
4860
5232
 
4861
- var index$z = /*#__PURE__*/Object.freeze({
5233
+ var index$A = /*#__PURE__*/Object.freeze({
4862
5234
  __proto__: null,
4863
- Root: Root$z,
4864
- description: description$z
5235
+ Root: Root$A,
5236
+ View: View$h,
5237
+ description: description$A
4865
5238
  });
4866
5239
 
4867
- var Members$s;
5240
+ var Members$t;
4868
5241
  (function (Members) {
4869
5242
  Members["Axis"] = "references";
4870
5243
  Members["Inverted"] = "inverted";
4871
5244
  Members["StartAngle"] = "startAngle";
4872
5245
  Members["EndAngle"] = "endAngle";
4873
- })(Members$s || (Members$s = {}));
5246
+ })(Members$t || (Members$t = {}));
4874
5247
  var RegionMembers$1;
4875
5248
  (function (RegionMembers) {
4876
- RegionMembers["Curves"] = "curves";
5249
+ RegionMembers["Selected"] = "selected";
4877
5250
  })(RegionMembers$1 || (RegionMembers$1 = {}));
4878
- const RootImpl$y = ({
5251
+ const RootImpl$z = ({
4879
5252
  drawingId,
4880
5253
  pluginId
4881
5254
  }) => {
@@ -4886,27 +5259,32 @@ const RootImpl$y = ({
4886
5259
  var _drawing$structure$tr, _drawing$structure$tr2;
4887
5260
  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;
4888
5261
  });
4889
- const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$1.Curves);
4890
- const axis = useRefsParam(drawingId, objectId, Members$s.Axis);
4891
- const startAngle = useNumParam(drawingId, objectId, Members$s.StartAngle, {
5262
+ const region = useRefsParam(drawingId, sketchRegionId, RegionMembers$1.Selected);
5263
+ const axis = useRefsParam(drawingId, objectId, Members$t.Axis);
5264
+ const startAngle = useNumParam(drawingId, objectId, Members$t.StartAngle, {
4892
5265
  angle: true
4893
5266
  });
4894
- const endAngle = useNumParam(drawingId, objectId, Members$s.EndAngle, {
5267
+ const endAngle = useNumParam(drawingId, objectId, Members$t.EndAngle, {
4895
5268
  angle: true
4896
5269
  });
4897
- const inverted = useBoolParam(drawingId, objectId, Members$s.Inverted);
5270
+ const inverted = useBoolParam(drawingId, objectId, Members$t.Inverted);
4898
5271
  const sketchId = React.useRef(NOCCID);
4899
5272
  React.useEffect(() => {
4900
5273
  var _tree$sketchGeometryI;
4901
5274
  const tree = core.getDrawing(drawingId).structure.tree;
4902
- const sketchGeometryId = region.userValue[0];
5275
+ const sketchGeometryId = region.userValue.find(id => {
5276
+ var _tree$id;
5277
+ return classcad.ccUtils.base.isA((_tree$id = tree[id]) == null ? void 0 : _tree$id.class, classcad.CCClasses.CCCurve);
5278
+ }) || NOCCID;
4903
5279
  const sketchWithSelectedRegion = ((_tree$sketchGeometryI = tree[sketchGeometryId]) == null ? void 0 : _tree$sketchGeometryI.parent) || NOCCID;
4904
5280
  sketchId.current = sketchWithSelectedRegion;
4905
5281
  }, [drawingId, region]);
4906
5282
  const updateAndClose = React.useCallback(() => {
4907
5283
  return classcad.ccAPI.feature.updateRevolve(drawingId, objectId, region.serverValue, axis.serverValue, startAngle.serverValue, endAngle.serverValue, inverted.serverValue);
4908
5284
  }, [drawingId, objectId, region, axis, startAngle, endAngle, inverted]);
4909
- const regionFilter = React.useCallback((scope, data) => scope === TreeObjScope && (sketchId.current === NOCCID || data.object.parent === sketchId.current) && classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCCurve), []);
5285
+ const filter = React.useCallback((scope, data) => {
5286
+ return scope === TreeObjScope && ((sketchId.current === NOCCID || data.object.parent === sketchId.current) && classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCCurve) || classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCSketchRegion) || classcad.ccUtils.base.isA(data.object.class, classcad.CCClasses.CCCompositeCurve));
5287
+ }, []);
4910
5288
  return /*#__PURE__*/React.createElement(PluginForm, {
4911
5289
  drawingId: drawingId,
4912
5290
  pluginId: pluginId,
@@ -4922,7 +5300,7 @@ const RootImpl$y = ({
4922
5300
  drawingId: drawingId,
4923
5301
  param: region,
4924
5302
  caption: "Region",
4925
- filter: regionFilter,
5303
+ filter: filter,
4926
5304
  customIdPicker: pickObjId,
4927
5305
  sketchLines: true
4928
5306
  }), /*#__PURE__*/React.createElement(RefsEditor, {
@@ -4946,20 +5324,20 @@ const RootImpl$y = ({
4946
5324
  icon: true
4947
5325
  })));
4948
5326
  };
4949
- const Root$y = ({
5327
+ const Root$z = ({
4950
5328
  drawingId,
4951
5329
  pluginId
4952
5330
  }) => {
4953
5331
  return /*#__PURE__*/React.createElement(FtPluginValidator, {
4954
5332
  drawingId: drawingId,
4955
5333
  pluginId: pluginId
4956
- }, /*#__PURE__*/React.createElement(RootImpl$y, {
5334
+ }, /*#__PURE__*/React.createElement(RootImpl$z, {
4957
5335
  drawingId: drawingId,
4958
5336
  pluginId: pluginId
4959
5337
  }));
4960
5338
  };
4961
5339
 
4962
- const description$y = {
5340
+ const description$z = {
4963
5341
  name: 'Revolve',
4964
5342
  version: '1.0.0',
4965
5343
  author: 'Ledas',
@@ -4969,30 +5347,30 @@ const description$y = {
4969
5347
  initialState: addMembers
4970
5348
  };
4971
5349
 
4972
- var index$y = /*#__PURE__*/Object.freeze({
5350
+ var index$z = /*#__PURE__*/Object.freeze({
4973
5351
  __proto__: null,
4974
- Root: Root$y,
4975
- description: description$y
5352
+ Root: Root$z,
5353
+ description: description$z
4976
5354
  });
4977
5355
 
4978
- var Members$r;
5356
+ var Members$s;
4979
5357
  (function (Members) {
4980
5358
  Members["CSys"] = "references";
4981
5359
  Members["Width"] = "width";
4982
5360
  Members["Height"] = "height";
4983
5361
  Members["Length"] = "length";
4984
- })(Members$r || (Members$r = {}));
4985
- function RootImpl$x({
5362
+ })(Members$s || (Members$s = {}));
5363
+ function RootImpl$y({
4986
5364
  drawingId,
4987
5365
  pluginId
4988
5366
  }) {
4989
5367
  const {
4990
5368
  objectId
4991
5369
  } = react.usePlugin(drawingId, pluginId, plugin => plugin);
4992
- const csys = useRefsParam(drawingId, objectId, Members$r.CSys);
4993
- const width = useNumParam(drawingId, objectId, Members$r.Width);
4994
- const height = useNumParam(drawingId, objectId, Members$r.Height);
4995
- const length = useNumParam(drawingId, objectId, Members$r.Length);
5370
+ const csys = useRefsParam(drawingId, objectId, Members$s.CSys);
5371
+ const width = useNumParam(drawingId, objectId, Members$s.Width);
5372
+ const height = useNumParam(drawingId, objectId, Members$s.Height);
5373
+ const length = useNumParam(drawingId, objectId, Members$s.Length);
4996
5374
  const update = React.useCallback(() => {
4997
5375
  return classcad.ccAPI.feature.updateBox(drawingId, objectId, csys.serverValue, width.serverValue, length.serverValue, height.serverValue);
4998
5376
  }, [drawingId, objectId, csys, width, height, length]);
@@ -5042,20 +5420,20 @@ function RootImpl$x({
5042
5420
  allowExpr: true
5043
5421
  }));
5044
5422
  }
5045
- const Root$x = ({
5423
+ const Root$y = ({
5046
5424
  drawingId,
5047
5425
  pluginId
5048
5426
  }) => {
5049
5427
  return /*#__PURE__*/React.createElement(FtPluginValidator, {
5050
5428
  drawingId: drawingId,
5051
5429
  pluginId: pluginId
5052
- }, /*#__PURE__*/React.createElement(RootImpl$x, {
5430
+ }, /*#__PURE__*/React.createElement(RootImpl$y, {
5053
5431
  drawingId: drawingId,
5054
5432
  pluginId: pluginId
5055
5433
  }));
5056
5434
  };
5057
5435
 
5058
- const description$x = {
5436
+ const description$y = {
5059
5437
  name: 'Box',
5060
5438
  version: '1.0.0',
5061
5439
  author: 'Ledas',
@@ -5064,26 +5442,26 @@ const description$x = {
5064
5442
  global: false
5065
5443
  };
5066
5444
 
5067
- var index$x = /*#__PURE__*/Object.freeze({
5445
+ var index$y = /*#__PURE__*/Object.freeze({
5068
5446
  __proto__: null,
5069
- Root: Root$x,
5070
- description: description$x
5447
+ Root: Root$y,
5448
+ description: description$y
5071
5449
  });
5072
5450
 
5073
- var Members$q;
5451
+ var Members$r;
5074
5452
  (function (Members) {
5075
5453
  Members["CSys"] = "references";
5076
5454
  Members["Radius"] = "radius";
5077
- })(Members$q || (Members$q = {}));
5078
- function RootImpl$w({
5455
+ })(Members$r || (Members$r = {}));
5456
+ function RootImpl$x({
5079
5457
  drawingId,
5080
5458
  pluginId
5081
5459
  }) {
5082
5460
  const {
5083
5461
  objectId
5084
5462
  } = react.usePlugin(drawingId, pluginId, plugin => plugin);
5085
- const csys = useRefsParam(drawingId, objectId, Members$q.CSys);
5086
- const radius = useNumParam(drawingId, objectId, Members$q.Radius);
5463
+ const csys = useRefsParam(drawingId, objectId, Members$r.CSys);
5464
+ const radius = useNumParam(drawingId, objectId, Members$r.Radius);
5087
5465
  const update = React.useCallback(() => {
5088
5466
  return classcad.ccAPI.feature.updateSphere(drawingId, objectId, csys.userValue, radius.userValue);
5089
5467
  }, [drawingId, objectId, csys, radius]);
@@ -5113,20 +5491,20 @@ function RootImpl$w({
5113
5491
  allowExpr: true
5114
5492
  }));
5115
5493
  }
5116
- const Root$w = ({
5494
+ const Root$x = ({
5117
5495
  drawingId,
5118
5496
  pluginId
5119
5497
  }) => {
5120
5498
  return /*#__PURE__*/React.createElement(FtPluginValidator, {
5121
5499
  drawingId: drawingId,
5122
5500
  pluginId: pluginId
5123
- }, /*#__PURE__*/React.createElement(RootImpl$w, {
5501
+ }, /*#__PURE__*/React.createElement(RootImpl$x, {
5124
5502
  drawingId: drawingId,
5125
5503
  pluginId: pluginId
5126
5504
  }));
5127
5505
  };
5128
5506
 
5129
- const description$w = {
5507
+ const description$x = {
5130
5508
  name: 'Sphere',
5131
5509
  version: '1.0.0',
5132
5510
  author: 'Ledas',
@@ -5135,28 +5513,28 @@ const description$w = {
5135
5513
  global: false
5136
5514
  };
5137
5515
 
5138
- var index$w = /*#__PURE__*/Object.freeze({
5516
+ var index$x = /*#__PURE__*/Object.freeze({
5139
5517
  __proto__: null,
5140
- Root: Root$w,
5141
- description: description$w
5518
+ Root: Root$x,
5519
+ description: description$x
5142
5520
  });
5143
5521
 
5144
- var Members$p;
5522
+ var Members$q;
5145
5523
  (function (Members) {
5146
5524
  Members["CSys"] = "references";
5147
5525
  Members["Diameter"] = "diameter";
5148
5526
  Members["Height"] = "height";
5149
- })(Members$p || (Members$p = {}));
5150
- function RootImpl$v({
5527
+ })(Members$q || (Members$q = {}));
5528
+ function RootImpl$w({
5151
5529
  drawingId,
5152
5530
  pluginId
5153
5531
  }) {
5154
5532
  const {
5155
5533
  objectId
5156
5534
  } = react.usePlugin(drawingId, pluginId, plugin => plugin);
5157
- const csys = useRefsParam(drawingId, objectId, Members$p.CSys);
5158
- const diameter = useNumParam(drawingId, objectId, Members$p.Diameter);
5159
- const height = useNumParam(drawingId, objectId, Members$p.Height);
5535
+ const csys = useRefsParam(drawingId, objectId, Members$q.CSys);
5536
+ const diameter = useNumParam(drawingId, objectId, Members$q.Diameter);
5537
+ const height = useNumParam(drawingId, objectId, Members$q.Height);
5160
5538
  const update = React.useCallback(() => {
5161
5539
  return classcad.ccAPI.feature.updateCylinder(drawingId, objectId, csys.serverValue, diameter.serverValue, height.serverValue);
5162
5540
  }, [drawingId, objectId, csys, diameter, height]);
@@ -5187,40 +5565,237 @@ function RootImpl$v({
5187
5565
  allowExpr: true
5188
5566
  }), /*#__PURE__*/React.createElement(NumberEditor, {
5189
5567
  drawingId: drawingId,
5190
- caption: "Height",
5191
- param: height,
5192
- validator: acceptableRange({
5193
- value: 0,
5194
- isInclusive: false
5195
- }, undefined),
5196
- allowExpr: true
5568
+ caption: "Height",
5569
+ param: height,
5570
+ validator: acceptableRange({
5571
+ value: 0,
5572
+ isInclusive: false
5573
+ }, undefined),
5574
+ allowExpr: true
5575
+ }));
5576
+ }
5577
+ const Root$w = ({
5578
+ drawingId,
5579
+ pluginId
5580
+ }) => {
5581
+ return /*#__PURE__*/React.createElement(FtPluginValidator, {
5582
+ drawingId: drawingId,
5583
+ pluginId: pluginId
5584
+ }, /*#__PURE__*/React.createElement(RootImpl$w, {
5585
+ drawingId: drawingId,
5586
+ pluginId: pluginId
5587
+ }));
5588
+ };
5589
+
5590
+ const description$w = {
5591
+ name: 'Cylinder',
5592
+ version: '1.0.0',
5593
+ author: 'Ledas',
5594
+ persistent: true,
5595
+ visible: false,
5596
+ global: false
5597
+ };
5598
+
5599
+ var index$w = /*#__PURE__*/Object.freeze({
5600
+ __proto__: null,
5601
+ Root: Root$w,
5602
+ description: description$w
5603
+ });
5604
+
5605
+ var Members$p;
5606
+ (function (Members) {
5607
+ Members["References"] = "references";
5608
+ })(Members$p || (Members$p = {}));
5609
+ const RootImpl$v = ({
5610
+ drawingId,
5611
+ pluginId
5612
+ }) => {
5613
+ const {
5614
+ objectId
5615
+ } = react.usePlugin(drawingId, pluginId, plugin => plugin);
5616
+ const refs = useRefsParam(drawingId, objectId, Members$p.References);
5617
+ const {
5618
+ Checkbox
5619
+ } = react.useBuerli(buerli => buerli.options.elements);
5620
+ const [isFaceSelectionActive, setIsFaceSelectionActive] = React.useState(false);
5621
+ const update = React.useCallback(() => {
5622
+ return classcad.ccAPI.feature.updateCompositeCurve(drawingId, objectId, refs.serverValue);
5623
+ }, [drawingId, objectId, refs]);
5624
+ return /*#__PURE__*/React.createElement(PluginForm, {
5625
+ drawingId: drawingId,
5626
+ pluginId: pluginId,
5627
+ update: update,
5628
+ params: {
5629
+ refs
5630
+ }
5631
+ }, /*#__PURE__*/React.createElement(Checkbox, {
5632
+ checked: isFaceSelectionActive,
5633
+ onChange: e => setIsFaceSelectionActive(e.target.checked)
5634
+ }, "Face selection"), isFaceSelectionActive && /*#__PURE__*/React.createElement(RefsEditor, {
5635
+ drawingId: drawingId,
5636
+ caption: "Curve References",
5637
+ param: refs,
5638
+ customIdPicker: pickGrOrObjId,
5639
+ filter: (scope, data) => core.edgeFilter(scope, data) || ccLineFilter(scope, data) || ccArcFilter(scope, data) || ccCircleFilter(scope, data) || core.meshFilter(scope, data)
5640
+ }), !isFaceSelectionActive && /*#__PURE__*/React.createElement(RefsEditor, {
5641
+ drawingId: drawingId,
5642
+ caption: "Curve References",
5643
+ param: refs,
5644
+ customIdPicker: pickGrOrObjId,
5645
+ filter: (scope, data) => core.edgeFilter(scope, data) || ccLineFilter(scope, data) || ccArcFilter(scope, data) || ccCircleFilter(scope, data) || core.loopFilter(scope, data)
5646
+ }));
5647
+ };
5648
+ const Root$v = ({
5649
+ drawingId,
5650
+ pluginId
5651
+ }) => {
5652
+ return /*#__PURE__*/React.createElement(FtPluginValidator, {
5653
+ drawingId: drawingId,
5654
+ pluginId: pluginId
5655
+ }, /*#__PURE__*/React.createElement(RootImpl$v, {
5656
+ drawingId: drawingId,
5657
+ pluginId: pluginId
5658
+ }));
5659
+ };
5660
+
5661
+ const getHighlightedColor = (isGHovered, isGSelected, isSHovered, isSSelected) => {
5662
+ if (isSHovered) {
5663
+ return '#3280ff';
5664
+ }
5665
+ if (isSSelected) {
5666
+ return '#8040c0';
5667
+ }
5668
+ if (isGHovered) {
5669
+ return 'green';
5670
+ }
5671
+ if (isGSelected) {
5672
+ return 'red';
5673
+ }
5674
+ return undefined;
5675
+ };
5676
+
5677
+ const FatLine = ({
5678
+ line,
5679
+ handlers,
5680
+ userData,
5681
+ color,
5682
+ lineWidth = 3.0
5683
+ }) => {
5684
+ const {
5685
+ size
5686
+ } = fiber.useThree();
5687
+ const primitive = line.geometry;
5688
+ const lg = React.useMemo(() => {
5689
+ return new LineGeometry.LineGeometry().setPositions(primitive.attributes.position.array);
5690
+ }, [primitive]);
5691
+ const resolution = React.useMemo(() => new THREE__namespace.Vector2(size.width, size.height), [size]);
5692
+ return /*#__PURE__*/React.createElement("line2", _extends({
5693
+ geometry: lg
5694
+ }, handlers, {
5695
+ userData: userData,
5696
+ renderOrder: 600
5697
+ }), /*#__PURE__*/React.createElement("lineMaterial", {
5698
+ attach: "material",
5699
+ color: color || new THREE__namespace.Color('black'),
5700
+ opacity: 1.0,
5701
+ linewidth: lineWidth,
5702
+ dashed: false,
5703
+ resolution: resolution,
5704
+ transparent: true,
5705
+ depthTest: true,
5706
+ depthWrite: false,
5707
+ polygonOffset: true,
5708
+ polygonOffsetUnits: -1000
5709
+ }));
5710
+ };
5711
+ const CompositeCurveObj = ({
5712
+ drawingId,
5713
+ color,
5714
+ lineWidth,
5715
+ userData,
5716
+ handlers,
5717
+ objectId
5718
+ }) => {
5719
+ const compCurveObj = react.useDrawing(drawingId, drawing => drawing.structure.tree[objectId]);
5720
+ const curveEntityIds = compCurveObj == null ? void 0 : compCurveObj.children; // CC_CurveEntity ids
5721
+ const curveEntityId = curveEntityIds ? curveEntityIds[0] : -1;
5722
+ const curveEntityObj = react.useDrawing(drawingId, drawing => drawing.structure.tree[curveEntityId]);
5723
+ const cadEntityIds = curveEntityIds && (curveEntityObj == null ? void 0 : curveEntityObj.geometryIdList); // cad entity ids
5724
+ const cadEntityId = cadEntityIds ? cadEntityIds[0] : -1;
5725
+ const entity = react.useDrawing(drawingId, d => d.geometry.cache[cadEntityId]); // cad entity (curve array)
5726
+
5727
+ const items = React.useMemo(() => {
5728
+ if (!entity || entity.meshes.length > 0) return [];
5729
+ return [...entity.lines, ...entity.edges, ...entity.arcs];
5730
+ }, [entity]);
5731
+ return /*#__PURE__*/React.createElement(React.Fragment, null, items.map(item => /*#__PURE__*/React.createElement(FatLine, {
5732
+ key: item.graphicId,
5733
+ line: item,
5734
+ handlers: handlers,
5735
+ userData: userData,
5736
+ color: color,
5737
+ lineWidth: lineWidth
5738
+ })));
5739
+ };
5740
+
5741
+ const ViewImpl$g = ({
5742
+ drawingId,
5743
+ pluginId
5744
+ }) => {
5745
+ const {
5746
+ objectId
5747
+ } = react.usePlugin(drawingId, pluginId, pluginState => pluginState);
5748
+ const isActive = react.useDrawing(drawingId, drawing => drawing.plugin.active.feature === pluginId);
5749
+ const {
5750
+ isGHovered,
5751
+ isGSelected,
5752
+ isSHovered,
5753
+ isSSelected,
5754
+ handlers
5755
+ } = useTreeObjInteraction(drawingId, objectId);
5756
+ const color = getHighlightedColor(isGHovered, isGSelected, isSHovered, isSSelected) || 0x111111;
5757
+ return /*#__PURE__*/React.createElement(HUD, null, !isActive && /*#__PURE__*/React.createElement(CompositeCurveObj, {
5758
+ drawingId: drawingId,
5759
+ objectId: objectId // CC_CompositeCurve
5760
+ ,
5761
+ color: color,
5762
+ lineWidth: 2.0 // ?
5763
+ ,
5764
+ userData: {
5765
+ objId: objectId,
5766
+ onHUD: true
5767
+ },
5768
+ handlers: handlers
5197
5769
  }));
5198
- }
5199
- const Root$v = ({
5770
+ };
5771
+ const View$g = ({
5200
5772
  drawingId,
5201
5773
  pluginId
5202
5774
  }) => {
5203
5775
  return /*#__PURE__*/React.createElement(FtPluginValidator, {
5204
5776
  drawingId: drawingId,
5205
- pluginId: pluginId
5206
- }, /*#__PURE__*/React.createElement(RootImpl$v, {
5777
+ pluginId: pluginId,
5778
+ inCanvas: true
5779
+ }, /*#__PURE__*/React.createElement(ViewImpl$g, {
5207
5780
  drawingId: drawingId,
5208
5781
  pluginId: pluginId
5209
5782
  }));
5210
5783
  };
5211
5784
 
5212
5785
  const description$v = {
5213
- name: 'Cylinder',
5786
+ name: 'CompositeCurve',
5214
5787
  version: '1.0.0',
5215
- author: 'Ledas',
5788
+ author: 'AWV',
5216
5789
  persistent: true,
5217
5790
  visible: false,
5218
- global: false
5791
+ global: false,
5792
+ initialState: addMembers
5219
5793
  };
5220
5794
 
5221
5795
  var index$v = /*#__PURE__*/Object.freeze({
5222
5796
  __proto__: null,
5223
5797
  Root: Root$v,
5798
+ View: View$g,
5224
5799
  description: description$v
5225
5800
  });
5226
5801
 
@@ -5451,7 +6026,7 @@ const RootImpl$s = ({
5451
6026
  param: offset1,
5452
6027
  allowExpr: true
5453
6028
  }, type.userValue === classcad.ChamferType.TWO_DISTANCES && /*#__PURE__*/React.createElement(Button, {
5454
- iconSrc: img$17,
6029
+ iconSrc: img$18,
5455
6030
  onClick: switchDirections
5456
6031
  })), type.userValue === classcad.ChamferType.TWO_DISTANCES && /*#__PURE__*/React.createElement(NumberEditor, {
5457
6032
  drawingId: drawingId,
@@ -6245,8 +6820,8 @@ const Digits = ({
6245
6820
 
6246
6821
  const vectorToString = (point, digits) => `${point.toArray().map(n => core.MathUtils.round(n, digits)).join(', ')}`;
6247
6822
 
6248
- 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; }
6249
- 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; }
6823
+ 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; }
6824
+ 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; }
6250
6825
  const Excluded = [core.GraphicType.LOOP].concat(core.EntityTypes);
6251
6826
  const RootImpl$j = ({
6252
6827
  drawingId,
@@ -6317,7 +6892,7 @@ const Output = ({
6317
6892
  const {
6318
6893
  value
6319
6894
  } = res.measureData;
6320
- return _objectSpread$p(_objectSpread$p({}, res), {}, {
6895
+ return _objectSpread$q(_objectSpread$q({}, res), {}, {
6321
6896
  asString: core.MathUtils.round(value, digits)
6322
6897
  });
6323
6898
  }
@@ -6327,13 +6902,13 @@ const Output = ({
6327
6902
  const {
6328
6903
  value
6329
6904
  } = res.measureData;
6330
- return _objectSpread$p(_objectSpread$p({}, res), {}, {
6905
+ return _objectSpread$q(_objectSpread$q({}, res), {}, {
6331
6906
  asString: vectorToString(value, digits)
6332
6907
  });
6333
6908
  }
6334
6909
  }
6335
6910
  }
6336
- return _objectSpread$p(_objectSpread$p({}, res), {}, {
6911
+ return _objectSpread$q(_objectSpread$q({}, res), {}, {
6337
6912
  asString: ''
6338
6913
  });
6339
6914
  });
@@ -6364,198 +6939,6 @@ const Root$j = ({
6364
6939
  }));
6365
6940
  };
6366
6941
 
6367
- const Point$2 = ({
6368
- position,
6369
- radius,
6370
- color,
6371
- opacity = 1,
6372
- handlers,
6373
- userData
6374
- }) => {
6375
- return /*#__PURE__*/React.createElement("mesh", _extends({
6376
- position: position.clone(),
6377
- userData: userData
6378
- }, handlers), /*#__PURE__*/React.createElement("sphereGeometry", {
6379
- attach: "geometry",
6380
- args: [radius, 32, 16]
6381
- }), /*#__PURE__*/React.createElement("meshBasicMaterial", {
6382
- attach: "material",
6383
- color: color,
6384
- opacity: opacity,
6385
- transparent: opacity < 1
6386
- }));
6387
- };
6388
- const Arrow = ({
6389
- position,
6390
- direction,
6391
- length,
6392
- width,
6393
- color,
6394
- opacity = 1,
6395
- handlers,
6396
- userData,
6397
- withCone = true
6398
- }) => {
6399
- const cylinderWith = width;
6400
- const coneWidth = cylinderWith * 1.5;
6401
- const coneLength = Math.min(coneWidth / 0.12, length / 2.0);
6402
- const cylinderLength = withCone ? length - coneLength : length;
6403
- return /*#__PURE__*/React.createElement("group", _extends({
6404
- position: position.clone(),
6405
- quaternion: new THREE__namespace.Quaternion().setFromUnitVectors(new THREE__namespace.Vector3(0, 1, 0), direction.clone().normalize())
6406
- }, handlers, {
6407
- userData: userData
6408
- }), /*#__PURE__*/React.createElement("mesh", {
6409
- position: new THREE__namespace.Vector3(0, cylinderLength / 2.0, 0),
6410
- renderOrder: 500,
6411
- userData: userData
6412
- }, /*#__PURE__*/React.createElement("cylinderGeometry", {
6413
- attach: "geometry",
6414
- args: [cylinderWith, cylinderWith, cylinderLength, 24, 1]
6415
- }), /*#__PURE__*/React.createElement("meshBasicMaterial", {
6416
- attach: "material",
6417
- color: color,
6418
- opacity: opacity,
6419
- transparent: true
6420
- })), withCone && /*#__PURE__*/React.createElement("mesh", {
6421
- position: new THREE__namespace.Vector3(0, cylinderLength + coneLength / 2.0, 0),
6422
- renderOrder: 500,
6423
- userData: userData
6424
- }, /*#__PURE__*/React.createElement("coneGeometry", {
6425
- attach: "geometry",
6426
- args: [coneWidth, coneLength, 24, 1]
6427
- }), /*#__PURE__*/React.createElement("meshBasicMaterial", {
6428
- attach: "material",
6429
- color: color,
6430
- opacity: opacity,
6431
- transparent: opacity < 1
6432
- })));
6433
- };
6434
- const OriginPoint = ({
6435
- position,
6436
- color,
6437
- opacity = 1,
6438
- handlers,
6439
- userData
6440
- }) => {
6441
- return /*#__PURE__*/React.createElement(Point$2, {
6442
- position: position ? position.clone() : new THREE__namespace.Vector3(),
6443
- radius: 2,
6444
- color: color,
6445
- opacity: opacity,
6446
- handlers: handlers,
6447
- userData: userData
6448
- });
6449
- };
6450
- const AxisArrow = ({
6451
- position,
6452
- direction,
6453
- color,
6454
- opacity = 1,
6455
- handlers,
6456
- userData,
6457
- length,
6458
- width,
6459
- withCone = true
6460
- }) => {
6461
- return /*#__PURE__*/React.createElement(Arrow, {
6462
- position: position ? position.clone() : new THREE__namespace.Vector3(),
6463
- direction: direction.clone(),
6464
- length: length || 21,
6465
- width: width || 1,
6466
- color: color,
6467
- opacity: opacity,
6468
- handlers: handlers,
6469
- userData: userData,
6470
- withCone: withCone
6471
- });
6472
- };
6473
-
6474
- //TODO: don't use any
6475
- const Csys = ({
6476
- matrix,
6477
- opacity,
6478
- handlers,
6479
- color,
6480
- userData
6481
- }) => {
6482
- const position = new THREE__namespace.Vector3().setFromMatrixPosition(matrix);
6483
- const ref = useScale$1(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
6484
- return /*#__PURE__*/React.createElement("group", _extends({
6485
- matrix: matrix,
6486
- matrixAutoUpdate: false,
6487
- userData: userData
6488
- }, handlers), /*#__PURE__*/React.createElement("group", {
6489
- ref: ref
6490
- }, /*#__PURE__*/React.createElement(OriginPoint, {
6491
- position: new THREE__namespace.Vector3(),
6492
- color: color || 0x000000,
6493
- opacity: opacity,
6494
- userData: userData
6495
- }), /*#__PURE__*/React.createElement(AxisArrow, {
6496
- position: new THREE__namespace.Vector3(),
6497
- direction: new THREE__namespace.Vector3(1, 0, 0),
6498
- color: color || 0xd52828,
6499
- opacity: opacity,
6500
- userData: userData
6501
- }), /*#__PURE__*/React.createElement(AxisArrow, {
6502
- position: new THREE__namespace.Vector3(),
6503
- direction: new THREE__namespace.Vector3(0, 1, 0),
6504
- color: color || 0x28a628,
6505
- opacity: opacity,
6506
- userData: userData
6507
- }), /*#__PURE__*/React.createElement(AxisArrow, {
6508
- position: new THREE__namespace.Vector3(),
6509
- direction: new THREE__namespace.Vector3(0, 0, 1),
6510
- color: color || 0x2828d7,
6511
- opacity: opacity,
6512
- userData: userData
6513
- })));
6514
- };
6515
- const SelectedCsys = ({
6516
- matrix,
6517
- opacity = 1.0,
6518
- handlers,
6519
- color,
6520
- userData
6521
- }) => {
6522
- const position = new THREE__namespace.Vector3().setFromMatrixPosition(matrix);
6523
- const ref = useScale$1(position.clone(), sf => [2 * sf, 2 * sf, 2 * sf]);
6524
- return /*#__PURE__*/React.createElement("group", _extends({
6525
- matrix: matrix,
6526
- matrixAutoUpdate: false
6527
- }, handlers), /*#__PURE__*/React.createElement("group", {
6528
- ref: ref
6529
- }, /*#__PURE__*/React.createElement(OriginPoint, {
6530
- position: new THREE__namespace.Vector3(),
6531
- color: color || 0x000000,
6532
- opacity: opacity,
6533
- userData: userData
6534
- }), /*#__PURE__*/React.createElement(AxisArrow, {
6535
- position: new THREE__namespace.Vector3(),
6536
- direction: new THREE__namespace.Vector3(1, 0, 0),
6537
- color: color || 0xd52828,
6538
- opacity: opacity,
6539
- userData: userData,
6540
- withCone: false
6541
- }), /*#__PURE__*/React.createElement(AxisArrow, {
6542
- position: new THREE__namespace.Vector3(),
6543
- direction: new THREE__namespace.Vector3(0, 1, 0),
6544
- color: color || 0x28a628,
6545
- opacity: opacity,
6546
- userData: userData,
6547
- withCone: false
6548
- }), /*#__PURE__*/React.createElement(AxisArrow, {
6549
- position: new THREE__namespace.Vector3(),
6550
- direction: new THREE__namespace.Vector3(0, 0, 1),
6551
- width: 1.25,
6552
- length: 45,
6553
- color: color || 0x2828d7,
6554
- opacity: opacity,
6555
- userData: userData
6556
- })));
6557
- };
6558
-
6559
6942
  const dWidthCoeff = 15;
6560
6943
  const Distance = ({
6561
6944
  p1,
@@ -6862,7 +7245,7 @@ let HandlersList;
6862
7245
  HandlersList["TRIM"] = "trim";
6863
7246
  HandlersList["SPLIT"] = "split";
6864
7247
  HandlersList["USEREF"] = "useReference";
6865
- HandlersList["GSELECTION"] = "globalSelection";
7248
+ HandlersList["SSELECT"] = "sSelect";
6866
7249
  })(HandlersList || (HandlersList = {}));
6867
7250
  let TmpObjClasses;
6868
7251
  (function (TmpObjClasses) {
@@ -7048,18 +7431,22 @@ const tolerance$7 = 1e-6;
7048
7431
  */
7049
7432
  const deltaTolerance = 4;
7050
7433
 
7051
- const getInitialState = () => {
7052
- return {
7434
+ const description$i = {
7435
+ name: 'Sketcher',
7436
+ version: '1.0.0',
7437
+ author: 'Ledas',
7438
+ persistent: true,
7439
+ visible: false,
7440
+ global: false,
7441
+ initialState: {
7053
7442
  alwaysShowConstr: false,
7054
7443
  // By default, all constraints are hidden, they appear only if corresponding graphics is hovered. If the flag is true all constrains are shown.
7055
7444
  showCoincidence: false,
7056
7445
  // By default, coincidence constraints are not shown.
7057
- constraintsToGeometry: {},
7058
- // When user hovers a constraint corresponding graphics should be highlighted too. This map is used to highlight graphics.
7059
7446
  showRigidSets: false,
7060
7447
  // Shows only rigidSet. Needed in CopyPattern.
7061
7448
  activeHandler: undefined,
7062
- // Defines which hanlder is acrive now. (When sketcher is just enabled "drag" handler is enabled)
7449
+ // Defines which hanlder is active now. (When sketcher is just enabled "drag" handler is enabled)
7063
7450
  handlers: {},
7064
7451
  // Since handlers also have internal state we need to store it somewhere. This object contains states of all handlers.
7065
7452
  tmpObjects: {},
@@ -7069,8 +7456,11 @@ const getInitialState = () => {
7069
7456
  interaction: {
7070
7457
  cycle: 0,
7071
7458
  objects: [],
7072
- lastPos: new THREE__namespace.Vector3()
7459
+ lastHoveredPos: {},
7460
+ // A map for positions where constraints / regions were hovered last time.
7461
+ constraintsToGeometry: {} // When user hovers a constraint corresponding graphics should be highlighted too. This map is used to highlight graphics.
7073
7462
  },
7463
+
7074
7464
  // Contains information about objects under the pointer (`interaction.objects[interaction.cycle]` should equal `hovered`)
7075
7465
  isDragged: false,
7076
7466
  // When used drags some objects, this should equal true.
@@ -7078,8 +7468,6 @@ const getInitialState = () => {
7078
7468
  // Scale for graphics dependent on zoom. (It's used only in Arcs and Circles and should be removed when these object are reimplemented)
7079
7469
  step: 1,
7080
7470
  // Step for sketch grid dependent on camera zoom.
7081
- dimPluginId: undefined,
7082
- // Id of the dimension plugin which is embedded into Sketch plugin.
7083
7471
  mousePos: undefined,
7084
7472
  // A vector contains mouse position.
7085
7473
  drawnObjectsRef: undefined,
@@ -7089,16 +7477,7 @@ const getInitialState = () => {
7089
7477
  cursor: null,
7090
7478
  // A cursor name to be set in the page body; should match some CSS value.
7091
7479
  needsUpdate: 0
7092
- };
7093
- };
7094
- const description$i = {
7095
- name: 'Sketcher',
7096
- version: '1.0.0',
7097
- author: 'Ledas',
7098
- persistent: true,
7099
- visible: false,
7100
- global: false,
7101
- initialState: getInitialState()
7480
+ }
7102
7481
  };
7103
7482
 
7104
7483
  function getSketchState(drawingId, pluginId) {
@@ -7108,9 +7487,9 @@ function getSketchState(drawingId, pluginId) {
7108
7487
  }
7109
7488
  return plugin.state;
7110
7489
  }
7111
-
7112
- 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; }
7113
- 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; }
7490
+
7491
+ 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; }
7492
+ 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; }
7114
7493
  function CreateAngle(drawingId, pluginId) {
7115
7494
  const {
7116
7495
  set
@@ -7151,8 +7530,8 @@ function CreateAngle(drawingId, pluginId) {
7151
7530
  set(state_ => {
7152
7531
  const tmpAngularDimension = state_.tmpObjects[tmpDimensionId];
7153
7532
  return {
7154
- tmpObjects: _objectSpread$o(_objectSpread$o({}, state_.tmpObjects), {}, {
7155
- [tmpDimensionId]: _objectSpread$o(_objectSpread$o({}, tmpAngularDimension), params)
7533
+ tmpObjects: _objectSpread$p(_objectSpread$p({}, state_.tmpObjects), {}, {
7534
+ [tmpDimensionId]: _objectSpread$p(_objectSpread$p({}, tmpAngularDimension), params)
7156
7535
  })
7157
7536
  };
7158
7537
  });
@@ -7178,7 +7557,7 @@ function CreateAngle(drawingId, pluginId) {
7178
7557
  const dir1 = linesInfo.dir1;
7179
7558
  const center = linesInfo.center;
7180
7559
  const dimPos = center.clone().addScaledVector(dir0.clone().add(dir1).normalize(), 10);
7181
- const tmpAngularDimension = _objectSpread$o(_objectSpread$o({
7560
+ const tmpAngularDimension = _objectSpread$p(_objectSpread$p({
7182
7561
  class: TmpObjClasses.AngularDimension,
7183
7562
  id: tmpDimensionId
7184
7563
  }, linesInfo), {}, {
@@ -7263,23 +7642,28 @@ const rollUpPoints = (drawingId, id1, id2) => {
7263
7642
  const parent = tree[obj1.parent || NOCCID];
7264
7643
  return classcad.ccUtils.base.isA(obj1 == null ? void 0 : obj1.class, classcad.CCClasses.CCPoint) && classcad.ccUtils.base.isA(obj2 == null ? void 0 : obj2.class, classcad.CCClasses.CCPoint) && obj1.parent === obj2.parent && classcad.ccUtils.base.isA((parent == null ? void 0 : parent.class) || '', classcad.CCClasses.CCLine) ? [obj1.parent] : [id1, id2];
7265
7644
  };
7266
- const getConstrEntities = (drawingId, constrId) => {
7267
- var _constr$members;
7268
- const constr = core.getDrawing(drawingId).structure.tree[constrId];
7269
- const entities = ((_constr$members = constr.members) == null ? void 0 : _constr$members.entities).members;
7270
- if (classcad.ccUtils.base.isA(constr.class, classcad.CCClasses.CC2DOffsetConstraint) || classcad.ccUtils.base.isA(constr.class, classcad.CCClasses.CC2DHorizontalDistanceConstraint) || classcad.ccUtils.base.isA(constr.class, classcad.CCClasses.CC2DVerticalDistanceConstraint)) {
7271
- const [id1, id2] = entities.map(entity => entity.value);
7645
+ const getEntities = (drawingId, objectId) => {
7646
+ var _obj$members2;
7647
+ const tree = core.getDrawing(drawingId).structure.tree;
7648
+ const obj = tree[objectId];
7649
+ if (isSketchRegion(obj)) {
7650
+ var _obj$members, _obj$members$curves;
7651
+ 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);
7652
+ }
7653
+ const entities = ((_obj$members2 = obj.members) == null ? void 0 : _obj$members2.entities).members.map(entity => entity.value);
7654
+ if (classcad.ccUtils.base.isA(obj.class, classcad.CCClasses.CC2DOffsetConstraint) || classcad.ccUtils.base.isA(obj.class, classcad.CCClasses.CC2DHorizontalDistanceConstraint) || classcad.ccUtils.base.isA(obj.class, classcad.CCClasses.CC2DVerticalDistanceConstraint)) {
7655
+ const [id1, id2] = entities;
7272
7656
  return rollUpPoints(drawingId, id1, id2);
7273
7657
  }
7274
- if (classcad.ccUtils.base.isA(constr.class, classcad.CCClasses.CC2DMidpointConstraint)) {
7275
- const [id1, id2, id3] = entities.map(entity => entity.value);
7658
+ if (classcad.ccUtils.base.isA(obj.class, classcad.CCClasses.CC2DMidpointConstraint)) {
7659
+ const [id1, id2, id3] = entities;
7276
7660
  return [...rollUpPoints(drawingId, id1, id3), id2];
7277
7661
  }
7278
- if (classcad.ccUtils.base.isA(constr.class, classcad.CCClasses.CC2DEqualLengthConstraint)) {
7279
- const [id1, id2, id3, id4] = entities.map(entity => entity.value);
7662
+ if (classcad.ccUtils.base.isA(obj.class, classcad.CCClasses.CC2DEqualLengthConstraint)) {
7663
+ const [id1, id2, id3, id4] = entities;
7280
7664
  return [...rollUpPoints(drawingId, id1, id2), ...rollUpPoints(drawingId, id3, id4)];
7281
7665
  }
7282
- return entities.map(entity => entity.value);
7666
+ return entities;
7283
7667
  };
7284
7668
 
7285
7669
  function getGeometryPriority(object) {
@@ -7292,7 +7676,7 @@ function getGeometryPriority(object) {
7292
7676
  if (classcad.ccUtils.base.isA(object.class, classcad.CCClasses.CCCircle)) {
7293
7677
  return 3;
7294
7678
  }
7295
- if (is2DConstraint(object)) {
7679
+ if (is2DConstraint(object) || isSketchRegion(object)) {
7296
7680
  return 4;
7297
7681
  }
7298
7682
  if (classcad.ccUtils.base.isA(object.class, classcad.CCClasses.CCPoint)) {
@@ -7301,8 +7685,8 @@ function getGeometryPriority(object) {
7301
7685
  return -1;
7302
7686
  }
7303
7687
 
7304
- 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; }
7305
- 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; }
7688
+ 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; }
7689
+ 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; }
7306
7690
  let timerId;
7307
7691
  const projectPointOnGeometry = (point, geometryId, tree) => {
7308
7692
  const geometry = tree[geometryId];
@@ -7335,60 +7719,48 @@ const setHoverState = (drawingId, pluginId, cycle, objects, hoverPos) => {
7335
7719
  const tree = drawing.structure.tree;
7336
7720
  const hoveredId = objects[cycle % objects.length];
7337
7721
  const hoveredObject = tree[hoveredId];
7338
- const selected = drawing.interaction.selected || [];
7339
7722
  const setHovered = drawing.api.interaction.setHovered;
7340
- const setSelected = drawing.api.interaction.setSelected;
7341
7723
  if (hoveredObject) {
7342
7724
  setHovered(core.createInfo({
7343
7725
  objectId: hoveredId,
7344
7726
  prodRefId: curProduct
7345
7727
  }));
7346
- if (is2DConstraint(hoveredObject)) {
7347
- const constrEntities = getConstrEntities(drawingId, hoveredId);
7728
+ if (is2DConstraint(hoveredObject) || isSketchRegion(hoveredObject)) {
7729
+ const entities = getEntities(drawingId, hoveredId);
7348
7730
  set(state_ => {
7349
7731
  const highlighted = state_.highlighted;
7350
- const highlightedConstraints = highlighted.filter(id => is2DConstraint(tree[id]) && id !== hoveredId);
7351
- const lastPos = hoverPos ? state_.interaction.lastPos : undefined;
7732
+ const highlightedNonGeom = highlighted.filter(id => id !== hoveredId && (is2DConstraint(tree[id]) || isSketchRegion(tree[id])));
7352
7733
  return {
7353
- highlighted: [...highlightedConstraints, hoveredId, ...constrEntities],
7354
- interaction: {
7734
+ highlighted: [...highlightedNonGeom, hoveredId, ...entities],
7735
+ interaction: _objectSpread$o(_objectSpread$o({}, state_.interaction), {}, {
7355
7736
  cycle,
7356
- objects,
7357
- lastPos
7358
- }
7737
+ objects
7738
+ })
7359
7739
  };
7360
7740
  });
7361
7741
  } else {
7362
- const linkedConstraints = Object.values(tree).filter(obj => is2DConstraint(obj)).filter(obj => getConstrEntities(drawingId, obj.id).some(entityId => entityId === hoveredId)).map(obj => obj.id);
7363
- const selectedLinked = selected.filter(info => linkedConstraints.indexOf(info.objectId) !== -1);
7364
- const selectedNotLinked = selected.filter(info => linkedConstraints.indexOf(info.objectId) === -1);
7365
- const constraintsToGeometry = {};
7366
- linkedConstraints.forEach(id => {
7742
+ 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);
7743
+ const state = getSketchState(drawingId, pluginId);
7744
+ const constraintsToGeometry = _objectSpread$o({}, state.interaction.constraintsToGeometry);
7745
+ linked.forEach(id => {
7367
7746
  constraintsToGeometry[id] = hoveredId;
7368
7747
  });
7369
- const state = getSketchState(drawingId, pluginId);
7370
7748
  const prevHoveredId = state.interaction.objects[state.interaction.cycle % state.interaction.objects.length];
7371
- let lastPos;
7749
+ const lastHoveredPos = _objectSpread$o({}, state.interaction.lastHoveredPos);
7372
7750
  if (!hoverPos) {
7373
- lastPos = undefined;
7374
- } else {
7375
- lastPos = hoveredId !== prevHoveredId ? projectPointOnGeometry(hoverPos, hoveredId, tree) : state.interaction.lastPos;
7751
+ linked.forEach(id => delete lastHoveredPos[id]);
7752
+ } else if (hoveredId !== prevHoveredId) {
7753
+ const projectedPoint = projectPointOnGeometry(hoverPos, hoveredId, tree);
7754
+ linked.forEach(id => lastHoveredPos[id] = projectedPoint);
7376
7755
  }
7377
- setSelected([...selectedNotLinked, ...selectedLinked.map(info => _objectSpread$n(_objectSpread$n({}, info), {}, {
7378
- userData: {
7379
- hoverPos: lastPos
7756
+ set({
7757
+ highlighted: [hoveredId, ...linked],
7758
+ interaction: {
7759
+ cycle,
7760
+ objects,
7761
+ lastHoveredPos,
7762
+ constraintsToGeometry
7380
7763
  }
7381
- }))]);
7382
- set(state_ => {
7383
- return {
7384
- highlighted: [hoveredId, ...linkedConstraints],
7385
- constraintsToGeometry: _objectSpread$n(_objectSpread$n({}, state_.constraintsToGeometry), constraintsToGeometry),
7386
- interaction: {
7387
- cycle,
7388
- objects,
7389
- lastPos
7390
- }
7391
- };
7392
7764
  });
7393
7765
  }
7394
7766
  if (timerId) {
@@ -7399,14 +7771,13 @@ const setHoverState = (drawingId, pluginId, cycle, objects, hoverPos) => {
7399
7771
  setHovered(null);
7400
7772
  set(state_ => {
7401
7773
  const highlighted = state_.highlighted;
7402
- const highlightedConstraints = highlighted.filter(id => is2DConstraint(tree[id]));
7774
+ const highlightedNonGeom = highlighted.filter(id => is2DConstraint(tree[id]) || isSketchRegion(tree[id]));
7403
7775
  return {
7404
- highlighted: highlightedConstraints,
7405
- interaction: {
7776
+ highlighted: highlightedNonGeom,
7777
+ interaction: _objectSpread$o(_objectSpread$o({}, state_.interaction), {}, {
7406
7778
  cycle,
7407
- objects,
7408
- lastPos: state_.interaction.lastPos
7409
- }
7779
+ objects
7780
+ })
7410
7781
  };
7411
7782
  });
7412
7783
  if (timerId) {
@@ -7442,15 +7813,10 @@ const unhover = (drawingId, pluginId, objId) => {
7442
7813
  const select = (drawingId, pluginId, selectedId) => {
7443
7814
  const drawing = core.getDrawing(drawingId);
7444
7815
  const curProduct = drawing.structure.currentProduct;
7445
- const selectedObj = core.getDrawing(drawingId).structure.tree[selectedId];
7446
- const hoverPos = is2DConstraint(selectedObj) ? getSketchState(drawingId, pluginId).interaction.lastPos : undefined;
7447
7816
  const select_ = drawing.api.interaction.select;
7448
7817
  select_(core.createInfo({
7449
7818
  objectId: selectedId,
7450
- prodRefId: curProduct,
7451
- userData: {
7452
- hoverPos
7453
- }
7819
+ prodRefId: curProduct
7454
7820
  }), true);
7455
7821
  };
7456
7822
  const tab = (drawingId, pluginId) => {
@@ -7476,17 +7842,29 @@ function Hover(drawingId, pluginId) {
7476
7842
  }
7477
7843
  };
7478
7844
  const getSketchObjIds = e => {
7479
- const tree = core.getDrawing(drawingId).structure.tree;
7845
+ const drawing = core.getDrawing(drawingId);
7846
+ const tree = drawing.structure.tree;
7847
+ const selection = drawing.selection.refs[drawing.selection.active || ''];
7848
+ const isSelActive = selection !== undefined;
7480
7849
  const objIds = e.intersections.map(intersection => {
7481
7850
  var _intersection$object$;
7482
7851
  return ((_intersection$object$ = intersection.object.userData) == null ? void 0 : _intersection$object$.objId) || undefined;
7483
7852
  });
7484
7853
  return objIds.filter((objId, i) => {
7485
- const obj = tree[objId || NOCCID];
7486
- return obj && (isSketchGeometry(obj) || is2DConstraint(obj)) && objIds.indexOf(objId) === i;
7854
+ var _object$members;
7855
+ const object = tree[objId || NOCCID];
7856
+ const isSelectable = object && (selection == null ? void 0 : selection.isSelectable(TreeObjScope, {
7857
+ object
7858
+ })) || false;
7859
+ const isSketchObj = object && (isSketchGeometry(object) || is2DConstraint(object)) && getAncestorIdByClass(drawingId, object.id, classcad.CCClasses.CCSketch) === sketchId;
7860
+ const isSketchRegion_ = object && isSketchRegion(object) && ((_object$members = object.members) == null ? void 0 : _object$members.sketch.value) === sketchId;
7861
+ const canBeSelected = !isSelActive || isSelectable;
7862
+ return object && (isSketchObj || isSketchRegion_) && canBeSelected && objIds.indexOf(objId) === i;
7487
7863
  });
7488
7864
  };
7489
- const onPointerOver = e => {
7865
+
7866
+ // A single handler for both onPointerOver / onPointerOut
7867
+ const onHover = e => {
7490
7868
  const hoveredId = e.object.userData.objId;
7491
7869
  const tree = core.getDrawing(drawingId).structure.tree;
7492
7870
  if (!tree[hoveredId] || classcad.ccUtils.base.isA(tree[hoveredId].class, classcad.CCClasses.CCSketch)) {
@@ -7499,28 +7877,17 @@ function Hover(drawingId, pluginId) {
7499
7877
  const obj = tree[objId];
7500
7878
  return classcad.ccUtils.base.isA(obj == null ? void 0 : obj.class, classcad.CCClasses.CCSketch);
7501
7879
  });
7502
- const lastPos = sketchIntersection ? sketchIntersection.point.clone() : new THREE__namespace.Vector3();
7503
- lastPos.applyMatrix4(getGlobalToLocalMatrix(drawingId, sketchId));
7504
- hover(drawingId, pluginId, sketchObjIds, lastPos);
7505
- };
7506
- const onPointerOut = e => {
7507
- const hoveredId = e.object.userData.objId;
7508
- const tree = core.getDrawing(drawingId).structure.tree;
7509
- if (!tree[hoveredId] || classcad.ccUtils.base.isA(tree[hoveredId].class, classcad.CCClasses.CCSketch)) {
7510
- return;
7511
- }
7512
- const sketchObjIds = getSketchObjIds(e);
7513
- // Preserve the lastPos set earlier...
7514
- const lastPos = core.getPlugin(drawingId, pluginId).state.interaction.lastPos;
7515
- hover(drawingId, pluginId, sketchObjIds, lastPos);
7880
+ const hoverPos = sketchIntersection ? sketchIntersection.point.clone() : new THREE__namespace.Vector3();
7881
+ hoverPos.applyMatrix4(getGlobalToLocalMatrix(drawingId, sketchId));
7882
+ hover(drawingId, pluginId, sketchObjIds, hoverPos);
7516
7883
  };
7517
7884
  return {
7518
7885
  name: HandlersList.HOVER,
7519
7886
  filter,
7520
7887
  onDeactivate,
7521
7888
  pointerHandlers: {
7522
- onPointerOver,
7523
- onPointerOut
7889
+ onPointerOver: onHover,
7890
+ onPointerOut: onHover
7524
7891
  },
7525
7892
  keyHandlers: {
7526
7893
  keyup: onKeyup
@@ -7862,8 +8229,8 @@ const MergedWrapper = ({
7862
8229
  );
7863
8230
  };
7864
8231
 
7865
- 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; }
7866
- 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; }
8232
+ 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; }
8233
+ 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; }
7867
8234
 
7868
8235
  // Artificial delay in 16 ms.
7869
8236
  const artifDelay = 16;
@@ -8130,7 +8497,7 @@ function Drag(drawingId, pluginId, camControls) {
8130
8497
  name: HandlersList.DRAG,
8131
8498
  filter,
8132
8499
  onDeactivate,
8133
- pointerHandlers: _objectSpread$m({
8500
+ pointerHandlers: _objectSpread$n({
8134
8501
  onPointerDown,
8135
8502
  onPointerUp,
8136
8503
  onPointerMove
@@ -8142,8 +8509,8 @@ function Drag(drawingId, pluginId, camControls) {
8142
8509
  };
8143
8510
  }
8144
8511
 
8145
- 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; }
8146
- 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; }
8512
+ 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; }
8513
+ 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; }
8147
8514
  function DrawPoint(drawingId, pluginId) {
8148
8515
  const {
8149
8516
  set
@@ -8199,8 +8566,8 @@ function DrawPoint(drawingId, pluginId) {
8199
8566
  const tmpPoint = state.tmpObjects[tmpPointId];
8200
8567
  return {
8201
8568
  mousePos,
8202
- tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8203
- [tmpPointId]: _objectSpread$l(_objectSpread$l({}, tmpPoint), {}, {
8569
+ tmpObjects: _objectSpread$m(_objectSpread$m({}, state.tmpObjects), {}, {
8570
+ [tmpPointId]: _objectSpread$m(_objectSpread$m({}, tmpPoint), {}, {
8204
8571
  position: mousePos
8205
8572
  })
8206
8573
  })
@@ -8220,8 +8587,8 @@ function DrawPoint(drawingId, pluginId) {
8220
8587
  };
8221
8588
  }
8222
8589
 
8223
- 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; }
8224
- 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; }
8590
+ 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; }
8591
+ 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; }
8225
8592
  function DrawLine(drawingId, pluginId) {
8226
8593
  // Global hooks:
8227
8594
  const {
@@ -8297,7 +8664,7 @@ function DrawLine(drawingId, pluginId) {
8297
8664
  endPId: tmpEndP.id
8298
8665
  };
8299
8666
  return {
8300
- tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8667
+ tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8301
8668
  [tmpStartP.id]: tmpStartP,
8302
8669
  [tmpLine.id]: tmpLine
8303
8670
  })
@@ -8340,8 +8707,8 @@ function DrawLine(drawingId, pluginId) {
8340
8707
  const tmpStartP = state.tmpObjects[tmpStartPId];
8341
8708
  const tmpEndP = state.tmpObjects[tmpEndPId];
8342
8709
  return {
8343
- tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8344
- [tmpStartPId]: _objectSpread$k(_objectSpread$k({}, tmpStartP), {}, {
8710
+ tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8711
+ [tmpStartPId]: _objectSpread$l(_objectSpread$l({}, tmpStartP), {}, {
8345
8712
  position: tmpEndP.position.clone()
8346
8713
  })
8347
8714
  })
@@ -8358,8 +8725,8 @@ function DrawLine(drawingId, pluginId) {
8358
8725
  const tmpEndP = state.tmpObjects[tmpEndPId];
8359
8726
  return {
8360
8727
  mousePos,
8361
- tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8362
- [tmpEndPId]: _objectSpread$k(_objectSpread$k({}, tmpEndP), {}, {
8728
+ tmpObjects: _objectSpread$l(_objectSpread$l({}, state.tmpObjects), {}, {
8729
+ [tmpEndPId]: _objectSpread$l(_objectSpread$l({}, tmpEndP), {}, {
8363
8730
  position: mousePos
8364
8731
  })
8365
8732
  })
@@ -8382,8 +8749,8 @@ function DrawLine(drawingId, pluginId) {
8382
8749
  };
8383
8750
  }
8384
8751
 
8385
- 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; }
8386
- 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; }
8752
+ 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; }
8753
+ 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; }
8387
8754
  function DrawRectangle(drawingId, pluginId, rectType) {
8388
8755
  const {
8389
8756
  set
@@ -8458,7 +8825,7 @@ function DrawRectangle(drawingId, pluginId, rectType) {
8458
8825
  isSquare: e.shiftKey,
8459
8826
  isCentered: rectType === HandlersList.DRAWRECTCENTER
8460
8827
  };
8461
- const newTmpObjects = _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8828
+ const newTmpObjects = _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8462
8829
  [tmpRect.id]: tmpRect
8463
8830
  });
8464
8831
  delete newTmpObjects[tmpPointId];
@@ -8516,19 +8883,19 @@ function DrawRectangle(drawingId, pluginId, rectType) {
8516
8883
  let newTmpObjs = null;
8517
8884
  if (additionIndex === 0) {
8518
8885
  const tmpPoint = state.tmpObjects[tmpPointId];
8519
- newTmpObjs = _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8520
- [tmpPointId]: _objectSpread$j(_objectSpread$j({}, tmpPoint), {}, {
8886
+ newTmpObjs = _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8887
+ [tmpPointId]: _objectSpread$k(_objectSpread$k({}, tmpPoint), {}, {
8521
8888
  position: snappedPos
8522
8889
  })
8523
8890
  });
8524
8891
  } else {
8525
- newTmpObjs = _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8526
- [tmpRectId]: _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpRectId]), {}, {
8892
+ newTmpObjs = _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8893
+ [tmpRectId]: _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpRectId]), {}, {
8527
8894
  end: new THREE__namespace.Vector3(snappedPos.x, snappedPos.y, 0)
8528
8895
  })
8529
8896
  });
8530
8897
  }
8531
- return _objectSpread$j(_objectSpread$j({}, state), {}, {
8898
+ return _objectSpread$k(_objectSpread$k({}, state), {}, {
8532
8899
  tmpObjects: newTmpObjs,
8533
8900
  mousePos: snappedPos
8534
8901
  });
@@ -8537,9 +8904,9 @@ function DrawRectangle(drawingId, pluginId, rectType) {
8537
8904
  };
8538
8905
  const keydown = e => {
8539
8906
  if (e.code === 'ShiftLeft' || e.code === 'ShiftRight') {
8540
- set(state => _objectSpread$j(_objectSpread$j({}, state), {}, {
8541
- tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8542
- [tmpRectId]: _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpRectId]), {}, {
8907
+ set(state => _objectSpread$k(_objectSpread$k({}, state), {}, {
8908
+ tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8909
+ [tmpRectId]: _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpRectId]), {}, {
8543
8910
  isSquare: true
8544
8911
  })
8545
8912
  })
@@ -8548,9 +8915,9 @@ function DrawRectangle(drawingId, pluginId, rectType) {
8548
8915
  };
8549
8916
  const keyup = e => {
8550
8917
  if (e.code === 'ShiftLeft' || e.code === 'ShiftRight') {
8551
- set(state => _objectSpread$j(_objectSpread$j({}, state), {}, {
8552
- tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8553
- [tmpRectId]: _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpRectId]), {}, {
8918
+ set(state => _objectSpread$k(_objectSpread$k({}, state), {}, {
8919
+ tmpObjects: _objectSpread$k(_objectSpread$k({}, state.tmpObjects), {}, {
8920
+ [tmpRectId]: _objectSpread$k(_objectSpread$k({}, state.tmpObjects[tmpRectId]), {}, {
8554
8921
  isSquare: false
8555
8922
  })
8556
8923
  })
@@ -8732,8 +9099,8 @@ const Circle$1 = ({
8732
9099
  }), /*#__PURE__*/React.createElement("meshBasicMaterial", materialProps));
8733
9100
  };
8734
9101
 
8735
- 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; }
8736
- 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; }
9102
+ 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; }
9103
+ 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; }
8737
9104
  function DrawArc(drawingId, pluginId, arcType) {
8738
9105
  // Global hooks:
8739
9106
  const {
@@ -8786,7 +9153,7 @@ function DrawArc(drawingId, pluginId, arcType) {
8786
9153
  additionIndex = 0;
8787
9154
  lastAddedEndPointId = NOCCID;
8788
9155
  set(state => {
8789
- const tmpStartP = _objectSpread$i(_objectSpread$i({}, state.tmpObjects[tmpStartPId]), {}, {
9156
+ const tmpStartP = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpStartPId]), {}, {
8790
9157
  position: lastMousePos.clone()
8791
9158
  });
8792
9159
  return {
@@ -8799,20 +9166,20 @@ function DrawArc(drawingId, pluginId, arcType) {
8799
9166
  additionIndex = 1;
8800
9167
  set(state => {
8801
9168
  const tmpStartP = state.tmpObjects[tmpStartPId];
8802
- const tmpEndP = _objectSpread$i(_objectSpread$i({}, state.tmpObjects[tmpEndPId]), {}, {
9169
+ const tmpEndP = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpEndPId]), {}, {
8803
9170
  position: lastMousePos.clone()
8804
9171
  });
8805
9172
  const centerPos = calculateCenterPoint(tmpStartP.position, lastMousePos, lastMousePos);
8806
- const tmpCenterP = _objectSpread$i(_objectSpread$i({}, state.tmpObjects[tmpCenterPId]), {}, {
9173
+ const tmpCenterP = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpCenterPId]), {}, {
8807
9174
  position: centerPos ? centerPos : lastMousePos.clone()
8808
9175
  });
8809
- const tmpArc = _objectSpread$i(_objectSpread$i({}, state.tmpObjects[tmpArcId]), {}, {
9176
+ const tmpArc = _objectSpread$j(_objectSpread$j({}, state.tmpObjects[tmpArcId]), {}, {
8810
9177
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
8811
9178
  drawAsLine: centerPos === undefined,
8812
9179
  clockwise: false
8813
9180
  });
8814
9181
  return {
8815
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9182
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8816
9183
  [tmpEndP.id]: tmpEndP,
8817
9184
  [tmpCenterP.id]: tmpCenterP,
8818
9185
  [tmpArc.id]: tmpArc
@@ -8919,7 +9286,7 @@ function DrawArc(drawingId, pluginId, arcType) {
8919
9286
  clockwise: false
8920
9287
  };
8921
9288
  return {
8922
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9289
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8923
9290
  [tmpEndP.id]: tmpEndP,
8924
9291
  [tmpCenterP.id]: tmpCenterP,
8925
9292
  [tmpArc.id]: tmpArc
@@ -8948,7 +9315,7 @@ function DrawArc(drawingId, pluginId, arcType) {
8948
9315
  clockwise: false
8949
9316
  };
8950
9317
  return {
8951
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9318
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
8952
9319
  [tmpCenterP.id]: tmpCenterP,
8953
9320
  [tmpArc.id]: tmpArc
8954
9321
  })
@@ -9010,11 +9377,11 @@ function DrawArc(drawingId, pluginId, arcType) {
9010
9377
  const tmpEndP = state.tmpObjects[tmpEndPId];
9011
9378
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
9012
9379
  return {
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: tmpEndP.position.clone()
9016
9383
  }),
9017
- [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9384
+ [tmpCenterPId]: _objectSpread$j(_objectSpread$j({}, tmpCenterP), {}, {
9018
9385
  position: tmpEndP.position.clone()
9019
9386
  })
9020
9387
  })
@@ -9033,8 +9400,8 @@ function DrawArc(drawingId, pluginId, arcType) {
9033
9400
  const tmpStartP = state.tmpObjects[tmpStartPId];
9034
9401
  return {
9035
9402
  mousePos: lastMousePos,
9036
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9037
- [tmpStartPId]: _objectSpread$i(_objectSpread$i({}, tmpStartP), {}, {
9403
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9404
+ [tmpStartPId]: _objectSpread$j(_objectSpread$j({}, tmpStartP), {}, {
9038
9405
  position: lastMousePos.clone()
9039
9406
  })
9040
9407
  })
@@ -9047,14 +9414,14 @@ function DrawArc(drawingId, pluginId, arcType) {
9047
9414
  const centerPos = calculateCenterPoint(tmpStartP.position, lastMousePos, lastMousePos);
9048
9415
  return {
9049
9416
  mousePos: lastMousePos,
9050
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9051
- [tmpEndPId]: _objectSpread$i(_objectSpread$i({}, tmpEndP), {}, {
9417
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9418
+ [tmpEndPId]: _objectSpread$j(_objectSpread$j({}, tmpEndP), {}, {
9052
9419
  position: lastMousePos.clone()
9053
9420
  }),
9054
- [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9421
+ [tmpCenterPId]: _objectSpread$j(_objectSpread$j({}, tmpCenterP), {}, {
9055
9422
  position: centerPos ? centerPos : lastMousePos.clone()
9056
9423
  }),
9057
- [tmpArcId]: _objectSpread$i(_objectSpread$i({}, tmpArc), {}, {
9424
+ [tmpArcId]: _objectSpread$j(_objectSpread$j({}, tmpArc), {}, {
9058
9425
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
9059
9426
  drawAsLine: centerPos === undefined,
9060
9427
  clockwise: false
@@ -9069,14 +9436,14 @@ function DrawArc(drawingId, pluginId, arcType) {
9069
9436
  const centerPos = calculateCenterPoint(tmpStartP.position, tmpEndP.position, lastMousePos);
9070
9437
  return {
9071
9438
  mousePos: lastMousePos,
9072
- tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9073
- [tmpEndPId]: _objectSpread$i(_objectSpread$i({}, tmpEndP), {}, {
9439
+ tmpObjects: _objectSpread$j(_objectSpread$j({}, state.tmpObjects), {}, {
9440
+ [tmpEndPId]: _objectSpread$j(_objectSpread$j({}, tmpEndP), {}, {
9074
9441
  position: arcType === HandlersList.DRAWARCTANGENT ? lastMousePos.clone() : tmpEndP.position
9075
9442
  }),
9076
- [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9443
+ [tmpCenterPId]: _objectSpread$j(_objectSpread$j({}, tmpCenterP), {}, {
9077
9444
  position: centerPos ? centerPos : lastMousePos.clone()
9078
9445
  }),
9079
- [tmpArcId]: _objectSpread$i(_objectSpread$i({}, tmpArc), {}, {
9446
+ [tmpArcId]: _objectSpread$j(_objectSpread$j({}, tmpArc), {}, {
9080
9447
  // In case centerPos couldn't be calculated, the arc should be drawn as a line
9081
9448
  drawAsLine: centerPos === undefined,
9082
9449
  clockwise: evaluateClockwise(tmpStartP.position, tmpEndP.position, lastMousePos)
@@ -9102,8 +9469,8 @@ function DrawArc(drawingId, pluginId, arcType) {
9102
9469
  };
9103
9470
  }
9104
9471
 
9105
- 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; }
9106
- 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; }
9472
+ 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; }
9473
+ 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; }
9107
9474
  function DrawCircle(drawingId, pluginId) {
9108
9475
  const {
9109
9476
  set
@@ -9147,7 +9514,7 @@ function DrawCircle(drawingId, pluginId) {
9147
9514
  } else {
9148
9515
  additionIndex = 0;
9149
9516
  set(state => {
9150
- const tmpCenterP = _objectSpread$h(_objectSpread$h({}, state.tmpObjects[tmpCenterPId]), {}, {
9517
+ const tmpCenterP = _objectSpread$i(_objectSpread$i({}, state.tmpObjects[tmpCenterPId]), {}, {
9151
9518
  position: lastMousePos.clone()
9152
9519
  });
9153
9520
  return {
@@ -9174,7 +9541,7 @@ function DrawCircle(drawingId, pluginId) {
9174
9541
  radius: 0.001
9175
9542
  };
9176
9543
  return {
9177
- tmpObjects: _objectSpread$h(_objectSpread$h({}, state.tmpObjects), {}, {
9544
+ tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9178
9545
  [tmpCenterP.id]: tmpCenterP,
9179
9546
  [tmpCircle.id]: tmpCircle
9180
9547
  })
@@ -9198,7 +9565,7 @@ function DrawCircle(drawingId, pluginId) {
9198
9565
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
9199
9566
  return {
9200
9567
  tmpObjects: {
9201
- [tmpCenterPId]: _objectSpread$h(_objectSpread$h({}, tmpCenterP), {}, {
9568
+ [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9202
9569
  position: e.point.clone().applyMatrix4(getGlobalToLocalMatrix(drawingId, sketchId))
9203
9570
  })
9204
9571
  }
@@ -9217,8 +9584,8 @@ function DrawCircle(drawingId, pluginId) {
9217
9584
  const tmpCenterP = state.tmpObjects[tmpCenterPId];
9218
9585
  return {
9219
9586
  mousePos: lastMousePos,
9220
- tmpObjects: _objectSpread$h(_objectSpread$h({}, state.tmpObjects), {}, {
9221
- [tmpCenterPId]: _objectSpread$h(_objectSpread$h({}, tmpCenterP), {}, {
9587
+ tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9588
+ [tmpCenterPId]: _objectSpread$i(_objectSpread$i({}, tmpCenterP), {}, {
9222
9589
  position: snappedPos || localPos
9223
9590
  })
9224
9591
  })
@@ -9228,8 +9595,8 @@ function DrawCircle(drawingId, pluginId) {
9228
9595
  const tmpCircle = state.tmpObjects[tmpCircleId];
9229
9596
  return {
9230
9597
  mousePos: lastMousePos,
9231
- tmpObjects: _objectSpread$h(_objectSpread$h({}, state.tmpObjects), {}, {
9232
- [tmpCircleId]: _objectSpread$h(_objectSpread$h({}, tmpCircle), {}, {
9598
+ tmpObjects: _objectSpread$i(_objectSpread$i({}, state.tmpObjects), {}, {
9599
+ [tmpCircleId]: _objectSpread$i(_objectSpread$i({}, tmpCircle), {}, {
9233
9600
  radius: Math.max(tmpCenterP.position.distanceTo(localPos), 0.001)
9234
9601
  })
9235
9602
  })
@@ -9253,107 +9620,109 @@ function DrawCircle(drawingId, pluginId) {
9253
9620
  };
9254
9621
  }
9255
9622
 
9256
- 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";
9257
- var fixation = img$15;
9623
+ 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";
9624
+ var fixation = img$16;
9625
+
9626
+ 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";
9627
+ var horizontality = img$15;
9258
9628
 
9259
- 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";
9260
- var horizontality = img$14;
9629
+ 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";
9630
+ var verticality = img$14;
9261
9631
 
9262
- 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";
9263
- var verticality = img$13;
9632
+ 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";
9633
+ var coincident = img$13;
9264
9634
 
9265
- 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";
9266
- var coincident = img$12;
9635
+ 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";
9636
+ var tangency = img$12;
9267
9637
 
9268
- 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";
9269
- var tangency = img$11;
9638
+ 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";
9639
+ var parallelity = img$11;
9270
9640
 
9271
- 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";
9272
- var parallelity = img$10;
9641
+ 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";
9642
+ var perpendicularity = img$10;
9273
9643
 
9274
- 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";
9275
- var perpendicularity = img$$;
9644
+ 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";
9645
+ var colinear = img$$;
9276
9646
 
9277
- 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";
9278
- var colinear = img$_;
9647
+ 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";
9648
+ var concentric = img$_;
9279
9649
 
9280
- 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";
9281
- var concentric = img$Z;
9650
+ 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";
9651
+ var midpoint = img$Z;
9282
9652
 
9283
- 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";
9284
- var midpoint = img$Y;
9653
+ 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";
9654
+ var symmetric = img$Y;
9285
9655
 
9286
- 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";
9287
- var symmetric = img$X;
9656
+ 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";
9657
+ var equal = img$X;
9288
9658
 
9289
- 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";
9290
- var equal = img$W;
9659
+ 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";
9660
+ var hdimension = img$W;
9291
9661
 
9292
- 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";
9293
- var hdimension = img$V;
9662
+ 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";
9663
+ var vdimension = img$V;
9294
9664
 
9295
- 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";
9296
- var vdimension = img$U;
9665
+ 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";
9297
9666
 
9298
- 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";
9667
+ 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";
9668
+ var radius = img$T;
9299
9669
 
9300
- 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";
9301
- var radius = img$S;
9670
+ 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";
9671
+ var angle = img$S;
9302
9672
 
9303
- 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";
9304
- var angle = img$R;
9673
+ 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";
9674
+ var angleox = img$R;
9305
9675
 
9306
- 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";
9307
- var angleox = img$Q;
9676
+ 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";
9677
+ var rigidSet = img$Q;
9308
9678
 
9309
- 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";
9310
- var rigidSet = img$P;
9679
+ 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";
9311
9680
 
9312
- 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";
9681
+ 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";
9313
9682
 
9314
- 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";
9683
+ 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";
9315
9684
 
9316
- 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";
9685
+ 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";
9686
+ var line$1 = img$M;
9317
9687
 
9318
- 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";
9319
- var line$1 = img$L;
9688
+ 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";
9689
+ var rect2points = img$L;
9320
9690
 
9321
- 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";
9322
- var rect2points = img$K;
9691
+ 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";
9323
9692
 
9324
- 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";
9693
+ 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";
9694
+ var arcTangential = img$J;
9325
9695
 
9326
- 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";
9327
- var arcTangential = img$I;
9696
+ 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";
9697
+ var arcCenter = img$I;
9328
9698
 
9329
- 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";
9330
- var arcCenter = img$H;
9699
+ 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";
9700
+ var arc3points = img$H;
9331
9701
 
9332
- 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";
9333
- var arc3points = img$G;
9702
+ 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";
9703
+ var circleCenterRadius = img$G;
9334
9704
 
9335
- 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";
9336
- var circleCenterRadius = img$F;
9705
+ 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";
9706
+ var filletSketch = img$F;
9337
9707
 
9338
- 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";
9339
- var filletSketch = img$E;
9708
+ 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";
9709
+ var trim = img$E;
9340
9710
 
9341
- 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";
9342
- var trim = img$D;
9711
+ 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";
9712
+ var split = img$D;
9343
9713
 
9344
- 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";
9345
- var split = img$C;
9714
+ 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";
9715
+ var copyRect = img$C;
9346
9716
 
9347
- 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";
9348
- var copyRect = img$B;
9717
+ 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";
9718
+ var copyCirc = img$B;
9349
9719
 
9350
- 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";
9351
- var copyCirc = img$A;
9720
+ 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";
9352
9721
 
9353
- 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";
9722
+ 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";
9723
+ var useReference = img$z;
9354
9724
 
9355
- 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";
9356
- var useReference = img$y;
9725
+ 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";
9357
9726
 
9358
9727
  const RootContext = /*#__PURE__*/React.createContext({
9359
9728
  drawingId: -1,
@@ -10010,19 +10379,20 @@ const resources = {
10010
10379
  [classcad.CCClasses.CC2DEqualRadiusConstraint]: equal,
10011
10380
  [classcad.CCClasses.CC2DHorizontalDistanceConstraint]: hdimension,
10012
10381
  [classcad.CCClasses.CC2DVerticalDistanceConstraint]: vdimension,
10013
- [classcad.CCClasses.CC2DOffsetConstraint]: img$T,
10382
+ [classcad.CCClasses.CC2DOffsetConstraint]: img$U,
10014
10383
  [classcad.CCClasses.CC2DRadiusConstraint]: radius,
10015
- [classcad.CCClasses.CC2DDiameterConstraint]: img$T,
10384
+ [classcad.CCClasses.CC2DDiameterConstraint]: img$U,
10016
10385
  [classcad.CCClasses.CC2DAngleConstraint]: angle,
10017
10386
  [classcad.CCClasses.CC2DAngleOXConstraint]: angleox,
10018
10387
  [classcad.CCClasses.CCRigidSet]: rigidSet,
10019
10388
  [classcad.CCClasses.CCUse]: useReference,
10020
- [classcad.CCClasses.CCExtrusion]: img$O,
10021
- [classcad.CCClasses.CCRevolve]: img$N,
10022
- [HandlersList.DRAWPOINT]: img$M,
10389
+ [classcad.CCClasses.CCExtrusion]: img$P,
10390
+ [classcad.CCClasses.CCRevolve]: img$O,
10391
+ [classcad.CCClasses.CCSketchRegion]: img$y,
10392
+ [HandlersList.DRAWPOINT]: img$N,
10023
10393
  [HandlersList.DRAWLINE]: line$1,
10024
10394
  [HandlersList.DRAWRECT2POINTS]: rect2points,
10025
- [HandlersList.DRAWRECTCENTER]: img$J,
10395
+ [HandlersList.DRAWRECTCENTER]: img$K,
10026
10396
  [HandlersList.DRAWARCTANGENT]: arcTangential,
10027
10397
  [HandlersList.DRAWARCCENTER]: arcCenter,
10028
10398
  [HandlersList.DRAWARCMIDDLE]: arc3points,
@@ -10033,7 +10403,7 @@ const resources = {
10033
10403
  [HandlersList.USEREF]: useReference,
10034
10404
  [Patterns.RECTANGULAR]: copyRect,
10035
10405
  [Patterns.CIRCULAR]: copyCirc,
10036
- [Patterns.MIRROR]: img$z
10406
+ [Patterns.MIRROR]: img$A
10037
10407
  };
10038
10408
  const textures = {};
10039
10409
  const textureLoader = new THREE__namespace.TextureLoader();
@@ -10806,8 +11176,8 @@ function recognizeFilletByArc(object, tree, sketchId) {
10806
11176
  };
10807
11177
  }
10808
11178
 
10809
- 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; }
10810
- 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; }
11179
+ 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; }
11180
+ 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; }
10811
11181
  function Fillet(drawingId, pluginId) {
10812
11182
  const plugin = core.getPlugin(drawingId, pluginId);
10813
11183
  const set = plugin.set;
@@ -10939,7 +11309,7 @@ function Fillet(drawingId, pluginId) {
10939
11309
  if (!data) {
10940
11310
  return;
10941
11311
  }
10942
- classcad.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), {}, {
11312
+ classcad.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), {}, {
10943
11313
  radius: 1
10944
11314
  })).mid, data.params.end).catch(console.warn);
10945
11315
  set({
@@ -11043,8 +11413,8 @@ function Trim(drawingId, pluginId) {
11043
11413
  };
11044
11414
  }
11045
11415
 
11046
- 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; }
11047
- 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; }
11416
+ 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; }
11417
+ 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; }
11048
11418
  const tolerance$5 = 1e-6;
11049
11419
  const tMinClosed = 1e-3;
11050
11420
  const tMaxClosed = 1 - 1e-3;
@@ -11214,7 +11584,7 @@ function intersectCircleCircle(circle1, circle2) {
11214
11584
  const c = w * w - dy * dy;
11215
11585
  let res = solveQuadratic(a, b, c).filter(u => u >= -1 && u <= 1).map(u => Math.acos(u) / (2 * Math.PI));
11216
11586
  res = [...res, ...res.map(u => -u)];
11217
- const points = res.map(t => getParameterizedPosition(t, _objectSpread$f(_objectSpread$f({}, circle1), {}, {
11587
+ const points = res.map(t => getParameterizedPosition(t, _objectSpread$g(_objectSpread$g({}, circle1), {}, {
11218
11588
  class: classcad.CCClasses.CCCircle
11219
11589
  }))).filter(point => Math.abs(point.distanceTo(circle1.center) - circle1.radius) < tolerance$5 && Math.abs(point.distanceTo(circle2.center) - circle2.radius) < tolerance$5);
11220
11590
  const circle1Intersections = points.map(point => getNormalizedPosition(point, circle1));
@@ -11585,9 +11955,69 @@ function UseRef(drawingId, pluginId) {
11585
11955
  };
11586
11956
  }
11587
11957
 
11958
+ 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; }
11959
+ 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; }
11960
+ function SSelect(drawingId, pluginId) {
11961
+ const hoverHandler = Hover(drawingId, pluginId);
11962
+ const filter = object => true;
11963
+ const onDeactivate = () => {
11964
+ hoverHandler.onDeactivate && hoverHandler.onDeactivate();
11965
+ const {
11966
+ set
11967
+ } = core.getPlugin(drawingId, pluginId);
11968
+ set({
11969
+ highlighted: [],
11970
+ interaction: {
11971
+ cycle: 0,
11972
+ objects: [],
11973
+ lastHoveredPos: {},
11974
+ constraintsToGeometry: {}
11975
+ }
11976
+ });
11977
+ };
11978
+ const onClick = e => {
11979
+ if (e.delta > 1) {
11980
+ return;
11981
+ }
11982
+ const {
11983
+ cycle,
11984
+ objects
11985
+ } = getSketchState(drawingId, pluginId).interaction;
11986
+ const pressedId = objects.length > 0 ? objects[cycle % objects.length] : e.object.userData.objId;
11987
+ const drawing = core.getDrawing(drawingId);
11988
+ const productId = drawing.structure.currentProduct;
11989
+ const object = drawing.structure.tree[pressedId];
11990
+ const selection = drawing.selection.refs[drawing.selection.active || ''];
11991
+ const isSelectable = (selection == null ? void 0 : selection.isSelectable(TreeObjScope, {
11992
+ object
11993
+ })) || false;
11994
+ if (!isSelectable || !productId) {
11995
+ return;
11996
+ }
11997
+ e.stopPropagation();
11998
+ if (selection != null && selection.isSelectable(TreeObjScope, {
11999
+ object
12000
+ })) {
12001
+ const item = createTreeObjSelItem(productId, object);
12002
+ const selApi = drawing.api.selection;
12003
+ selApi.isItemSelected(item) ? selApi.unselect(item) : selApi.select(item);
12004
+ }
12005
+ };
12006
+ return {
12007
+ name: HandlersList.SSELECT,
12008
+ filter,
12009
+ onDeactivate,
12010
+ pointerHandlers: _objectSpread$f({
12011
+ onClick
12012
+ }, hoverHandler.pointerHandlers),
12013
+ keyHandlers: _objectSpread$f({}, hoverHandler.keyHandlers)
12014
+ };
12015
+ }
12016
+
11588
12017
  const HandlersConstructors = {
11589
12018
  [HandlersList.CREATEANGLE]: CreateAngle,
11590
12019
  [HandlersList.DRAG]: Drag,
12020
+ [HandlersList.SSELECT]: SSelect,
11591
12021
  [HandlersList.DRAWPOINT]: DrawPoint,
11592
12022
  [HandlersList.DRAWLINE]: DrawLine,
11593
12023
  [HandlersList.DRAWCIRCLE]: DrawCircle,
@@ -11703,9 +12133,9 @@ const getLineColor = objState => {
11703
12133
  isHighlighted,
11704
12134
  lgsState
11705
12135
  } = objState;
11706
- if (!isSketchActive) return 0x009999;
11707
12136
  if (isSelected) return 0xffa500;
11708
12137
  if (isGHovered || isHighlighted) return 0x00ff00;
12138
+ if (!isSketchActive) return 0x009999;
11709
12139
  if (isWelldefined(lgsState)) return 0x000000;
11710
12140
  if (isOverdefined(lgsState)) return 0x990000;
11711
12141
  return 0x0066ff;
@@ -11718,9 +12148,9 @@ const getArcColor = objState => {
11718
12148
  isHighlighted,
11719
12149
  lgsState
11720
12150
  } = objState;
11721
- if (!isSketchActive) return 0x009999;
11722
12151
  if (isSelected) return 0xffa500;
11723
12152
  if (isGHovered || isHighlighted) return 0x00ff00;
12153
+ if (!isSketchActive) return 0x009999;
11724
12154
  if (isWelldefined(lgsState)) return 0x000000;
11725
12155
  if (isOverdefined(lgsState)) return 0x990000;
11726
12156
  return 0x0066ff;
@@ -11740,6 +12170,17 @@ const getConstrColor = objState => {
11740
12170
  if (isHighlighted) return 0xbbecdd;
11741
12171
  return 0xdddddd;
11742
12172
  };
12173
+ const getRegionColor = objState => {
12174
+ const {
12175
+ isSelected,
12176
+ isGHovered,
12177
+ isHighlighted
12178
+ } = objState;
12179
+ if (isSelected) return 0xffff00;
12180
+ if (isGHovered) return 0x28d79f;
12181
+ if (isHighlighted) return 0xbbecdd;
12182
+ return 0xdddddd;
12183
+ };
11743
12184
  const getColor = (object, objState) => {
11744
12185
  const {
11745
12186
  isSketchActive,
@@ -11762,6 +12203,8 @@ const getColor = (object, objState) => {
11762
12203
  return getArcColor(objState);
11763
12204
  } else if (is2DConstraint(object)) {
11764
12205
  return getConstrColor(objState);
12206
+ } else if (isSketchRegion(object)) {
12207
+ return getRegionColor(objState);
11765
12208
  }
11766
12209
  return 0x000000;
11767
12210
  };
@@ -11804,9 +12247,9 @@ const useColor = objId => {
11804
12247
  var _d$interaction$select2;
11805
12248
  return ((_d$interaction$select2 = d.interaction.selected) == null ? void 0 : _d$interaction$select2.findIndex(info => info.objectId === objId)) !== -1;
11806
12249
  }) || false;
11807
- // gHovered - true if object is selector-hovered
12250
+ // sHovered - true if object is selector-hovered
11808
12251
  const sHovered = useIsSHovered(drawingId, objId);
11809
- // gSelected - true if object is selector-selected
12252
+ // sSelected - true if object is selector-selected
11810
12253
  const sSelected = useIsSSelected(drawingId, objId);
11811
12254
  const isSelected = gSelected || sSelected;
11812
12255
  const isHighlighted = useSketchState(drawingId, pluginId, state => state.highlighted.indexOf(objId) !== -1);
@@ -11857,10 +12300,7 @@ const defaultHandlers = {
11857
12300
  };
11858
12301
 
11859
12302
  const useHandlersAndColor = (drawingId, objId) => {
11860
- const isSelActive = react.useDrawing(drawingId, d => d.selection.active);
11861
- const treeObjInteraction = useTreeObjInteraction(drawingId, objId);
11862
- const sketchPointerHandlers = useSketchHandlers(objId);
11863
- const pointerHandlers = isSelActive ? treeObjInteraction.handlers : sketchPointerHandlers;
12303
+ const pointerHandlers = useSketchHandlers(objId);
11864
12304
  const color = useColor(objId);
11865
12305
  return React.useMemo(() => ({
11866
12306
  handlers: pointerHandlers || defaultHandlers,
@@ -11868,22 +12308,6 @@ const useHandlersAndColor = (drawingId, objId) => {
11868
12308
  }), [pointerHandlers, color]);
11869
12309
  };
11870
12310
 
11871
- const virtualScene = new THREE__namespace.Scene();
11872
- const HUD = ({
11873
- children
11874
- }) => {
11875
- const {
11876
- gl,
11877
- camera
11878
- } = fiber.useThree();
11879
- fiber.useFrame(() => {
11880
- gl.autoClear = false;
11881
- gl.clearDepth();
11882
- gl.render(virtualScene, camera);
11883
- }, 3);
11884
- return /*#__PURE__*/React.createElement(React.Fragment, null, fiber.createPortal( /*#__PURE__*/React.createElement("group", null, children), virtualScene));
11885
- };
11886
-
11887
12311
  /*
11888
12312
  * For correct drawing of objects that lie in the same plane, polygonOffset is used.
11889
12313
  * https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glPolygonOffset.xhtml
@@ -11894,22 +12318,21 @@ const HUD = ({
11894
12318
  * factor parameter is redundant for this purpose, so only units parameter is used.
11895
12319
  */
11896
12320
 
11897
- const constrSize = 2.5;
12321
+ const iconSize = 2.5;
11898
12322
  const hoverZone = 0.8;
11899
- const constrBox = new THREE__namespace.Box3();
12323
+ const iconBox = new THREE__namespace.Box3();
11900
12324
  const boxMin = new THREE__namespace.Vector3();
11901
12325
  const boxMax = new THREE__namespace.Vector3();
11902
12326
  const target$2 = new THREE__namespace.Vector3();
11903
- const Constraint$1 = props => {
12327
+ const Icon$3 = ({
12328
+ objId,
12329
+ position
12330
+ }) => {
11904
12331
  const {
11905
12332
  drawingId,
11906
12333
  pluginId
11907
12334
  } = React.useContext(ViewContext);
11908
- const {
11909
- objId,
11910
- position
11911
- } = props;
11912
- const constraint = react.useDrawing(drawingId, drawing => drawing.structure.tree[objId]);
12335
+ const object = react.useDrawing(drawingId, drawing => drawing.structure.tree[objId]);
11913
12336
  const {
11914
12337
  handlers,
11915
12338
  color
@@ -11920,15 +12343,15 @@ const Constraint$1 = props => {
11920
12343
  renderOrder,
11921
12344
  polygonOffsetUnits
11922
12345
  } = useGeomParams(objId);
11923
- const texture = textures[constraint.class];
11924
- const constraintRaycast = React.useCallback(function (raycaster, intersects) {
12346
+ const texture = textures[object.class];
12347
+ const raycast = React.useCallback(function (raycaster, intersects) {
11925
12348
  const sketchScale = getScale(drawingId, pluginId);
11926
- const halfWidth = (constrSize + hoverZone) * sketchScale * 0.5;
12349
+ const halfWidth = (iconSize + hoverZone) * sketchScale * 0.5;
11927
12350
  boxMin.set(-halfWidth, -halfWidth, 0.0);
11928
12351
  boxMax.set(halfWidth, halfWidth, 0.0);
11929
- constrBox.set(boxMin, boxMax);
11930
- constrBox.applyMatrix4(this.matrixWorld);
11931
- const success = raycaster.ray.intersectBox(constrBox, target$2) !== null;
12352
+ iconBox.set(boxMin, boxMax);
12353
+ iconBox.applyMatrix4(this.matrixWorld);
12354
+ const success = raycaster.ray.intersectBox(iconBox, target$2) !== null;
11932
12355
  if (success) {
11933
12356
  intersects.push({
11934
12357
  distance: 0,
@@ -11944,10 +12367,10 @@ const Constraint$1 = props => {
11944
12367
  renderOrder: renderOrder - 0.5
11945
12368
  }, handlers, {
11946
12369
  userData: userData,
11947
- raycast: constraintRaycast
12370
+ raycast: raycast
11948
12371
  }), /*#__PURE__*/React.createElement("planeGeometry", {
11949
12372
  attach: "geometry",
11950
- args: [(constrSize + hoverZone) * scale, (constrSize + hoverZone) * scale, 1, 1]
12373
+ args: [(iconSize + hoverZone) * scale, (iconSize + hoverZone) * scale, 1, 1]
11951
12374
  }), /*#__PURE__*/React.createElement("meshBasicMaterial", {
11952
12375
  attach: "material",
11953
12376
  transparent: true,
@@ -11957,7 +12380,7 @@ const Constraint$1 = props => {
11957
12380
  renderOrder: renderOrder - 0.5
11958
12381
  }, /*#__PURE__*/React.createElement("planeGeometry", {
11959
12382
  attach: "geometry",
11960
- args: [constrSize * scale, constrSize * scale, 1, 1]
12383
+ args: [iconSize * scale, iconSize * scale, 1, 1]
11961
12384
  }), /*#__PURE__*/React.createElement("meshBasicMaterial", {
11962
12385
  attach: "material",
11963
12386
  side: THREE__namespace.DoubleSide,
@@ -11969,7 +12392,7 @@ const Constraint$1 = props => {
11969
12392
  renderOrder: renderOrder
11970
12393
  }, /*#__PURE__*/React.createElement("planeGeometry", {
11971
12394
  attach: "geometry",
11972
- args: [constrSize * scale, constrSize * scale, 1, 1]
12395
+ args: [iconSize * scale, iconSize * scale, 1, 1]
11973
12396
  }), /*#__PURE__*/React.createElement("meshBasicMaterial", {
11974
12397
  attach: "material",
11975
12398
  side: THREE__namespace.DoubleSide,
@@ -11998,23 +12421,78 @@ const getObjCenterPoint = (id, tree) => {
11998
12421
  }
11999
12422
  return new THREE__namespace.Vector3();
12000
12423
  };
12001
- const Constraints$1 = props => {
12424
+ const IconGroups = ({
12425
+ sketchId,
12426
+ ids,
12427
+ showAll
12428
+ }) => {
12002
12429
  const {
12003
12430
  drawingId,
12004
- pluginId
12431
+ pluginId,
12432
+ isActive
12005
12433
  } = React.useContext(ViewContext);
12434
+ const sketch = react.useDrawing(drawingId, drawing => drawing.structure.tree[sketchId]);
12435
+ const lastHoveredPos = useSketchState(drawingId, pluginId, state => state.interaction.lastHoveredPos);
12436
+ const constraintsToGeometry = useSketchState(drawingId, pluginId, state => state.interaction.constraintsToGeometry);
12437
+ const scale = useSketchState(drawingId, pluginId, state => state.scale);
12438
+ const positions = React.useMemo(() => {
12439
+ if (!sketch.children) {
12440
+ return {};
12441
+ }
12442
+ const tree = core.getDrawing(drawingId).structure.tree;
12443
+ const rows = [];
12444
+ ids.forEach(id => {
12445
+ let position = lastHoveredPos[id];
12446
+ if (!position || showAll) {
12447
+ var _constraintsToGeometr;
12448
+ const geometryId = (_constraintsToGeometr = constraintsToGeometry[id]) != null ? _constraintsToGeometr : getEntities(drawingId, id)[0];
12449
+ position = getObjCenterPoint(geometryId, tree);
12450
+ }
12451
+ const suitableRow = rows.find(row => row.position.distanceTo(position) < tolerance$7);
12452
+ if (suitableRow) {
12453
+ suitableRow.ids.push(id);
12454
+ } else {
12455
+ rows.push({
12456
+ position,
12457
+ ids: [id]
12458
+ });
12459
+ }
12460
+ });
12461
+ const positionsNew = {};
12462
+ rows.forEach(row => {
12463
+ row.ids.forEach((id, index) => {
12464
+ const offset = new THREE__namespace.Vector3((-(row.ids.length - 1) / 2 + index) * iconSize * 1.1 * scale, 3 * scale, 0);
12465
+ positionsNew[id] = row.position.clone().add(offset);
12466
+ });
12467
+ });
12468
+ return positionsNew;
12469
+ }, [drawingId, ids, showAll, constraintsToGeometry, scale, sketch.children, lastHoveredPos]);
12470
+ const csys = react.useDrawing(drawingId, drawing => sketchId >= 0 && drawing.structure.tree[sketchId].coordinateSystem);
12471
+ const transformMatrix = React.useMemo(() => csys ? core.MathUtils.convertToMatrix4(csys) : new THREE__namespace.Matrix4(), [csys]);
12472
+ const icons = /*#__PURE__*/React.createElement(React.Fragment, null, ids.map(id => /*#__PURE__*/React.createElement(Icon$3, {
12473
+ key: id,
12474
+ objId: id,
12475
+ position: positions[id]
12476
+ })));
12477
+ return isActive ? /*#__PURE__*/React.createElement(HUD, null, /*#__PURE__*/React.createElement("group", {
12478
+ matrix: transformMatrix,
12479
+ matrixAutoUpdate: false
12480
+ }, icons)) : icons;
12481
+ };
12482
+
12483
+ const Constraints$1 = ({
12484
+ sketchId
12485
+ }) => {
12006
12486
  const {
12007
- sketchId
12008
- } = props;
12487
+ drawingId,
12488
+ pluginId
12489
+ } = React.useContext(ViewContext);
12009
12490
  const sketch = react.useDrawing(drawingId, drawing => drawing.structure.tree[sketchId]);
12010
12491
  const selected = useDrawingArr(drawingId, d => d.interaction.selected);
12011
12492
  const alwaysShow = useSketchState(drawingId, pluginId, state => state.alwaysShowConstr);
12012
12493
  const showCoincidence = useSketchState(drawingId, pluginId, state => state.showCoincidence);
12013
12494
  const showRigidSets = useSketchState(drawingId, pluginId, s => s.showRigidSets);
12014
12495
  const highlighted = useSketchState(drawingId, pluginId, state => state.highlighted);
12015
- const lastPos = useSketchState(drawingId, pluginId, state => state.interaction.lastPos);
12016
- const constraintsToGeometry = useSketchState(drawingId, pluginId, state => state.constraintsToGeometry);
12017
- const scale = useSketchState(drawingId, pluginId, state => state.scale);
12018
12496
  const constraintIds = React.useMemo(() => {
12019
12497
  var _sketch$children;
12020
12498
  const tree = core.getDrawing(drawingId).structure.tree;
@@ -12042,50 +12520,11 @@ const Constraints$1 = props => {
12042
12520
 
12043
12521
  return result;
12044
12522
  }, [sketch.children, highlighted, selected, alwaysShow, showCoincidence, drawingId, showRigidSets]);
12045
- const constrPositions = React.useMemo(() => {
12046
- if (!sketch.children) {
12047
- return {};
12048
- }
12049
- const selConstrPositions = {};
12050
- const tree = core.getDrawing(drawingId).structure.tree;
12051
- selected.filter(info => is2DConstraint(tree[info.objectId]) && info.userData.hoverPos).forEach(info => selConstrPositions[info.objectId] = info.userData.hoverPos);
12052
- const constrRows = [];
12053
- constraintIds.forEach(id => {
12054
- const constraint = tree[id];
12055
- const geometryId = constraintsToGeometry[id] ? constraintsToGeometry[id] : getConstrEntities(drawingId, id)[0];
12056
- let position = selConstrPositions[id] || lastPos;
12057
- if (!position || alwaysShow) {
12058
- position = getObjCenterPoint(geometryId, tree);
12059
- }
12060
- const suitableRow = constrRows.find(row => row.position.distanceTo(position) < tolerance$7);
12061
- if (suitableRow) {
12062
- suitableRow.constrIds.push(constraint.id);
12063
- } else {
12064
- constrRows.push({
12065
- position,
12066
- constrIds: [constraint.id]
12067
- });
12068
- }
12069
- });
12070
- const constrPositionsNew = {};
12071
- constrRows.forEach(constrRow => {
12072
- constrRow.constrIds.forEach((constrId, index) => {
12073
- const offset = new THREE__namespace.Vector3((-(constrRow.constrIds.length - 1) / 2 + index) * constrSize * 1.1 * scale, 3 * scale, 0);
12074
- constrPositionsNew[constrId] = constrRow.position.clone().add(offset);
12075
- });
12076
- });
12077
- return constrPositionsNew;
12078
- }, [constraintIds, constraintsToGeometry, scale, drawingId, sketch.children, alwaysShow, selected, lastPos]);
12079
- const csys = react.useDrawing(drawingId, drawing => sketchId >= 0 && drawing.structure.tree[sketchId].coordinateSystem);
12080
- const transformMatrix = React.useMemo(() => csys ? core.MathUtils.convertToMatrix4(csys) : new THREE__namespace.Matrix4(), [csys]);
12081
- return /*#__PURE__*/React.createElement(HUD, null, /*#__PURE__*/React.createElement("group", {
12082
- matrix: transformMatrix,
12083
- matrixAutoUpdate: false
12084
- }, constraintIds.map(constraintId => /*#__PURE__*/React.createElement(Constraint$1, {
12085
- key: constraintId,
12086
- objId: constraintId,
12087
- position: constrPositions[constraintId]
12088
- }))));
12523
+ return /*#__PURE__*/React.createElement(IconGroups, {
12524
+ sketchId: sketchId,
12525
+ ids: constraintIds,
12526
+ showAll: alwaysShow
12527
+ });
12089
12528
  };
12090
12529
 
12091
12530
  class InfinityPlane extends THREE__namespace.Object3D {
@@ -12496,6 +12935,53 @@ const Circle = ({
12496
12935
  }));
12497
12936
  };
12498
12937
 
12938
+ const useSketchRegions = (drawingId, sketchId) => {
12939
+ const partId = getAncestorIdByClass(drawingId, sketchId, classcad.CCClasses.CCPart) || NOCCID;
12940
+ const geometrySetId = useDrawingCCId(drawingId, d => {
12941
+ var _d$structure$tree$par;
12942
+ return (_d$structure$tree$par = d.structure.tree[partId]) == null ? void 0 : _d$structure$tree$par.geometrySet;
12943
+ });
12944
+ const geometrySetChildren = useDrawingArr(drawingId, d => {
12945
+ var _d$structure$tree$geo;
12946
+ return (_d$structure$tree$geo = d.structure.tree[geometrySetId]) == null ? void 0 : _d$structure$tree$geo.children;
12947
+ });
12948
+ return React.useMemo(() => {
12949
+ const tree = core.getDrawing(drawingId).structure.tree;
12950
+ const ids = geometrySetChildren.filter(child => {
12951
+ var _tree$child$members, _tree$child$members$s;
12952
+ 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;
12953
+ });
12954
+ return ids;
12955
+ }, [drawingId, sketchId, geometrySetChildren]);
12956
+ };
12957
+
12958
+ const Regions$1 = ({
12959
+ sketchId
12960
+ }) => {
12961
+ const {
12962
+ drawingId,
12963
+ pluginId
12964
+ } = React.useContext(ViewContext);
12965
+ const highlighted = useSketchState(drawingId, pluginId, state => state.highlighted);
12966
+ const selection = react.useDrawing(drawingId, d => d.selection.refs[d.selection.active || '']);
12967
+ const selItems = (selection == null ? void 0 : selection.items) || [];
12968
+ const selected = selItems.map(item => {
12969
+ var _item$data$object;
12970
+ return (_item$data$object = item.data.object) == null ? void 0 : _item$data$object.id;
12971
+ }).filter(item => item !== undefined);
12972
+ const regions = useSketchRegions(drawingId, sketchId);
12973
+ const displayedRegions = React.useMemo(() => {
12974
+ const tree = core.getDrawing(drawingId).structure.tree;
12975
+ return regions.filter(regionId => (highlighted.indexOf(regionId) !== -1 || selected.findIndex(selId => selId === regionId) !== -1) && (selection == null ? void 0 : selection.isSelectable(TreeObjScope, {
12976
+ object: tree[regionId]
12977
+ })));
12978
+ }, [drawingId, regions, highlighted, selection, selected]);
12979
+ return /*#__PURE__*/React.createElement(IconGroups, {
12980
+ sketchId: sketchId,
12981
+ ids: displayedRegions
12982
+ });
12983
+ };
12984
+
12499
12985
  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; }
12500
12986
  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; }
12501
12987
 
@@ -12756,13 +13242,14 @@ const SketchPlane = ({
12756
13242
  }) => {
12757
13243
  const {
12758
13244
  drawingId,
12759
- pluginId
13245
+ pluginId,
13246
+ isActive
12760
13247
  } = React.useContext(ViewContext);
12761
13248
  const ref = React.useRef(null);
12762
13249
  const handlers = useSketchHandlers(objId);
12763
13250
  const step = useSketchState(drawingId, pluginId, state => state.step);
12764
13251
  fiber.useFrame(state => {
12765
- if (!ref.current) {
13252
+ if (!ref.current || !isActive) {
12766
13253
  return;
12767
13254
  }
12768
13255
  const sketchPlane = new THREE__namespace.Plane().setFromNormalAndCoplanarPoint(new THREE__namespace.Vector3(0, 1, 0), new THREE__namespace.Vector3(0, 0, 0)).applyMatrix4(ref.current.matrixWorld);
@@ -12781,7 +13268,7 @@ const SketchPlane = ({
12781
13268
  userData: {
12782
13269
  objId
12783
13270
  }
12784
- })), /*#__PURE__*/React.createElement(drei.Grid, {
13271
+ })), isActive && /*#__PURE__*/React.createElement(drei.Grid, {
12785
13272
  ref: ref,
12786
13273
  args: [10, 10],
12787
13274
  rotation: gridRotation,
@@ -12864,13 +13351,15 @@ const Sketch = ({
12864
13351
  drawnObjectsRef
12865
13352
  });
12866
13353
  }, [set]);
12867
- return /*#__PURE__*/React.createElement(React.Fragment, null, isActive && /*#__PURE__*/React.createElement(SketchPlane, {
13354
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SketchPlane, {
12868
13355
  objId: objId
12869
13356
  }), /*#__PURE__*/React.createElement(MergedWrapper, null, drawnObjects && /*#__PURE__*/React.createElement("group", {
12870
13357
  ref: drawnObjectsRef,
12871
13358
  name: "sketch"
12872
13359
  }, drawnObjects, isActive && containerIds && containerIds.length === 0 && /*#__PURE__*/React.createElement(Constraints$1, {
12873
13360
  sketchId: objId
13361
+ }), !isActive && /*#__PURE__*/React.createElement(Regions$1, {
13362
+ sketchId: objId
12874
13363
  }))));
12875
13364
  };
12876
13365
 
@@ -13587,30 +14076,133 @@ function useSetScale(drawingId, pluginId) {
13587
14076
  });
13588
14077
  }
13589
14078
 
14079
+ // Adds handlers to pluginState when sketcher changes its state to active / view only / inactive state
14080
+ function useHandlers(drawingId, pluginId) {
14081
+ const camControls = fiber.useThree(state => state.controls);
14082
+ const activePlugin = react.useDrawing(drawingId, drawing => drawing.plugin.active.feature);
14083
+ const isActive = activePlugin === pluginId;
14084
+ React.useEffect(() => {
14085
+ const handlers = {};
14086
+ let defaultHandler = undefined;
14087
+ if (isActive) {
14088
+ // Use all handlers in the drawing mode
14089
+ Object.values(HandlersConstructors).forEach(handlerConstr => {
14090
+ const handler = handlerConstr(drawingId, pluginId, camControls);
14091
+ handlers[handler.name] = handler;
14092
+ });
14093
+ defaultHandler = HandlersList.DRAG;
14094
+ } else {
14095
+ // Only use SSELECT handler in the view only mode
14096
+ const handler = HandlersConstructors.sSelect(drawingId, pluginId);
14097
+ handlers[handler.name] = handler;
14098
+ }
14099
+ const {
14100
+ set
14101
+ } = core.getPlugin(drawingId, pluginId);
14102
+ set({
14103
+ handlers,
14104
+ activeHandler: defaultHandler
14105
+ });
14106
+ }, [drawingId, pluginId, camControls, isActive]);
14107
+ }
14108
+ function useKeyHandlers(drawingId, pluginId) {
14109
+ // Add key handlers to the window
14110
+ React.useEffect(() => {
14111
+ function keyupHandler(e) {
14112
+ if (e.repeat) return; // There is no need to fire handlers multiple times
14113
+
14114
+ const pluginState = getSketchState(drawingId, pluginId);
14115
+ const curHandlerName = pluginState.activeHandler;
14116
+ if (curHandlerName === undefined) {
14117
+ return;
14118
+ }
14119
+ const handler = pluginState.handlers[curHandlerName];
14120
+ if (e.code === 'Escape') {
14121
+ var _handler$keyHandlers;
14122
+ const escapeH = (_handler$keyHandlers = handler.keyHandlers) == null ? void 0 : _handler$keyHandlers.escape;
14123
+ const switchToDrag = escapeH !== undefined ? escapeH(e) : true;
14124
+ if (switchToDrag) {
14125
+ // If handler doesn't have escape handler or escape handler returns true, the drag handler will be enabled.
14126
+ const {
14127
+ set
14128
+ } = core.getPlugin(drawingId, pluginId);
14129
+ set({
14130
+ activeHandler: HandlersList.DRAG
14131
+ });
14132
+ }
14133
+ } else {
14134
+ if (handler.keyHandlers && handler.keyHandlers.keyup) {
14135
+ handler.keyHandlers.keyup(e);
14136
+ }
14137
+ }
14138
+ }
14139
+ function keydownHandler(e) {
14140
+ if (e.repeat) return; // There is no need to fire handlers multiple times
14141
+
14142
+ const pluginState = getSketchState(drawingId, pluginId);
14143
+ const curHandlerName = pluginState.activeHandler;
14144
+ if (curHandlerName === undefined) {
14145
+ return;
14146
+ }
14147
+ const handler = pluginState.handlers[curHandlerName];
14148
+ if (handler.keyHandlers && handler.keyHandlers.keydown) {
14149
+ handler.keyHandlers.keydown(e);
14150
+ }
14151
+ }
14152
+ window.addEventListener('keyup', keyupHandler);
14153
+ window.addEventListener('keydown', keydownHandler);
14154
+ return () => {
14155
+ window.removeEventListener('keyup', keyupHandler);
14156
+ window.removeEventListener('keydown', keydownHandler);
14157
+ };
14158
+ }, [drawingId, pluginId]);
14159
+ }
14160
+ function useSwitchHandlers(drawingId, pluginId) {
14161
+ const activeHandler = useSketchState(drawingId, pluginId, state => state.activeHandler);
14162
+ const currentHandler = React.useRef();
14163
+ React.useEffect(() => {
14164
+ // Switching handlers (call onActivate and onDeactivate)
14165
+ const handlers = getSketchState(drawingId, pluginId).handlers;
14166
+ const switchHandlers = async () => {
14167
+ if (currentHandler.current) {
14168
+ const h = handlers[currentHandler.current];
14169
+ h && h.onDeactivate && (await h.onDeactivate());
14170
+ }
14171
+ if (activeHandler) {
14172
+ const handler = handlers[activeHandler];
14173
+ handler && handler.onActivate && handler.onActivate();
14174
+ }
14175
+ currentHandler.current = activeHandler;
14176
+ };
14177
+ switchHandlers();
14178
+ }, [drawingId, pluginId, activeHandler]);
14179
+ }
14180
+
13590
14181
  // Turn off all handlers and hide sketch selection if global selection is active
13591
- function useHandleGSelection(drawingId, pluginId, activeHandler) {
14182
+ function useHandleSSelection(drawingId, pluginId) {
13592
14183
  const {
13593
14184
  set
13594
14185
  } = core.getPlugin(drawingId, pluginId);
13595
14186
  const setSelected = core.getDrawing(drawingId).api.interaction.setSelected;
13596
14187
  const activeSelection = react.useDrawing(drawingId, d => d.selection.active);
13597
- const prevHandler = React.useRef();
14188
+ const activeHandler = useSketchState(drawingId, pluginId, state => state.activeHandler);
14189
+ const prevHandler = React.useRef(null);
13598
14190
  const prevSelected = React.useRef([]);
13599
14191
  React.useEffect(() => {
13600
14192
  // Disable all handlers if global selection is active
13601
- if (activeSelection && activeSelection !== 'UseRef' && !prevHandler.current) {
14193
+ if (activeSelection && activeSelection !== 'UseRef' && prevHandler.current === null) {
13602
14194
  prevHandler.current = activeHandler;
13603
14195
  prevSelected.current = core.getDrawing(drawingId).interaction.selected || [];
13604
14196
  setSelected([]);
13605
14197
  set({
13606
- activeHandler: undefined
14198
+ activeHandler: HandlersList.SSELECT
13607
14199
  });
13608
- } else if (!activeSelection && prevHandler.current) {
14200
+ } else if (!activeSelection && prevHandler.current !== null) {
13609
14201
  setSelected(prevSelected.current);
13610
14202
  set({
13611
14203
  activeHandler: prevHandler.current
13612
14204
  });
13613
- prevHandler.current = undefined;
14205
+ prevHandler.current = null;
13614
14206
  }
13615
14207
  }, [drawingId, pluginId, activeSelection, activeHandler, set, setSelected]);
13616
14208
  }
@@ -13666,7 +14258,8 @@ function useInteractionReset(drawingId, pluginId) {
13666
14258
  state_.interaction = {
13667
14259
  cycle: 0,
13668
14260
  objects: cursorOverValid,
13669
- lastPos: undefined
14261
+ lastHoveredPos: {},
14262
+ constraintsToGeometry: {}
13670
14263
  };
13671
14264
  }
13672
14265
  if (state_.highlighted || state_.interaction) {
@@ -13674,6 +14267,30 @@ function useInteractionReset(drawingId, pluginId) {
13674
14267
  }
13675
14268
  }, [drawingId, pluginId, children]);
13676
14269
  }
14270
+ function useStateReset(drawingId, pluginId) {
14271
+ React.useEffect(() => {
14272
+ return () => {
14273
+ var _getPlugin;
14274
+ return (_getPlugin = core.getPlugin(drawingId, pluginId)) == null ? void 0 : _getPlugin.set({
14275
+ activeHandler: undefined,
14276
+ handlers: {},
14277
+ tmpObjects: {},
14278
+ highlighted: [],
14279
+ interaction: {
14280
+ cycle: 0,
14281
+ objects: [],
14282
+ lastHoveredPos: {},
14283
+ constraintsToGeometry: {}
14284
+ },
14285
+ isDragged: false,
14286
+ mousePos: undefined,
14287
+ drawnObjectsRef: undefined,
14288
+ rubberBandRectangle: undefined,
14289
+ cursor: null
14290
+ });
14291
+ };
14292
+ }, [drawingId, pluginId]);
14293
+ }
13677
14294
 
13678
14295
  // Changes cursor if it's set in plugin state
13679
14296
  function useChangeCursor() {
@@ -13694,101 +14311,9 @@ const DrawingMode = ({
13694
14311
  }) => {
13695
14312
  const sketchId = react.usePlugin(drawingId, pluginId, plugin => plugin.objectId);
13696
14313
  // TODO: what about useSketchPlugin which return only sketcher state and never undefined?
13697
- const {
13698
- set
13699
- } = core.getPlugin(drawingId, pluginId);
14314
+
13700
14315
  useChangeCursor();
13701
14316
  useOverrideGeometryColor('sketch', 10, overrideValues);
13702
- const camControls = fiber.useThree(state => state.controls);
13703
-
13704
- // Add handlers to pluginState when sketcher is enabled
13705
- React.useEffect(() => {
13706
- const handlers = {};
13707
- Object.values(HandlersConstructors).forEach(handlerConstr => {
13708
- const handler = handlerConstr(drawingId, pluginId, camControls);
13709
- handlers[handler.name] = handler;
13710
- });
13711
- set({
13712
- handlers
13713
- });
13714
- function keyupHandler(e) {
13715
- if (e.repeat) return; // There is no need to fire handlers multiple times
13716
-
13717
- const pluginState = getSketchState(drawingId, pluginId);
13718
- const curHandlerName = pluginState.activeHandler;
13719
- if (curHandlerName === undefined) {
13720
- return;
13721
- }
13722
- const handler = pluginState.handlers[curHandlerName];
13723
- if (e.code === 'Escape') {
13724
- var _handler$keyHandlers;
13725
- const escapeH = (_handler$keyHandlers = handler.keyHandlers) == null ? void 0 : _handler$keyHandlers.escape;
13726
- const switchToDrag = escapeH !== undefined ? escapeH(e) : true;
13727
- if (switchToDrag) {
13728
- // If handler doesn't have escape handler or escape handler returns true, the drag handler will be enabled.
13729
- set({
13730
- activeHandler: HandlersList.DRAG
13731
- });
13732
- }
13733
- } else {
13734
- if (handler.keyHandlers && handler.keyHandlers.keyup) {
13735
- handler.keyHandlers.keyup(e);
13736
- }
13737
- }
13738
- }
13739
- function keydownHandler(e) {
13740
- if (e.repeat) return; // There is no need to fire handlers multiple times
13741
-
13742
- const pluginState = getSketchState(drawingId, pluginId);
13743
- const curHandlerName = pluginState.activeHandler;
13744
- if (curHandlerName === undefined) {
13745
- return;
13746
- }
13747
- const handler = pluginState.handlers[curHandlerName];
13748
- if (handler.keyHandlers && handler.keyHandlers.keydown) {
13749
- handler.keyHandlers.keydown(e);
13750
- }
13751
- }
13752
- window.addEventListener('keyup', keyupHandler);
13753
- window.addEventListener('keydown', keydownHandler);
13754
- return () => {
13755
- window.removeEventListener('keyup', keyupHandler);
13756
- window.removeEventListener('keydown', keydownHandler);
13757
- };
13758
- }, [drawingId, pluginId, set, camControls]);
13759
-
13760
- // Enable drag handler by default.
13761
- React.useEffect(() => {
13762
- set({
13763
- activeHandler: HandlersList.DRAG
13764
- });
13765
- return () => {
13766
- const plugin = core.getPlugin(drawingId, pluginId);
13767
- plugin && plugin.set({
13768
- activeHandler: undefined
13769
- });
13770
- };
13771
- }, [drawingId, pluginId, set]);
13772
- useSetScale(drawingId, pluginId);
13773
- const activeHandler = useSketchState(drawingId, pluginId, state => state.activeHandler);
13774
- const currentHandler = React.useRef();
13775
- React.useEffect(() => {
13776
- // Switching handlers (call onActivate and onDeactivate)
13777
- const handlers = getSketchState(drawingId, pluginId).handlers;
13778
- const switchHandlers = async () => {
13779
- if (currentHandler.current) {
13780
- const h = handlers[currentHandler.current];
13781
- h.onDeactivate && (await h.onDeactivate());
13782
- }
13783
- if (activeHandler) {
13784
- const handler = handlers[activeHandler];
13785
- handler && handler.onActivate && handler.onActivate();
13786
- }
13787
- currentHandler.current = activeHandler;
13788
- };
13789
- switchHandlers();
13790
- }, [drawingId, pluginId, activeHandler]);
13791
- useHandleGSelection(drawingId, pluginId, activeHandler);
13792
14317
  useUseRef(drawingId, sketchId);
13793
14318
  useInteractionReset(drawingId, pluginId);
13794
14319
  const dimId = useDimensionSetId(drawingId, sketchId);
@@ -13807,7 +14332,6 @@ const ViewOnlyMode = ({
13807
14332
  pluginId
13808
14333
  }) => {
13809
14334
  const sketchId = react.usePlugin(drawingId, pluginId, plugin => plugin.objectId);
13810
- useSetScale(drawingId, pluginId);
13811
14335
 
13812
14336
  // Transform matrix is applied in buerli/packages/react/src/components/Plugin.tsx -> View component for every plugin graphics
13813
14337
  // But it makes no sense to apply matrix to HUD. So we have to do it here.
@@ -13836,6 +14360,12 @@ const ViewImpl$e = ({
13836
14360
  const planeSelection = planeRef === 0;
13837
14361
  const activePlugin = react.useDrawing(drawingId, drawing => drawing.plugin.active.feature);
13838
14362
  const isActive = activePlugin === pluginId;
14363
+ useHandlers(drawingId, pluginId);
14364
+ useKeyHandlers(drawingId, pluginId);
14365
+ useSwitchHandlers(drawingId, pluginId);
14366
+ useHandleSSelection(drawingId, pluginId);
14367
+ useSetScale(drawingId, pluginId);
14368
+ useStateReset(drawingId, pluginId);
13839
14369
  const contextValue = React.useMemo(() => ({
13840
14370
  drawingId,
13841
14371
  pluginId,
@@ -15159,7 +15689,7 @@ const AddRegion = () => {
15159
15689
  };
15160
15690
  var RegionMembers;
15161
15691
  (function (RegionMembers) {
15162
- RegionMembers["Curves"] = "curves";
15692
+ RegionMembers["Selected"] = "selected";
15163
15693
  })(RegionMembers || (RegionMembers = {}));
15164
15694
  const EditRegion = ({
15165
15695
  sketchId,
@@ -15172,7 +15702,7 @@ const EditRegion = ({
15172
15702
  const {
15173
15703
  drawingId
15174
15704
  } = React.useContext(RootContext);
15175
- const curves = useRefsParam(drawingId, regionId, RegionMembers.Curves);
15705
+ const curves = useRefsParam(drawingId, regionId, RegionMembers.Selected);
15176
15706
  const name = useDrawingStr(drawingId, d => {
15177
15707
  var _d$structure$tree$reg;
15178
15708
  return (_d$structure$tree$reg = d.structure.tree[regionId]) == null ? void 0 : _d$structure$tree$reg.name;
@@ -15241,7 +15771,7 @@ const EditRegion = ({
15241
15771
  menuInfo: menuInfo,
15242
15772
  caption: "Region",
15243
15773
  icon: /*#__PURE__*/React.createElement(Icon$2, {
15244
- url: img$J,
15774
+ url: img$K,
15245
15775
  size: 14
15246
15776
  }),
15247
15777
  onHide: onHide,
@@ -15280,23 +15810,7 @@ const Regions = () => {
15280
15810
  pluginId
15281
15811
  } = React.useContext(RootContext);
15282
15812
  const sketchId = react.usePlugin(drawingId, pluginId, plugin => plugin.objectId);
15283
- const partId = getAncestorIdByClass(drawingId, sketchId, classcad.CCClasses.CCPart) || NOCCID;
15284
- const geometrySetId = useDrawingCCId(drawingId, d => {
15285
- var _d$structure$tree$par;
15286
- return (_d$structure$tree$par = d.structure.tree[partId]) == null ? void 0 : _d$structure$tree$par.geometrySet;
15287
- });
15288
- const geometrySetChildren = useDrawingArr(drawingId, d => {
15289
- var _d$structure$tree$geo;
15290
- return (_d$structure$tree$geo = d.structure.tree[geometrySetId]) == null ? void 0 : _d$structure$tree$geo.children;
15291
- });
15292
- const regions = React.useMemo(() => {
15293
- const tree = core.getDrawing(drawingId).structure.tree;
15294
- const ids = geometrySetChildren.filter(child => {
15295
- var _tree$child$members, _tree$child$members$s;
15296
- return classcad.ccUtils.base.isA(tree[child].class, classcad.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;
15297
- });
15298
- return ids;
15299
- }, [drawingId, sketchId, geometrySetChildren]);
15813
+ const regions = useSketchRegions(drawingId, sketchId);
15300
15814
  const editedRegions = useEditedRegionsParam();
15301
15815
  const updateAvailable = React.useMemo(() => {
15302
15816
  return editedRegions.value.every(region => region.curves.length > 0) && editedRegions.isChanged();
@@ -15417,7 +15931,9 @@ const RootImpl$i = ({
15417
15931
  React.useEffect(() => {
15418
15932
  return () => {
15419
15933
  var _getPlugin;
15420
- return (_getPlugin = core.getPlugin(drawingId, pluginId)) == null ? void 0 : _getPlugin.set(getInitialState());
15934
+ return (_getPlugin = core.getPlugin(drawingId, pluginId)) == null ? void 0 : _getPlugin.set({
15935
+ needsUpdate: 0
15936
+ });
15421
15937
  };
15422
15938
  }, [drawingId, pluginId]);
15423
15939
  const Component = planeSelected ? SketchMode : PlaneSelectionMode;
@@ -15631,22 +16147,6 @@ const WorkAxisObj = ({
15631
16147
  }));
15632
16148
  };
15633
16149
 
15634
- const getHighlightedColor = (isGHovered, isGSelected, isSHovered, isSSelected) => {
15635
- if (isSHovered) {
15636
- return '#3280ff';
15637
- }
15638
- if (isSSelected) {
15639
- return '#8040c0';
15640
- }
15641
- if (isGHovered) {
15642
- return 'green';
15643
- }
15644
- if (isGSelected) {
15645
- return 'red';
15646
- }
15647
- return undefined;
15648
- };
15649
-
15650
16150
  const tolerance$4 = 1e-6;
15651
16151
  function getBaseColor(direction, type) {
15652
16152
  if (direction.distanceTo(new THREE__namespace.Vector3(1, 0, 0)) < tolerance$4 && type === classcad.WorkAxisType.WA_FIXED) {
@@ -18615,11 +19115,11 @@ const ccClassHeaderMap = {
18615
19115
  },
18616
19116
  [classcad.CCClasses.CCExtrusion]: {
18617
19117
  name: 'Extrusion',
18618
- icon: img$O
19118
+ icon: img$P
18619
19119
  },
18620
19120
  [classcad.CCClasses.CCRevolve]: {
18621
19121
  name: 'Revolve',
18622
- icon: img$N
19122
+ icon: img$O
18623
19123
  },
18624
19124
  [classcad.CCClasses.CCUnion]: {
18625
19125
  name: 'Boolean',
@@ -18659,7 +19159,7 @@ const ccClassHeaderMap = {
18659
19159
  },
18660
19160
  [classcad.CCClasses.CCMirror]: {
18661
19161
  name: 'Mirror',
18662
- icon: img$z
19162
+ icon: img$A
18663
19163
  },
18664
19164
  [classcad.CCClasses.CCTranslation]: {
18665
19165
  name: 'Translation',
@@ -22824,7 +23324,21 @@ const useVisibleSolids = drawingId => {
22824
23324
  solids = solidsIds;
22825
23325
  }
22826
23326
  const solidsUnique = solids.filter((id, i) => solids.indexOf(id) === i);
22827
- return solidsUnique;
23327
+
23328
+ // filter out entities of composite curves
23329
+ const filteredSolids = [];
23330
+ const cache = react.useDrawing(drawingId, d => d.geometry.cache);
23331
+ if (tree && cache) {
23332
+ solidsUnique.forEach(solidId => {
23333
+ var _cache$solidId, _tree$ccEntityId;
23334
+ const ccEntityId = (_cache$solidId = cache[solidId]) == null ? void 0 : _cache$solidId.container.ownerId; // CC_CurveEntity id
23335
+ const ccOperation = (_tree$ccEntityId = tree[ccEntityId]) == null ? void 0 : _tree$ccEntityId.parent; // CC_CompositeCurve id
23336
+ if (ccOperation && tree[ccOperation].class !== classcad.CCClasses.CCCompositeCurve) {
23337
+ filteredSolids.push(solidId);
23338
+ }
23339
+ });
23340
+ }
23341
+ return filteredSolids;
22828
23342
  };
22829
23343
 
22830
23344
  const mateNames = ['firstRefMate', 'secondRefMate'];
@@ -23040,7 +23554,7 @@ const Constraint = ({
23040
23554
  menuInfo: menuInfo,
23041
23555
  caption: "Constraint",
23042
23556
  icon: /*#__PURE__*/React.createElement(Icon$2, {
23043
- url: img$T,
23557
+ url: img$U,
23044
23558
  size: 14
23045
23559
  }),
23046
23560
  onHide: onHide,
@@ -25347,6 +25861,8 @@ const SideBar = ({
25347
25861
  var css_248z = ".toolbar-dropdown .ant-dropdown-menu-root {\n margin-left: -24px;\n}\n";
25348
25862
  styleInject(css_248z);
25349
25863
 
25864
+ 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";
25865
+
25350
25866
  const Icon = ({
25351
25867
  url
25352
25868
  }) => {
@@ -25416,13 +25932,13 @@ const PartModeCmds = (drawingId, rootId) => {
25416
25932
  Solid: [{
25417
25933
  label: 'Extrusion',
25418
25934
  icon: /*#__PURE__*/React.createElement(Icon, {
25419
- url: img$O
25935
+ url: img$P
25420
25936
  }),
25421
25937
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCExtrusion, 'Extrusion'))
25422
25938
  }, {
25423
25939
  label: 'Revolve',
25424
25940
  icon: /*#__PURE__*/React.createElement(Icon, {
25425
- url: img$N
25941
+ url: img$O
25426
25942
  }),
25427
25943
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCRevolve, 'Revolve'))
25428
25944
  }, {
@@ -25480,7 +25996,7 @@ const PartModeCmds = (drawingId, rootId) => {
25480
25996
  }, {
25481
25997
  label: 'Mirror',
25482
25998
  icon: /*#__PURE__*/React.createElement(Icon, {
25483
- url: img$z
25999
+ url: img$A
25484
26000
  }),
25485
26001
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCMirror, 'Mirror'))
25486
26002
  }],
@@ -25535,6 +26051,13 @@ const PartModeCmds = (drawingId, rootId) => {
25535
26051
  }),
25536
26052
  callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCImport, 'Import'))
25537
26053
  },
26054
+ CompositeCurve: {
26055
+ label: 'Composite Curve',
26056
+ icon: /*#__PURE__*/React.createElement(Icon, {
26057
+ url: img$8
26058
+ }),
26059
+ callback: wrapper(() => featureApi.createFeature(drawingId, rootId, classcad.CCClasses.CCCompositeCurve, 'Composite Curve'))
26060
+ },
25538
26061
  Deletion: {
25539
26062
  label: 'Delete Entity',
25540
26063
  icon: /*#__PURE__*/React.createElement(Icon, {
@@ -25545,13 +26068,11 @@ const PartModeCmds = (drawingId, rootId) => {
25545
26068
  };
25546
26069
  };
25547
26070
 
25548
- 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";
25549
-
25550
- 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";
26071
+ 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";
25551
26072
 
25552
- 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";
26073
+ 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";
25553
26074
 
25554
- 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";
26075
+ 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";
25555
26076
 
25556
26077
  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";
25557
26078
 
@@ -25590,28 +26111,28 @@ const AssemblyModeCmds = (drawingId, rootId) => {
25590
26111
  FastenedOrigin: {
25591
26112
  label: 'Add Fastened Origin',
25592
26113
  icon: /*#__PURE__*/React.createElement(Icon, {
25593
- url: img$8
26114
+ url: img$7
25594
26115
  }),
25595
26116
  callback: wrapper(addFastenedOrigin)
25596
26117
  },
25597
26118
  Fastened: {
25598
26119
  label: 'Add Fastened',
25599
26120
  icon: /*#__PURE__*/React.createElement(Icon, {
25600
- url: img$7
26121
+ url: img$6
25601
26122
  }),
25602
26123
  callback: wrapper(addFastened)
25603
26124
  },
25604
26125
  Slider: {
25605
26126
  label: 'Add Slider',
25606
26127
  icon: /*#__PURE__*/React.createElement(Icon, {
25607
- url: img$6
26128
+ url: img$5
25608
26129
  }),
25609
26130
  callback: wrapper(addSlider)
25610
26131
  },
25611
26132
  Revolute: {
25612
26133
  label: 'Add Revolute',
25613
26134
  icon: /*#__PURE__*/React.createElement(Icon, {
25614
- url: img$5
26135
+ url: img$y
25615
26136
  }),
25616
26137
  callback: wrapper(addRevolute)
25617
26138
  },
@@ -25815,7 +26336,7 @@ const useOptionCommands = () => {
25815
26336
  }, {
25816
26337
  label: 'Vertices',
25817
26338
  icon: /*#__PURE__*/React.createElement(Icon, {
25818
- url: img$M
26339
+ url: img$N
25819
26340
  }),
25820
26341
  isChecked: showVertices,
25821
26342
  command: () => setShowVertices(!showVertices)
@@ -26133,23 +26654,25 @@ const Menu = _ref => {
26133
26654
  };
26134
26655
 
26135
26656
  exports.AppearanceEditor = index$a;
26136
- exports.Boolean = index$B;
26657
+ exports.Boolean = index$C;
26137
26658
  exports.BoundingBoxInfo = index$c;
26138
- exports.Box = index$x;
26659
+ exports.Box = index$y;
26139
26660
  exports.CADApi = CADApi;
26140
26661
  exports.CSysDisplay = CSysDisplay;
26141
26662
  exports.Chamfer = index$s;
26142
26663
  exports.CircularPattern = index$l;
26664
+ exports.CompositeCurve = index$v;
26665
+ exports.CompositeCurveObj = CompositeCurveObj;
26143
26666
  exports.Cone = index$u;
26144
26667
  exports.Constraints = Constraints;
26145
26668
  exports.ContextMenu = ContextMenu;
26146
- exports.Cylinder = index$v;
26669
+ exports.Cylinder = index$w;
26147
26670
  exports.Cylindrical = index$5;
26148
- exports.Dimensions = index$C;
26671
+ exports.Dimensions = index$D;
26149
26672
  exports.Drawing = Drawing;
26150
26673
  exports.EntityDeletion = index$1;
26151
26674
  exports.Expressions = index$b;
26152
- exports.Extrusion = index$A;
26675
+ exports.Extrusion = index$B;
26153
26676
  exports.Fastened = index$8;
26154
26677
  exports.FastenedOrigin = index$9;
26155
26678
  exports.FeaturePlugin = FeaturePlugin;
@@ -26174,7 +26697,7 @@ exports.PluginGeometryBounds = PluginGeometryBounds;
26174
26697
  exports.ProductManagement = index;
26175
26698
  exports.Readfile = Readfile$1;
26176
26699
  exports.Revolute = index$6;
26177
- exports.Revolve = index$y;
26700
+ exports.Revolve = index$z;
26178
26701
  exports.Rotate = index$q;
26179
26702
  exports.SelectedMateObj = SelectedMateObj;
26180
26703
  exports.SideBar = SideBar;
@@ -26183,12 +26706,12 @@ exports.Slice = index$o;
26183
26706
  exports.SliceBySheet = index$n;
26184
26707
  exports.Slider = index$7;
26185
26708
  exports.Solids = Solids;
26186
- exports.Sphere = index$w;
26709
+ exports.Sphere = index$x;
26187
26710
  exports.ToolBar = ToolBar;
26188
26711
  exports.TransformByCsys = index$p;
26189
26712
  exports.Translate = index$r;
26190
26713
  exports.TreeObjScope = TreeObjScope;
26191
- exports.Twist = index$z;
26714
+ exports.Twist = index$A;
26192
26715
  exports.ViewOptionButtons = ViewOptionButtons;
26193
26716
  exports.ViewPlugButtons = ViewPlugButtons;
26194
26717
  exports.WorkAxis = index$h;