mxcad 1.0.364 → 1.0.365

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/mxcad.d.ts CHANGED
@@ -2656,7 +2656,7 @@ export declare class MxCADUtilityClass {
2656
2656
  * @param dX - 坐标点的 X 坐标值
2657
2657
  * @param dY - 坐标点的 Y 坐标值
2658
2658
  * @param dZ - 坐标点的 Z 坐标值
2659
- * @param dSearhRange - 查找范围,默认为 -1(表示查找整个绘图区域)
2659
+ * @param dSearhRange - 设置选取范围,默认为 -1 表示自适应,或者输入对应的CAD坐标长度
2660
2660
  * @param filter - 过滤器,用于过滤查找到的图形对象,默认为 null(表示不进行过滤)
2661
2661
  * @returns 返回查找到的图形对象的 ID
2662
2662
  * @example
package/dist/mxcad.es.js CHANGED
@@ -15080,7 +15080,7 @@ win.McDrawObjectEvent_asciiToUTF8 = function (hexstr) {
15080
15080
  return MxG2312Obj.decodeFromGb2312Imp(hexstr);
15081
15081
  };
15082
15082
 
15083
- const version$1 = "1.0.363";
15083
+ const version$1 = "1.0.364";
15084
15084
 
15085
15085
  var isSharedArrayBuffer = "SharedArrayBuffer" in window;
15086
15086
  var isCdn = document.currentScript && /unpkg\.com\/mxcad/.test(document.currentScript.src);
@@ -22038,6 +22038,8 @@ function calculateDistanceFromPointToLine(pointToCheck, pointA, pointB) {
22038
22038
  function selectLineSegmentFromPolylineByPoint(ent, selectPt) {
22039
22039
  var distanceTolerance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
22040
22040
  var num = ent.numVerts();
22041
+ var res = void 0;
22042
+ var minDist = Number.MAX_VALUE;
22041
22043
  for (var index = 0; index < ent.numVerts(); index++) {
22042
22044
  var pt = ent.getPointAt(index).val;
22043
22045
  var nextPt = ent.getPointAt(index + 1).val;
@@ -22048,8 +22050,10 @@ function selectLineSegmentFromPolylineByPoint(ent, selectPt) {
22048
22050
  nextPt = ent.getPointAt(0).val;
22049
22051
  isClosed = true;
22050
22052
  }
22051
- if (nextPt && calculateDistanceFromPointToLine(selectPt, pt, nextPt) < distanceTolerance) {
22052
- return {
22053
+ var dist = calculateDistanceFromPointToLine(selectPt, pt, nextPt);
22054
+ if (nextPt && dist < minDist) {
22055
+ minDist = dist;
22056
+ res = {
22053
22057
  start: pt,
22054
22058
  end: nextPt,
22055
22059
  startIndex: index,
@@ -22095,6 +22099,7 @@ function selectLineSegmentFromPolylineByPoint(ent, selectPt) {
22095
22099
  };
22096
22100
  }
22097
22101
  }
22102
+ return res;
22098
22103
  }
22099
22104
  function darkenColor(color, factor) {
22100
22105
  var r = color.r;
@@ -40900,38 +40905,37 @@ function createThickLine(start, end) {
40900
40905
  return new THREE.Mesh(geometry, material);
40901
40906
  }
40902
40907
  function calculateChamferDistance(line1, line2, d1, theta) {
40903
- if (d1 <= 0) throw new Error("d1 must be positive");
40904
- if (theta <= 0 || theta >= Math.PI) {
40905
- throw new Error("theta must be in (0, \u03C0) radians");
40906
- }
40907
- var dir1 = getDirectionVector(line1);
40908
- var dir2 = getDirectionVector(line2);
40909
- var phi = calculateAngleBetweenVectors(dir1, dir2);
40910
- if (theta + phi >= Math.PI) {
40911
- throw new Error("theta (".concat(theta, " rad) + phi (").concat(phi, " rad) >= \u03C0, chamfer undefined."));
40908
+ var intersects = line1.IntersectWith(line2, McDb.Intersect.kExtendBoth);
40909
+ if (intersects.length() === 0) return false;
40910
+ var V = intersects.at(0);
40911
+ var dir1 = line1.endPoint.clone().sub(line1.startPoint).normalize();
40912
+ var dir2 = line2.endPoint.clone().sub(line2.startPoint).normalize();
40913
+ var vToStart1 = line1.startPoint.clone().sub(V);
40914
+ if (vToStart1.dotProduct(dir1) > 0) dir1 = dir1.negate();
40915
+ var vToStart2 = line2.startPoint.clone().sub(V);
40916
+ if (vToStart2.dotProduct(dir2) > 0) dir2 = dir2.negate();
40917
+ var dot = dir1.dotProduct(dir2);
40918
+ dot = Math.max(-1, Math.min(1, dot));
40919
+ var alpha = Math.acos(dot);
40920
+ var maxTheta = Math.PI - alpha - 1e-6;
40921
+ if (theta <= 1e-6) {
40922
+ console.warn("Theta too small. Must be > 0.");
40923
+ return false;
40912
40924
  }
40913
- var denom = Math.sin(theta + phi);
40914
- if (Math.abs(denom) < 1e-12) {
40915
- throw new Error("theta + phi is too close to 0 or \u03C0, chamfer undefined");
40925
+ if (theta >= Math.PI - alpha) {
40926
+ var maxDeg = (maxTheta * 180 / Math.PI).toFixed(2);
40927
+ var givenDeg = (theta * 180 / Math.PI).toFixed(2);
40928
+ console.warn("Invalid theta: ".concat(givenDeg, "\xB0. Maximum allowed: ").concat(maxDeg, "\xB0 (since line angle = ").concat((alpha * 180 / Math.PI).toFixed(2), "\xB0)."));
40929
+ return false;
40916
40930
  }
40917
- var d2 = d1 * Math.sin(theta) / denom;
40918
- if (d2 <= 0) {
40919
- console.warn("Computed d2 = ".concat(d2, " is non-positive. Check angle definitions."));
40931
+ var sinTheta = Math.sin(theta);
40932
+ var sinAlphaPlusTheta = Math.sin(alpha + theta);
40933
+ if (Math.abs(sinAlphaPlusTheta) < 1e-12) {
40934
+ return false;
40920
40935
  }
40936
+ var d2 = d1 * (sinTheta / sinAlphaPlusTheta);
40921
40937
  return d2;
40922
40938
  }
40923
- function getDirectionVector(line) {
40924
- var dx = line.endPoint.x - line.startPoint.x;
40925
- var dy = line.endPoint.y - line.startPoint.y;
40926
- var len = Math.hypot(dx, dy);
40927
- if (len < 1e-12) throw new Error("Line points are identical");
40928
- return [dx / len, dy / len];
40929
- }
40930
- function calculateAngleBetweenVectors(v1, v2) {
40931
- var dot = v1[0] * v2[0] + v1[1] * v2[1];
40932
- var clampedDot = Math.max(-1, Math.min(1, dot));
40933
- return Math.acos(clampedDot);
40934
- }
40935
40939
  var getPointInfo = function getPointInfo(pl, index) {
40936
40940
  var bulge = pl.getBulgeAt(index);
40937
40941
  var point = pl.getPointAt(index).val;
@@ -42408,10 +42412,10 @@ var onKeyup = function onKeyup(e) {
42408
42412
  window.addEventListener("keydown", onKeydown);
42409
42413
  window.addEventListener("keyup", onKeyup);
42410
42414
  var mxChamferStorrage = createReactiveStorage({
42411
- length: 0,
42415
+ length: 10,
42412
42416
  angle: 0,
42413
- dist: 0,
42414
- dist1: 0,
42417
+ dist: 10,
42418
+ dist1: 10,
42415
42419
  isAngleChamfer: false,
42416
42420
  isPruning: true,
42417
42421
  isMultiple: false
@@ -42434,7 +42438,7 @@ function _Mx_Chamfer() {
42434
42438
  isAngleChamfer = mxChamferStorrage.isAngleChamfer;
42435
42439
  isPruning = mxChamferStorrage.isPruning;
42436
42440
  isMultiple = mxChamferStorrage.isMultiple;
42437
- MxFun.acutPrintf("\n(".concat(isPruning ? "\u4FEE\u526A" : "\u4E0D\u4FEE\u526A", "\u6A21\u5F0F) \u5F53\u524D").concat(isAngleChamfer ? "\u5012\u89D2\u957F\u5EA6 = " + chamferDist.toFixed(4) + ", \u89D2\u5EA6 = " + Math.trunc(chamferAngle / (Math.PI / 180)) : "\u5012\u89D2\u8DDD\u79BB1 = " + chamferDist.toFixed(4) + ", \u8DDD\u79BB2 = " + chamferDist1.toFixed(4), "\n"));
42441
+ MxFun.acutPrintf("\n(".concat(isPruning ? "\u4FEE\u526A" : "\u4E0D\u4FEE\u526A", "\u6A21\u5F0F) \u5F53\u524D").concat(isAngleChamfer ? "\u5012\u89D2\u957F\u5EA6 = " + chamferDist.toFixed(4) + ", \u89D2\u5EA6 = " + THREE.MathUtils.radToDeg(chamferAngle).toFixed(2) : "\u5012\u89D2\u8DDD\u79BB1 = " + chamferDist.toFixed(4) + ", \u8DDD\u79BB2 = " + chamferDist1.toFixed(4), "\n"));
42438
42442
  getChamferDists = /*#__PURE__*/function () {
42439
42443
  var _ref3 = _asyncToGenerator(/*#__PURE__*/regenerator.mark(function _callee11() {
42440
42444
  var getDist, dist2, dist1;
@@ -42505,7 +42509,7 @@ function _Mx_Chamfer() {
42505
42509
  case 9:
42506
42510
  mxChamferStorrage.length = chamferLength = length;
42507
42511
  getAngle = new MxCADUiPrAngle();
42508
- getAngle.setMessage("\u6307\u5B9A\u7B2C\u4E00\u6761\u76F4\u7EBF\u7684\u5012\u89D2\u89D2\u5EA6<".concat(Math.trunc(chamferAngle / (Math.PI / 180)), ">"));
42512
+ getAngle.setMessage("\u6307\u5B9A\u7B2C\u4E00\u6761\u76F4\u7EBF\u7684\u5012\u89D2\u89D2\u5EA6<".concat(THREE.MathUtils.radToDeg(chamferAngle).toFixed(2), "\xB0>"));
42509
42513
  getAngle.setKeyWords("");
42510
42514
  getDist.clearLastInputPoint();
42511
42515
  _context15.next = 16;
@@ -42532,15 +42536,15 @@ function _Mx_Chamfer() {
42532
42536
  };
42533
42537
  }();
42534
42538
  _loop4 = /*#__PURE__*/regenerator.mark(function _loop4() {
42535
- var getEnt, filter, objId, _loop5, _ret5, getKey, key, _getKey2, _key2, pt1, lineEnt, filter1, drawSelectLine, selectLineInfo, isChamferLengthWarningShow, showWarning, exit, calculateAndApplyChamferBetweenTwoLines, oLineId, oLine, line, pt2, _line, _oLine, iPoints, dist1, dist2, _ref7, line1, line2, apply, is;
42539
+ var filter, getEnt, objId, _loop5, _ret5, getKey, key, _getKey2, _key2, pt1, lineEnt, filter1, drawSelectLine, selectLineInfo, isChamferLengthWarningShow, showWarning, exit, calculateAndApplyChamferBetweenTwoLines, oLineId, oLine, line, pt2, _line, _oLine, iPoints, dist1, dist2, _ref7, line1, line2, apply, is;
42536
42540
  return regenerator.wrap(function _loop4$(_context17) {
42537
42541
  while (1) switch (_context17.prev = _context17.next) {
42538
42542
  case 0:
42539
- getEnt = new MxCADUiPrEntity();
42540
- getEnt.setDynamicInputType(DynamicInputType.kNoInput);
42541
42543
  filter = new MxCADResbuf();
42542
42544
  filter.AddMcDbEntityTypes("LINE,LWPOLYLINE");
42545
+ getEnt = new MxCADUiPrEntity();
42543
42546
  getEnt.setFilter(filter);
42547
+ getEnt.setDynamicInputType(DynamicInputType.kNoInput);
42544
42548
  getEnt.setMessage("\u9009\u62E9\u4E00\u6761\u76F4\u7EBF");
42545
42549
  getEnt.setKeyWords("[\u653E\u5F03(U)/\u591A\u6BB5\u7EBF(P)/\u8DDD\u79BB(D)/\u89D2\u5EA6(A)/\u4FEE\u526A(T)/\u65B9\u5F0F(E)/\u591A\u4E2A(M)]");
42546
42550
  getEnt.setUserDraw(function (pt, pw) {
@@ -43215,6 +43219,7 @@ function _Mx_Chamfer() {
43215
43219
  return is;
43216
43220
  };
43217
43221
  if (isAngleChamfer) {
43222
+ chamferDist2 = chamferLength;
43218
43223
  var val = calculateChamferDistance(line, oLine, chamferLength, chamferAngle);
43219
43224
  if (val) {
43220
43225
  chamferDist12 = val;
@@ -43855,7 +43860,7 @@ function _Mx_Fillet() {
43855
43860
  return regenerator.wrap(function _callee15$(_context22) {
43856
43861
  while (1) switch (_context22.prev = _context22.next) {
43857
43862
  case 0:
43858
- radius = Number(localStorage.getItem("Mx_Fillet_radius")) || 0;
43863
+ radius = Number(localStorage.getItem("Mx_Fillet_radius")) || 10;
43859
43864
  isPruning = localStorage.getItem("Mx_Fillet_isPruning") === "false" ? false : true;
43860
43865
  isMultiple = false;
43861
43866
  MxFun.acutPrintf("\n\u5F53\u524D\u8BBE\u7F6E: \u6A21\u5F0F = ".concat(isPruning ? "\u4FEE\u526A" : "\u4E0D\u4FEE\u526A", ", \u534A\u5F84 = ").concat(radius.toFixed(4)));