diff --git a/api.cjs.js b/api.cjs.js index e4ba290..537b9b1 100644 --- a/api.cjs.js +++ b/api.cjs.js @@ -69,7 +69,7 @@ let AllObjectData = class AllObjectData { //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 //对象从文件中读取数据,初始化自身 ReadFile(file) { - let ver = file.Read(); + file.Read(); let data = file.Read(); this.file.Data = data; return this; @@ -393,7 +393,13 @@ function DisposeThreeObj(obj) { if (oany.geometry && oany.geometry.name !== "Text") oany.geometry.dispose(); if (oany.material) - oany.material.dispose(); + if (Array.isArray(oany.material)) { + for (let m of oany.material) + m.dispose(); + } + else { + oany.material.dispose(); + } DisposeThreeObj(o); // 下面这个代码可能导致Object3d无法复用,删除它应该问题不大 // o.parent = null; @@ -582,9 +588,9 @@ function ToFixed(v, fractionDigits = 5) { const IdentityMtx4 = new three.Matrix4(); const ZeroVec = new three.Vector3(); const XAxis = new three.Vector3(1, 0, 0); -const XAxisN = new three.Vector3(-1, 0, 0); +new three.Vector3(-1, 0, 0); const YAxis = new three.Vector3(0, 1, 0); -const YAxisN = new three.Vector3(0, -1, 0); +new three.Vector3(0, -1, 0); const ZAxis = new three.Vector3(0, 0, 1); function AsVector2(p) { return new three.Vector2(p.x, p.y); @@ -598,6 +604,13 @@ function AsVector3(p) { function isIntersect(amin, amax, bmin, bmax, eps = 0) { return Math.max(amin, bmin) < Math.min(amax, bmax) + eps; } +function isIntersect2(a1, a2, b1, b2, eps = 0) { + if (a1 > a2) + [a1, a2] = [a2, a1]; + if (b1 > b2) + [b1, b2] = [b2, b1]; + return Math.max(a1, b1) < Math.min(a2, b2) + eps; +} /** * 旋转一个点,旋转中心在原点 * @param {Vector3} p 点 @@ -798,6 +811,10 @@ function SelectNearP(pts, refPt) { function IsBetweenA2B(n, A, B, fuzz = -1e-8) { return n > A + fuzz && n < B - fuzz; } +/** 矩阵是世界坐标系 */ +function MatrixIsIdentityCS(mtx) { + return mtx.elements[0] === 1 && mtx.elements[5] === 1 && mtx.elements[10] === 1 && mtx.elements[12] === 0 && mtx.elements[13] === 0 && mtx.elements[14] === 0; +} /** * 设置矩阵的某列的向量 @@ -857,6 +874,14 @@ function Vector2ApplyMatrix4(mtx, vec) { vec.x = cacheVec.x; vec.y = cacheVec.y; } +function GetMirrorMat(v) { + let mirrorMat = new three.Matrix4(); + let xAxis = new three.Vector3(1 - 2 * v.x ** 2, -2 * v.x * v.y, -2 * v.x * v.z); + let yAxis = new three.Vector3(-2 * v.x * v.y, 1 - 2 * v.y ** 2, -2 * v.y * v.z); + let zAxis = new three.Vector3(-2 * v.x * v.z, -2 * v.y * v.z, 1 - 2 * v.z ** 2); + mirrorMat.makeBasis(xAxis, yAxis, zAxis); + return mirrorMat; +} /** * 把变换矩阵展平成2d矩阵,避免出现三维坐标. */ @@ -871,6 +896,7 @@ function MatrixPlanarizere(mtx, z0 = true) { return mtx; } const tempMatrix1 = new three.Matrix4; +const ZMirrorMatrix = GetMirrorMat(new three.Vector3(0, 0, 1)); var Status; (function (Status) { @@ -919,6 +945,7 @@ var RenderType; RenderType[RenderType["Print"] = 5] = "Print"; /**物理带线框 */ RenderType[RenderType["Physical2"] = 6] = "Physical2"; + RenderType[RenderType["Edge"] = 7] = "Edge"; /******************************************** 在视口时的渲染模式 */ /** * 线框模式 @@ -956,7 +983,7 @@ var ViewDirType; class UserConfig { constructor() { - this._version = 12; + this._version = 13; this._renderType = RenderType.Wireframe; this.maxSize = { isShow: false, @@ -982,12 +1009,15 @@ class UserConfig { maxHightightCount: 15000, snapSize: 15, aaType: AAType.FXAA, + background: "#000000", + layoutBackground: "#cccccc", }; this.viewDirType = ViewDirType.XN; this.useCtrlRotate = true; this.cursorSize = { D2: 1000, D3: 100, + SquareSize: 10, }; this.autoSaveConfig = { enable: true, @@ -1014,18 +1044,21 @@ class UserConfig { }; this.lineWidth = 2; //打印线框 this.forceFilterPxl = true; + this.checkSealing = false; + this.sealingColorMap = []; this.configName = "default"; this.configsNames = []; this.Init(); } Init() { - let type = localStorage.getItem(StoreageKeys.RenderType); - if (type) - this._renderType = parseFloat(type); + let type = Number(localStorage.getItem(StoreageKeys.RenderType)); + if (type && type !== RenderType.Edge) + this._renderType = type; } set RenderType(t) { if (t !== this._renderType) { this._renderType = t; + this.checkSealing = t === RenderType.Edge; this.SetRenderTypeEvent(); localStorage.setItem(StoreageKeys.RenderType, t.toString()); } @@ -1083,6 +1116,8 @@ class UserConfig { dimTextHeight: this.dimTextHeight, lineWidth: this.lineWidth, forceFilterPxl: this.forceFilterPxl, + checkSealing: this.checkSealing, + sealingColorMap: this.sealingColorMap } }; } @@ -1127,6 +1162,10 @@ class UserConfig { this.lineWidth = config.option.lineWidth; if (config.option.version > 11) this.forceFilterPxl = config.option.forceFilterPxl; + if (config.option.version > 12) { + this.checkSealing = config.option.checkSealing; + this.sealingColorMap = config.option.sealingColorMap; + } } } __decorate([ @@ -1896,8 +1935,8 @@ function GetGoodShaderSimple(color = new three.Vector3) { uniforms: { "SurfaceColor": { value: color } }, - vertexShader: require("./GoodchSimple.vs"), - fragmentShader: require("./GoodchSimple.fs"), + vertexShader: "", + fragmentShader: "", polygonOffset: true, polygonOffsetFactor: 1, polygonOffsetUnits: 1 @@ -2175,7 +2214,7 @@ class ColorMaterial { static GetLineMaterial(color) { if (this._LineMaterialMap.has(color)) return this._LineMaterialMap.get(color); - let mat = new three.LineBasicMaterial({ color: this.GetColor(color) }); + let mat = new three.LineBasicMaterial({ color: this.GetColor(color), side: three.DoubleSide }); this._LineMaterialMap.set(color, mat); return mat; } @@ -2207,8 +2246,8 @@ class ColorMaterial { uniforms: { "SurfaceColor": { value: [1.0, 1.0, 1.0] } }, - vertexShader: require("../GLSL/GoodchSimple.vs"), - fragmentShader: require("../GLSL/GoodchSimple2.fs"), + vertexShader: "", + fragmentShader: "", polygonOffset: true, polygonOffsetFactor: 1, polygonOffsetUnits: LINE_WIDTH @@ -2264,7 +2303,8 @@ ColorMaterial.PrintLineMatrial = new LineMaterial.LineMaterial({ color: 0x000000, linewidth: LINE_WIDTH, dashed: false, - resolution: new three.Vector2(1000, 1000) + resolution: new three.Vector2(1000, 1000), + side: three.DoubleSide, }); ColorMaterial.GrayTransparentMeshMaterial = new three.MeshBasicMaterial({ color: 0xcccccc, @@ -2391,6 +2431,9 @@ var ObjectSnapMode; ObjectSnapMode[ObjectSnapMode["All"] = 31743] = "All"; })(ObjectSnapMode || (ObjectSnapMode = {})); +const BufferGeometry2GeometryCacheMap = new WeakMap(); +globalThis.fuck = BufferGeometry2GeometryCacheMap; + var BufferGeometryUtils; (function (BufferGeometryUtils) { function CreateFromPts(pts) { @@ -2414,6 +2457,7 @@ var BufferGeometryUtils; } else return false; + BufferGeometry2GeometryCacheMap.delete(geo); return true; } BufferGeometryUtils.UpdatePts = UpdatePts; @@ -3111,6 +3155,7 @@ function GetNextRoute(v, prev, type = WalkType.Min) { return v.routes[newIndex]; } +exports.BoolOpeartionType = void 0; (function (BoolOpeartionType) { BoolOpeartionType[BoolOpeartionType["Intersection"] = 0] = "Intersection"; BoolOpeartionType[BoolOpeartionType["Union"] = 1] = "Union"; @@ -4244,7 +4289,7 @@ let Ellipse = Ellipse_1 = class Ellipse extends Curve { } _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); + file.Read(); this._radX = file.Read(); this._radY = file.Read(); this._rotate = file.Read(); @@ -4544,7 +4589,7 @@ exports.Line = Line_1 = class Line extends Curve { //对象从文件中读取数据,初始化自身 _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); //1 + file.Read(); //1 this._StartPoint.fromArray(file.Read()); this._EndPoint.fromArray(file.Read()); } @@ -4578,26 +4623,6 @@ exports.Line = Line_1 = __decorate([ Factory ], exports.Line); -/** - * 根据盒子x排序盒子 - * @param {EBox[]} arr - */ -function SortEntityByBox(arr, sort = true) { - let boxMap = new Map(); - arr.forEach(e => boxMap.set(e, e.BoundingBox)); - if (sort) - arr.sort((e1, e2) => { - let b1 = boxMap.get(e1); - let b2 = boxMap.get(e2); - if (!equaln(b1.min.x, b2.min.x)) - return b1.min.x - b2.min.x; - else { - return b2.min.y - b1.min.y; - } - }); - return boxMap; -} - class CurveTreeNode { constructor(curve, box) { this.curve = curve; @@ -4984,12 +5009,11 @@ class OffsetPolyline { if (d.paddingCurve) this._CurveTreeNodes.push(...d.paddingCurve.map(c => new CurveTreeNode(c))); } - let boxContours = SortEntityByBox(this._TrimPolylineContours, false); for (let i = 0; i < this._TrimPolylineContours.length; i++) { let c = this._TrimPolylineContours[i]; - for (let curveNode of this._CurveTreeNodes) { - curveNode.TrimBy(c, boxContours.get(c)); - } + let cbox = c.BoundingBox; + for (let curveNode of this._CurveTreeNodes) + curveNode.TrimBy(c, cbox); } } //过滤方向相反和0长度线 @@ -6269,6 +6293,50 @@ exports.Polyline = Polyline_1 = class Polyline extends Curve { } return intParams; } + IsIntersectSelf() { + let cus = this.Explode().filter(c => !equaln(c.Length, 0, 1e-3)); + for (let i = 0; i < cus.length - 1; i++) { + let c1 = cus[i]; + let c1IsLine = c1 instanceof exports.Line; + let d1 = c1.GetFistDeriv(c1IsLine ? 0 : 1).normalize(); + for (let j = i + 1; j < cus.length; j++) { + let c2 = cus[j]; + let c2IsLine = c2 instanceof exports.Line; + let d2 = c2.GetFistDeriv(0).normalize(); + if (j === i + 1) { + if (c1IsLine === c2IsLine) { + if (c1IsLine) { + if (equalv3(d1, d2.negate())) + return true; + continue; + } + else { + if (equalv3(d1, d2.negate()) && equalv3(c1.Center, c2.Center)) + return true; + } + } + } + let intPts = c1.IntersectWith2(c2, 0); + let intPtsLen = intPts.length; + if (intPtsLen > 0) { + if (intPtsLen === 2 && equalv3(intPts[0].pt, intPts[1].pt, 1e-3)) { + intPtsLen = 1; + intPts.pop(); + } + if (intPtsLen === 2 && j === i + 1 && cus.length === 2) { + if (intPts.every(r => equaln(r.thisParam, 0, 1e-3) || equaln(r.thisParam, 1, 1e-3))) + continue; + } + if (j === i + 1 && intPtsLen === 1) + continue; + if (this.IsClose && i === 0 && j === cus.length - 1 && intPtsLen === 1) + continue; + return true; + } + } + } + return false; + } get BoundingBox() { let box = new Box3Ext(); for (let i = 0; i < this.EndParam; i++) { @@ -6512,12 +6580,15 @@ exports.Polyline = Polyline_1 = class Polyline extends Curve { this.Update(); } GetStretchPoints() { - let ocs = this.OCS; - let ptList = []; + let iswcs = MatrixIsIdentityCS(this._Matrix); + let pts = []; for (let data of this._LineData) { - ptList.push(AsVector3(data.pt).applyMatrix4(ocs)); + let p = AsVector3(data.pt); + if (!iswcs) + p.applyMatrix4(this._Matrix); + pts.push(p); } - return ptList; + return pts; } /** * 范围拉伸(stretch),对夹点进行拉伸. @@ -6525,7 +6596,6 @@ exports.Polyline = Polyline_1 = class Polyline extends Curve { * * @param {Array} indexList * @param {Vector3} vec - * @memberof Polyline */ MoveStretchPoints(indexList, vec) { this.WriteAllObjectRecord(); @@ -6649,10 +6719,10 @@ function reverseIntersectOption(intType) { function CheckPointOnCurve(intRes, c1, c2, extType, tolerance = 1e-6) { return intRes.filter(r => { if (!(extType & IntersectOption.ExtendThis)) - if (!c1.ParamOnCurve(r.thisParam, tolerance)) + if (!c1.ParamOnCurve(r.thisParam, tolerance / c1.Length)) return false; if (!(extType & IntersectOption.ExtendArg)) - if (!c2.ParamOnCurve(r.argParam, tolerance)) + if (!c2.ParamOnCurve(r.argParam, tolerance / c2.Length)) return false; return true; }); @@ -6725,7 +6795,7 @@ function IntersectCircleAndArc(circle, arc, extType, tolerance = 1e-6) { * @param {IntersectOption} extType 延伸选项 * @returns 交点集合 */ -function IntersectArcAndArc(arc1, arc2, extType, tolerance = 1e-6) { +function IntersectArcAndArc(arc1, arc2, extType, tolerance = 1e-5) { let pts = IntersectCircleAndCircle(arc1, arc2); return CheckPointOnCurve(pts, arc1, arc2, extType, tolerance); } @@ -7378,7 +7448,7 @@ exports.Circle = Circle_1 = class Circle extends Curve { //对象从文件中读取数据,初始化自身 _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); + file.Read(); this._Radius = file.Read(); } //对象将自身数据写入到文件. @@ -8361,9 +8431,9 @@ exports.Arc = Arc_1 = class Arc extends Curve { if (!(pt1 && pt2 && pt3)) return; let ocsInv = this.OCSInv; - pt1 = pt1.clone().applyMatrix4(ocsInv); - pt2 = pt2.clone().applyMatrix4(ocsInv); - pt3 = pt3.clone().applyMatrix4(ocsInv); + pt1 = pt1.clone().applyMatrix4(ocsInv).setZ(0); + pt2 = pt2.clone().applyMatrix4(ocsInv).setZ(0); + pt3 = pt3.clone().applyMatrix4(ocsInv).setZ(0); let center = getCircleCenter(pt1, pt2, pt3); this.Center = center.clone().applyMatrix4(this.OCS); //用圆心和其中一个点求距离得到半径: @@ -8394,7 +8464,10 @@ exports.Arc = Arc_1 = class Arc extends Curve { //更新Geometry UpdateGeometry(geo) { let pts = this.Shape.getPoints(60).map(AsVector3); - BufferGeometryUtils.UpdatePts(geo, pts); + if (geo instanceof LineGeometry.LineGeometry) + geo.setPositions(pts.reduce((arr, p) => { return [...arr, ...p.toArray()]; }, [])); + else + BufferGeometryUtils.UpdatePts(geo, pts); } /** * 重载:更新绘制的实体 @@ -8893,7 +8966,7 @@ class Shape { } /** * 合并洞,本质是使用(并集算法)将可以并集的洞合并在一起,减少洞的数量. - * canSidewipe 用于走刀,擦边的是否合并 + * canSidewipe 用于走刀,擦边的,包含的,是否合并 */ static mergeContours(holes, canSidewipe = true) { if (holes.length <= 1) @@ -8925,6 +8998,8 @@ class Shape { if (!canSidewipe) { if (equaln(c.Area + ic.Area, unions.contours[0].Area, 0.1)) return true; + if (equaln(unions.contours[0].Area, Math.max(c.Area, ic.Area), 0.1)) + return true; } c = unions.contours[0]; //更新c b1 = c.BoundingBox; @@ -8981,7 +9056,7 @@ class Shape { } //读写文件 ReadFile(file) { - let ver = file.Read(); //1 + file.Read(); //1 this._Outline = Contour.CreateContour([file.ReadObject()]); let count = file.Read(); for (let i = 0; i < count; i++) { @@ -9104,7 +9179,7 @@ class ShapeManager { } } ReadFile(file) { - let ver = file.Read(); //1 + file.Read(); //1 let cout = file.Read(); for (let i = 0; i < cout; i++) { let obj = new Shape(); @@ -9399,7 +9474,7 @@ let Region = Region_1 = class Region extends Entity { } _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); //1 + file.Read(); //1 this._ShapeManager.Clear(); this._ShapeManager.ReadFile(file); } @@ -9554,6 +9629,86 @@ function deserializationBoardData(file, processData, ver) { } } } +function SerializeBoard2DModeingData(file, modelList) { + file.Write(modelList.length); + for (let data of modelList) { + file.WriteObject(data.path); + file.Write(data.dir); + file.Write(data.items.length); + for (let item of data.items) { + file.Write(item.depth); + file.Write(item.offset); + file.Write(item.knife.id); + file.Write(item.knife.radius); + file.Write(item.knife.angle); + file.Write(item.knife.name); + } + } +} +function SerializeBoard3DModeingData(file, modelList) { + file.Write(modelList.length); + for (let item of modelList) { + file.Write(item.path.length); + for (let d of item.path) { + file.Write(d.pt.toArray()); + file.Write(d.bul); + } + file.Write(item.dir); + file.Write(item.knife.id); + file.Write(item.knife.radius); + file.Write(item.knife.angle); + file.Write(item.knife.name); + } +} +//反序列化板件数据 +function DeserializationBoard2DModeingData(file, data, ver) { + data.length = 0; + const count = file.Read(); + for (let i = 0; i < count; i++) { + let path = file.ReadObject(); + let dir = file.Read(); + let m = { + path, + dir, + items: [] + }; + const itemCount = file.Read(); + for (let j = 0; j < itemCount; j++) { + let depth = file.Read(); + let offset = file.Read(); + let knifeId = file.Read(); + let knifeRad = file.Read(); + let knifeAngle = file.Read(); + let knifeName = file.Read(); + m.items.push({ + depth, offset, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName } + }); + } + data.push(m); + } +} +//反序列化板件数据 +function DeserializationBoard3DModeingData(file, data, ver) { + data.length = 0; + const count = file.Read(); + for (let i = 0; i < count; i++) { + let pathCount = file.Read(); + let path = []; + for (let i = 0; i < pathCount; i++) { + let pt = new three.Vector3().fromArray(file.Read()); + let bul = file.Read(); + path.push({ pt, bul }); + } + let dir = file.Read(); + let knifeId = file.Read(); + let knifeRad = file.Read(); + let knifeAngle = file.Read(); + let knifeName = file.Read(); + data.push({ + path, dir, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName } + }); + } +} class BoardUVGenerator { generateTopUV(geometry, vertices, indexA, indexB, indexC) { @@ -11494,6 +11649,20 @@ function VKnifToolPath(polyline, feedingDepth, knifAngle) { } return ptsbul; } +function VData2Curve(data) { + let curves = []; + for (let i = 0; i < data.length - 1; i++) { + let p1 = new three.Vector3(data[i].pt.x, data[i].pt.y, data[i].pt.z); + let p2 = new three.Vector3(data[i + 1].pt.x, data[i + 1].pt.y, data[i + 1].pt.z); + if (equaln(data[i].bul, 0)) { + curves.push(new exports.Line(p1, p2)); + } + else { + curves.push(new exports.Arc().ParseFromBul(p1, p2, data[i].bul)); + } + } + return curves; +} var Intent; (function (Intent) { @@ -12444,6 +12613,20 @@ const DefaultR2bOption = { footerThickness: 18, }; Object.freeze(DefaultR2bOption); +const DefaultR2b2Option = { + version: 1, + depthExpr: "W", + drillType: "", + sealedDown: "1", + sealedLeft: "1", + sealedRight: "1", + sealedUp: "1", + remarks: Array.from({ length: 12 }, () => ["", ""]), + maxThickness: 20, + layerShrink: 0, + vertialShrink: 0, +}; +Object.freeze(DefaultR2b2Option); function FixIndex$1(index, arr) { let count = (arr instanceof Array) ? arr.length : arr; @@ -12775,7 +12958,7 @@ let Spline = class Spline extends Curve { } _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); //1 + file.Read(); //1 let count = file.Read(); this._PointList.length = 0; for (let i = 0; i < count; i++) @@ -13062,7 +13245,7 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { return this._EdgeGeometry; } InitDrawObject(renderType) { - if (renderType === RenderType.Wireframe) + if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) return new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); else if (renderType === RenderType.Conceptual) { return new three.Object3D().add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); @@ -13089,7 +13272,7 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } UpdateDrawObject(renderType, obj) { DisposeThreeObj(obj); - if (renderType === RenderType.Wireframe) { + if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { let l = obj; l.geometry = this.EdgeGeometry; l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); @@ -13266,7 +13449,7 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); //1 + file.Read(); //1 this._Contour = file.ReadObject(); this._PathCurve = file.ReadObject(); if (this._Contour instanceof Spline || this._PathCurve instanceof Spline) { @@ -13449,7 +13632,7 @@ let HardwareTopline = class HardwareTopline extends SweepSolid { } _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); //1 + file.Read(); //1 this._contourRotation = file.Read(); this.HardwareOption.addLen = file.Read(); this.HardwareOption.name = file.Read(); @@ -13582,19 +13765,24 @@ class LookOverBoardInfosTool { } for (let [id, idList] of dlist) { for (let ids of idList) { - for (let objId of ids) { + findHole: for (let objId of ids) { let gd = objId.Object; if (!(gd === null || gd === void 0 ? void 0 : gd.IsErase)) { if (gd instanceof CylinderHole) switch (gd.Type) { case GangDrillType.Ljg: + case GangDrillType.Pxl: + case GangDrillType.Ymj: + case GangDrillType.Ljg: + case GangDrillType.TK: let spiteName = (_c = (_b = (_a = gd.GroupId) === null || _a === void 0 ? void 0 : _a.Object) === null || _b === void 0 ? void 0 : _b.Name) !== null && _c !== void 0 ? _c : "未命名"; //读取拆单名 addDrillToMap(spiteName, gd); - break; + break findHole; case GangDrillType.Wood: + case GangDrillType.WoodPXL: addDrillToMap("木销", gd); - break; + break findHole; } else { //TODO:统计自定义排钻 @@ -14050,11 +14238,164 @@ function IsDev() { return window.location.hostname === "localhost"; } +const SCALAR = 0.1; +function CyHoleInBoard(cys, br, ocs) { + if (cys.length === 1 && cys[0].Type === GangDrillType.Ymj) + return true; + const outline = br.ContourCurve; + let box = new three.Box3(); + let pxl; + let ljg; + let ymj; + let wood; + let woodPXL; + let pxl2; + for (let cy of cys) { + box.union(cy.BoundingBox); + if (cy.Type === GangDrillType.Pxl) { + if (pxl) + pxl2 = cy; + else + pxl = cy; + } + else if (cy.Type === GangDrillType.Ljg) + ljg = cy; + else if (cy.Type === GangDrillType.Wood) + wood = cy; + else if (cy.Type === GangDrillType.WoodPXL) + woodPXL = cy; + else + ymj = cy; + } + box.applyMatrix4(ocs); + let outlineBox = outline.BoundingBox; + outlineBox.max.setZ(br.Thickness); + if (!box.intersectsBox(outlineBox)) + return false; + let nor = new three.Vector3(); + if (ljg) + nor.copy(ljg.Normal); + else if (ymj) + nor.copy(ymj.Normal); + else if (wood) + nor.copy(wood.Normal); + nor.applyMatrix4(ocs.clone().setPosition(new three.Vector3)); + if (isParallelTo(nor, ZAxis)) { + if (ymj) { + let center = ymj.Position.applyMatrix4(ocs).setZ(0); + let cir = new exports.Circle(center, ymj.Radius - SCALAR); + return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); + } + } + else { + if (pxl) { + let plxs = [pxl]; + if (pxl2) + plxs.push(pxl2); + if (plxs.every(cy => { + let center = cy.Position.applyMatrix4(ocs).setZ(0); + let cir = new exports.Circle(center, pxl.Radius - SCALAR); + if (userConfig.forceFilterPxl) + return outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center); + else + return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center); + })) + return false; + } + if (woodPXL) { + let center = woodPXL.Position.applyMatrix4(ocs).setZ(0); + let cir = new exports.Circle(center, woodPXL.Radius - SCALAR); + if (outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center)) + return false; + } + if (ljg) { + let c1 = ljg.Position.applyMatrix4(ocs).setZ(0); + let minPt = c1.clone().add(nor.clone().multiplyScalar(ljg.Height / 2)); + let c2 = c1.clone().add(nor.clone().multiplyScalar(ljg.Height - SCALAR)); + c1.add(nor.clone().multiplyScalar(SCALAR)); + rotatePoint(nor, Math.PI / 2); + c1.add(nor.multiplyScalar(ljg.Radius)); + c2.add(nor.negate()); + let rect = new exports.Polyline().RectangleFrom2Pt(c1, c2); + let intPtsLen = outline.IntersectWith(rect, 0).length; + if (intPtsLen > 2 || (intPtsLen === 0 && !outline.PtInCurve(minPt))) + return false; + } + if (wood) { + let c1 = wood.Position.applyMatrix4(ocs).setZ(0); + let c2 = c1.clone().add(nor.clone().multiplyScalar(wood.Height)); + rotatePoint(nor, Math.PI / 2); + let dir = nor.multiplyScalar(wood.Radius); + let p1 = c1.clone().add(dir); + let p2 = c2.clone().add(dir); + let p3 = c1.clone().add(dir.negate()); + let p4 = c2.clone().add(dir); + let l1 = new exports.Line(p1, p2); + let l2 = new exports.Line(p3, p4); + if (l1.IntersectWith(outline, 0).length !== 1 || l2.IntersectWith(outline, 0).length !== 1) + return false; + } + } + return true; +} +const TempRectHoleOption = { + up: "", + down: "", + left: "", + right: "", +}; +/**分析上下左右排钻 */ +function InitRectBoardHoleOption(br, option) { + let dir = Math.sign(br.ContourCurve.Area2); + let hightDrill = br.BoardProcessOption.highDrill; + let cus = br.ContourCurve.Explode(); + for (let i = 0; i < cus.length; i++) { + let c = cus[i]; + let derv = c.GetFistDeriv(0).multiplyScalar(dir); + let an = angle(derv); + if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4)) + option.down = hightDrill[i]; + else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8) + option.right = hightDrill[i]; + else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8) + option.up = hightDrill[i]; + else + option.left = hightDrill[i]; + } +} +/**上下左右排钻写入板件 */ +function SetRectHighHole(br, option) { + let dir = Math.sign(br.ContourCurve.Area2); + let highDrill = br.BoardProcessOption.highDrill; + let cus = br.ContourCurve.Explode(); + highDrill.length = 0; + for (let i = 0; i < cus.length; i++) { + let c = cus[i]; + let derv = c.GetFistDeriv(0).multiplyScalar(dir); + let an = angle(derv); + if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4)) + highDrill.push(option.down); + else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8) + highDrill.push(option.right); + else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8) + highDrill.push(option.up); + else + highDrill.push(option.left); + } + let types = new Set(highDrill); + if (types.size === 1 && highDrill[0] !== DrillType.None) + br.BoardProcessOption[EBoardKeyList.DrillType] = highDrill[0]; + else if (types.size > 1) + br.BoardProcessOption[EBoardKeyList.DrillType] = DrillType.More; +} + +exports.DrillingFace = void 0; (function (DrillingFace) { //正反面时,使用Front和Back DrillingFace[DrillingFace["Front"] = 0] = "Front"; DrillingFace[DrillingFace["Back"] = 1] = "Back"; })(exports.DrillingFace || (exports.DrillingFace = {})); +exports.Production = void 0; (function (Production) { /**获取板件拆单数据 */ function GetBoardSplitOrderData(br) { @@ -14104,17 +14445,15 @@ function IsDev() { offsetTanslation, metalsData: GetBoardMetals(br), boardContour, - originModelingData: GetOriginBoardModelingData(br) + modeling2D: Get2DModeing(br, offsetTanslation), + modeling3D: Get3DModeing(br, offsetTanslation), }; } Production.GetBoardSplitOrderData = GetBoardSplitOrderData; function GetBoardInfo(br, size) { let data = br.BoardProcessOption; - let param = { L: br.Height, W: br.Width, H: br.Thickness }; - let spliteHeight = safeEval(data.spliteHeight, param); - let spliteWidth = safeEval(data.spliteWidth, param); - let spliteThickness = safeEval(data.spliteThickness, param); - let isRect = (!isNaN(spliteHeight) && !isNaN(spliteWidth) && !isNaN(spliteThickness)) || !br.IsSpecialShape; + let spliteSize = Production.GetSpiteSize(br); + let isRect = !!spliteSize || !br.IsSpecialShape; return { id: br.Id.Index, name: br.Name, @@ -14125,9 +14464,9 @@ function IsDev() { [EBoardKeyList.Color]: data[EBoardKeyList.Color], [EBoardKeyList.Lines]: data[EBoardKeyList.Lines], [EBoardKeyList.DrillType]: data[EBoardKeyList.DrillType], - spliteHeight: spliteHeight ? spliteHeight.toString() : "", - spliteThickness: spliteThickness ? spliteThickness.toString() : "", - spliteWidth: spliteWidth ? spliteWidth.toString() : "", + spliteHeight: spliteSize ? spliteSize.spliteHeight.toString() : "", + spliteThickness: spliteSize ? spliteSize.spliteThickness.toString() : "", + spliteWidth: spliteSize ? spliteSize.spliteWidth.toString() : "", isRect, remarks: data.remarks.slice(), kaiLiaoWidth: size.x, @@ -14223,6 +14562,32 @@ function IsDev() { return result; } Production.SplitePolylineAtArc = SplitePolylineAtArc; + function SplitetArc(arc, hasEnd = false) { + let result = { pts: [], buls: [] }; + let bul = arc.Bul; + if (Math.abs(bul) > SPLITBUL + 1e-8) { + let allAngle = Math.atan(bul) * 4; + let splitCount = GetSpliteCount(allAngle); + let paramDiv = 1 / splitCount; + let newBul = Math.tan((allAngle / splitCount) / 4); + for (let i = 0; i < splitCount; i++) { + let param = i * paramDiv; + let p = arc.GetPointAtParam(param); + result.pts.push(p); + result.buls.push(newBul); + } + } + else { + result.pts.push(arc.StartPoint); + result.buls.push(bul); + } + if (hasEnd) { + result.pts.push(arc.EndPoint); + result.buls.push(0); + } + return result; + } + Production.SplitetArc = SplitetArc; /** * 获取封边数据 * 封边数据未统一逆时针顺序,用于拆单 @@ -14284,7 +14649,6 @@ function IsDev() { } Production.GetMetalTotalEntitys = GetMetalTotalEntitys; function GetOriginBoardModelingData(br) { - const tool = FeedingToolPath.GetInstance(); const getModelings = (ms) => { var _a; let data = []; @@ -14332,6 +14696,13 @@ function IsDev() { thickness: m.thickness + ((_a = m.addDepth) !== null && _a !== void 0 ? _a : 0), dir: m.dir, knifeRadius: m.knifeRadius, + origin: { + outline: ConverToPolylineAndSplitArc(cu.Clone(), false, false), + holes: m.shape.Holes.map(h => ConverToPolylineAndSplitArc(h.Curve.Clone(), false, false)), + addLen: m.addLen, + addWidth: m.addWidth, + addDepth: m.addDepth, + } }); else { Toaster({ @@ -14422,7 +14793,7 @@ function IsDev() { } for (let h of holes) { if (h instanceof ExtrudeHole) - ParseExtrudeHoles(h, br, offsetTanslation, data, sealedContour); + ParseExtrudeHoles(h, br, offsetTanslation, data, sealedContour, true); else ParseCylHoles(h, br, offsetTanslation, data, sealedContour); } @@ -14473,6 +14844,18 @@ function IsDev() { function InvertPosition(pos, thickness) { pos.z = thickness - pos.z; } + function HoleInBoard(center, radius, outline, isYMJ = false) { + let cir = new exports.Circle(center, radius - SCALAR); + if (isYMJ) { + return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); + } + else { + if (userConfig.forceFilterPxl) + return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); + else + return outline.IntersectWith(cir, 0).length > 1 || outline.PtInCurve(center); + } + } /**分析常规排钻 */ function ParseCylHoles(d, br, offsetTanslation, data, outline) { let processData = br.BoardProcessOption; @@ -14487,12 +14870,14 @@ function IsDev() { let diffMat = br.OCSInv.multiply(d.OCS); let x = new three.Vector3().setFromMatrixColumn(diffMat, 0); let angle = angleTo(XAxis, x); + let nor = d.Normal.applyMatrix4(roMat); + let pos2 = position.clone().add(nor.multiplyScalar(depth)); if (d.Type === GangDrillType.Pxl || d.Type === GangDrillType.WoodPXL) { if (isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz)) { if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, 1e-6) || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, 1e-6) - || !IsBetweenA2B(position.z, 0, br.Thickness) - || !outline.PtInCurve(position.clone().setZ(0))) + || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz) + || !HoleInBoard(position.clone().setZ(0), d.Radius, outline)) return; position.sub(offsetTanslation); face = processData[EBoardKeyList.BigHole]; @@ -14550,11 +14935,11 @@ function IsDev() { } } else { - if (isParallelTo(d.Normal, br.Normal, CanDrawHoleFuzz)) { + if (isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz)) { if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, CanDrawHoleFuzz) || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, CanDrawHoleFuzz) - || !IsBetweenA2B(position.z, 0, br.Thickness, -CanDrawHoleFuzz) - || !outline.PtInCurve(position.clone().setZ(0))) + || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz) + || !HoleInBoard(position.clone().setZ(0), d.Radius, outline, true)) return; position.sub(offsetTanslation); holes = data.frontBackHoles; @@ -14573,7 +14958,7 @@ function IsDev() { }); } /**分析自定义圆柱排钻 */ - function ParseExtrudeHoles(d, br, offsetTanslation, data, outline) { + function ParseExtrudeHoles(d, br, offsetTanslation, data, outline, isCheckGroove = false) { if (!d.isHole) return; let brNormal = br.Normal; @@ -14584,22 +14969,25 @@ function IsDev() { let sp = cir.Center.applyMatrix4(diffMtx); let ep = cir.Center.add(new three.Vector3(0, 0, d.Height)).applyMatrix4(diffMtx); let x = new three.Vector3().setFromMatrixColumn(diffMtx, 0); - if (isParallelTo(nor, brNormal)) { + //#I2DPFO 在挖穿造型内的五金不加工 + const grooves = br.Grooves.filter(g => equaln(g.Thickness, br.Thickness)); + const groovesOutlines = isCheckGroove ? grooves.map(g => g.ContourCurve.Clone().ApplyMatrix(g.OCS).ApplyMatrix(br.OCSInv).Z0()) : []; + if (isParallelTo(nor, brNormal, CanDrawHoleFuzz)) { let z0 = Math.min(sp.z, ep.z); let z1 = Math.max(sp.z, ep.z); let p = sp.clone().setZ(0).sub(offsetTanslation); - if (Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6 && outline.PtInCurve(p)) { - let depth = z0 < 1e-2 ? z1 : br.Thickness - z0; + if (Math.max(z0, 0) < Math.min(z1, br.Thickness) - CanDrawHoleFuzz && outline.PtInCurve(p) && groovesOutlines.every(g => !g.PtInCurve(p))) { + let depth = z0 < CanDrawHoleFuzz ? z1 : br.Thickness - z0; let angle = angleTo(XAxis, x); if (equaln(angle, Math.PI)) angle = 0; - if (depth > 1e-2) + if (depth > CanDrawHoleFuzz) data.frontBackHoles.push({ type: d.isThrough ? GangDrillType.TK : GangDrillType.Ymj, - position: z0 < 1e-6 ? p : p.setZ(br.Thickness), + position: z0 < CanDrawHoleFuzz ? p : p.setZ(br.Thickness), radius: cir.Radius, depth, - face: z0 < 1e-6 ? exports.DrillingFace.Back : exports.DrillingFace.Front, + face: z0 < CanDrawHoleFuzz ? exports.DrillingFace.Back : exports.DrillingFace.Front, angle: angle, }); } @@ -14624,7 +15012,7 @@ function IsDev() { let endPt; let face = Math.floor(outline.GetParamAtPoint(pt)); for (let p of [line.StartPoint, line.EndPoint]) { - if (outline.PtInCurve(p)) { + if (!equalv3(p.setZ(oldZ), position) && outline.PtInCurve(p)) { endPt = p.setZ(oldZ); break; } @@ -14632,7 +15020,7 @@ function IsDev() { if (!endPt) return; let depth = position.distanceTo(endPt); - if (equaln(depth, 0, 1e-2)) + if (equaln(depth, 0, CanDrawHoleFuzz)) return; InvertPosition(position, br.Thickness); InvertPosition(endPt, br.Thickness); @@ -14778,6 +15166,73 @@ function IsDev() { SendReport(msg); } Production.Report = Report; + function Get2DModeing(br, offset) { + let res = []; + let tmtx = MoveMatrix(offset.clone().negate()); + for (let m of br.Modeling2D) { + let path = m.path.Clone().ApplyMatrix(tmtx); + res.push({ + path: ConverToPolylineAndSplitArc(path), + dir: m.dir, + items: m.items.map(item => ({ ...item })) + }); + } + return res; + } + Production.Get2DModeing = Get2DModeing; + function Get3DModeing(br, offset) { + let res = []; + for (let m of br.Modeling3D) { + let d = { + path: { pts: [], buls: [] }, + knife: { ...m.knife }, + dir: m.dir + }; + for (let i = 0; i < m.path.length - 1; i++) { + let d1 = m.path[i]; + let d2 = m.path[i + 1]; + if (equaln(d1.bul, 0)) { + let p = d1.pt.clone(); + InvertPosition(p, br.Thickness); + p.sub(offset); + d.path.pts.push(p); + d.path.buls.push(0); + } + else { + let arc = new exports.Arc().ParseFromBul(d1.pt.clone().sub(offset), d2.pt.clone().sub(offset), d1.bul); + let r = SplitetArc(arc, false); + r.pts.forEach(p => InvertPosition(p, br.Thickness)); + d.path.pts.push(...r.pts); + d.path.buls.push(...r.buls); + } + if (i === m.path.length - 2) { + let p = d2.pt.clone(); + InvertPosition(p, br.Thickness); + p.sub(offset); + d.path.pts.push(p); + d.path.buls.push(0); + } + } + res.push(d); + } + return res; + } + Production.Get3DModeing = Get3DModeing; + function GetChaiDanFeedingPath(data) { + const { thickness, boardContour, dir, addLen, addWidth, addDepth, knifeRadius } = data; + let brContour = Data2Polyline(boardContour); + const tool = FeedingToolPath.GetInstance(); + const outline = Contour.CreateContour(Data2Polyline(data.outline)); + const holes = data.holes.map(h => Contour.CreateContour(Data2Polyline(h))); + let shape = new Shape(outline, holes); + const paths = tool.GetModelFeedPath({ Thickness: thickness, ContourCurve: brContour }, { + shape, + thickness, + dir, knifeRadius, addLen, addWidth, addDepth + }); + return paths.map((c) => ConverToPolylineAndSplitArc(c, false)); + } + Production.GetChaiDanFeedingPath = GetChaiDanFeedingPath; })(exports.Production || (exports.Production = {})); /** @@ -14874,6 +15329,9 @@ class CurveIntersection2 extends CurveIntersection { * 某些时候我们不能创建轮廓,此时我们使用类似c2r的方法来构建一个外部轮廓. */ function CreateContour2(curves, fuzz = 1e-4) { + for (let c of curves) + if (c instanceof exports.Circle) + return Contour.CreateContour(c); let extendsMinDistSq = fuzz * fuzz; let intersect = new CurveIntersection2(curves, false, IntersectOption.ExtendBoth, fuzz); let curves2 = []; @@ -14944,6 +15402,7 @@ var DepthType; DepthType[DepthType["Back"] = 2] = "Back"; DepthType[DepthType["All"] = 3] = "All"; })(DepthType || (DepthType = {})); +const ExtrudeBuildConfig = { bevel: false }; /** * 槽的几何数据,包括槽的墙面和槽的盖子 */ @@ -15008,7 +15467,7 @@ class Groove { if (this.depthType === DepthType.All) return; let isFront = this.depthType === DepthType.Front; - this.lid.Draw(verticesArray, uvArray, isFront, isFront ? this.allDepth - this.depth : this.depth, rotateUv); + this.lid.Draw(verticesArray, uvArray, isFront, isFront ? this.allDepth - this.depth : this.depth, rotateUv, this.allDepth); } } function CreateTape(faceType, startParam, endParam, depth, allDepth) { @@ -15033,7 +15492,7 @@ class ContourTreeNode { this.parent = node; node.children.push(this); } - Draw(verticesArray, uvArray, front, z, rotateUv) { + Draw(verticesArray, uvArray, front, z, rotateUv, allDepth) { // TestDraw(this.contour.Curve, depth); let pts = this.contour.Curve.GetStretchPoints(); let vertices = [...pts]; @@ -15056,8 +15515,8 @@ class ContourTreeNode { AddVertice(vertices[f[1]]); } } - function AddVertice(v) { - verticesArray.push(v.x, v.y, z); + function AddVertice(v, inz = z) { + verticesArray.push(v.x, v.y, inz); if (rotateUv) uvArray.push(v.y * 1e-3, v.x * 1e-3); else @@ -15065,9 +15524,10 @@ class ContourTreeNode { } for (let hole of this.children) { for (let h of hole.children) { - h.Draw(verticesArray, uvArray, front, z, rotateUv); //, depth + 2 + h.Draw(verticesArray, uvArray, front, z, rotateUv, allDepth); //, depth + 2 } } + return; //如果不倒角 就不执行下面的代码 } static ParseContourTree(contourNodes) { contourNodes.sort((c1, c2) => c1.contour.Curve.Area - c2.contour.Curve.Area); @@ -15126,7 +15586,7 @@ class EdgeGeometryBuild { let node = contourNodes[j]; if (node.parent) continue; - node.Draw(verticesArray, uvArray, index === 1, this.allDepth * index, rotateUv); + node.Draw(verticesArray, uvArray, index === 1, this.allDepth * index, rotateUv, this.allDepth); } } } @@ -15233,7 +15693,7 @@ class CurveTapeShape { } } } - Draw(verticesArray, uvArray, front, z, rotateUv) { + Draw(verticesArray, uvArray, front, z, rotateUv, allDepth) { this.ChildrenClip(); let polylines = this.contour.Curves; for (let h of this.holes) @@ -15259,7 +15719,7 @@ class CurveTapeShape { // TestDraw(s.contour.Curve.Clone(), z); if (node.parent) continue; - node.Draw(verticesArray, uvArray, front, z, rotateUv); + node.Draw(verticesArray, uvArray, front, z, rotateUv, allDepth); } } } @@ -15460,10 +15920,22 @@ class ExtudeWall { } Draw(verticesArray, uvArray, edgeBuild) { let xparams = SplitCurveParams(this.curve); + let isOuter = this.wallType === DirectionType.Outer; + let allDepth = this.allDepth; function AddVertice(v) { verticesArray.push(v.x); verticesArray.push(v.y); - verticesArray.push(v.z); + if (isOuter && ExtrudeBuildConfig.bevel) //如果倒角,则执行下面的代码 + { + if (v.z === 0) + verticesArray.push(1); + else if (v.z === allDepth) + verticesArray.push(allDepth - 1); + else + verticesArray.push(v.z); + } + else + verticesArray.push(v.z); } let tapes = []; this.Tape.sort((t1, t2) => t1.start - t2.start); @@ -15706,6 +16178,9 @@ class ExtrudeGeometryBuilder { this.br = br; this.verticesArray = []; //用于构建三维网格 this.uvArray = []; //uv + this.GenerateMeshData(br); + } + GenerateMeshData(br) { this.edgeAndLidBuilder = new EdgeGeometryBuild(this.br.Thickness); let rotateUv = (br instanceof Board && br.BoardProcessOption.lines === LinesType.Reverse); //计算墙(创建轮廓取出,为了得到正确的轮廓曲线(逆时针之类的)) @@ -17344,8 +17819,10 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { // if (e.DrawObject.children.length === 0) // e.ClearDraw(); let o = e.GetDrawObjectFromRenderType(renderType); - o.traverse(obj => obj.userData = {}); - AddEntityDrawObject(obj, e, renderType); + if (o) { + o.traverse(obj => obj.userData = {}); + AddEntityDrawObject(obj, e, renderType); + } } } get ColorIndex() { @@ -17483,7 +17960,7 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { //#endregion //#region 文件序列化 _ReadFile(file) { - let v = file.Read(); + file.Read(); super._ReadFile(file); let count = file.Read(); this.Entitys.length = 0; @@ -17749,155 +18226,6 @@ class PointShapeUtils { } } -const SCALAR = 0.1; -function CyHoleInBoard(cys, br, ocs) { - if (cys.length === 1 && cys[0].Type === GangDrillType.Ymj) - return true; - const outline = br.ContourCurve; - let box = new three.Box3(); - let pxl; - let ljg; - let ymj; - let wood; - let woodPXL; - let pxl2; - for (let cy of cys) { - box.union(cy.BoundingBox); - if (cy.Type === GangDrillType.Pxl) { - if (pxl) - pxl2 = cy; - else - pxl = cy; - } - else if (cy.Type === GangDrillType.Ljg) - ljg = cy; - else if (cy.Type === GangDrillType.Wood) - wood = cy; - else if (cy.Type === GangDrillType.WoodPXL) - woodPXL = cy; - else - ymj = cy; - } - box.applyMatrix4(ocs); - let outlineBox = outline.BoundingBox; - outlineBox.max.setZ(br.Thickness); - if (!box.intersectsBox(outlineBox)) - return false; - let nor = new three.Vector3(); - if (ljg) - nor.copy(ljg.Normal); - else if (ymj) - nor.copy(ymj.Normal); - else if (wood) - nor.copy(wood.Normal); - nor.applyMatrix4(ocs.clone().setPosition(new three.Vector3)); - if (isParallelTo(nor, ZAxis)) { - if (ymj) { - let center = ymj.Position.applyMatrix4(ocs).setZ(0); - let cir = new exports.Circle(center, ymj.Radius - SCALAR); - return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); - } - } - else { - if (pxl) { - let plxs = [pxl]; - if (pxl2) - plxs.push(pxl2); - if (plxs.every(cy => { - let center = cy.Position.applyMatrix4(ocs).setZ(0); - let cir = new exports.Circle(center, pxl.Radius - SCALAR); - if (userConfig.forceFilterPxl) - return outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center); - else - return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center); - })) - return false; - } - if (woodPXL) { - let center = woodPXL.Position.applyMatrix4(ocs).setZ(0); - let cir = new exports.Circle(center, woodPXL.Radius - SCALAR); - if (outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center)) - return false; - } - if (ljg) { - let c1 = ljg.Position.applyMatrix4(ocs).setZ(0); - let minPt = c1.clone().add(nor.clone().multiplyScalar(ljg.Height / 2)); - let c2 = c1.clone().add(nor.clone().multiplyScalar(ljg.Height - SCALAR)); - c1.add(nor.clone().multiplyScalar(SCALAR)); - rotatePoint(nor, Math.PI / 2); - c1.add(nor.multiplyScalar(ljg.Radius)); - c2.add(nor.negate()); - let rect = new exports.Polyline().RectangleFrom2Pt(c1, c2); - let intPtsLen = outline.IntersectWith(rect, 0).length; - if (intPtsLen > 2 || (intPtsLen === 0 && !outline.PtInCurve(minPt))) - return false; - } - if (wood) { - let c1 = wood.Position.applyMatrix4(ocs).setZ(0); - let c2 = c1.clone().add(nor.clone().multiplyScalar(wood.Height)); - rotatePoint(nor, Math.PI / 2); - let dir = nor.multiplyScalar(wood.Radius); - let p1 = c1.clone().add(dir); - let p2 = c2.clone().add(dir); - let p3 = c1.clone().add(dir.negate()); - let p4 = c2.clone().add(dir); - let l1 = new exports.Line(p1, p2); - let l2 = new exports.Line(p3, p4); - if (l1.IntersectWith(outline, 0).length !== 1 || l2.IntersectWith(outline, 0).length !== 1) - return false; - } - } - return true; -} -const TempRectHoleOption = { - up: "", - down: "", - left: "", - right: "", -}; -/**分析上下左右排钻 */ -function InitRectBoardHoleOption(br, option) { - let dir = Math.sign(br.ContourCurve.Area2); - let hightDrill = br.BoardProcessOption.highDrill; - let cus = br.ContourCurve.Explode(); - for (let i = 0; i < cus.length; i++) { - let c = cus[i]; - let derv = c.GetFistDeriv(0).multiplyScalar(dir); - let an = angle(derv); - if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4)) - option.down = hightDrill[i]; - else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8) - option.right = hightDrill[i]; - else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8) - option.up = hightDrill[i]; - else - option.left = hightDrill[i]; - } -} -/**上下左右排钻写入板件 */ -function SetRectHighHole(br, option) { - let dir = Math.sign(br.ContourCurve.Area2); - let highDrill = br.BoardProcessOption.highDrill; - let cus = br.ContourCurve.Explode(); - highDrill.length = 0; - for (let i = 0; i < cus.length; i++) { - let c = cus[i]; - let derv = c.GetFistDeriv(0).multiplyScalar(dir); - let an = angle(derv); - if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4)) - highDrill.push(option.down); - else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8) - highDrill.push(option.right); - else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8) - highDrill.push(option.up); - else - highDrill.push(option.left); - } - let types = new Set(highDrill); - if (types.size === 1 && highDrill[0] !== DrillType.None) - br.BoardProcessOption[EBoardKeyList.DrillType] = highDrill[0]; -} - var Board_1; /** * 板件实体 @@ -17917,6 +18245,9 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this.RelativeHardware = []; this.OpenDir = BoardOpenDir.None; this._IsChaiDan = true; + this._2DModelingList = []; + this._3DModelingList = []; + this.OffsetPathCache = new Map(); this.InitBoardData(); } /** @@ -17962,10 +18293,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { set: (target, key, value, receiver) => { if (Reflect.get(target, key, receiver) !== value) { this.WriteAllObjectRecord(); - if (key === "highDrill" || key === "highSealed") { + if (key === "highDrill" || key === EBoardKeyList.HighSealed) { let arr = this.CreateArray(); arr.push(...value); target[key] = arr; + if (key === EBoardKeyList.HighSealed) + this.Update(UpdateDraw.Geometry); return true; } let result = Reflect.set(target, key, value, receiver); @@ -18082,6 +18415,9 @@ let Board = Board_1 = class Board extends ExtrudeSolid { br._LayerNails = [...this._LayerNails]; br.ProcessingGroupList = [...this.ProcessingGroupList]; br._BoardProcessOption = { ...this._BoardProcessOption }; + //如果是矩形板,关联切割后的板件,用上下左右封边重新填充高级封边,避免近乎矩形的板件封边看上去不对 #I2AQ9R + if (this.isRect) + br._BoardProcessOption.highSealed.length = 0; } } return brs; @@ -18132,6 +18468,35 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } this.Update(); } + get Modeling2D() { + return [...this._2DModelingList]; + } + set Modeling2D(ms) { + this.WriteAllObjectRecord(); + this._2DModelingList = ms; + this.OffsetPathCache.clear(); + this._2D3DPathObject = null; + this.Update(UpdateDraw.Geometry); + } + get Modeling3D() { + return [...this._3DModelingList]; + } + set Modeling3D(ms) { + this.WriteAllObjectRecord(); + this._2D3DPathObject = null; + this._3DModelingList = ms; + this.Update(UpdateDraw.Geometry); + } + ClearModeling2DList() { + this.WriteAllObjectRecord(); + this._2DModelingList.length = 0; + this.Update(UpdateDraw.Geometry); + } + ClearModeling3DList() { + this.WriteAllObjectRecord(); + this._3DModelingList.length = 0; + this.Update(UpdateDraw.Geometry); + } get IsChaiDan() { return this._IsChaiDan; } @@ -18418,6 +18783,60 @@ let Board = Board_1 = class Board extends ExtrudeSolid { l1.updateMatrix(); return [l, l1]; } + Get2DAnd3DPaths(obj) { + if (this._2D3DPathObject) + return this._2D3DPathObject; + this._2D3DPathObject = new three.Object3D(); + let group2 = new three.Object3D(); + for (let vm of this._2DModelingList) { + let path = vm.path; + for (let item of vm.items) { + let tempPath = this.GetOffsetPath(path, item); + if (tempPath) { + let curves = VData2Curve(VKnifToolPath(tempPath, item.depth, item.knife.angle / 2)); + let o = new three.Object3D(); + for (let c of curves) { + c.ColorIndex = tempPath.ColorIndex; + o.add(c.GetDrawObjectFromRenderType(RenderType.Wireframe)); + } + if (vm.dir === FaceDirection.Back) + o.applyMatrix4(ZMirrorMatrix); + else + o.position.setZ(this.thickness); + o.updateMatrix(); + group2.add(o); + } + } + } + let group = new three.Object3D(); + let tempIndex = 1; + let tempMap = new Map(); + for (let vm of this._3DModelingList) { + let key = `${vm.dir}-${vm.knife.id}`; + let color = tempMap.get(key); + if (!color) { + color = tempIndex; + tempIndex++; + tempMap.set(key, color); + } + for (let i = 0; i < vm.path.length - 1; i++) { + let d1 = vm.path[i]; + let d2 = vm.path[i + 1]; + if (equaln(d1.bul, 0)) { + let geo = BufferGeometryUtils.CreateFromPts([d1.pt, d2.pt]); + group.add(new three.Line(geo, ColorMaterial.GetLineMaterial(color))); + } + else { + let arc = new exports.Arc().ParseFromBul(d1.pt, d2.pt, d1.bul); + arc.ColorIndex = color; + group.add(arc.GetDrawObjectFromRenderType(RenderType.Wireframe)); + } + } + } + this._2D3DPathObject.add(group); + this._2D3DPathObject.add(group2); + return this._2D3DPathObject; + } HandleSpliteEntitys(splitEntitys) { var _a; let nails = []; @@ -18488,15 +18907,45 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } } InitDrawObject(renderType = RenderType.Wireframe) { - let obj = super.InitDrawObject(renderType); + let obj; + if (renderType === RenderType.Edge) { + obj = new three.Object3D(); + obj.add(new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(8))); + this.CheckSealing(obj); + } + else { + obj = super.InitDrawObject(renderType); + } this.HandleBoardMaterial(renderType, obj); return obj; } UpdateDrawObject(renderType, obj) { let o = super.UpdateDrawObject(renderType, obj); + if (renderType === RenderType.Edge) { + obj.add(new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(8))); + this.CheckSealing(obj); + } this.HandleBoardMaterial(renderType, obj); return o; } + GetOffsetPath(path, item) { + if (item.offset === 0) { + return path; + } + else { + let cache = this.OffsetPathCache.get(path); + if (!cache) { + cache = {}; + this.OffsetPathCache.set(path, cache); + } + let tempPath = cache[item.offset.toString()]; + if (!tempPath) { + tempPath = path.GetOffsetCurves(item.offset)[0]; + cache[item.offset.toString()] = tempPath; + } + return tempPath; + } + } HandleBoardMaterial(renderType, obj) { if (!this.IsChaiDan) { if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2) { @@ -18509,6 +18958,13 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } if ((renderType === RenderType.Wireframe || renderType === RenderType.Conceptual) && userConfig.showLines && this.IsChaiDan) obj.add(...this.GetLinesDir()); + if (this.Id) { + let o = this.Get2DAnd3DPaths(obj); + if (o.parent) + obj.children.push(o); + else + obj.add(o); + } } UpdateDrawObjectMaterial(renderType, obj) { super.UpdateDrawObjectMaterial(renderType, obj); @@ -18521,6 +18977,91 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } } } + CheckSealing(obj) { + let sealingInfo = new Map(userConfig.sealingColorMap.filter(d => d[0] && d[1])); + if (sealingInfo.size === 0) + return; + let cus = GetBoardSealingCurves(this); + let highSeals = GetBoardHighSeal(this, cus); + for (let i = 0; i < cus.length; i++) { + let size = highSeals[i].size.toString(); + let color = sealingInfo.get(size); + if (color) { + cus[i].Position = cus[i].Position.add(new three.Vector3(0, 0, this.thickness / 2)); + let l = cus[i].GetDrawObjectFromRenderType(RenderType.Wireframe); + l.material = ColorMaterial.GetLineMaterial(parseFloat(color)); + obj.add(l); + } + } + } + GetStretchPoints() { + let pts = this.GetGripOrStretchPoints(DragPointType.Stretch); + for (let m of this._2DModelingList) { + pts.push(...m.path.GetStretchPoints().map(p => p.add(new three.Vector3(0, 0, m.dir === FaceDirection.Front ? this.thickness : 0)).applyMatrix4(this.OCS))); + } + return pts; + } + MoveStretchPoints(indexList, vec) { + let exCount = arraySum(this.GetStrectchPointCountList(DragPointType.Stretch)); + let originIndexList = []; + let mIndexList = []; + for (let i of indexList) { + if (i < exCount) + originIndexList.push(i); + else + mIndexList.push(i - exCount); + } + let oldOcs = this.OCS; + super.MoveStretchPoints(originIndexList, vec); + if (!this.Id) + return; + arraySortByNumber(mIndexList); + let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec)); + let offset = 0; + let icount = mIndexList.length; + let i = 0; + for (let m of this._2DModelingList) { + let count = m.path.GetDragPointCount(DragPointType.Stretch); + offset += count; + let iList = []; + for (; i < icount; i++) { + if (mIndexList[i] < offset) + iList.push(mIndexList[i] - offset + count); + else + break; + } + if (iList.length > 0) { + m.path.MoveStretchPoints(iList, localVec); + } + m.path.ApplyMatrix(oldOcs).ApplyMatrix(this.OCSInv); + } + this.OffsetPathCache.clear(); + this._2D3DPathObject = null; + this.Update(UpdateDraw.Geometry); + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + let pts = super.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform); + if (snapMode === ObjectSnapMode.End) { + for (let vm of this._2DModelingList) { + if (!this.OffsetPathCache.has(vm.path)) + continue; + for (let item of vm.items) { + if (item.offset === 0) + continue; + let paths = this.OffsetPathCache.get(vm.path); + let polyline = paths[item.offset.toString()]; + let ps = polyline.GetStretchPoints(); + for (let p of ps) { + if (vm.dir === FaceDirection.Front) + p.add(new three.Vector3(0, 0, this.thickness)); + p.applyMatrix4(this.OCS); + } + pts.push(...ps); + } + } + } + return pts; + } DeferUpdate() { if (this.NeedUpdateFlag & UpdateDraw.Matrix) { if (this.RelativeHardware.some(id => !id.IsErase)) @@ -18595,10 +19136,16 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this.OpenDir = file.Read(); if (ver >= 9) this._IsChaiDan = file.Read(); + if (ver >= 10) { + DeserializationBoard2DModeingData(file, this._2DModelingList); + DeserializationBoard3DModeingData(file, this._3DModelingList); + } + this.OffsetPathCache.clear(); + this._2D3DPathObject = null; } WriteFile(file) { super.WriteFile(file); - file.Write(9); + file.Write(10); // file.Write(this._SpaceOCS.toArray()); ver < 6 file.Write(this._BoardType); file.Write(this._Name); @@ -18625,6 +19172,8 @@ let Board = Board_1 = class Board extends ExtrudeSolid { file.WriteObjectId(id); file.Write(this.OpenDir); file.Write(this._IsChaiDan); + SerializeBoard2DModeingData(file, this._2DModelingList); + SerializeBoard3DModeingData(file, this._3DModelingList); } }; __decorate([ @@ -18945,7 +19494,7 @@ let ExtrudeHole = class ExtrudeHole extends Hole { return [line, mesh]; } InitDrawObject(renderType = RenderType.Wireframe) { - if (renderType === RenderType.Wireframe) { + if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { return new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); } else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical || renderType === RenderType.Physical2) { @@ -18965,7 +19514,7 @@ let ExtrudeHole = class ExtrudeHole extends Hole { this._EdgeGeometry = undefined; this._MeshGeometry = undefined; this.MeshGeometry; - if (renderType === RenderType.Wireframe) { + if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { let l = obj; l.geometry = this.EdgeGeometry; l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); @@ -18981,7 +19530,7 @@ let ExtrudeHole = class ExtrudeHole extends Hole { return obj; } UpdateDrawObjectMaterial(renderType, obj) { - if (renderType === RenderType.Wireframe) { + if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { let l = obj; l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); } @@ -19396,49 +19945,7 @@ class FeedingToolPath extends Singleton { return true; return false; }); - let cus = this.CalcPath(modelings, br); - //不同走刀路径区分颜色 - cus.forEach((c, i) => c.ColorIndex = (i + 1 === 8 || i + 1 === 18 || i + 1 === 19) ? i + 2 : i + 1); - let outline = br.ContourCurve; - let dir = Math.sign(outline.Area2); - let sideOutlines = []; - //优化侧面造型模拟走刀位置 - for (let m of allModeling.sideModeling) { - let c = outline.GetCurveAtIndex(m.dir); - let derv = c.GetFistDeriv(0); - if (dir < 0) - derv.negate(); - let mat = MoveMatrix(dir > 0 ? c.StartPoint : c.EndPoint) - .multiply(new three.Matrix4().makeRotationZ(angleTo(XAxis, derv))) - .multiply(MoveMatrix(new three.Vector3(0, -br.Thickness))); - m.shape.ApplyMatrix(mat); - let pl = new exports.Polyline().RectangleFrom2Pt(new three.Vector3(), new three.Vector3(c.Length, br.Thickness)); - pl.ColorIndex = 6; - pl.ApplyMatrix(mat); - sideOutlines.push(pl); - } - cus.push(...this.CalcPath(allModeling.sideModeling, br)); - //加入板件轮廓 - cus.unshift(br.ContourCurve.Clone()); - if (cus.length === 1) - return cus; - //加入造型外轮廓和洞 - for (let { shape, thickness } of modelings) { - let outline = shape.Outline.Curve.Clone(); - outline.Position = outline.Position.setZ(0); - outline.ColorIndex = 8; - cus.push(outline); - if (thickness < br.Thickness) { - cus.push(...shape.Holes.map(h => { - let c = h.Curve.Clone(); - c.Position = c.Position.setZ(0); - c.ColorIndex = 8; - return c; - })); - } - } - cus.push(...sideOutlines); - return cus; + return this.CalcPath(modelings, br); } /** * 计算走刀路径 @@ -19458,10 +19965,12 @@ class FeedingToolPath extends Singleton { knifeRadius = 3; if (addDepth) thickness += addDepth; + if (thickness < 1e-5) + return cus; shape = shape.Clone(); shape.Z0(); this.GrooveAddSize(shape, addLen, addWidth); - this.HandleThoughGroove(br, shape, knifeRadius); + this.HandleThoughGroove(br.ContourCurve, shape, knifeRadius); //造型半径和刀半径相等,返回重合点的线 let outline = shape.Outline.Curve; if (outline instanceof exports.Circle && equaln(outline.Radius, m.knifeRadius)) @@ -19566,8 +20075,7 @@ class FeedingToolPath extends Singleton { } return errHoles; } - HandleThoughGroove(br, shape, knifeRadius) { - let brCon = br.ContourCurve; + HandleThoughGroove(brCon, shape, knifeRadius) { let outline = shape.Outline.Curve; if (outline instanceof exports.Circle) return; @@ -19753,6 +20261,7 @@ exports.IsPtsAllOutOrOnReg = IsPtsAllOutOrOnReg; exports.IsRect = IsRect; exports.SimplifyPolyline = SimplifyPolyline; exports.TempPolyline = TempPolyline; +exports.VData2Curve = VData2Curve; exports.VKnifToolPath = VKnifToolPath; exports.isTargetCurInOrOnSourceCur = isTargetCurInOrOnSourceCur; //# sourceMappingURL=api.cjs.js.map diff --git a/api.cjs.js.map b/api.cjs.js.map index 507ca76..bda58de 100644 --- a/api.cjs.js.map +++ b/api.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"api.cjs.js","sources":["../src/DatabaseServices/CADFactory.ts","../src/DatabaseServices/AllObjectData.ts","../src/DatabaseServices/AutoRecord.ts","../src/DatabaseServices/EraseEntityData.ts","../src/DatabaseServices/CADObject.ts","../src/DatabaseServices/ObjectId.ts","../src/ApplicationServices/HostApplicationServices.ts","../src/Common/Dispose.ts","../src/Geometry/CoordinateSystem.ts","../src/Common/eval.ts","../src/Common/StoreageKeys.ts","../src/Common/Utils.ts","../src/Geometry/GeUtils.ts","../src/Common/Matrix4Utils.ts","../src/Common/Status.ts","../src/GraphicsSystem/RenderType.ts","../src/Common/SystemEnum.ts","../src/Editor/UserConfig.ts","../src/Geometry/Box.ts","../src/DatabaseServices/Entity/Entity.ts","../src/DatabaseServices/CADFiler.ts","../src/GLSL/GoochShader.ts","../src/Common/ColorPalette.ts","../src/Common/ArrayExt.ts","../src/Editor/ObjectSnapMode.ts","../src/Geometry/BufferGeometryUtils.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/Matrix2.ts","../src/Geometry/RotateUV.ts","../src/ApplicationServices/mesh/createBoard.ts","../src/Geometry/CurveMap.ts","../src/Geometry/RegionParse.ts","../src/GraphicsSystem/BoolOperateUtils.ts","../src/DatabaseServices/Entity/Curve.ts","../src/DatabaseServices/Contour.ts","../src/Geometry/Plane.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Line.ts","../src/Geometry/SortEntityByBox.ts","../src/GraphicsSystem/OffsetPolyline.ts","../src/DatabaseServices/PointInPolyline.ts","../src/DatabaseServices/Entity/DragPointType.ts","../src/DatabaseServices/Entity/Polyline.ts","../src/GraphicsSystem/IntersectWith.ts","../src/DatabaseServices/Entity/Circle.ts","../src/Geometry/Count.ts","../src/Geometry/Orbit.ts","../src/Common/CurveUtils.ts","../src/DatabaseServices/Entity/Arc.ts","../src/Common/Log.ts","../src/Common/Singleton.ts","../src/Geometry/UVUtils.ts","../src/DatabaseServices/Shape.ts","../src/DatabaseServices/ShapeManager.ts","../src/DatabaseServices/Entity/Region.ts","../src/Add-on/BoardEditor/Board2Regions.ts","../src/Common/BoardKeyList.ts","../src/Add-on/BoardEditor/SerializeBoardData.ts","../src/Geometry/BoardUVGenerator.ts","../src/UI/Store/BoardInterface.ts","../src/Common/AddEntityDrawObject.ts","../src/csg/core/math/IsMirrot.ts","../src/csg/core/constants.ts","../src/csg/core/math/Vector3.ts","../src/csg/core/math/Vector2.ts","../src/csg/core/math/Vertex3.ts","../src/csg/core/math/Plane.ts","../src/csg/core/math/Polygon3.ts","../src/csg/core/trees.ts","../src/csg/core/FuzzyFactory.ts","../src/csg/core/FuzzyFactory3d.ts","../src/csg/core/utils/canonicalize.ts","../src/csg/core/utils/csgMeasurements.ts","../src/csg/core/utils.ts","../src/csg/core/math/Line2.ts","../src/csg/core/math/OrthoNormalBasis.ts","../src/csg/core/math/reTesselateCoplanarPolygons.ts","../src/csg/core/utils/retesellate.ts","../src/csg/core/CSG.ts","../src/csg/core/Geometry2CSG.ts","../src/Geometry/BSPGroupParse.ts","../src/Geometry/ExtrudeEdgeGeometry.ts","../src/Add-on/testEntity/SimplifyPolyline.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/Common/Toaster.ts","../src/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/UI/Store/WineRackInterface.ts","../src/UI/Store/BoardFindInterface.ts","../src/UI/Store/LatticeInterface.ts","../src/UI/Store/DoorInterface.ts","../src/UI/Components/RightPanel/RightPanelInterface.ts","../src/Editor/DefaultConfig.ts","../src/Nest/Common/Util.ts","../src/Geometry/SweepGeometry.ts","../src/DatabaseServices/Spline.ts","../src/Geometry/OBB/obb.ts","../src/DatabaseServices/3DSolid/SweepSolid.ts","../src/DatabaseServices/Hardware/HardwareTopline.ts","../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Common/Report.ts","../src/Common/ShowSelectObjects.ts","../src/Common/Deving.ts","../src/Production/Product.ts","../src/Geometry/CurveIntersection.ts","../src/Geometry/CreateContour2.ts","../src/Geometry/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Geometry/PointShapeUtils.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/DatabaseServices/Entity/Board.ts","../src/Geometry/CreateWireframe.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts"],"sourcesContent":["\r\n/**\r\n * CAD对象工厂,通过注册 和暴露的创建方法,动态创建对象\r\n */\r\nexport class CADFactory\r\n{\r\n private constructor() { }\r\n private objectNameMap = new Map();\r\n private static factory = new CADFactory();\r\n static RegisterObject(C: any)\r\n {\r\n this.factory.objectNameMap.set(C.name, C);\r\n }\r\n static RegisterObjectAlias(C: any, name: string)\r\n {\r\n this.factory.objectNameMap.set(name, C);\r\n }\r\n static CreateObject(name: string): any\r\n {\r\n let C = this.factory.objectNameMap.get(name);\r\n if (C) return new C();\r\n }\r\n}\r\n\r\n//可以通过添加装饰器 在类前面(@Factory),自动注册工厂的序列化\r\nexport function Factory(target: Object)\r\n{\r\n CADFactory.RegisterObject(target);\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\nimport { CADObject } from './CADObject';\r\n\r\n/**\r\n * 保存对象创建或者修改时的所有数据记录\r\n */\r\n@Factory\r\nexport class AllObjectData implements ISerialize\r\n{\r\n file: CADFiler;\r\n constructor(obj?: CADObject)\r\n {\r\n this.file = new CADFiler();\r\n if (obj)\r\n obj.WriteFile(this.file);\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n let data = file.Read();\r\n this.file.Data = data;\r\n return this;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.file.Data);\r\n return this;\r\n }\r\n}\r\n","\r\n\r\nexport const ISPROXYKEY = \"_isProxy\";\r\n\r\n/**\r\n * 自动对CADObject的属性添加属性记录器,自动调用 `WriteAllObjectRecord`\r\n * 如果属性是数组,那么自动添加`Proxy`.\r\n * 可以使用`ISPROXYKEY`覆盖这个函数的代理行为(使用CADObject.CreateProxyArray快速覆盖)\r\n *\r\n * @param target\r\n * @param property\r\n * @param [descriptor]\r\n */\r\nexport function AutoRecord(\r\n target: { WriteAllObjectRecord: () => void; },\r\n property: string,\r\n descriptor?: PropertyDecorator)\r\n{\r\n let privateKey = '__' + property;\r\n Object.defineProperty(target, property,\r\n {\r\n set: function (value)\r\n {\r\n if (value instanceof Array)\r\n {\r\n if (!this[privateKey])\r\n {\r\n if (value[ISPROXYKEY])\r\n this[privateKey] = value;\r\n else\r\n this[privateKey] = new Proxy(value, {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n this.WriteAllObjectRecord();\r\n return Reflect.set(target, key, value, receiver);\r\n },\r\n get: (target, key, receiver) =>\r\n {\r\n if (key === ISPROXYKEY)\r\n return true;\r\n //实体先被删除后在触发length = xxx\r\n if (key === \"splice\" || key === \"pop\" || key === \"shift\")\r\n this.WriteAllObjectRecord();\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n else\r\n {\r\n let arr = this[privateKey] as Array;\r\n arr.length = 0;\r\n arr.push(...value);\r\n }\r\n }\r\n else\r\n {\r\n let oldv = this[privateKey];\r\n if (oldv !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this[privateKey] = value;\r\n }\r\n }\r\n },\r\n get: function ()\r\n {\r\n return this[privateKey];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n }\r\n );\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\n@Factory\r\nexport class EraseEntityData implements ISerialize\r\n{\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.isErase = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.isErase);\r\n return this;\r\n }\r\n constructor(public isErase = true)\r\n {\r\n }\r\n}\r\n","import { iaop } from 'xaop';\r\nimport { AllObjectData } from './AllObjectData';\r\nimport { ISPROXYKEY } from './AutoRecord';\r\nimport { CADFactory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CommandHistoryRecord } from './CommandHistoryRecord';\r\nimport { Database } from './Database';\r\nimport { EraseEntityData } from './EraseEntityData';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\r\n\r\nexport abstract class CADObject\r\n{\r\n protected _Owner: ObjectId;\r\n /**\r\n * 用于储存临时数据\r\n */\r\n public TempData: any;\r\n\r\n //下面的三个数据由Rect2Board使用\r\n __CacheBox__: any;\r\n __CacheBoard__: any;\r\n __CacheSize__: any;\r\n __CachePolyline__: any;\r\n\r\n set Owner(owner: ObjectId)\r\n {\r\n this._Owner = owner;\r\n }\r\n get Owner()\r\n {\r\n return this._Owner;\r\n }\r\n\r\n Destroy()\r\n {\r\n //在效果图同步反应器中,需要知道被删除的实体的id,所以不删除这个属性\r\n // this.objectId = undefined;\r\n this._db = undefined;\r\n }\r\n\r\n //对象被彻底遗弃\r\n GoodBye(): any\r\n {\r\n this.Destroy();\r\n this.Erase(true);\r\n }\r\n\r\n /**\r\n * 当实体异步更新绘制实体完成后触发这个函数.\r\n * Application通过注入的方式得知这个事件,刷新视图显示.\r\n */\r\n @iaop\r\n AsyncUpdated()\r\n {\r\n }\r\n\r\n //-------------------------DB-------------------------\r\n protected _db: Database;\r\n get Db(): Database\r\n {\r\n return this._db;\r\n }\r\n\r\n //对象在加入数据库时,必须指定一个源数据库,否则无法读取引用id.\r\n SetDefaultDb(db: Database)\r\n {\r\n if (!this._db)\r\n this._db = db;\r\n else\r\n console.warn(\"重复设置默认Database!\");\r\n\r\n return this;\r\n }\r\n\r\n //private 私有的方法,暴露给Db的添加对象,方法使用.\r\n //只用对象加入到db中,我们才初始化ObjectId.\r\n //从db池中分配id给自身使用. 除非你创建对象往db里面加,否则不要调用该方法\r\n SetOwnerDatabase(db: Database)\r\n {\r\n if (!this._db)\r\n {\r\n this._db = db;\r\n this.objectId = db.AllocateId();\r\n this.objectId.Object = this;\r\n }\r\n else\r\n console.warn(\"重复设置源Database!\");\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * WblockClone 的时候,id是db分配的,此刻我们只需要设置它的db\r\n */\r\n SetDatabase(db: Database)\r\n {\r\n this._db = db;\r\n }\r\n\r\n //-------------------------DB End-------------------------\r\n\r\n // -------------------------isErase-------------------------\r\n protected _isErase: boolean = false;\r\n get IsErase(): boolean\r\n {\r\n return this._isErase;\r\n }\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this._isErase)\r\n return;\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n undoData.CreateEraseHistory(this, isErase);\r\n this._isErase = isErase;\r\n }\r\n //-------------------------isErase End-------------------------\r\n\r\n // -------------------------id-------------------------\r\n\r\n //操作这个需要谨慎!\r\n objectId: ObjectId;\r\n\r\n get Id(): ObjectId\r\n {\r\n return this.objectId;\r\n }\r\n\r\n // -------------------------id End-------------------------\r\n\r\n // -------------------------File-------------------------\r\n\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n //write Id;\r\n let id = file.ReadObjectId();\r\n if (!this.objectId && id)//避免CopyFrom时错误的修改自身Id\r\n {\r\n this.objectId = id;\r\n id.Object = this;\r\n }\r\n this._isErase = file.Read();\r\n if (ver > 1)\r\n this.Owner = file.ReadObjectId();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.WriteObjectId(this.objectId);\r\n file.Write(this._isErase);\r\n file.WriteObjectId(this.Owner);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: ISerialize)\r\n {\r\n if (undoData instanceof AllObjectData)\r\n {\r\n undoData.file.database = this._db;\r\n undoData.file.Reset();\r\n this.ReadFile(undoData.file);\r\n }\r\n else if (undoData instanceof EraseEntityData)\r\n {\r\n this.Erase(undoData.isErase);\r\n }\r\n }\r\n\r\n //撤销所保存的位置\r\n UndoRecord(): CommandHistoryRecord\r\n {\r\n if (this._db && this.objectId)\r\n return this._db.hm.UndoData;\r\n }\r\n //写入所有的对象数据 以便还原对象\r\n WriteAllObjectRecord(): boolean\r\n {\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n {\r\n undoData.WriteObjectSnapshoot(this);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //复制出一个实体,如果存在关联,则指向原关联实体\r\n Clone(): this\r\n {\r\n let newObject = CADFactory.CreateObject(this.constructor.name) as this;\r\n\r\n //备份\r\n let bakId = this.objectId;\r\n this.objectId = undefined;\r\n\r\n let file = new CADFiler();\r\n file.database = this._db;\r\n this.WriteFile(file);\r\n file.Reset();\r\n newObject.ReadFile(file);\r\n\r\n newObject.objectId = undefined;\r\n newObject._db = undefined;\r\n\r\n this.objectId = bakId;\r\n return newObject;\r\n }\r\n\r\n DeepClone(\r\n ownerObject: CADObject,\r\n cloneObejct: CADObject,\r\n idMaping: Map = undefined,\r\n isPrimary = true\r\n ): this\r\n {\r\n return this;\r\n }\r\n\r\n //从一个实体拷贝数据,实体类型必须相同.\r\n CopyFrom(obj: CADObject)\r\n {\r\n let idBak = this.objectId;\r\n let ownerBak = this._Owner;\r\n this.WriteAllObjectRecord();\r\n let f = new CADFiler();\r\n obj.WriteFile(f);\r\n this.ReadFile(f);\r\n this.objectId = idBak;\r\n this._Owner = ownerBak;\r\n }\r\n\r\n //-------------------------File End-------------------------\r\n\r\n //Utils\r\n /**\r\n * 配合 `@AutoRecord` 使用\r\n * 使用这个方法来覆盖AutoRecord的监听行为.\r\n * 这个行为只能用来监听实体添加和实体修改.\r\n * 实体删除行为暂时无法监听\r\n * @param setCallback 设置新的实体到数组时的回调函数\r\n */\r\n protected CreateProxyArray(setCallback: (v: any) => void)\r\n {\r\n return new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n setCallback(value);\r\n }\r\n return Reflect.set(target, key, value, receiver);\r\n },\r\n get: (target, key, receiver) =>\r\n {\r\n if (key === ISPROXYKEY)\r\n return true;\r\n //实体先被删除后在触发length = xxx\r\n if (key === \"splice\" || key === \"pop\" || key === \"shift\")\r\n {\r\n this.WriteAllObjectRecord();\r\n setCallback(undefined);\r\n }\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n}\r\n","import { CADObject } from './CADObject';\r\n\r\nexport enum RelevancyType\r\n{\r\n General = 0,\r\n Soft = 1,\r\n Hard = 2,\r\n}\r\n\r\n/*\r\nCADObject对象拥有Id属性,用来记录引用关系.\r\n通过id可以得到对应的关联实体,或者记录实体的关联关系.\r\n\r\nObjectId必须使用 Database分配(db里面会存id的列表,以便同时更新id指向实体)\r\n\r\n*/\r\nexport class ObjectId\r\n{\r\n _RelevancyType = RelevancyType.General;\r\n constructor(private index = 0, private obj?: CADObject)\r\n {\r\n }\r\n\r\n get IsErase(): boolean\r\n {\r\n return !this.obj || this.obj.IsErase;\r\n }\r\n set Object(obj: CADObject)\r\n {\r\n this.obj = obj;\r\n }\r\n get Object(): CADObject\r\n {\r\n return this.obj;\r\n }\r\n get Index(): number\r\n {\r\n return this.index;\r\n }\r\n set Index(index: number)\r\n {\r\n this.index = index;\r\n }\r\n}\r\n","import { ApplicationService } from './Application';\r\nimport { MeshBasicMaterial, MeshStandardMaterial } from 'three';\r\n\r\ninterface IHostApplicationServices\r\n{\r\n Application?: ApplicationService;\r\n DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n UseShadow?: boolean;\r\n ShowHistoryLog?: boolean;\r\n}\r\n\r\nexport let HostApplicationServices: IHostApplicationServices = { ShowHistoryLog: true };\r\n","import { Object3D } from \"three\";\r\n\r\n/**\r\n * 销毁Object对象的Geometry,并不会销毁材质(新版本销毁材质,好像问题不大?)\r\n */\r\nexport function DisposeThreeObj(obj: Object3D)\r\n{\r\n for (let o of obj.children)\r\n {\r\n let oany = o as any;\r\n //文字的geometry缓存保留下来\r\n if (oany.geometry && oany.geometry.name !== \"Text\")\r\n oany.geometry.dispose();\r\n\r\n if (oany.material)\r\n oany.material.dispose();\r\n\r\n DisposeThreeObj(o);\r\n\r\n // 下面这个代码可能导致Object3d无法复用,删除它应该问题不大\r\n // o.parent = null;\r\n // o.dispatchEvent({ type: \"removed\" });\r\n }\r\n // 下面这个代码可能导致Object3d无法复用,删除它应该问题不大\r\n // obj.children.length = 0;\r\n return obj;\r\n}\r\n\r\nexport function Object3DRemoveAll(obj: Object3D)\r\n{\r\n for (let o of obj.children)\r\n {\r\n o.parent = null;\r\n o.dispatchEvent({ type: \"removed\" });\r\n }\r\n obj.children.length = 0;\r\n return obj;\r\n}\r\n","import { Matrix4, Vector3 } from 'three';\r\n\r\n/**\r\n * 坐标系运算.\r\n */\r\nexport class CoordinateSystem\r\n{\r\n Postion: Vector3;\r\n XAxis: Vector3;\r\n YAxis: Vector3;\r\n ZAxis: Vector3;\r\n\r\n constructor(postion?: Vector3, xAxis?: Vector3, yAxis?: Vector3, zAxis?: Vector3)\r\n {\r\n this.Postion = postion || new Vector3(0, 0, 0);\r\n this.XAxis = xAxis || new Vector3(1, 0, 0);\r\n this.YAxis = yAxis || new Vector3(0, 1, 0);\r\n this.ZAxis = zAxis || new Vector3(0, 0, 1);\r\n }\r\n\r\n applyMatrix4(mat4: Matrix4)\r\n {\r\n this.Postion.applyMatrix4(mat4);\r\n let roMat = mat4.clone().setPosition(new Vector3());\r\n this.XAxis.applyMatrix4(roMat);\r\n this.YAxis.applyMatrix4(roMat);\r\n this.ZAxis.applyMatrix4(roMat);\r\n return this;\r\n }\r\n\r\n getMatrix4(): Matrix4\r\n {\r\n let m = new Matrix4();\r\n m.makeBasis(this.XAxis, this.YAxis, this.ZAxis);\r\n m.setPosition(this.Postion);\r\n return m;\r\n }\r\n CopyForm(mat4: Matrix4)\r\n {\r\n this.Postion.setFromMatrixPosition(mat4);\r\n mat4.extractBasis(this.XAxis, this.YAxis, this.ZAxis);\r\n return this;\r\n }\r\n\r\n extractBasis(xAxisA: Vector3, yAxisA: Vector3, zAxisA: Vector3)\r\n {\r\n xAxisA.copy(this.XAxis);\r\n yAxisA.copy(this.YAxis);\r\n zAxisA.copy(this.ZAxis);\r\n }\r\n copy(cs: CoordinateSystem): CoordinateSystem\r\n {\r\n this.Postion.copy(cs.Postion);\r\n this.XAxis.copy(cs.XAxis);\r\n this.YAxis.copy(cs.YAxis);\r\n this.ZAxis.copy(cs.ZAxis);\r\n return this;\r\n }\r\n clone()\r\n {\r\n let r = new CoordinateSystem();\r\n r.Postion = this.Postion.clone();\r\n r.XAxis = this.XAxis.clone();\r\n r.YAxis = this.YAxis.clone();\r\n r.ZAxis = this.ZAxis.clone();\r\n return r;\r\n }\r\n}\r\n","import { equaln } from \"../Geometry/GeUtils\";\r\nimport { clamp as CLAMP, FixedNotZero } from \"./Utils\";\r\n\r\nlet abs = Math.abs;\r\nlet acos = Math.acos;\r\nlet acosh = Math.acosh;\r\nlet asin = Math.asin;\r\nlet asinh = Math.asinh;\r\nlet atan = Math.atan;\r\nlet atanh = Math.atanh;\r\nlet atan2 = Math.atan2;\r\nlet ceil = Math.ceil;\r\nlet cbrt = Math.cbrt;\r\nlet expm1 = Math.expm1;\r\nlet clz32 = Math.clz32;\r\nlet cos = Math.cos;\r\nlet cosh = Math.cosh;\r\nlet exp = Math.exp;\r\nlet floor = Math.floor;\r\nlet fround = Math.fround;\r\nlet hypot = Math.hypot;\r\nlet imul = Math.imul;\r\nlet log = Math.log;\r\nlet log1p = Math.log1p;\r\nlet log2 = Math.log2;\r\nlet log10 = Math.log10;\r\nlet max = Math.max;\r\nlet min = Math.min;\r\nlet pow = Math.pow;\r\nlet random = Math.random;\r\nlet round = Math.round;\r\nlet sign = Math.sign;\r\nlet sin = Math.sin;\r\nlet sinh = Math.sinh;\r\nlet sqrt = Math.sqrt;\r\nlet tan = Math.tan;\r\nlet tanh = Math.tanh;\r\nlet trunc = Math.trunc;\r\nlet E = Math.E;\r\nlet LN10 = Math.LN10;\r\nlet LN2 = Math.LN2;\r\nlet LOG10E = Math.LOG10E;\r\nlet LOG2E = Math.LOG2E;\r\nlet PI = Math.PI;\r\nlet SQRT1_2 = Math.SQRT1_2;\r\nlet SQRT2 = Math.SQRT2;\r\nlet clamp = CLAMP;\r\nlet eq = equaln;\r\n\r\nlet OPERATORS = new Set([\"+\", \"-\", \"*\", \"/\"]);\r\n\r\n/**\r\n * eval2(\"+10\", { L: 100 }, \"L\")\r\n * @param expr\r\n * @param [params]\r\n * @param [defaultParam] 当输入 +10 这样的表达式时,设置默认的操作变量\r\n * @returns 计算结果\r\n */\r\nexport function eval2(expr: string, params?: {}, defaultParam?: string): number\r\n{\r\n let code = \"\";\r\n if (params)\r\n for (let name in params)\r\n code += `let ${name} = ${params[name]};`;\r\n\r\n if (defaultParam)\r\n {\r\n expr = expr.trimLeft();\r\n if (expr[0] && OPERATORS.has(expr[0]))\r\n expr = defaultParam + expr;\r\n }\r\n\r\n code += expr;\r\n\r\n let result = eval(code);\r\n\r\n if (typeof result === \"function\")\r\n return result();\r\n\r\n return Number(result);//防止bigint乱入\r\n}\r\n\r\nexport function safeEval(expr: string, params?: {}, defaultParam?: string): number\r\n{\r\n try\r\n {\r\n return eval2(expr, params);\r\n }\r\n catch (error)\r\n {\r\n return NaN;\r\n }\r\n}\r\n\r\nexport function CheckExpr(expr: string, params: any)\r\n{\r\n let resultObj = { res: undefined, error: undefined };\r\n try\r\n {\r\n resultObj.res = eval2(expr, params);\r\n }\r\n catch (error)\r\n {\r\n resultObj.error = error;\r\n }\r\n return resultObj;\r\n}\r\n\r\nconst Reg_Expr = /\\{[^\\}]+\\}/g;\r\n/**解析大括号内的 */\r\nexport function ParseExpr(expr: string, params?: {})\r\n{\r\n let strs = expr.match(Reg_Expr);\r\n if (!strs) return expr;\r\n for (let str of strs)\r\n expr = expr.replace(str, FixedNotZero(safeEval(str.slice(1, -1), params), 2));\r\n return expr;\r\n}\r\n","export enum StoreageKeys\r\n{\r\n IsLogin = \"isLogin\",\r\n PlatSession = \"platSession\",\r\n PlatToken = \"platToken\",\r\n UserName = \"userName\",\r\n UserPhone = \"userPhone\",\r\n RenderType = \"renderType\",\r\n ExactDrill = \"openExactDrill\",\r\n ConfigName = \"configName_\",\r\n IsNewErp = \"isNewErp\",\r\n RoomName = \"roomName\",\r\n LastOpenFileId = \"lastfid\",\r\n Uid = \"uid\",\r\n Goods = \"Goods_\",\r\n DrillTemp = \"drilltemp_\",\r\n DrillReactor = \"drillRreactor\",\r\n kjlConfig = \"kjl\",\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { safeEval } from \"./eval\";\r\nimport { StoreageKeys } from \"./StoreageKeys\";\r\nimport { ObjectId } from \"../DatabaseServices/ObjectId\";\r\n\r\n//仅数字构成的3位字符串(不以0开头)\r\nexport const digitStrReg = /^[^0\\D]\\d{0,2}$/;\r\nexport const commandReg = /[^A-Za-z0-9]/g;\r\n//仅可输入英文\r\nexport const onlyEnExpReg = /[^A-Za-z]/g;\r\n/**替换收口条柜名后缀 */\r\nexport const ClosingStripReg = /[左|右|上]{1}收口$/;\r\nexport const FileFormatReg = /^\\[(\\d+,){5}[(true)|(false)].+\\]$/;\r\n\r\n/**扣除封边是否相连和连接共用精度 */\r\nexport const LINK_FUZZ = 1e-3;\r\n\r\nexport function IsNumber(keyCode: number)\r\n{\r\n return (keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105);\r\n}\r\nexport function IsChar(keyCode: number)\r\n{\r\n return keyCode >= 65 && keyCode <= 90;\r\n}\r\nexport function isLetter(s: string)\r\n{\r\n let code = s.charCodeAt(0);\r\n return (code >= 97 && code <= 122) || (code >= 65 && code <= 90);\r\n}\r\nexport function isNum(s: string)\r\n{\r\n return !isNaN(safeEval(s));\r\n}\r\n\r\nexport function clamp(value: number, min: number, max: number)\r\n{\r\n return Math.max(min, Math.min(max, value));\r\n}\r\n\r\nexport function FixIndex(index: number, arr: Array | number)\r\n{\r\n let count = (arr instanceof Array) ? arr.length : arr;\r\n if (index < 0)\r\n return count + index;\r\n else if (index >= count)\r\n return index - count;\r\n else\r\n return index;\r\n}\r\n//格式化日期\r\nexport function formateDate(date: Date, fmt: string)\r\n{\r\n let o = {\r\n \"M+\": date.getMonth() + 1, //月份\r\n \"d+\": date.getDate(), //日\r\n \"h+\": date.getHours(), //小时\r\n \"m+\": date.getMinutes(), //分\r\n \"s+\": date.getSeconds(), //秒\r\n \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度\r\n \"S\": date.getMilliseconds() //毫秒\r\n };\r\n //如:yyyy\r\n if (/(y+)/.test(fmt))\r\n {\r\n fmt = fmt.replace(RegExp.$1, (date.getFullYear().toString()).substr(4 - RegExp.$1.length));\r\n }\r\n //yyyy-MM-dd hh:mm:ss\r\n for (let k in o)\r\n {\r\n if (new RegExp(\"(\" + k + \")\").test(fmt))\r\n {\r\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((\"00\" + o[k]).substr((\"\" + o[k]).length)));\r\n }\r\n }\r\n return fmt;\r\n}\r\n\r\n//判断v在v1和v2之间.(v1>v2 or v2>v1)\r\nexport function isBetweenNums(v1: number, v2: number, v: number, fuzz = 1e-8)\r\n{\r\n if (v1 > v2) [v1, v2] = [v2, v1];\r\n return equaln(v, clamp(v, v1, v2), fuzz);\r\n}\r\n\r\n//深复制对象数组\r\nexport function sliceDeep(arr: object[], start?: number, end?: number): object[]\r\n{\r\n return arr.slice(start, end).map((obj) => Object.assign({}, obj));\r\n}\r\n\r\nfunction fallbackCopyTextToClipboard(text)\r\n{\r\n let textArea = document.createElement(\"textarea\");\r\n textArea.value = text;\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n try\r\n {\r\n let successful = document.execCommand('copy');\r\n } catch (err)\r\n {\r\n }\r\n document.body.removeChild(textArea);\r\n}\r\nexport async function copyTextToClipboard(text: string)\r\n{\r\n if (!navigator[\"clipboard\"])\r\n {\r\n fallbackCopyTextToClipboard(text);\r\n return;\r\n }\r\n return await navigator[\"clipboard\"].writeText(text);\r\n}\r\n\r\n//ref: https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript\r\n\r\n/**\r\n * 读取剪切板的字符串\r\n */\r\nexport async function readClipboardText()\r\n{\r\n if (navigator[\"clipboard\"])\r\n return await navigator[\"clipboard\"].readText();\r\n return \"\";\r\n}\r\n\r\n//使用定点表示法来格式化一个数,小数点后面不尾随0. 如 FixedNotZero(1.1 , 3) => 1.1\r\nexport function FixedNotZero(v: number | string, fractionDigits: number = 0)\r\n{\r\n if (typeof v === \"string\")\r\n v = parseFloat(v);\r\n if (isNaN(v)) return \"\";\r\n if (equaln(v, 0)) return \"0\";\r\n let str = v.toFixed(fractionDigits);\r\n let commonIndex = str.indexOf(\".\");\r\n if (commonIndex !== -1)\r\n {\r\n let zeroCount = 0;\r\n let strCount = str.length;\r\n for (let l = strCount; l--;)\r\n {\r\n if (str[l] === \"0\")\r\n zeroCount++;\r\n else\r\n break;\r\n }\r\n if (zeroCount > 0)\r\n {\r\n if (zeroCount === (strCount - commonIndex - 1))\r\n zeroCount++;\r\n return str.slice(0, strCount - zeroCount);\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n/**\r\n * To fixed\r\n * @param v\r\n * @param [fractionDigits]\r\n * @returns\r\n */\r\nexport function ToFixed(v: number, fractionDigits: number = 5)\r\n{\r\n if (equaln(v, 0, Math.pow(0.1, fractionDigits))) return \"0\";\r\n return v.toFixed(fractionDigits);\r\n}\r\n\r\nexport function GetEntity(obj: Object3D): Entity | undefined\r\n{\r\n while (obj)\r\n {\r\n if (obj.userData.Entity)\r\n return obj.userData.Entity;\r\n\r\n obj = obj.parent;\r\n }\r\n}\r\n\r\nexport function IsEntity(obj: Object3D): boolean\r\n{\r\n return GetEntity(obj) instanceof Entity;\r\n}\r\n\r\nexport function IsNoErase(id: ObjectId): boolean\r\n{\r\n return id && !id.IsErase;\r\n}\r\n\r\n/**\r\n * 原图地址转换为对应缩略图地址\r\n */\r\nexport function getThumbsUrl(url: string)\r\n{\r\n return url ? url.replace(/\\/\\w*\\.\\w*$/, mat => \"/thumbs\" + mat.replace(\".\", \"_100.\")) : \"\";\r\n}\r\n\r\n/**\r\n * 快速判断a是不是被修改了\r\n */\r\nexport function equalObject(a: Object, b: Object)\r\n{\r\n for (let key in a)\r\n {\r\n if (a[key] !== b[key])\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function cloneObject(a: T): T\r\n{\r\n return Object.assign({}, a);\r\n}\r\n\r\nexport function Uint8ArrayToBase64(bytes: Uint8Array)\r\n{\r\n let binary = \"\";\r\n let len = bytes.byteLength;\r\n for (let i = 0; i < len; i++)\r\n binary += String.fromCharCode(bytes[i]);\r\n return window.btoa(binary);\r\n}\r\n\r\n/**转换服务端获取的文件大小 */\r\nexport function getFileSize(size: number)\r\n{\r\n let units = [\"B\", \"KB\", \"MB\", \"GB\"];\r\n for (let u of units)\r\n {\r\n if (size > 1 && size < 1024)\r\n return FixedNotZero(size, 2) + u;\r\n else\r\n size /= 1024;\r\n }\r\n}\r\n\r\nexport function GetIndexDBID(id: string)\r\n{\r\n return localStorage.getItem(StoreageKeys.Uid) + \":\" + id;\r\n}\r\n\r\nexport function FixDigits(v: number, fractionDigits = 2)\r\n{\r\n return parseFloat(v.toFixed(fractionDigits));\r\n}\r\n","import { Box3, BufferGeometry, Geometry, Line, Matrix4, Mesh, Object3D, Vector, Vector2, Vector3 } from 'three';\r\nimport { ToFixed } from '../Common/Utils';\r\n\r\nexport const IdentityMtx4 = new Matrix4();\r\nexport const ZeroVec = new Vector3();\r\nexport const XAxis = new Vector3(1, 0, 0);\r\nexport const XAxisN = new Vector3(-1, 0, 0);\r\nexport const YAxis = new Vector3(0, 1, 0);\r\nexport const YAxisN = new Vector3(0, -1, 0);\r\nexport const ZAxis = new Vector3(0, 0, 1);\r\n\r\nexport function AsVector2(p: { x: number, y: number; })\r\n{\r\n return new Vector2(p.x, p.y);\r\n}\r\nexport function AsVector3(p: { x: number, y: number, z?: number; })\r\n{\r\n return new Vector3(p.x, p.y, p.z);\r\n}\r\n\r\n/**\r\n * 判断一维线段a和b是否存在交集\r\n */\r\nexport function isIntersect(amin: number, amax: number, bmin: number, bmax: number, eps = 0)\r\n{\r\n return Math.max(amin, bmin) < Math.min(amax, bmax) + eps;\r\n}\r\n\r\nexport function isIntersect2(a1: number, a2: number, b1: number, b2: number, eps = 0)\r\n{\r\n if (a1 > a2) [a1, a2] = [a2, a1];\r\n if (b1 > b2) [b1, b2] = [b2, b1];\r\n return Math.max(a1, b1) < Math.min(a2, b2) + eps;\r\n}\r\n\r\n/**\r\n * 旋转一个点,旋转中心在原点\r\n * @param {Vector3} p 点\r\n * @param {number} a 角度.\r\n * @returns {Vector3} 返回pt不拷贝.\r\n */\r\nexport function rotatePoint(p: Vector3, a: number): Vector3\r\n{\r\n let s = Math.sin(a);\r\n let c = Math.cos(a);\r\n\r\n let x = p.x * c - p.y * s;\r\n let y = p.x * s + p.y * c;\r\n\r\n p.x = x;\r\n p.y = y;\r\n return p;\r\n}\r\n\r\nexport function equaln(v1: number, v2: number, fuzz = 1e-5)\r\n{\r\n return Math.abs(v1 - v2) <= fuzz;\r\n}\r\n\r\nexport function equalnn(dis = 5)\r\n{\r\n let fuzz = 0.1 ** dis;\r\n return function (v1: number, v2: number)\r\n {\r\n return Math.abs(v1 - v2) <= fuzz;\r\n };\r\n}\r\n\r\ninterface P2\r\n{\r\n x: number; y: number;\r\n}\r\n\r\nexport function equalv3(v1: Vector3, v2: Vector3, fuzz = 1e-8)\r\n{\r\n return equaln(v1.x, v2.x, fuzz) && equaln(v1.y, v2.y, fuzz) && equaln(v1.z, v2.z, fuzz);\r\n}\r\nexport function equalv2(v1: P2, v2: P2, fuzz = 1e-8)\r\n{\r\n return equaln(v1.x, v2.x, fuzz) && equaln(v1.y, v2.y, fuzz);\r\n}\r\n\r\n/**\r\n * 按照极坐标的方式移动一个点\r\n *\r\n * @export\r\n * @template\r\n * @param {T} v 向量(2d,3d)\r\n * @param {number} an 角度\r\n * @param {number} dis 距离\r\n * @returns {T}\r\n */\r\nexport function polar(v: T, an: number, dis: number): T\r\n{\r\n v.x += Math.cos(an) * dis;\r\n v.y += Math.sin(an) * dis;\r\n return v;\r\n}\r\n\r\nexport function angle(v: Vector3 | Vector2): number\r\n{\r\n let angle = Math.atan2(v.y, v.x);\r\n if (equaln(angle, 0, 1e-8)) return 0;\r\n if (angle < 0) angle += Math.PI * 2;\r\n return angle;\r\n}\r\n\r\n/**\r\n * 求两个向量的夹角,顺时针为负,逆时针为正\r\n *\r\n * @param {Vector3} v1\r\n * @param {Vector3} v2\r\n * @param {Vector3} [ref] 参考向量,如果为世界坐标系则为0,0,1\r\n * @returns\r\n */\r\nexport function angleTo(v1: Vector3, v2: Vector3, ref: Vector3 = ZAxis): number\r\n{\r\n if (v1.equals(ZeroVec) || v2.equals(ZeroVec))\r\n return 0;\r\n\r\n v1 = v1.clone();\r\n v2 = v2.clone();\r\n\r\n if (ref !== ZAxis && !ref.equals(ZAxis))\r\n {\r\n ref = ref.clone();\r\n //任意轴坐标系. 使用相机的构造矩阵.\r\n ref.multiplyScalar(-1);\r\n let up = getLoocAtUpVec(ref);\r\n let refOcs = new Matrix4();\r\n refOcs.lookAt(ZeroVec, ref, up);\r\n let refOcsInv = new Matrix4().getInverse(refOcs);\r\n v1.applyMatrix4(refOcsInv);\r\n v2.applyMatrix4(refOcsInv);\r\n v1.z = 0;\r\n v2.z = 0;\r\n }\r\n\r\n if (v1.equals(ZeroVec) || v2.equals(ZeroVec))//修复,这里有可能被更改为0\r\n return 0;\r\n\r\n //平行的向量返回0向量,不需要归一化\r\n let cv = new Vector3().crossVectors(v1, v2);\r\n if (equalv3(cv, ZeroVec))\r\n return 0;\r\n\r\n cv.normalize();\r\n return equaln(cv.z, 0) ? v1.angleTo(v2) : v1.angleTo(v2) * cv.z;\r\n}\r\n\r\nexport function getLoocAtUpVec(dir: Vector3): Vector3\r\n{\r\n if (dir.equals(ZeroVec))\r\n {\r\n throw (\"zero vector\");\r\n }\r\n let norm = dir.clone().normalize();\r\n if (norm.equals(ZAxis))\r\n {\r\n return new Vector3(0, 1, 0);\r\n }\r\n else if (norm.equals(ZAxis.clone().negate()))\r\n {\r\n return new Vector3(0, -1, 0);\r\n }\r\n else\r\n {\r\n let xv: Vector3 = new Vector3();\r\n xv.crossVectors(ZAxis, norm);\r\n\r\n let up = new Vector3();\r\n up.crossVectors(norm, xv);\r\n return up;\r\n }\r\n}\r\n\r\nexport function createLookAtMat4(dir: Vector3): Matrix4\r\n{\r\n let up = getLoocAtUpVec(dir);\r\n let mat = new Matrix4();\r\n mat.lookAt(ZeroVec, dir, up);\r\n return mat;\r\n}\r\n\r\n/**\r\n * 判断2个向量是不是平行,尽量传入单位向量,才能保证计算精度\r\n */\r\nexport function isParallelTo(v1: Vector3, v2: Vector3, fuzz = 1e-8): boolean\r\n{\r\n return v1.clone().cross(v2).lengthSq() < fuzz;\r\n}\r\n\r\n/**\r\n * 垂直向量\r\n */\r\nexport function isPerpendicularityTo(v1: Vector3, v2: Vector3, fuzz = 1e-8)\r\n{\r\n return equaln(v1.dot(v2), 0, fuzz);\r\n}\r\n\r\nexport function ptToString(v: Vector3, fractionDigits: number = 3): string\r\n{\r\n return v.toArray().map(o => ToFixed(o, fractionDigits)).join(\",\");\r\n}\r\n\r\nexport function midPoint(v1: Vector3, v2: Vector3): Vector3\r\n{\r\n return v1.clone().add(v2).multiplyScalar(0.5);\r\n}\r\nexport function midPoint2(v1: Vector2, v2: Vector2): Vector2\r\n{\r\n return v1.clone().add(v2).multiplyScalar(0.5);\r\n}\r\n\r\n/**\r\n * 获得Three对象的包围盒.\r\n * @param obj\r\n * @param [updateMatrix] 是否应该更新对象矩阵\r\n * @returns box\r\n */\r\nexport function GetBox(obj: Object3D, updateMatrix?: boolean): Box3\r\n{\r\n let box = new Box3();\r\n if (updateMatrix) obj.updateMatrixWorld(false);\r\n if (!obj.visible) return box;\r\n\r\n obj.traverseVisible(o =>\r\n {\r\n if (!o.visible) return;\r\n //@ts-ignore\r\n let geo = o.geometry as BufferGeometry;\r\n if (geo)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n let geoBox = geo.boundingBox.clone().applyMatrix4(o.matrixWorld);\r\n if (geoBox.max.z > 1e5)\r\n console.log();\r\n box.union(geoBox);\r\n }\r\n });\r\n return box;\r\n}\r\n\r\nexport function GetBoxArr(arr: Array): Box3\r\n{\r\n let box = new Box3();\r\n for (let o of arr)\r\n {\r\n let b = GetBox(o);\r\n if (!b.isEmpty())\r\n box.union(b);\r\n }\r\n return box;\r\n}\r\n\r\nexport function MoveMatrix(v: Vector3): Matrix4\r\n{\r\n return new Matrix4().setPosition(v);\r\n}\r\n\r\n//获得输入点在2线组成的4个区间的位置\r\nexport function getPtPostion(sp: Vector3, ep: Vector3, c: Vector3, inPt: Vector3)\r\n{\r\n let l1 = sp.clone().sub(c);\r\n let l2 = ep.clone().sub(c);\r\n let l3 = l1.clone().negate();\r\n let l4 = l2.clone().negate();\r\n let inputLine = inPt.clone().sub(c);\r\n let ang1 = angleTo(l1, l2);\r\n let ang2 = Math.PI;\r\n let ang3 = ang2 + Math.abs(ang1);\r\n let inputAng = angleTo(l1, inputLine);\r\n if (ang1 * inputAng < 0)\r\n inputAng = (Math.PI * 2 - Math.abs(inputAng));\r\n ang1 = Math.abs(ang1);\r\n inputAng = Math.abs(inputAng);\r\n if (inputAng <= ang1)\r\n return { sp, ep };\r\n else if (inputAng > ang1 && inputAng <= ang2)\r\n return { sp: c.clone().add(l3), ep };\r\n else if (inputAng > ang2 && inputAng <= ang3)\r\n return { sp: c.clone().add(l3), ep: c.clone().add(l4) };\r\n else\r\n return { sp, ep: c.clone().add(l4) };\r\n}\r\nexport function angleAndX(v: Vector3 | Vector2)\r\n{\r\n return v.x ? Math.atan(v.y / v.x) : Math.PI / 2;\r\n}\r\n\r\n/**\r\n * 将角度调整为0-2pi之间\r\n */\r\nexport function clampRad(an: number)\r\n{\r\n an = an % (Math.PI * 2);\r\n if (an < 0) an += Math.PI * 2;\r\n return an;\r\n}\r\n\r\nexport function updateGeometry(l: Line | Mesh, geometry: Geometry | BufferGeometry)\r\n{\r\n let geo = l.geometry as Geometry;\r\n geo.dispose();\r\n l.geometry = geometry;\r\n geometry.computeBoundingSphere();\r\n}\r\n\r\nexport function UpdateBoundingSphere(obj: Object3D)\r\n{\r\n //@ts-ignore\r\n let geo = obj.geometry as Geometry;\r\n if (geo)\r\n geo.computeBoundingSphere();\r\n}\r\n\r\n\r\nexport type compareVectorFn = (v1: Vector, v2: Vector3) => number;\r\n\r\nconst comparePointCache: Map = new Map();\r\n\r\n/**\r\n * 构建返回一个用来排序的函数.根据key创建排序规则.\r\n *\r\n * 当key = \"xyz\" 时,点集按 x从小到大,y从小到大 z从小到大\r\n * key = \"X\" 时,点集按 x从大到小\r\n * 以此类推.\r\n *\r\n * 例子:\r\n * let pts:Vector3[] =...;\r\n * pts.sort(comparePoint(\"x\")); //x从小到大排序\r\n * pts.sort(comparePoint(\"zX\")); //z从小到大 x从大到小\r\n *\r\n * @export\r\n * @param {string} sortKey\r\n * @returns {compareVectorFn}\r\n */\r\nexport function comparePoint(sortKey: string): compareVectorFn\r\n{\r\n if (comparePointCache.has(sortKey))\r\n return comparePointCache.get(sortKey);\r\n\r\n let sortIndex = [];\r\n\r\n const keys = ['x', 'X', 'y', 'Y', 'z', 'Z'];\r\n for (let char of sortKey)\r\n {\r\n let index = keys.indexOf(char);\r\n\r\n let i2 = index / 2;\r\n let ci = Math.floor(i2);\r\n sortIndex.push([ci, i2 > ci ? 1 : -1]);\r\n }\r\n\r\n let compareFunction = (v1: Vector, v2: Vector3): number =>\r\n {\r\n if (!v1) return -1;\r\n if (!v2) return 1;\r\n for (let s of sortIndex)\r\n {\r\n let vv1 = v1.getComponent(s[0]);\r\n let vv2 = v2.getComponent(s[0]);\r\n if (equaln(vv1, vv2)) continue;\r\n if (vv2 > vv1) return s[1];\r\n else return -s[1];\r\n }\r\n return 0;\r\n };\r\n\r\n comparePointCache.set(sortKey, compareFunction);\r\n return compareFunction;\r\n}\r\n\r\n/**\r\n *计算各轴旋转角度\r\n */\r\nexport function GetEulerAngle(x: Vector3, y: Vector3, z: Vector3)\r\n{\r\n let roY = Math.atan2(x.z, Math.sqrt(x.x ** 2 + x.y ** 2)) * -180 / Math.PI;\r\n let roZ = Math.atan2(x.y, x.x);\r\n let vec = YAxis.clone();\r\n let roMat = new Matrix4().makeRotationZ(roZ);\r\n roZ *= 180 / Math.PI;\r\n vec.applyMatrix4(roMat);\r\n let roX = Math.atan2(z.dot(vec), y.dot(vec)) * -180 / Math.PI;\r\n return { roX, roY, roZ };\r\n}\r\n\r\n/**\r\n * 方形框捕捉\r\n * @param sqCenter 正方形点\r\n * @param snapPt 被捕捉的点\r\n * @param size 捕捉框大小\r\n */\r\nexport function SnapPoint(sqCenter: Vector3, snapPt: Vector3, size: number): boolean\r\n{\r\n return Math.abs(sqCenter.x - snapPt.x) < size\r\n && Math.abs(sqCenter.y - snapPt.y) < size;\r\n}\r\n\r\nexport function SelectNearP(pts: Vector3[], refPt: Vector3): Vector3\r\n{\r\n if (pts.length > 1)\r\n {\r\n let dist1 = refPt.distanceToSquared(pts[0]);\r\n let dist2 = refPt.distanceToSquared(pts[1]);\r\n return dist1 <= dist2 ? pts[0] : pts[1];\r\n }\r\n return pts[0];\r\n}\r\n\r\n/**n是否在AB之间,fuzz 若为负的,允许相等 */\r\nexport function IsBetweenA2B(n: number, A: number, B: number, fuzz = -1e-8)\r\n{\r\n return n > A + fuzz && n < B - fuzz;\r\n}\r\n","import { Matrix4, Vector2, Vector3 } from 'three';\r\nimport { CoordinateSystem } from '../Geometry/CoordinateSystem';\r\nimport { equaln, isParallelTo } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 设置矩阵的某列的向量\r\n * @param {Matrix4} mat 矩阵\r\n * @param {number} col 列索引,0x 1y 2z 3org\r\n * @param {Vector3} v 向量或点\r\n */\r\nexport function matrixSetVector(mat: Matrix4, col: number, v: Vector3)\r\n{\r\n let index = col * 4;\r\n mat.elements[index] = v.x;\r\n mat.elements[index + 1] = v.y;\r\n mat.elements[index + 2] = v.z;\r\n}\r\n\r\n/**\r\n * 返回矩阵,该坐标系将坐标系与原点的坐标系映射为坐标系,\r\n * 并将坐标系与X轴坐标系,\r\n * Y轴坐标轴以及Z轴坐标系统之间的坐标系统坐标系统的原点坐标系和原点坐标系统坐标轴的坐标系分别设置为XAxis,YAxis和ZAxis\r\n * @returns {Matrix4} 返回新的矩阵\r\n */\r\nexport function matrixAlignCoordSys(matrixFrom: Matrix4, matrixTo: Matrix4): Matrix4\r\n{\r\n return new Matrix4().getInverse(matrixTo).multiply(matrixFrom);\r\n}\r\n\r\n/**\r\n * 判断2个矩形共面\r\n * @param {Matrix4} matrixFrom\r\n * @param {Matrix4} matrixTo\r\n * @returns {boolean} 2个矩阵共面\r\n */\r\nexport function matrixIsCoplane(matrixFrom: Matrix4, matrixTo: Matrix4, fuzz = 1e-5): boolean\r\n{\r\n let nor1 = new Vector3().setFromMatrixColumn(matrixFrom, 2);\r\n let nor2 = new Vector3().setFromMatrixColumn(matrixTo, 2);\r\n\r\n //法线共面\r\n if (!isParallelTo(nor1, nor2))\r\n return false;\r\n\r\n //高共面\r\n let pt = new Vector3().setFromMatrixPosition(matrixTo);\r\n //变换到自身对象坐标系.\r\n pt.applyMatrix4(new Matrix4().getInverse(matrixFrom));\r\n\r\n return equaln(pt.z, 0, fuzz);\r\n}\r\n\r\n//构造缩放矩阵\r\nexport function matrixScale(scale: number, center?: Vector3)\r\n{\r\n let scaleMat = new Matrix4().makeScale(scale, scale, scale);\r\n if (center)\r\n scaleMat.setPosition(center.clone().multiplyScalar(1 - scale));\r\n return scaleMat;\r\n}\r\n\r\n/**\r\n * 设置旋转矩阵,不改变矩阵的基点\r\n */\r\nexport function setRotationOnAxis(mtx: Matrix4, axis: Vector3, ro: number)\r\n{\r\n let pos = new Vector3().setFromMatrixPosition(mtx);\r\n mtx.makeRotationAxis(axis, ro);\r\n mtx.setPosition(pos);\r\n return mtx;\r\n}\r\n\r\n/**\r\n * 修正镜像后矩阵\r\n */\r\nexport function reviseMirrorMatrix(mtx: Matrix4): Matrix4\r\n{\r\n let cs = new CoordinateSystem().applyMatrix4(mtx);\r\n cs.YAxis.negate();\r\n mtx.copy(cs.getMatrix4());\r\n return mtx;\r\n}\r\n\r\nlet cacheVec: Vector3;\r\nexport function Vector2ApplyMatrix4(mtx: Matrix4, vec: Vector2)\r\n{\r\n if (!cacheVec) cacheVec = new Vector3();\r\n\r\n cacheVec.x = vec.x;\r\n cacheVec.y = vec.y;\r\n\r\n cacheVec.applyMatrix4(mtx);\r\n\r\n vec.x = cacheVec.x;\r\n vec.y = cacheVec.y;\r\n}\r\nexport function GetMirrorMat(v: Vector3)\r\n{\r\n let mirrorMat = new Matrix4();\r\n let xAxis = new Vector3(1 - 2 * v.x ** 2, -2 * v.x * v.y, -2 * v.x * v.z);\r\n let yAxis = new Vector3(-2 * v.x * v.y, 1 - 2 * v.y ** 2, -2 * v.y * v.z);\r\n let zAxis = new Vector3(-2 * v.x * v.z, -2 * v.y * v.z, 1 - 2 * v.z ** 2);\r\n mirrorMat.makeBasis(xAxis, yAxis, zAxis);\r\n return mirrorMat;\r\n}\r\n\r\nexport function ApplyMatrix4IgnorePosition(vec: { x: number, y: number, z: number; }, m: Matrix4)\r\n{\r\n let { x, y, z } = vec;\r\n let e = m.elements;\r\n vec.x = e[0] * x + e[4] * y + e[8] * z;\r\n vec.y = e[1] * x + e[5] * y + e[9] * z;\r\n vec.z = e[2] * x + e[6] * y + e[10] * z;\r\n return vec;\r\n}\r\n\r\n/**\r\n * 把变换矩阵展平成2d矩阵,避免出现三维坐标.\r\n */\r\nexport function MatrixPlanarizere(mtx: Matrix4, z0 = true)\r\n{\r\n mtx.elements[2] = 0;\r\n mtx.elements[6] = 0;\r\n mtx.elements[8] = 0;\r\n mtx.elements[9] = 0;\r\n mtx.elements[10] = Math.sign(mtx.elements[10]);\r\n\r\n if (z0)\r\n mtx.elements[14] = 0;\r\n\r\n return mtx;\r\n}\r\n\r\nexport const tempMatrix1 = new Matrix4;\r\n","\r\n\r\n\r\nexport enum Status\r\n{\r\n False = 0,\r\n True = 1,\r\n Canel = -1,\r\n\r\n ConverToCircle = 101,\r\n\r\n DuplicateRecordName = 102,\r\n}\r\n\r\nexport enum UpdateDraw\r\n{\r\n None = 0,\r\n Matrix = 1,\r\n Geometry = 2,\r\n Material = 4,\r\n All = ~(~0 << 6)\r\n}\r\n\r\n/**\r\n * WblockClne时,遇到重复记录的操作方式\r\n */\r\nexport enum DuplicateRecordCloning\r\n{\r\n Ignore = 1,\r\n Replace = 2,\r\n Rename = 3,\r\n}\r\n","\r\n/**\r\n * 场景的渲染类型.\r\n */\r\nexport enum RenderType\r\n{\r\n /**\r\n * 线框模式\r\n */\r\n Wireframe = 1,\r\n\r\n /**\r\n * 概念\r\n */\r\n Conceptual = 2,\r\n\r\n\r\n /**\r\n * 物理着色PBR\r\n */\r\n Physical = 3,\r\n\r\n Jig = 4,\r\n Print = 5,\r\n /**物理带线框 */\r\n Physical2 = 6,\r\n\r\n /******************************************** 在视口时的渲染模式 */\r\n /**\r\n * 线框模式\r\n */\r\n WireframePrint = 101,\r\n\r\n /**\r\n * 概念\r\n */\r\n ConceptualPrint = 102,\r\n\r\n\r\n /**\r\n * 物理着色PBR\r\n */\r\n PhysicalPrint = 103,\r\n\r\n JigPrint = 104,\r\n PrintPrint = 105,\r\n /**物理带线框 */\r\n Physical2Print = 106,\r\n}\r\n","export enum AAType\r\n{\r\n FXAA = 0,//快速近似抗锯齿(性能更好)\r\n SMAA = 1,//多重采样抗锯齿(质量更好)\r\n}\r\n\r\nexport enum ViewDirType\r\n{\r\n FS = 0,\r\n YAS = 1,\r\n ZS = 2,\r\n YS = 3,\r\n QS = 4,\r\n HS = 5,\r\n XN = 6,\r\n}\r\n","import { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { DrillingOption } from \"../UI/Store/drillInterface\";\r\nimport { observable, reaction, toJS } from \"mobx\";\r\nimport { StoreageKeys } from \"../Common/StoreageKeys\";\r\nimport { IWineRackOption } from \"../UI/Store/WineRackInterface\";\r\nimport { IBaseOption, IGrooveOption } from \"../UI/Store/BoardInterface\";\r\nimport { IConfigStore } from \"../UI/Store/BoardStore\";\r\nimport { IConfigOption } from \"../UI/Components/Board/UserConfig\";\r\nimport { AAType, ViewDirType } from \"../Common/SystemEnum\";\r\n\r\nexport interface IMaxSizeProps extends IBaseOption\r\n{\r\n height: number;\r\n width: number;\r\n isShow: boolean;\r\n}\r\n\r\nexport interface ISystemConfig extends IBaseOption\r\n{\r\n aaType: AAType;\r\n maxHightightCount: number;\r\n snapSize: number;\r\n}\r\n\r\nexport interface ICursorConfig extends IBaseOption\r\n{\r\n D2: number;\r\n D3: number;\r\n}\r\n\r\nexport class UserConfig implements IConfigStore\r\n{\r\n private readonly _version = 12;\r\n _renderType: RenderType = RenderType.Wireframe;\r\n @observable maxSize: IMaxSizeProps = {\r\n isShow: false,\r\n height: 2440,\r\n width: 1220,\r\n };\r\n @observable private _drillConfigs: Map = new Map();\r\n @observable openDrillingReactor = true;\r\n @observable openAutoCuttingReactor = true;\r\n /**打开将检测排钻是否在板件内*/\r\n @observable openExactDrill = true;\r\n winerackConfig: IWineRackOption;\r\n userConfigName: { [key: string]: string; } = {};\r\n private modeling2HoleRad = 20; //圆造型小于等于该值拆成孔数据\r\n @observable isAdmin = false;\r\n isMaster = false;\r\n rights = [];\r\n @observable kjlConfig: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"1\",\r\n };\r\n @observable SystemConfig: ISystemConfig = {\r\n maxHightightCount: 15000,\r\n snapSize: 15,\r\n aaType: AAType.FXAA,\r\n };\r\n @observable viewDirType: ViewDirType = ViewDirType.XN;\r\n @observable useCtrlRotate = true;\r\n @observable cursorSize: ICursorConfig = {\r\n D2: 1000,\r\n D3: 100,\r\n };\r\n @observable autoSaveConfig = {\r\n enable: true,\r\n time: 1,\r\n };\r\n @observable showLines = false;\r\n @observable keepConfig = false;\r\n @observable autoClearHistory = true;\r\n @observable chaidanOption = {\r\n changXiuBian: 6,\r\n duanXiuBian: 6,\r\n useDefaultRad: false,\r\n radius: 2.5,\r\n modeling2HoleRad: 20, //圆造型小于等于该值拆成孔数据\r\n isCheckInterfere: false,\r\n noModeingData: \"\", //非造型遭数据\r\n };\r\n @observable autoLines = false;\r\n dimTextHeight = 60;\r\n\r\n @observable performanceConfig = {\r\n fakersweep: false,\r\n disablerefcut: false,\r\n disablecheckgroove: false,\r\n };\r\n lineWidth = 2; //打印线框\r\n @observable forceFilterPxl = true;\r\n constructor()\r\n {\r\n this.Init();\r\n }\r\n Init()\r\n {\r\n let type = localStorage.getItem(StoreageKeys.RenderType);\r\n if (type)\r\n this._renderType = parseFloat(type);\r\n }\r\n set RenderType(t: RenderType)\r\n {\r\n if (t !== this._renderType)\r\n {\r\n this._renderType = t;\r\n this.SetRenderTypeEvent();\r\n\r\n localStorage.setItem(StoreageKeys.RenderType, t.toString());\r\n }\r\n }\r\n\r\n get RenderType() { return this._renderType; }\r\n\r\n SetRenderTypeEvent() { }\r\n get DrillConfigs()\r\n {\r\n return this._drillConfigs || new Map();\r\n }\r\n set DrillConfigs(config: Map)\r\n {\r\n observable(this._drillConfigs).replace(config);\r\n this.SetDrillConfigsEvent();\r\n }\r\n SetDrillConfigsEvent() { }\r\n configName = \"default\";\r\n configsNames: string[] = [];\r\n InitOption()\r\n {\r\n this.openDrillingReactor = true;\r\n this.openAutoCuttingReactor = true;\r\n Object.assign(this.maxSize, {\r\n height: 2440,\r\n width: 1220\r\n });\r\n Object.assign(this.kjlConfig, {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"1\"\r\n });\r\n Object.assign(this.chaidanOption, {\r\n changXiuBian: 6,\r\n duanXiuBian: 6,\r\n useDefaultRad: false,\r\n radius: 2.5,\r\n modeling2HoleRad: 20,\r\n noModeingData: \"\",\r\n });\r\n this.dimTextHeight = 60;\r\n }\r\n SaveConfig()\r\n {\r\n return {\r\n option: {\r\n version: this._version,\r\n openDrillingReactor: this.openDrillingReactor,\r\n openAutoCuttingReactor: this.openAutoCuttingReactor,\r\n maxSize: toJS(this.maxSize),\r\n kjlConfig: toJS(this.kjlConfig),\r\n systemConfig: toJS(this.SystemConfig),\r\n viewDirType: this.viewDirType,\r\n useCtrlRotate: this.useCtrlRotate,\r\n cursorSize: toJS(this.cursorSize),\r\n autoSaveConfig: toJS(this.autoSaveConfig),\r\n showLines: this.showLines,\r\n keepConfig: this.keepConfig,\r\n autoClearHistory: this.autoClearHistory,\r\n chaidanOption: toJS(this.chaidanOption),\r\n autoLines: this.autoLines,\r\n dimTextHeight: this.dimTextHeight,\r\n lineWidth: this.lineWidth,\r\n forceFilterPxl: this.forceFilterPxl,\r\n }\r\n };\r\n }\r\n UpdateOption(config: IConfigOption)\r\n {\r\n this.openDrillingReactor = config.option.openDrillingReactor;\r\n this.openAutoCuttingReactor = config.option.openAutoCuttingReactor;\r\n Object.assign(this.maxSize, config.option.maxSize);\r\n Object.assign(this.kjlConfig, config.option.kjlConfig);\r\n this.modeling2HoleRad = config.option.modeling2HoleRad;\r\n\r\n if (config.option.version > 1)\r\n {\r\n Object.assign(this.SystemConfig, config.option.systemConfig);\r\n }\r\n if (config.option.version > 2)\r\n {\r\n this.viewDirType = config.option.viewDirType;\r\n this.useCtrlRotate = config.option.useCtrlRotate;\r\n }\r\n\r\n if (config.option.version > 3)\r\n {\r\n Object.assign(this.cursorSize, config.option.cursorSize);\r\n }\r\n if (config.option.version > 4)\r\n {\r\n Object.assign(this.autoSaveConfig, config.option.autoSaveConfig);\r\n }\r\n if (config.option.version > 5)\r\n {\r\n this.showLines = config.option.showLines;\r\n }\r\n if (config.option.version > 6)\r\n {\r\n this.keepConfig = config.option.keepConfig;\r\n }\r\n if (config.option.version > 7)\r\n {\r\n this.autoClearHistory = config.option.autoClearHistory;\r\n }\r\n if (config.option.version > 8)\r\n {\r\n config.option.chaidanOption.modeling2HoleRad = Number(config.option.chaidanOption.modeling2HoleRad);\r\n Object.assign(this.chaidanOption, config.option.chaidanOption);\r\n this.autoLines = config.option.autoLines;\r\n }\r\n else\r\n this.chaidanOption.modeling2HoleRad = this.modeling2HoleRad;\r\n\r\n if (config.option.version > 9)\r\n this.dimTextHeight = config.option.dimTextHeight;\r\n if (config.option.version > 10)\r\n this.lineWidth = config.option.lineWidth;\r\n\r\n if (config.option.version > 11)\r\n this.forceFilterPxl = config.option.forceFilterPxl;\r\n }\r\n}\r\n\r\nexport const userConfig = new UserConfig();\r\n","import { Vector3, Box3 } from 'three';\r\n\r\n/**\r\n * 盒子的切割类型\r\n */\r\nexport enum SplitType\r\n{\r\n X = 0,\r\n Y = 1,\r\n Z = 2,\r\n}\r\n\r\n/**\r\n * 扩展Box3,添加切割方法,体积等\r\n */\r\nexport class Box3Ext extends Box3\r\n{\r\n TempData: any;\r\n get Volume()\r\n {\r\n let size = this.getSize(new Vector3());\r\n return size.x * size.y * size.z;\r\n }\r\n\r\n //每个轴的大小必须大于最小的size\r\n isSolid(minSize = 1)\r\n {\r\n return this.getSize(new Vector3()).toArray().every(x => x > minSize);\r\n }\r\n substract(b: Box3Ext, spaceType: SplitType)\r\n {\r\n let interBox = this.clone().intersect(b) as this;\r\n if (interBox.isEmpty() || !interBox.isSolid())\r\n return [this];\r\n\r\n let p1 = interBox.min.clone().setComponent(spaceType, this.min.getComponent(spaceType));\r\n let p2 = interBox.max.clone().setComponent(spaceType, interBox.min.getComponent(spaceType));\r\n\r\n let p3 = interBox.min.clone().setComponent(spaceType, interBox.max.getComponent(spaceType));\r\n let p4 = interBox.max.clone().setComponent(spaceType, this.max.getComponent(spaceType));\r\n\r\n return [\r\n new Box3Ext(p1, p2),\r\n new Box3Ext(p3, p4)\r\n ].filter(b => b.isSolid());\r\n }\r\n clampSpace(b2: Box3Ext, splitType: SplitType)\r\n {\r\n let interBox = this.clone();\r\n interBox.min.max(b2.min);\r\n interBox.max.min(b2.max);\r\n interBox.min.setComponent(splitType, Math.min(this.max.getComponent(splitType), b2.max.getComponent(splitType)));\r\n interBox.max.setComponent(splitType, Math.max(this.min.getComponent(splitType), b2.min.getComponent(splitType)));\r\n return interBox;\r\n }\r\n intersectsBox(box: Box3, fuzz = 1e-8): boolean\r\n {\r\n return IntersectsBox(this, box, fuzz);\r\n }\r\n}\r\n\r\nexport function IntersectsBox(box1: Box3, box2: Box3, fuzz = 1e-6): boolean\r\n{\r\n return box2.max.x < box1.min.x - fuzz || box2.min.x > box1.max.x + fuzz ||\r\n box2.max.y < box1.min.y - fuzz || box2.min.y > box1.max.y + fuzz ||\r\n box2.max.z < box1.min.z - fuzz || box2.min.z > box1.max.z + fuzz ? false : true;\r\n}\r\n\r\n/**盒子二维面是否相交 */\r\nexport function IntersectBox2(box1: Box3, box2: Box3, fuzz = 1e-3)\r\n{\r\n return box2.max.x < box1.min.x - fuzz || box2.min.x > box1.max.x + fuzz ||\r\n box2.max.y < box1.min.y - fuzz || box2.min.y > box1.max.y + fuzz ? false : true;\r\n}\r\n","import { Box3, Material, Matrix3, Matrix4, MeshStandardMaterial, Object3D, Vector3 } from 'three';\r\nimport { iaop } from 'xaop';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { matrixIsCoplane, MatrixPlanarizere } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { userConfig } from '../../Editor/UserConfig';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { equaln, equalv3, UpdateBoundingSphere, IdentityMtx4 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { CADObject } from '../CADObject';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { PhysicalMaterialRecord } from '../PhysicalMaterialRecord';\r\n\r\n/**\r\n * Entity 是所有图元的基类,绘制的实体都集成该类.\r\n */\r\n@Factory\r\nexport class Entity extends CADObject\r\n{\r\n\r\n IsEmbedEntity = false;\r\n\r\n /**\r\n * 该实体的只有一个渲染类型,任何渲染类型都一个样\r\n */\r\n protected OnlyRenderType = false;\r\n protected _CacheDrawObject = new Map();\r\n //材质id\r\n protected materialId: ObjectId;\r\n protected _Color: number = 7;\r\n\r\n //自身坐标系\r\n protected _Matrix = new Matrix4();\r\n\r\n //模块空间的标系\r\n protected _SpaceOCS: Matrix4 = new Matrix4();\r\n get SpaceOCS()\r\n {\r\n return this._SpaceOCS.clone();\r\n }\r\n get SpaceOCSInv()\r\n {\r\n return new Matrix4().getInverse(this._SpaceOCS);\r\n }\r\n set SpaceOCS(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SpaceOCS.copy(m);\r\n }\r\n\r\n protected _Visible = true;\r\n\r\n @AutoRecord GroupId: ObjectId;\r\n @AutoRecord Template: ObjectId;\r\n //加工组\r\n @AutoRecord ProcessingGroupList: ObjectId[] = [];\r\n\r\n /**\r\n * 当AutoUpdate为false时,记录需要更新的标志.\r\n * 以便延迟更新时找到相应的更新标志.\r\n */\r\n NeedUpdateFlag: UpdateDraw = UpdateDraw.None;\r\n AutoUpdate = true;\r\n\r\n set Material(materialId: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.materialId = materialId;\r\n this.Update();\r\n }\r\n\r\n get Material()\r\n {\r\n return this.materialId;\r\n }\r\n\r\n set ColorIndex(color: number)\r\n {\r\n if (color !== this._Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Color = color;\r\n this.Update(UpdateDraw.Material);\r\n }\r\n }\r\n get ColorIndex(): number\r\n {\r\n return this._Color;\r\n }\r\n /**\r\n * 炸开实体\r\n */\r\n Explode(): Entity[] { return []; }\r\n\r\n /**\r\n * 返回对象的包围框.\r\n */\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3();\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let mtxBak = this._Matrix;\r\n this._Matrix = IdentityMtx4;\r\n let box = this.BoundingBox;\r\n this._Matrix = mtxBak;\r\n return new Box3Ext().copy(box);\r\n }\r\n\r\n GetBoundingBoxInMtx(mtx: Matrix4): Box3Ext\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCS.premultiply(mtx));\r\n }\r\n\r\n get BoundingBoxInSpaceCS(): Box3Ext\r\n {\r\n return this.GetBoundingBoxInMtx(this.SpaceOCSInv);\r\n }\r\n\r\n get OCS(): Matrix4\r\n {\r\n return this._Matrix.clone();\r\n }\r\n\r\n get OCSNoClone()\r\n {\r\n return this._Matrix;\r\n }\r\n\r\n //直接设置实体的矩阵,谨慎使用该函数,没有更新实体.\r\n set OCS(mat4: Matrix4)\r\n {\r\n this._Matrix.copy(mat4);\r\n }\r\n get Normal(): Vector3\r\n {\r\n return new Vector3().setFromMatrixColumn(this._Matrix, 2);\r\n }\r\n get Position(): Vector3\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n\r\n set Position(pt: Vector3)\r\n {\r\n let moveX = pt.x - this._Matrix.elements[12];\r\n let moveY = pt.y - this._Matrix.elements[13];\r\n let moveZ = pt.z - this._Matrix.elements[14];\r\n\r\n if (moveX === 0 && moveY === 0 && moveZ === 0) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(pt);\r\n this._SpaceOCS.elements[12] += moveX;\r\n this._SpaceOCS.elements[13] += moveY;\r\n this._SpaceOCS.elements[14] += moveZ;\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n\r\n //Z轴归0\r\n Z0()\r\n {\r\n if (this._Matrix.elements[14] === 0) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Matrix.elements[14] = 0;\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\r\n }\r\n\r\n //坐标系二维化\r\n MatrixPlanarizere()\r\n {\r\n let z = this._Matrix.elements[10];\r\n if (equaln(Math.abs(z), 1, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n MatrixPlanarizere(this._Matrix, false);\r\n }\r\n return this;\r\n }\r\n\r\n get OCSInv(): Matrix4\r\n {\r\n return new Matrix4().getInverse(this._Matrix);\r\n }\r\n\r\n /**\r\n * 与指定实体是否共面.\r\n */\r\n IsCoplaneTo(e: Entity): boolean\r\n {\r\n return matrixIsCoplane(this._Matrix, e.OCS, 1e-4);\r\n }\r\n\r\n /**\r\n * 测试两个实体的包围盒是否相交.\r\n */\r\n BoundingBoxIntersectWith(en: Entity): boolean\r\n {\r\n let box = this.BoundingBox;\r\n let box2 = en.BoundingBox;\r\n return box && box2 && box.intersectsBox(box2);\r\n }\r\n\r\n //#region Draw\r\n\r\n ClearDraw()\r\n {\r\n if (this._drawObject)\r\n {\r\n DisposeThreeObj(this._drawObject);\r\n this._drawObject = undefined;\r\n }\r\n\r\n for (let [, obj] of this._CacheDrawObject)\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.clear();\r\n return this;\r\n }\r\n ClearDrawOfJig()\r\n {\r\n let jig = this._CacheDrawObject.get(RenderType.Jig);\r\n if (jig)\r\n this._CacheDrawObject.delete(RenderType.Jig);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.clear();\r\n if (jig)\r\n this._CacheDrawObject.set(RenderType.Jig, jig);\r\n }\r\n\r\n get IsOnlyRender()\r\n {\r\n return this.OnlyRenderType;\r\n }\r\n _drawObject: Object3D;\r\n\r\n get DrawObject()\r\n {\r\n if (this._drawObject)\r\n return this._drawObject;\r\n\r\n this._drawObject = new Object3D();\r\n if (!this.IsEmbedEntity)\r\n this._drawObject.userData.Entity = this;\r\n if (this.IsVisible)\r\n {\r\n this._CurRenderType = userConfig.RenderType;\r\n let obj = this.GetDrawObjectFromRenderType(userConfig.RenderType);\r\n if (obj) this._drawObject.add(obj);\r\n }\r\n else\r\n this._drawObject.visible = false;\r\n return this._drawObject;\r\n }\r\n\r\n get JigObject()\r\n {\r\n let obj = this.GetDrawObjectFromRenderType(RenderType.Jig);\r\n if (obj && !this.IsEmbedEntity)\r\n obj.userData.Entity = this;\r\n return obj;\r\n }\r\n\r\n DestroyJigObject()\r\n {\r\n let obj = this._CacheDrawObject.get(RenderType.Jig);\r\n if (obj)\r\n {\r\n this._CacheDrawObject.delete(RenderType.Jig);\r\n DisposeThreeObj(obj);\r\n if (obj.parent)\r\n obj.parent.remove(obj);\r\n }\r\n }\r\n\r\n //当前绘制类型,在.DrawObject 和 UpdateRenderType中初始化和更新\r\n protected _CurRenderType: RenderType;\r\n UpdateRenderType(type: RenderType)\r\n {\r\n if (this._CurRenderType !== type || this.DrawObject.children.length === 0)\r\n {\r\n this._CurRenderType = type;\r\n if ((this.OnlyRenderType && this.DrawObject.children.length > 0) || !this.Visible) return;\r\n Object3DRemoveAll(this.DrawObject);\r\n let obj = this.GetDrawObjectFromRenderType(type);\r\n if (obj) this.DrawObject.add(obj);\r\n }\r\n }\r\n\r\n GetDrawObjectFromRenderType(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (this.OnlyRenderType)\r\n {\r\n if (renderType === RenderType.Jig)\r\n return;\r\n if (renderType < 100)\r\n renderType = RenderType.Wireframe;\r\n else\r\n renderType = RenderType.WireframePrint;\r\n }\r\n\r\n if (this._CacheDrawObject.has(renderType))\r\n {\r\n return this._CacheDrawObject.get(renderType);\r\n }\r\n else\r\n {\r\n let drawObj = this.InitDrawObject(renderType);\r\n if (drawObj === undefined)\r\n {\r\n if (renderType > 100)//如果实体没有实现打印类型,那么就使用原先的实体的渲染类型\r\n return this.GetDrawObjectFromRenderType(renderType - 100);\r\n return;\r\n };\r\n\r\n //矩阵直接使用指针,因为已经关闭自动更新,所以矩阵不会被Object3D修改.\r\n drawObj.matrixAutoUpdate = false;\r\n drawObj.matrix = this._Matrix;\r\n drawObj.updateMatrixWorld(true);\r\n drawObj.traverse(UpdateBoundingSphere);\r\n\r\n if (!this.IsEmbedEntity)\r\n drawObj.userData.Entity = this;\r\n\r\n this._CacheDrawObject.set(renderType, drawObj);\r\n return drawObj;\r\n }\r\n }\r\n\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n return undefined;\r\n }\r\n\r\n //实体绘制更新版本号\r\n __UpdateVersion__ = 0;\r\n\r\n /**\r\n * 当实体数据改变时,绘制的实体必须做出改变.供框架调用\r\n */\r\n @iaop\r\n Update(mode = UpdateDraw.All)\r\n {\r\n this.__UpdateVersion__++;\r\n this.NeedUpdateFlag |= mode;\r\n if (this.AutoUpdate)\r\n this.DeferUpdate();\r\n }\r\n\r\n //三维实体总是一起生成线框实体和网格实体,这个通知更新,然后统一更新就好了\r\n //避免重复更新\r\n UpdateDrawGeometry() { }\r\n\r\n DeferUpdate()\r\n {\r\n let mode = this.NeedUpdateFlag;\r\n if (mode === 0) return;\r\n\r\n if (mode & UpdateDraw.Geometry && this._CacheDrawObject.size > 0)\r\n this.UpdateDrawGeometry();\r\n\r\n this.UpdateVisible();\r\n\r\n let isJigIng = this._CacheDrawObject.has(RenderType.Jig);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (isJigIng && type !== RenderType.Jig)\r\n continue;\r\n\r\n if (mode & UpdateDraw.Geometry)\r\n {\r\n if (obj.userData.IsClone)\r\n {\r\n let parent = obj.parent;\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.delete(type);\r\n let newObj = this.GetDrawObjectFromRenderType(type);\r\n if (parent)\r\n {\r\n parent.remove(obj);\r\n parent.add(newObj);\r\n }\r\n obj = newObj;\r\n }\r\n else\r\n this.UpdateDrawObject(type, obj);\r\n }\r\n\r\n if (mode & UpdateDraw.Material)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n\r\n if (mode & UpdateDraw.Matrix || mode & UpdateDraw.Geometry)\r\n {\r\n obj.updateMatrixWorld(true);\r\n // if (this.Id)//如果这个是Jig实体,那么我们更新这个盒子球似乎也没有意义 (虽然这在某些情况能改进性能,但是在绘制圆弧的时候,因为没有更新圆弧的盒子,导致绘制出来的圆弧无法被选中)\r\n obj.traverse(UpdateBoundingSphere);\r\n }\r\n\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n /**\r\n * 当实体需要更新时,需要重载该方法,实现实体更新\r\n */\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n\r\n }\r\n\r\n protected get MeshMaterial()\r\n {\r\n if (this.materialId && this.materialId.Object)\r\n return (this.materialId.Object).Material as MeshStandardMaterial;\r\n return HostApplicationServices.DefaultMeshMaterial;\r\n }\r\n\r\n /**\r\n * 更新实体Jig状态时的材质\r\n */\r\n UpdateJigMaterial(color = 8)\r\n {\r\n }\r\n RestoreJigMaterial()\r\n {\r\n for (let [type, en] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, en);\r\n }\r\n get Visible()\r\n {\r\n return this._Visible;\r\n }\r\n set Visible(v: boolean)\r\n {\r\n if (v !== this._Visible)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Visible = v;\r\n this.UpdateVisible();\r\n }\r\n }\r\n\r\n private get IsVisible()\r\n {\r\n return !this._isErase && this._Visible;\r\n }\r\n\r\n UpdateVisible()\r\n {\r\n if (this._drawObject)\r\n {\r\n this._drawObject.visible = this.IsVisible;\r\n if (this.IsVisible)\r\n this.UpdateRenderType(userConfig.RenderType);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n GoodBye()\r\n {\r\n super.GoodBye();\r\n if (this._drawObject && this._drawObject.parent)\r\n this._drawObject.parent.remove(this._drawObject);\r\n this.ClearDraw();\r\n }\r\n\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this._isErase)\r\n return;\r\n this.__UpdateVersion__++;\r\n super.Erase(isErase);\r\n this.UpdateVisible();\r\n this.EraseEvent(isErase);\r\n }\r\n\r\n @iaop\r\n EraseEvent(isErase: boolean)\r\n {\r\n\r\n }\r\n /**\r\n * 使用统一的方法设置对象的矩阵.\r\n * 需要对缩放矩形进行重载.避免对象矩阵不是单位矩阵\r\n */\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (equaln(m.getMaxScaleOnAxis(), 1))\r\n {\r\n let xA = new Vector3();\r\n let yA = new Vector3();\r\n let zA = new Vector3();\r\n m.extractBasis(xA, yA, zA);\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n if (!equalv3(xA.clone().cross(yA).normalize(), zA))\r\n this.ApplyMirrorMatrix(m);\r\n else\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n else\r\n {\r\n this.ApplyScaleMatrix(m);\r\n }\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n\r\n }\r\n\r\n /**\r\n *\r\n * @param snapMode 捕捉模式(单一)\r\n * @param pickPoint const\r\n * @param lastPoint const\r\n * @param viewXform const 最近点捕捉需要这个变量\r\n * @returns object snap points\r\n */\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n return [];\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n *\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\r\n * @memberof Entity\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n\r\n }\r\n IntersectWith(curve: Entity, intType: IntersectOption): Vector3[] { return; }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._CurRenderType = this._CurRenderType;\r\n ent.Template = undefined;\r\n ent.CloneDrawObject(this);\r\n return ent;\r\n }\r\n\r\n CloneDrawObject(from: this)\r\n {\r\n for (let [type, obj] of from._CacheDrawObject)\r\n {\r\n let oldUserDaata = obj.userData;\r\n obj.traverse(o => o.userData = {});\r\n let newObj = obj.clone();\r\n obj.userData = oldUserDaata;\r\n obj.userData.IsClone = true;\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n newObj.userData.IsClone = true;\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n static __ReadFileIng__: boolean;\r\n __ReadFileIng__: boolean;\r\n\r\n get ReadFileIng()\r\n {\r\n return this.__ReadFileIng__ || Entity.__ReadFileIng__;\r\n }\r\n\r\n /**\r\n * 从文件读取,序列化自身,如果需要,重载_ReadFile\r\n */\r\n ReadFile(file: CADFiler)\r\n {\r\n this.__ReadFileIng__ = true;\r\n this._ReadFile(file);\r\n this.Update();\r\n this.__ReadFileIng__ = false;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._Color = file.Read();\r\n this.materialId = file.ReadHardObjectId();\r\n this._Matrix.fromArray(file.Read());\r\n\r\n if (ver === 2)\r\n this.Owner = file.ReadObjectId();\r\n\r\n if (ver > 3)\r\n this.Template = file.ReadObjectId();\r\n\r\n if (ver > 4)\r\n this.GroupId = file.ReadHardObjectId();\r\n\r\n if (ver > 5)\r\n this._Visible = file.Read();\r\n if (ver > 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n if (ver > 7)\r\n {\r\n let count = file.Read();\r\n this.ProcessingGroupList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.ProcessingGroupList.push(file.ReadHardObjectId());\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(8);\r\n super.WriteFile(file);\r\n file.Write(this._Color);\r\n file.WriteHardObjectId(this.materialId);\r\n file.Write(this._Matrix.toArray());\r\n file.WriteObjectId(this.Template);\r\n file.WriteHardObjectId(this.GroupId);\r\n file.Write(this._Visible);\r\n file.Write(this._SpaceOCS.toArray());\r\n\r\n file.Write(this.ProcessingGroupList.length);\r\n for (let id of this.ProcessingGroupList)\r\n file.WriteHardObjectId(id);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n\r\n CopyFrom(obj: CADObject)\r\n {\r\n let templateIdBak = this.Template;\r\n super.CopyFrom(obj);\r\n this.Update();\r\n this.Template = templateIdBak;\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { CADFactory } from './CADFactory';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\r\nimport { Entity } from './Entity/Entity';\r\n\r\n/**\r\n * CAD文件数据\r\n */\r\nexport class CADFiler\r\n{\r\n database: Database;\r\n private readIndex: number = 0;\r\n constructor(protected _datas: any[] = [])\r\n {\r\n }\r\n\r\n Destroy()\r\n {\r\n delete this._datas;\r\n delete this.readIndex;\r\n }\r\n\r\n get Data(): any[]\r\n {\r\n return this._datas;\r\n }\r\n\r\n set Data(data: any[])\r\n {\r\n this._datas = data;\r\n this.Reset();\r\n }\r\n\r\n Clear()\r\n {\r\n this._datas.length = 0;\r\n return this.Reset();\r\n }\r\n Reset()\r\n {\r\n this.readIndex = 0;\r\n return this;\r\n }\r\n\r\n WriteString(str: string)\r\n {\r\n this._datas.push(str);\r\n return this;\r\n }\r\n\r\n ReadString(): string\r\n {\r\n return this._datas[this.readIndex++] as string;\r\n }\r\n\r\n WriteObject(obj: ISerialize)\r\n {\r\n if (!obj)\r\n {\r\n this.Write(\"\");\r\n return;\r\n }\r\n this.WriteString(obj.constructor.name);\r\n obj.WriteFile(this);\r\n\r\n return this;\r\n }\r\n\r\n ReadObject(obj?: T): T\r\n {\r\n let className = this.ReadString();\r\n if (className)\r\n {\r\n if (obj === undefined)\r\n {\r\n obj = CADFactory.CreateObject(className);\r\n if (this.database !== undefined && obj instanceof CADObject)\r\n obj.SetDefaultDb(this.database);\r\n }\r\n obj.ReadFile(this);\r\n return obj;\r\n }\r\n }\r\n\r\n CloneObjects(objects: CADObject[], clonedObjects: CADObject[] = [])\r\n {\r\n for (let o of objects)\r\n this.WriteObject(o);\r\n let count = objects.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let obj = this.ReadObject();\r\n if (obj instanceof Entity)\r\n obj.CloneDrawObject(objects[i] as Entity);\r\n clonedObjects.push(obj);\r\n }\r\n\r\n return clonedObjects;\r\n }\r\n\r\n Write(data: any)\r\n {\r\n if (data instanceof ObjectId)\r\n this._datas.push(data.Index);\r\n else\r\n this._datas.push(data);\r\n\r\n return this;\r\n }\r\n\r\n Read(): any\r\n {\r\n return this._datas[this.readIndex++];\r\n }\r\n\r\n ReadArray(count: number): any[]\r\n {\r\n let arr = this._datas.slice(this.readIndex, this.readIndex + count);\r\n this.readIndex += count;\r\n return arr;\r\n }\r\n\r\n //------------------------ID序列化------------------------\r\n /*\r\n Id关联分为三种情况:\r\n 1.普通关联:关联对象未被拷贝时,关联到空对象.\r\n 2.软关联 :关联对象未被拷贝时,关联到原先的对象.\r\n 3.硬关联 :对象被拷贝时,被关联的对象必须也被拷贝.\r\n */\r\n\r\n //-------1.普通关联\r\n WriteObjectId(id: ObjectId): this\r\n {\r\n if (id)\r\n this.Write(id.Index);\r\n else\r\n this.Write(0);\r\n return this;\r\n }\r\n\r\n ReadObjectId(): ObjectId\r\n {\r\n let index = this.Read();\r\n if (this.database)\r\n return this.database.GetObjectId(index, true);\r\n }\r\n\r\n //-------2.软关联\r\n WriteSoftObjectId(id: ObjectId): this\r\n {\r\n return this.WriteObjectId(id);\r\n }\r\n ReadSoftObjectId(): ObjectId\r\n {\r\n return this.ReadObjectId();\r\n }\r\n\r\n //-------3.硬关联\r\n WriteHardObjectId(id: ObjectId): this\r\n {\r\n return this.WriteObjectId(id);\r\n }\r\n ReadHardObjectId()\r\n {\r\n return this.ReadObjectId();\r\n }\r\n\r\n //序列化\r\n ToString()\r\n {\r\n return JSON.stringify(this._datas);\r\n }\r\n FromString(str: string)\r\n {\r\n this._datas = JSON.parse(str);\r\n }\r\n}\r\n","import { ShaderMaterialParameters, Vector3 } from \"three\";\r\n\r\n//https://github.com/arefin86/arefin86.github.io/blob/master/js/shaders/GoochShader.js\r\nexport function GetGoochShader()\r\n{\r\n return {\r\n uniforms: {\r\n \"LightPosition\": { type: \"v3\", value: new Vector3(-200, 0, 200) },\r\n \"SurfaceColor\": { type: \"v3\", value: new Vector3(1.0, 1.0, 0.) },\r\n \"WarmColor\": { type: \"v3\", value: new Vector3(1.0, 0.5, 0.0) },\r\n \"CoolColor\": { type: \"v3\", value: new Vector3(0, 0, 0.7) },\r\n \"DiffuseWarm\": { type: \"f\", value: 0.45 },\r\n \"DiffuseCool\": { type: \"f\", value: 0.1 }\r\n },\r\n\r\n vertexShader: require(\"./Goodch2.vs\"),\r\n fragmentShader: require(\"./Goodch2.fs\")\r\n };\r\n}\r\n\r\nexport function GetGoodShaderSimple(color: Vector3 = new Vector3): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color }\r\n },\r\n vertexShader: require(\"./GoodchSimple.vs\"),\r\n fragmentShader: require(\"./GoodchSimple.fs\"),\r\n\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: 1\r\n };\r\n}\r\n","import { Color, DoubleSide, LineBasicMaterial, LineDashedMaterial, MeshBasicMaterial, ShaderMaterial, Vector3, Vector2 } from 'three';\r\nimport { GetGoodShaderSimple } from '../GLSL/GoochShader';\r\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\r\n\r\nconst ColorPalette = [\r\n [0, 0, 0, 0], //----- 0 - lets make it red for an example\r\n //[255, 255, 255, 255],//----- 0 - ByBlock - White\r\n [255, 0, 0, 255], //----- 1 - Red\r\n // [255, 0, 0, 255], //----- 1 - Red\r\n [255, 255, 0, 255], //----- 2 - Yellow\r\n [0, 255, 0, 255], //----- 3 - Green\r\n [0, 255, 255, 255], //----- 4 - Cyan\r\n [0, 0, 255, 255], //----- 5 - Blue\r\n [255, 0, 255, 255], //----- 6 - Magenta\r\n // [255, 0, 0, 255], //----- 7 - More red Red\r\n // [255, 0, 0, 255], //----- 8 - More red Red\r\n // [255, 0, 0, 255], //----- 9 - More red Red\r\n [255, 255, 255, 255],//----- 7 - White\r\n [128, 128, 128, 255],//----- 8\r\n [192, 192, 192, 255],//----- 9\r\n [255, 0, 0, 255], //----- 10\r\n [255, 127, 127, 255],//----- 11\r\n [165, 0, 0, 255], //----- 12\r\n [165, 82, 82, 255], //----- 13\r\n [127, 0, 0, 255], //----- 14\r\n [127, 63, 63, 255], //----- 15\r\n [76, 0, 0, 255], //----- 16\r\n [76, 38, 38, 255], //----- 17\r\n [38, 0, 0, 255], //----- 18\r\n [38, 19, 19, 255], //----- 19\r\n [255, 63, 0, 255], //----- 20\r\n [255, 159, 127, 255],//----- 21\r\n [165, 41, 0, 255], //----- 22\r\n [165, 103, 82, 255], //----- 23\r\n [127, 31, 0, 255], //----- 24\r\n [127, 79, 63, 255], //----- 25\r\n [76, 19, 0, 255], //----- 26\r\n [76, 47, 38, 255], //----- 27\r\n [38, 9, 0, 255], //----- 28\r\n [38, 23, 19, 255], //----- 29\r\n [255, 127, 0, 255], //----- 30\r\n [255, 191, 127, 255],//----- 31\r\n [165, 82, 0, 255], //----- 32\r\n [165, 124, 82, 255], //----- 33\r\n [127, 63, 0, 255], //----- 34\r\n [127, 95, 63, 255], //----- 35\r\n [76, 38, 0, 255], //----- 36\r\n [76, 57, 38, 255], //----- 37\r\n [38, 19, 0, 255], //----- 38\r\n [38, 28, 19, 255], //----- 39\r\n [255, 191, 0, 255], //----- 40\r\n [255, 223, 127, 255],//----- 41\r\n [165, 124, 0, 255], //----- 42\r\n [165, 145, 82, 255], //----- 43\r\n [127, 95, 0, 255], //----- 44\r\n [127, 111, 63, 255], //----- 45\r\n [76, 57, 0, 255], //----- 46\r\n [76, 66, 38, 255], //----- 47\r\n [38, 28, 0, 255], //----- 48\r\n [38, 33, 19, 255], //----- 49\r\n [255, 255, 0, 255], //----- 50\r\n [255, 255, 127, 255],//----- 51\r\n [165, 165, 0, 255], //----- 52\r\n [165, 165, 82, 255], //----- 53\r\n [127, 127, 0, 255], //----- 54\r\n [127, 127, 63, 255], //----- 55\r\n [76, 76, 0, 255], //----- 56\r\n [76, 76, 38, 255], //----- 57\r\n [38, 38, 0, 255], //----- 58\r\n [38, 38, 19, 255], //----- 59\r\n [191, 255, 0, 255], //----- 60\r\n [223, 255, 127, 255],//----- 61\r\n [124, 165, 0, 255], //----- 62\r\n [145, 165, 82, 255], //----- 63\r\n [95, 127, 0, 255], //----- 64\r\n [111, 127, 63, 255], //----- 65\r\n [57, 76, 0, 255], //----- 66\r\n [66, 76, 38, 255], //----- 67\r\n [28, 38, 0, 255], //----- 68\r\n [33, 38, 19, 255], //----- 69\r\n [127, 255, 0, 255], //----- 70\r\n [191, 255, 127, 255],//----- 71\r\n [82, 165, 0, 255], //----- 72\r\n [124, 165, 82, 255], //----- 73\r\n [63, 127, 0, 255], //----- 74\r\n [95, 127, 63, 255], //----- 75\r\n [38, 76, 0, 255], //----- 76\r\n [57, 76, 38, 255], //----- 77\r\n [19, 38, 0, 255], //----- 78\r\n [28, 38, 19, 255], //----- 79\r\n [63, 255, 0, 255], //----- 80\r\n [159, 255, 127, 255],//----- 81\r\n [41, 165, 0, 255], //----- 82\r\n [103, 165, 82, 255], //----- 83\r\n [31, 127, 0, 255], //----- 84\r\n [79, 127, 63, 255], //----- 85\r\n [19, 76, 0, 255], //----- 86\r\n [47, 76, 38, 255], //----- 87\r\n [9, 38, 0, 255], //----- 88\r\n [23, 38, 19, 255], //----- 89\r\n [0, 255, 0, 255], //----- 90\r\n [127, 255, 127, 255],//----- 91\r\n [0, 165, 0, 255], //----- 92\r\n [82, 165, 82, 255], //----- 93\r\n [0, 127, 0, 255], //----- 94\r\n [63, 127, 63, 255], //----- 95\r\n [0, 76, 0, 255], //----- 96\r\n [38, 76, 38, 255], //----- 97\r\n [0, 38, 0, 255], //----- 98\r\n [19, 38, 19, 255], //----- 99\r\n [0, 255, 63, 255], //----- 100\r\n [127, 255, 159, 255],//----- 101\r\n [0, 165, 41, 255], //----- 102\r\n [82, 165, 103, 255], //----- 103\r\n [0, 127, 31, 255], //----- 104\r\n [63, 127, 79, 255], //----- 105\r\n [0, 76, 19, 255], //----- 106\r\n [38, 76, 47, 255], //----- 107\r\n [0, 38, 9, 255], //----- 108\r\n [19, 38, 23, 255], //----- 109\r\n [0, 255, 127, 255], //----- 110\r\n [127, 255, 191, 255],//----- 111\r\n [0, 165, 82, 255], //----- 112\r\n [82, 165, 124, 255], //----- 113\r\n [0, 127, 63, 255], //----- 114\r\n [63, 127, 95, 255], //----- 115\r\n [0, 76, 38, 255], //----- 116\r\n [38, 76, 57, 255], //----- 117\r\n [0, 38, 19, 255], //----- 118\r\n [19, 38, 28, 255], //----- 119\r\n [0, 255, 191, 255], //----- 120\r\n [127, 255, 223, 255],//----- 121\r\n [0, 165, 124, 255], //----- 122\r\n [82, 165, 145, 255], //----- 123\r\n [0, 127, 95, 255], //----- 124\r\n [63, 127, 111, 255], //----- 125\r\n [0, 76, 57, 255], //----- 126\r\n [38, 76, 66, 255], //----- 127\r\n [0, 38, 28, 255], //----- 128\r\n [19, 38, 33, 255], //----- 129\r\n [0, 255, 255, 255], //----- 130\r\n [127, 255, 255, 255],//----- 131\r\n [0, 165, 165, 255], //----- 132\r\n [82, 165, 165, 255], //----- 133\r\n [0, 127, 127, 255], //----- 134\r\n [63, 127, 127, 255], //----- 135\r\n [0, 76, 76, 255], //----- 136\r\n [38, 76, 76, 255], //----- 137\r\n [0, 38, 38, 255], //----- 138\r\n [19, 38, 38, 255], //----- 139\r\n [0, 191, 255, 255], //----- 140\r\n [127, 223, 255, 255],//----- 141\r\n [0, 124, 165, 255], //----- 142\r\n [82, 145, 165, 255], //----- 143\r\n [0, 95, 127, 255], //----- 144\r\n [63, 111, 127, 255], //----- 145\r\n [0, 57, 76, 255], //----- 146\r\n [38, 66, 76, 255], //----- 147\r\n [0, 28, 38, 255], //----- 148\r\n [19, 33, 38, 255], //----- 149\r\n [0, 127, 255, 255], //----- 150\r\n [127, 191, 255, 255],//----- 151\r\n [0, 82, 165, 255], //----- 152\r\n [82, 124, 165, 255], //----- 153\r\n [0, 63, 127, 255], //----- 154\r\n [63, 95, 127, 255], //----- 155\r\n [0, 38, 76, 255], //----- 156\r\n [38, 57, 76, 255], //----- 157\r\n [0, 19, 38, 255], //----- 158\r\n [19, 28, 38, 255], //----- 159\r\n [0, 63, 255, 255], //----- 160\r\n [127, 159, 255, 255],//----- 161\r\n [0, 41, 165, 255], //----- 162\r\n [82, 103, 165, 255], //----- 163\r\n [0, 31, 127, 255], //----- 164\r\n [63, 79, 127, 255], //----- 165\r\n [0, 19, 76, 255], //----- 166\r\n [38, 47, 76, 255], //----- 167\r\n [0, 9, 38, 255], //----- 168\r\n [19, 23, 38, 255], //----- 169\r\n [0, 0, 255, 255], //----- 170\r\n [127, 127, 255, 255],//----- 171\r\n [0, 0, 165, 255], //----- 172\r\n [82, 82, 165, 255], //----- 173\r\n [0, 0, 127, 255], //----- 174\r\n [63, 63, 127, 255], //----- 175\r\n [0, 0, 76, 255], //----- 176\r\n [38, 38, 76, 255], //----- 177\r\n [0, 0, 38, 255], //----- 178\r\n [19, 19, 38, 255], //----- 179\r\n [63, 0, 255, 255], //----- 180\r\n [159, 127, 255, 255],//----- 181\r\n [41, 0, 165, 255], //----- 182\r\n [103, 82, 165, 255], //----- 183\r\n [31, 0, 127, 255], //----- 184\r\n [79, 63, 127, 255], //----- 185\r\n [19, 0, 76, 255], //----- 186\r\n [47, 38, 76, 255], //----- 187\r\n [9, 0, 38, 255], //----- 188\r\n [23, 19, 38, 255], //----- 189\r\n [127, 0, 255, 255], //----- 190\r\n [191, 127, 255, 255],//----- 191\r\n [82, 0, 165, 255], //----- 192\r\n [124, 82, 165, 255], //----- 193\r\n [63, 0, 127, 255], //----- 194\r\n [95, 63, 127, 255], //----- 195\r\n [38, 0, 76, 255], //----- 196\r\n [57, 38, 76, 255], //----- 197\r\n [19, 0, 38, 255], //----- 198\r\n [28, 19, 38, 255], //----- 199\r\n [191, 0, 255, 255], //----- 200\r\n [223, 127, 255, 255],//----- 201\r\n [124, 0, 165, 255], //----- 202\r\n [145, 82, 165, 255], //----- 203\r\n [95, 0, 127, 255], //----- 204\r\n [111, 63, 127, 255], //----- 205\r\n [57, 0, 76, 255], //----- 206\r\n [66, 38, 76, 255], //----- 207\r\n [28, 0, 38, 255], //----- 208\r\n [33, 19, 38, 255], //----- 209\r\n [255, 0, 255, 255], //----- 210\r\n [255, 127, 255, 255],//----- 211\r\n [165, 0, 165, 255], //----- 212\r\n [165, 82, 165, 255], //----- 213\r\n [127, 0, 127, 255], //----- 214\r\n [127, 63, 127, 255], //----- 215\r\n [76, 0, 76, 255], //----- 216\r\n [76, 38, 76, 255], //----- 217\r\n [38, 0, 38, 255], //----- 218\r\n [38, 19, 38, 255], //----- 219\r\n [255, 0, 191, 255], //----- 220\r\n [255, 127, 223, 255],//----- 221\r\n [165, 0, 124, 255], //----- 222\r\n [165, 82, 145, 255], //----- 223\r\n [127, 0, 95, 255], //----- 224\r\n [127, 63, 111, 255], //----- 225\r\n [76, 0, 57, 255], //----- 226\r\n [76, 38, 66, 255], //----- 227\r\n [38, 0, 28, 255], //----- 228\r\n [38, 19, 33, 255], //----- 229\r\n [255, 0, 127, 255], //----- 230\r\n [255, 127, 191, 255],//----- 231\r\n [165, 0, 82, 255], //----- 232\r\n [165, 82, 124, 255], //----- 233\r\n [127, 0, 63, 255], //----- 234\r\n [127, 63, 95, 255], //----- 235\r\n [76, 0, 38, 255], //----- 236\r\n [76, 38, 57, 255], //----- 237\r\n [38, 0, 19, 255], //----- 238\r\n [38, 19, 28, 255], //----- 239\r\n [255, 0, 63, 255], //----- 240\r\n [255, 127, 159, 255],//----- 241\r\n [165, 0, 41, 255], //----- 242\r\n [165, 82, 103, 255], //----- 243\r\n [127, 0, 31, 255], //----- 244\r\n [127, 63, 79, 255], //----- 245\r\n [76, 0, 19, 255], //----- 246\r\n [76, 38, 47, 255], //----- 247\r\n [38, 0, 9, 255], //----- 248\r\n [38, 19, 23, 255], //----- 249\r\n [84, 84, 84, 255], //----- 250\r\n [118, 118, 118, 255],//----- 251\r\n [152, 152, 152, 255],//----- 252\r\n [186, 186, 186, 255],//----- 253\r\n [220, 220, 220, 255],//----- 254\r\n [255, 255, 255, 255],//----- 255\r\n [0, 0, 0, 0] //----- ByLayer - White\r\n];\r\n\r\nexport const LINE_WIDTH = 2;\r\n\r\n//颜色材质,对于二维图像来说可能有用,应该不对三维对象使用该材质\r\nexport class ColorMaterial\r\n{\r\n private constructor() { }\r\n private static _LineMaterialMap = new Map();\r\n private static _BasicMaterialMap = new Map();\r\n static GetLineMaterial(color: number): LineBasicMaterial\r\n {\r\n if (this._LineMaterialMap.has(color))\r\n return this._LineMaterialMap.get(color);\r\n let mat = new LineBasicMaterial({ color: this.GetColor(color) });\r\n this._LineMaterialMap.set(color, mat);\r\n return mat;\r\n }\r\n\r\n static GetBasicMaterial(color: number): MeshBasicMaterial\r\n {\r\n if (this._BasicMaterialMap.has(color))\r\n return this._BasicMaterialMap.get(color);\r\n let mtl = new MeshBasicMaterial({ color: this.GetColor(color) });\r\n this._BasicMaterialMap.set(color, mtl);\r\n return mtl;\r\n }\r\n\r\n private static _BasicDoubleSideMaterialMap = new Map();\r\n static GetBasicMaterialDoubleSide(color: number): MeshBasicMaterial\r\n {\r\n if (this._BasicDoubleSideMaterialMap.has(color))\r\n return this._BasicDoubleSideMaterialMap.get(color);\r\n let mtl = new MeshBasicMaterial({ color: this.GetColor(color), side: DoubleSide });\r\n this._BasicDoubleSideMaterialMap.set(color, mtl);\r\n return mtl;\r\n }\r\n\r\n private static _ConceptualMaterial: Map = new Map();\r\n static GetConceptualMaterial(color: number)\r\n {\r\n if (this._ConceptualMaterial.has(color))\r\n return this._ConceptualMaterial.get(color);\r\n\r\n let shaderParams = GetGoodShaderSimple(\r\n new Vector3().fromArray(this.GetColor(color).toArray())\r\n );\r\n let mtl = new ShaderMaterial(shaderParams);\r\n this._ConceptualMaterial.set(color, mtl);\r\n return mtl;\r\n }\r\n private static _printConceptualMaterial: ShaderMaterial;\r\n static GetPrintConceptualMaterial()\r\n {\r\n if (!this._printConceptualMaterial)\r\n {\r\n this._printConceptualMaterial = new ShaderMaterial({\r\n uniforms: {\r\n \"SurfaceColor\": { value: [1.0, 1.0, 1.0] }\r\n },\r\n vertexShader: require(\"../GLSL/GoodchSimple.vs\"),\r\n fragmentShader: require(\"../GLSL/GoodchSimple2.fs\"),\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: LINE_WIDTH\r\n });\r\n }\r\n return this._printConceptualMaterial;\r\n }\r\n\r\n private static _BasicTransparentMaterialMap: Map = new Map();\r\n static GetBasicMaterialTransparent(color: number, opacity: number)\r\n {\r\n let key = `${color},${opacity}`;\r\n let mat = this._BasicTransparentMaterialMap.get(key);\r\n if (mat) return mat;\r\n mat = new MeshBasicMaterial({ transparent: true, opacity: opacity, side: DoubleSide });\r\n this._BasicTransparentMaterialMap.set(key, mat);\r\n return mat;\r\n }\r\n\r\n private static _BasicTransparentMaterialMap2: Map = new Map();\r\n static GetBasicMaterialTransparent2(color: number, opacity: number)\r\n {\r\n let key = `${color},${opacity}`;\r\n let mat = this._BasicTransparentMaterialMap2.get(key);\r\n if (mat) return mat;\r\n mat = new MeshBasicMaterial({ transparent: true, opacity: opacity });\r\n this._BasicTransparentMaterialMap2.set(key, mat);\r\n return mat;\r\n }\r\n\r\n static GetColor(color: number)\r\n {\r\n let rgb = ColorPalette[color];\r\n if (rgb)\r\n return new Color(rgb[0] / 255, rgb[1] / 255, rgb[2] / 255);\r\n\r\n //避免无法获得到颜色而产生的错误\r\n return new Color();\r\n }\r\n\r\n //橡皮筋材质: 黄色 点划线\r\n static RubberBandMaterial = new LineDashedMaterial({\r\n color: 0xF0B41E,\r\n dashSize: 20,\r\n gapSize: 8,\r\n });\r\n\r\n //极轴材质: 绿色 点划线\r\n static SnapAxisMaterial = new LineDashedMaterial({\r\n color: 0x008B00,\r\n dashSize: 5,\r\n gapSize: 5\r\n });\r\n static PrintLineMatrial = new LineMaterial({\r\n color: 0x000000,\r\n linewidth: LINE_WIDTH,\r\n dashed: false,\r\n resolution: new Vector2(1000, 1000)\r\n });\r\n static GrayTransparentMeshMaterial = new MeshBasicMaterial({\r\n color: 0xcccccc,\r\n transparent: true,\r\n opacity: 0.3,\r\n });\r\n static TransparentMeshMaterial = new MeshBasicMaterial({\r\n transparent: true,\r\n opacity: 0,\r\n });\r\n static TransparentLineMaterial = new MeshBasicMaterial({\r\n transparent: true,\r\n opacity: 0,\r\n });\r\n}\r\n","/**\r\n * 删除数组中指定的元素,返回数组本身\r\n * @param {Array} arr 需要操作的数组\r\n * @param {*} el 需要移除的元素\r\n */\r\nexport function arrayRemove(arr: Array, el: T): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (arr[i] !== el)\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\n\r\nexport function arrayRemoveOnce(arr: Array, el: T): Array\r\n{\r\n let index = arr.indexOf(el);\r\n if (index !== -1)\r\n arr.splice(index, 1);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 删除通过函数校验的元素\r\n * @param {(e: T) => boolean} checkFuntion 校验函数\r\n */\r\nexport function arrayRemoveIf(arr: Array, checkFuntion: (e: T) => boolean): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (!checkFuntion(arr[i]))\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\nexport function arrayFirst(arr: Array): T\r\n{\r\n return arr[0];\r\n}\r\n\r\nexport function arrayLast(arr: { [key: number]: T, length: number; }): T\r\n{\r\n return arr[arr.length - 1];\r\n}\r\n\r\n/**\r\n * 根据数值从小到大排序数组\r\n * @param {Array} arr\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arraySortByNumber(arr: Array): Array\r\n{\r\n arr.sort(sortNumberCompart);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 对排序好的数组进行去重操作\r\n * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arrayRemoveDuplicateBySort(arr: Array, checkFuction: (e1: T, e2: T) => boolean = checkEqual): Array\r\n{\r\n if (arr.length < 2) return arr;\r\n let j = 1;\r\n for (let i = 1, l = arr.length; i < l; i++)\r\n if (!checkFuction(arr[j - 1], arr[i]))\r\n arr[j++] = arr[i];\r\n arr.length = j;\r\n return arr;\r\n}\r\n\r\n//原地更新数组,注意这个函数并不会比map快.\r\nexport function arrayMap(arr: Array, mapFunc: (v: T) => T): Array\r\n{\r\n for (let i = 0, count = arr.length; i < count; i++)\r\n arr[i] = mapFunc(arr[i]);\r\n return arr;\r\n}\r\n\r\nfunction sortNumberCompart(e1: any, e2: any)\r\n{\r\n return e1 - e2;\r\n}\r\n\r\nfunction checkEqual(e1: any, e2: any): boolean\r\n{\r\n return e1 === e2;\r\n}\r\n\r\n/**\r\n * 改变数组的值顺序\r\n * @param arr 需要改变初始值位置的数组\r\n * @param index //将index位置以后的值放到起始位置\r\n */\r\nexport function changeArrayStartIndex(arr: T[], index: number): T[]\r\n{\r\n arr.unshift(...arr.splice(index));\r\n return arr;\r\n}\r\n\r\nexport function equalArray(a: T[], b: T[], checkF = checkEqual)\r\n{\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (var i = 0; i < a.length; ++i)\r\n if (!checkF(a[i], b[i])) return false;\r\n return true;\r\n}\r\n\r\nexport function arrayClone(arr: T[]): T[]\r\n{\r\n return arr.slice();\r\n}\r\n\r\n//https://jsperf.com/merge-array-implementations/30\r\nexport function arrayPushArray(arr1: T[], arr2: T[]): T[]\r\n{\r\n let arr1Length = arr1.length;\r\n let arr2Length = arr2.length;\r\n arr1.length = arr1Length + arr2Length;\r\n for (let i = 0; i < arr2Length; i++)\r\n arr1[arr1Length + i] = arr2[i];\r\n\r\n return arr1;\r\n}\r\n\r\nexport function arraySum(arr: number[])\r\n{\r\n let sum = 0;\r\n for (let n of arr) sum += n;\r\n return sum;\r\n}\r\n\r\nexport function FilterSet(s: Set, fn: (el: T) => boolean): Set\r\n{\r\n let ns = new Set();\r\n for (let el of s)\r\n {\r\n if (fn(el))\r\n ns.add(el);\r\n }\r\n return ns;\r\n}\r\n","\r\n/**\r\n * OSMODE\r\n */\r\nexport enum ObjectSnapMode\r\n{\r\n None = 0, //无\r\n End = 1, //端点\r\n Mid = 2, //中点\r\n Cen = 4, //圆心\r\n Node = 8,//节点\r\n Qua = 16,//象限点\r\n Int = 32,//交点\r\n Ins = 64,//插入点\r\n Per = 128,//垂足\r\n Tan = 256,//切点\r\n Nea = 512,//最近点\r\n NotEntitySnap = 1024,//清除所有对象捕捉\r\n App = 2048,//外观交点\r\n Ext = 4096,//延伸\r\n Par = 8192,//平行\r\n Axis = 16384,//极轴\r\n All = ~(~0 << 15) - 1024,\r\n}\r\n","import { BufferGeometry, Vector3, BufferAttribute, ShapeGeometry, Shape } from \"three\";\r\n\r\nexport namespace BufferGeometryUtils\r\n{\r\n export function CreateFromPts(pts: Vector3[]): BufferGeometry\r\n {\r\n return new BufferGeometry().setFromPoints(pts);\r\n }\r\n\r\n /**\r\n * 更新BufferGeometry的顶点\r\n * @param geo\r\n * @param pts\r\n * @returns 当成功时返回true,更新失败时返回false\r\n */\r\n export function UpdatePts(geo: BufferGeometry, pts: Vector3[]): boolean\r\n {\r\n let bf = geo.getAttribute(\"position\") as BufferAttribute;\r\n if (bf === undefined)\r\n geo.setFromPoints(pts);\r\n else if (bf.count >= pts.length)\r\n {\r\n bf.copyVector3sArray(pts);\r\n bf.needsUpdate = true;\r\n geo.drawRange.count = pts.length;\r\n }\r\n else\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n let arrowGeometry: ShapeGeometry;\r\n export function ArrowGeometry()\r\n {\r\n if (arrowGeometry)\r\n return arrowGeometry;\r\n else\r\n {\r\n let arrowShape = new Shape();\r\n arrowShape.lineTo(-0.5, -1.8);\r\n arrowShape.lineTo(0.5, -1.8);\r\n arrowGeometry = new ShapeGeometry(arrowShape);\r\n arrowGeometry.computeBoundingBox();\r\n return arrowGeometry;\r\n }\r\n }\r\n\r\n export function MergeBufferGeometries(geometries: BufferGeometry[], useGroups: boolean = false): BufferGeometry\r\n {\r\n if (geometries.length === 0)\r\n return new BufferGeometry();\r\n let isIndexed = geometries[0].index !== null;\r\n\r\n let attributesUsed = new Set(Object.keys(geometries[0].attributes));\r\n let morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes));\r\n\r\n let attributes = {};\r\n let morphAttributes = {};\r\n\r\n let morphTargetsRelative = geometries[0].morphTargetsRelative;\r\n\r\n let mergedGeometry = new BufferGeometry();\r\n\r\n let offset = 0;\r\n\r\n for (let i = 0; i < geometries.length; ++i)\r\n {\r\n\r\n let geometry = geometries[i];\r\n\r\n // ensure that all geometries are indexed, or none\r\n\r\n if (isIndexed !== (geometry.index !== null)) return null;\r\n\r\n // gather attributes, exit early if they're different\r\n\r\n for (let name in geometry.attributes)\r\n {\r\n\r\n if (!attributesUsed.has(name)) continue;\r\n\r\n if (attributes[name] === undefined) attributes[name] = [];\r\n\r\n attributes[name].push(geometry.attributes[name]);\r\n\r\n }\r\n\r\n // gather morph attributes, exit early if they're different\r\n\r\n if (morphTargetsRelative !== geometry.morphTargetsRelative) return null;\r\n\r\n for (let name in geometry.morphAttributes)\r\n {\r\n\r\n if (!morphAttributesUsed.has(name)) continue;\r\n\r\n if (morphAttributes[name] === undefined) morphAttributes[name] = [];\r\n\r\n morphAttributes[name].push(geometry.morphAttributes[name]);\r\n\r\n }\r\n\r\n // gather .userData\r\n\r\n mergedGeometry.userData.mergedUserData = mergedGeometry.userData.mergedUserData || [];\r\n mergedGeometry.userData.mergedUserData.push(geometry.userData);\r\n\r\n if (useGroups)\r\n {\r\n\r\n let count: number;\r\n\r\n if (isIndexed)\r\n {\r\n\r\n count = geometry.index.count;\r\n\r\n } else if (geometry.attributes.position !== undefined)\r\n {\r\n\r\n count = geometry.attributes.position.count;\r\n\r\n } else\r\n {\r\n\r\n return null;\r\n\r\n }\r\n\r\n mergedGeometry.addGroup(offset, count, i);\r\n\r\n offset += count;\r\n\r\n }\r\n\r\n }\r\n\r\n // merge indices\r\n\r\n if (isIndexed)\r\n {\r\n\r\n let indexOffset = 0;\r\n let mergedIndex = [];\r\n\r\n for (let i = 0; i < geometries.length; ++i)\r\n {\r\n\r\n let index = geometries[i].index;\r\n\r\n for (let j = 0; j < index.count; ++j)\r\n {\r\n\r\n mergedIndex.push(index.getX(j) + indexOffset);\r\n\r\n }\r\n\r\n indexOffset += geometries[i].attributes.position.count;\r\n\r\n }\r\n\r\n mergedGeometry.setIndex(mergedIndex);\r\n\r\n }\r\n\r\n // merge attributes\r\n\r\n for (let name in attributes)\r\n {\r\n\r\n let mergedAttribute = MergeBufferAttributes(attributes[name]);\r\n\r\n if (!mergedAttribute) return null;\r\n\r\n mergedGeometry.setAttribute(name, mergedAttribute);\r\n\r\n }\r\n\r\n // merge morph attributes\r\n\r\n for (let name in morphAttributes)\r\n {\r\n\r\n let numMorphTargets = morphAttributes[name][0].length;\r\n\r\n if (numMorphTargets === 0) break;\r\n\r\n mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\r\n mergedGeometry.morphAttributes[name] = [];\r\n\r\n for (let i = 0; i < numMorphTargets; ++i)\r\n {\r\n\r\n let morphAttributesToMerge: any[] = [];\r\n\r\n for (let j = 0; j < morphAttributes[name].length; ++j)\r\n {\r\n\r\n morphAttributesToMerge.push(morphAttributes[name][j][i]);\r\n\r\n }\r\n\r\n let mergedMorphAttribute = MergeBufferAttributes(morphAttributesToMerge);\r\n\r\n if (!mergedMorphAttribute) return null;\r\n\r\n mergedGeometry.morphAttributes[name].push(mergedMorphAttribute);\r\n\r\n }\r\n\r\n }\r\n\r\n return mergedGeometry;\r\n\r\n }\r\n\r\n export function MergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute\r\n {\r\n let TypedArray;\r\n let itemSize: number;\r\n let normalized: boolean;\r\n let arrayLength = 0;\r\n\r\n for (let i = 0; i < attributes.length; ++i)\r\n {\r\n\r\n let attribute = attributes[i];\r\n\r\n if (TypedArray === undefined) TypedArray = attribute.array.constructor;\r\n if (TypedArray !== attribute.array.constructor) return null;\r\n\r\n if (itemSize === undefined) itemSize = attribute.itemSize;\r\n if (itemSize !== attribute.itemSize) return null;\r\n\r\n if (normalized === undefined) normalized = attribute.normalized;\r\n if (normalized !== attribute.normalized) return null;\r\n\r\n arrayLength += attribute.array.length;\r\n\r\n }\r\n\r\n let array = new TypedArray(arrayLength);\r\n let offset = 0;\r\n\r\n for (let i = 0; i < attributes.length; ++i)\r\n {\r\n\r\n array.set(attributes[i].array, offset);\r\n\r\n offset += attributes[i].array.length;\r\n\r\n }\r\n\r\n return new BufferAttribute(array, itemSize, normalized);\r\n\r\n }\r\n\r\n}\r\n","import { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { clamp } from \"../Common/Utils\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\n\r\nexport class Shape2 extends Shape\r\n{\r\n getPoints(divisions: number = 12)\r\n {\r\n divisions = divisions || 12;\r\n let points = [], last: Vector2;\r\n for (let i = 0, curves = this.curves; i < curves.length; i++)\r\n {\r\n let curve = curves[i];\r\n //@ts-ignore\r\n let resolution = (curve && curve.isEllipseCurve) ? clamp(curve.getLength() / 20, divisions * 2, 60)\r\n //@ts-ignore\r\n : (curve && (curve.isLineCurve || curve.isLineCurve3)) ? 1\r\n //@ts-ignore\r\n : (curve && curve.isSplineCurve) ? divisions * curve.points.length\r\n : divisions;\r\n\r\n let pts = curve.getPoints(resolution);\r\n\r\n for (let j = 0; j < pts.length; j++)\r\n {\r\n let point = pts[j];\r\n if (last && equalv2(last, point, 1e-4))\r\n continue; // ensures no consecutive points are duplicates\r\n\r\n points.push(point);\r\n last = point;\r\n\r\n if (j === pts.length - 1)\r\n point[\"_mask_\"] = true;\r\n }\r\n }\r\n if (this.autoClose\r\n && points.length > 1\r\n && !points[points.length - 1].equals(points[0]))\r\n {\r\n points.push(points[0]);\r\n }\r\n return points;\r\n }\r\n\r\n\r\n absellipse(aX: number, aY: number, xRadius: number, yRadius: number, aStartAngle: number, aEndAngle: number, aClockwise: boolean, aRotation: number): this\r\n {\r\n let curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation);\r\n\r\n /*\r\n if (this.curves.length > 0)\r\n {\r\n // if a previous curve is present, attempt to join\r\n let firstPoint = curve.getPoint(0);\r\n if (!equalv2(firstPoint, this.currentPoint))\r\n {\r\n this.lineTo(firstPoint.x, firstPoint.y);\r\n }\r\n }\r\n */\r\n\r\n this.curves.push(curve);\r\n\r\n let lastPoint = curve.getPoint(1);\r\n this.currentPoint.copy(lastPoint);\r\n\r\n return this;\r\n }\r\n}\r\n","import { Vector2, Vector3, Matrix4 } from \"three\";\r\n\r\nexport class Matrix2\r\n{\r\n //column-major\r\n el = [1, 0, 0, 1]; //ix iy jx jy [a c b d]\r\n\r\n set(ix: number, iy: number, jx: number, jy: number)\r\n {\r\n this.el[0] = ix;\r\n this.el[1] = iy;\r\n this.el[2] = jx;\r\n this.el[3] = jy;\r\n }\r\n\r\n applyVector(vec: Vector2 | Vector3)\r\n {\r\n let x = vec.x;\r\n let y = vec.y;\r\n let e = this.el;\r\n vec.x = e[0] * x + e[2] * y;\r\n vec.y = e[1] * x + e[3] * y;\r\n return this;\r\n }\r\n\r\n fromMatrix4(mtx4: Matrix4)\r\n {\r\n this.set(mtx4.elements[0], mtx4.elements[1],\r\n mtx4.elements[3], mtx4.elements[4]\r\n );\r\n }\r\n\r\n setRotate(theta: number): this\r\n {\r\n let c = Math.cos(theta);\r\n let s = Math.sin(theta);\r\n this.set(c, s, -s, c);\r\n return this;\r\n }\r\n\r\n //自我求逆矩阵,返回自身\r\n invert(): this\r\n {\r\n //ref:https://www.mathsisfun.com/algebra/matrix-inverse.html\r\n let [a, c, b, d] = this.el;\r\n let det = 1 / (a * d - b * c);\r\n this.set(d * det, -c * det,\r\n -b * det, a * det\r\n );\r\n return this;\r\n }\r\n}\r\n","import { Matrix2 } from './Matrix2';\r\n\r\nlet r = new Matrix2();\r\nexport function RotateUVs(geo: THREE.Geometry)\r\n{\r\n r.set(0, -1,\r\n 1, 0);\r\n\r\n for (let uvs of geo.faceVertexUvs)\r\n {\r\n for (let uv of uvs)\r\n {\r\n for (let v of uv)\r\n r.applyVector(v);\r\n }\r\n }\r\n geo.uvsNeedUpdate = true;\r\n}\r\n","import { ExtrudeGeometry, Matrix4, Mesh, Shape, Vector2 } from 'three';\r\nimport { Shape2 } from '../../DatabaseServices/Shape2';\r\nimport { AsVector3, equaln, polar } from '../../Geometry/GeUtils';\r\nimport { RotateUVs } from '../../Geometry/RotateUV';\r\n\r\nexport namespace CreateBoardUtil\r\n{\r\n //解析二维圆弧\r\n export class Arc2d\r\n {\r\n _StartAn: number;\r\n _EndAn: number;\r\n _StartPoint: Vector2;\r\n _EndPoint: Vector2;\r\n _Center: Vector2;\r\n _Radius: number;\r\n constructor(p1: Vector2, p2: Vector2, bul: number)\r\n {\r\n this._StartPoint = p1.clone();\r\n this._EndPoint = p2.clone();\r\n\r\n let vec: Vector2 = p2.clone().sub(p1);\r\n let len = vec.length();\r\n let an = vec.angle();\r\n this._Radius = len / Math.sin(2 * Math.atan(bul)) / 2;\r\n let allAngle = Math.atan(bul) * 4;\r\n let delDis = bul * len / 2;\r\n let toDis = this._Radius - delDis;\r\n an += Math.PI * 0.5;\r\n\r\n this._Center = p1.clone().add(p2);\r\n this._Center.multiplyScalar(0.5);\r\n\r\n polar(this._Center, an, toDis);\r\n\r\n this._StartAn = p1.clone().sub(this._Center).angle();\r\n this._EndAn = p2.clone().sub(this._Center).angle();\r\n if (bul < 0)\r\n {\r\n //一个神奇的特性 它需要这么做\r\n this._StartAn -= Math.PI;\r\n this._EndAn -= Math.PI;\r\n }\r\n }\r\n }\r\n\r\n\r\n //创建轮廓 通过点表和凸度\r\n export function CreatePath(pts: Vector2[], buls: number[]): Shape\r\n {\r\n let shape = new Shape2();\r\n if (pts.length === 0) return shape;\r\n let firstPt = pts[0];\r\n\r\n shape.moveTo(firstPt.x, firstPt.y);\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let nextPt = pts[i + 1];\r\n if (equaln(buls[i], 0, 1e-8))\r\n {\r\n shape.lineTo(nextPt.x, nextPt.y);\r\n }\r\n else\r\n {\r\n let pt = pts[i];\r\n //参考\r\n //http://www.dorodnic.com/blog/tag/three-js/ 绘制一个齿轮\r\n //https://www.kirupa.com/html5/drawing_circles_canvas.htm //html5\r\n let arc2 = new Arc2d(pt, nextPt, buls[i]);\r\n let cen = arc2._Center;\r\n shape.absarc(cen.x, cen.y, arc2._Radius, arc2._StartAn, arc2._EndAn, buls[i] < 0);\r\n }\r\n }\r\n return shape;\r\n }\r\n\r\n //创建板件 暂时这么写\r\n export function createBoard(boardData: object)\r\n {\r\n var pts: Vector2[] = new Array();\r\n var buls: number[] = new Array();\r\n var boardPts = boardData[\"Pts\"];\r\n var boardBuls = boardData[\"Buls\"];\r\n\r\n let boardHeight = boardData[\"H\"];\r\n\r\n var boardMat = new Matrix4();\r\n var matInv: Matrix4 = new Matrix4();\r\n //InitBoardMat\r\n {\r\n\r\n var xD = AsVector3(boardData[\"XVec\"]);\r\n var yD = AsVector3(boardData[\"YVec\"]);\r\n var ZD = AsVector3(boardData[\"ZVec\"]);\r\n var pBase = AsVector3(boardData[\"BasePoint\"]).multiplyScalar(0.001);\r\n\r\n boardMat.makeBasis(xD, yD, ZD);\r\n boardMat.setPosition(pBase);\r\n matInv.getInverse(boardMat);\r\n }\r\n\r\n for (let i = 0; i < boardPts.length; i++)\r\n {\r\n var pt = AsVector3(boardPts[i]).multiplyScalar(0.001);\r\n pt.applyMatrix4(matInv);\r\n pts.push(new Vector2(pt.x, pt.y));\r\n buls.push(boardBuls[i]);\r\n }\r\n\r\n var sp = CreatePath(pts, buls);\r\n var extrudeSettings = {\r\n steps: 1,\r\n bevelEnabled: false,\r\n amount: boardHeight * 0.001\r\n };\r\n\r\n var ext = new ExtrudeGeometry(sp, extrudeSettings);\r\n ext.translate(0, 0, -boardHeight * 0.001);\r\n ext.applyMatrix4(boardMat);\r\n\r\n if (boardData[\"BoardName\"] === \"地脚线\")\r\n {\r\n RotateUVs(ext);\r\n }\r\n\r\n var mesh = new Mesh(ext);\r\n return mesh;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { angle, clampRad, equalv3 } from \"./GeUtils\";\r\n\r\n//顶点\r\nexport interface Vertice\r\n{\r\n //位置\r\n position: Vector3;\r\n //路径\r\n routes: Route[];\r\n}\r\n\r\n//路线\r\nexport interface Route\r\n{\r\n curve: Curve; //路线的曲线\r\n from: Vertice;\r\n to: Vertice; //终点的点\r\n length: number;\r\n isReverse: boolean;\r\n an?: number; //角度\r\n\r\n s: Vector3;\r\n e: Vector3;\r\n}\r\n\r\n/**\r\n * 曲线连接图\r\n * 所有的顶点和边的关系\r\n */\r\nexport class CurveMap\r\n{\r\n constructor(\r\n public numdimensions = 4,\r\n public _RemoveSortLine = false,\r\n private multiplier = 10 ** numdimensions,\r\n ) { }\r\n\r\n /*\r\n 节点图.\r\n 每个节点对应下一个路口的路线表.\r\n 路口表使用逆时针排序,起始角度使用正x轴.\r\n */\r\n _VerticeMap = new Map();\r\n\r\n _Vertices: Vertice[] = [];\r\n\r\n /**\r\n * 得到节点图的所有站点列表\r\n */\r\n get Stands(): Vertice[]\r\n {\r\n return this._Vertices;\r\n }\r\n\r\n /**\r\n * @param curve\r\n * @param [isArc=curve instanceof Arc]\r\n * @param [removeDuplicate=false]\r\n * @returns 加入成功?\r\n */\r\n AddCurveToMap(curve: Curve, isArc: boolean = curve instanceof Arc, removeDuplicate: boolean = false, parseAngle = false): boolean\r\n {\r\n let sp = curve.StartPoint;\r\n let ep = curve.EndPoint;\r\n let startS = this.GetOnlyVertice(sp);\r\n let endS = this.GetOnlyVertice(ep);\r\n\r\n //在面域分析中,路线指向同一个顶点已经没有意义了\r\n if (this._RemoveSortLine && startS === endS)\r\n return false;\r\n\r\n if (removeDuplicate)//删除重复\r\n {\r\n let index = startS.routes.findIndex(r =>\r\n {\r\n if (r.to === endS && r.curve.constructor.name === curve.constructor.name)\r\n {\r\n if (isArc)\r\n return equalv3(curve.GetPointAtParam(0.5), r.curve.GetPointAtParam(0.5));\r\n return true;\r\n }\r\n });\r\n if (index !== -1) return false;\r\n }\r\n\r\n let length = curve.Length;\r\n curve.TempData = 0;\r\n\r\n let routeS2E: Route = { curve, isReverse: false, length, from: startS, to: endS, s: sp, e: ep };\r\n let routeE2S: Route = { curve, isReverse: true, length, from: endS, to: startS, e: sp, s: ep };\r\n\r\n if (!isArc && parseAngle)\r\n {\r\n let an = angle(endS.position.clone().sub(startS.position));\r\n routeS2E.an = an;\r\n routeE2S.an = clampRad(an + Math.PI);\r\n }\r\n startS.routes.push(routeS2E);\r\n endS.routes.push(routeE2S);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * 获得唯一的顶点\r\n */\r\n GetOnlyVertice(p: Vector3): Vertice\r\n {\r\n let gp = this.GenerateP(p);\r\n if (this._VerticeMap.has(gp))\r\n return this._VerticeMap.get(gp);\r\n\r\n let vertice: Vertice = { position: gp, routes: [] };\r\n this._VerticeMap.set(p, vertice);\r\n this._Vertices.push(vertice);\r\n return vertice;\r\n }\r\n\r\n _LookupTable: { [key: string]: Vector3; } = {};\r\n\r\n /**\r\n * 生成一个唯一的向量.\r\n */\r\n GenerateP(p: Vector3): Vector3\r\n {\r\n let key = \"\";\r\n let els = p.toArray();\r\n for (let n of els)\r\n {\r\n let valueQuantized = Math.round(n * this.multiplier);\r\n key += valueQuantized + '/';\r\n }\r\n\r\n if (key in this._LookupTable)\r\n return this._LookupTable[key];\r\n\r\n let hashparts = els.map((el) =>\r\n {\r\n let q0 = Math.floor(el * this.multiplier);\r\n let q1 = q0 + 1;\r\n return ['' + q0 + '/', '' + q1 + '/'];\r\n });\r\n\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n key = '';\r\n hashparts.forEach(function (hashpart)\r\n {\r\n key += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this._LookupTable[key] = p;\r\n }\r\n return p;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveIf, arrayRemoveOnce } from \"../Common/ArrayExt\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { CurveMap, Route, Vertice } from \"./CurveMap\";\r\nimport { angle } from \"./GeUtils\";\r\n\r\n//区域的路线表 表示了一个区域\r\ntype RegionRouteS = Route[][];\r\n\r\n/**\r\n面域分析,基于最小循环图重新实现的版本,拓展了实现求最大轮廓。\r\n当最大轮廓=最小轮廓时,只绘制最大轮廓(独立轮廓无分裂)。\r\n\r\n算法只实现去重模式,业务场景应该没有非去重模式。\r\n如果需要非去重模式,那么应该获取到多个CurveMap,然后对多个CurveMap进行面域分析,得出多个重叠的面域。\r\n */\r\nexport class RegionParse\r\n{\r\n //区域列表 通常是外轮廓\r\n RegionsOutline: RegionRouteS = [];\r\n //区域列表 通常是内轮廓\r\n RegionsInternal: RegionRouteS = [];\r\n\r\n //碎线 曲线进入到这里会被炸开.\r\n ExpLineMap: Map = new Map();\r\n\r\n private _CurveCount: number;\r\n\r\n /**\r\n * @param cuList 请不要传递圆和椭圆.\r\n * @param [numDimensions=3] 精度:小数点后个数\r\n * @param [removeDuplicate=true] 删除重复(现在必须是true,请不要修改它)\r\n */\r\n constructor(cuList: Curve[], public numDimensions = 3, private removeDuplicate = true)\r\n {\r\n //需要搜索的站\r\n let vertices = this.GenerateVerticeMap(cuList);\r\n\r\n //移除细丝\r\n while (true)\r\n {\r\n let v = vertices.find(v => v.routes.length < 2);\r\n if (v) this.RemoveFilamentAt(v, vertices);\r\n else break;\r\n }\r\n let lowerVertice: Vertice;\r\n while (vertices.length > 0)\r\n {\r\n lowerVertice = lowerVertice?.routes.length > 1 ? lowerVertice : this.FindLowerLeftStand(vertices);\r\n let minWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Min);\r\n let maxWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Max);\r\n\r\n this.RemoveEdge(minWalk[0]);\r\n this.RemoveFilamentAt(minWalk[0].from, vertices);\r\n this.RemoveFilamentAt(minWalk[0].to, vertices);\r\n\r\n minWalk = ReduceWalk(minWalk);\r\n maxWalk = ReduceWalk(maxWalk);\r\n if (maxWalk.length > 1)\r\n {\r\n this.RegionsOutline.push(maxWalk);\r\n if (minWalk.length === maxWalk.length && minWalk.every((w1, index) => w1 === maxWalk[index]))//大小重叠\r\n {\r\n //直接remove,不用计算引用个数\r\n for (let w of minWalk)\r\n {\r\n this.RemoveEdge(w);\r\n this.RemoveFilamentAt(w.from, vertices);\r\n this.RemoveFilamentAt(w.to, vertices);\r\n }\r\n continue;//继续循环\r\n }\r\n else\r\n for (let w of maxWalk)\r\n w.curve.TempData = 1;\r\n }\r\n\r\n if (minWalk.length > 1)// && minWalk.every(w => (w.curve.TempData) < 2) 没有重复线应该不会被用2次\r\n {\r\n this.RegionsInternal.push(minWalk);\r\n for (let w of minWalk)\r\n {\r\n w.curve.TempData++;\r\n if (w.curve.TempData === 2)\r\n {\r\n this.RemoveEdge(w);\r\n this.RemoveFilamentAt(w.from, vertices);\r\n this.RemoveFilamentAt(w.to, vertices);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n RemoveFilamentAt(v: Vertice, vertices: Vertice[])\r\n {\r\n let current = v;\r\n while (current && current.routes.length < 2)\r\n {\r\n vertices = arrayRemoveOnce(vertices, current);\r\n let r = current.routes[0];\r\n if (r)\r\n {\r\n this.RemoveEdge(r);\r\n current = r.to;\r\n }\r\n else\r\n current = undefined;\r\n }\r\n }\r\n\r\n RemoveEdge(r: Route)\r\n {\r\n let index = r.from.routes.findIndex(rr => rr.curve === r.curve);\r\n if (index !== -1)\r\n r.from.routes.splice(index, 1);\r\n\r\n index = r.to.routes.findIndex(rr => rr.curve === r.curve);\r\n if (index !== -1)\r\n r.to.routes.splice(index, 1);\r\n }\r\n\r\n /**\r\n * 找到最下方并且最左边的站 yx\r\n */\r\n private FindLowerLeftStand(vertices: Vertice[]): Vertice\r\n {\r\n return vertices.reduce((m, v) =>\r\n {\r\n let dy = v.position.y - m.position.y;\r\n if (dy < 0) return v;\r\n if (dy > 0) return m;\r\n return v.position.x - m.position.x < 0 ? v : m;\r\n });\r\n }\r\n\r\n /**\r\n * 构造路线图. 每个节点对应下一个路口的路线表. 路口表使用逆时针排序,起始角度使用正x轴.\r\n * @returns 所有的顶点\r\n */\r\n private GenerateVerticeMap(curveList: Curve[]): Array\r\n {\r\n let curveMap = new CurveMap(this.numDimensions, true);\r\n\r\n //将多段线炸开\r\n let plcus: Curve[] = [];\r\n arrayRemoveIf(curveList, c =>\r\n {\r\n if (c instanceof Polyline)\r\n {\r\n let cus = c.Explode();\r\n\r\n //如果为圆弧,提前打断\r\n let arcs: Arc[] = [];\r\n arrayRemoveIf(cus, c =>\r\n {\r\n if (c.Length < 1e-5) return true;\r\n\r\n if (c instanceof Arc)\r\n {\r\n let arcBrs = this.BreakArc(c);\r\n for (let arc of arcBrs)\r\n arcs.push(arc);\r\n }\r\n\r\n return false;\r\n });\r\n //加入到计算\r\n cus.push(...arcs);\r\n\r\n this.ExpLineMap.set(c, cus);\r\n plcus.push(...cus);\r\n return true;\r\n }\r\n return false;\r\n });\r\n curveList.push(...plcus);\r\n\r\n this._CurveCount = curveList.length;\r\n\r\n for (let cu of curveList)\r\n {\r\n //由于圆弧可能导致最低点计算错误的问题.\r\n if (cu instanceof Arc)\r\n {\r\n let arcs = this.BreakArc(cu);\r\n if (arcs.length > 1)\r\n {\r\n arcs.forEach(a => curveMap.AddCurveToMap(a, true, this.removeDuplicate, true));\r\n this.ExpLineMap.set(cu, arcs);\r\n continue;\r\n }\r\n else\r\n curveMap.AddCurveToMap(cu, true, this.removeDuplicate, true);\r\n }\r\n else\r\n curveMap.AddCurveToMap(cu, false, this.removeDuplicate, true);\r\n }\r\n\r\n //排序,根据角度逆时针排序.\r\n for (let v of curveMap._Vertices)\r\n {\r\n let minLength = Infinity;\r\n for (let r of v.routes)\r\n if (r.length < minLength) minLength = r.length;\r\n for (let r of v.routes)\r\n CalcRouteAngle(r, minLength * 0.2);\r\n v.routes.sort((r1, r2) => r1.an - r2.an);\r\n }\r\n return curveMap.Stands;\r\n }\r\n\r\n private BreakArc(arc: Arc): Arc[]\r\n {\r\n let underPt = arc.Center.add(new Vector3(0, -arc.Radius));\r\n let param = arc.GetParamAtPoint(underPt);\r\n if (param > 0.01 && param < 0.99)\r\n return arc.GetSplitCurves(param);\r\n else\r\n return [arc];\r\n }\r\n\r\n /**\r\n * 曲线是否已经被算法使用\r\n */\r\n GetCueveUsed(cu: Curve): boolean\r\n {\r\n if (this.ExpLineMap.has(cu))\r\n {\r\n let use = this.ExpLineMap.get(cu).some(c => c.TempData > 0);\r\n if (!use)\r\n this.ExpLineMap.delete(cu);\r\n return use;\r\n }\r\n else\r\n return cu.TempData > 0;\r\n }\r\n}\r\n\r\nfunction CalcRouteAngle(r: Route, length: number)\r\n{\r\n if (r.an !== undefined) return;\r\n let cu = r.curve;\r\n let p = r.isReverse ?\r\n cu.GetPointAtParam(cu.GetParamAtDist(r.length - length))\r\n : cu.GetPointAtParam(cu.GetParamAtDist(length));\r\n r.an = angle(p.sub(r.from.position));\r\n}\r\n\r\nenum WalkType\r\n{\r\n Min = 1,\r\n Max = -1,\r\n}\r\n\r\nfunction ClosedWalkFrom(startVertice: Vertice, maxRoute: number, type = WalkType.Min): Route[]\r\n{\r\n let walk: Route[] = [];\r\n let curVertice: Vertice = startVertice;\r\n let preRoute: Route;\r\n // console.log(\"start\", type, startVertice.position.toArray());\r\n do\r\n {\r\n let route = GetNextRoute(curVertice, preRoute, type);\r\n if (type === WalkType.Max && route.curve.TempData > 0)\r\n return [];\r\n // console.log(route.to.position.toArray());\r\n walk.push(route);\r\n [curVertice, preRoute] = [route.to, route];\r\n if (walk.length > maxRoute * 2)\r\n throw \"超过计算次数限制\";\r\n }\r\n while (curVertice !== startVertice);\r\n\r\n return walk;\r\n}\r\n\r\n/**\r\n * 删除中途回路\r\n */\r\nfunction ReduceWalk(w: Route[]): Route[]\r\n{\r\n if (w.length === 0) return w;\r\n //未构成回路,直接回家\r\n if (w[0].curve === arrayLast(w).curve) return [];\r\n\r\n for (let i = 0; i < w.length; i++)\r\n {\r\n let r1 = w[i];\r\n for (let j = w.length; j--;)\r\n {\r\n if (i === j) break;\r\n let r2 = w[j];\r\n if (r1.to === r2.to)\r\n {\r\n if (j > i)\r\n w.splice(i + 1, j - i);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return w;\r\n}\r\n\r\nfunction GetNextRoute(v: Vertice, prev?: Route, type: WalkType = WalkType.Min): Route\r\n{\r\n if (!prev)\r\n return arrayLast(v.routes); //顺时针 cw \\|/ 从左往右\r\n\r\n //逆时针 ccw 往左\r\n let index = v.routes.findIndex(r => r.curve === prev.curve);\r\n let newIndex = FixIndex(index + 1 * type, v.routes);\r\n return v.routes[newIndex];\r\n}\r\n","import { Vector3 } from 'three';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { IntersectOption } from './IntersectWith';\r\n\r\nexport enum BoolOpeartionType\r\n{\r\n Intersection = 0,\r\n Union = 1,\r\n Subtract = 2\r\n}\r\n\r\nconst fuzz = 1e-3;\r\nlet fuzzV3 = new Vector3(fuzz, fuzz, fuzz);\r\n\r\n//判断曲线是否在源封闭曲线内\r\nexport function isTargetCurInOrOnSourceCur(sourceCur: Polyline | Circle | Ellipse, targetCur: Curve)\r\n{\r\n if (!sourceCur.BoundingBox.expandByVector(fuzzV3).containsBox(targetCur.BoundingBox))\r\n return false;\r\n\r\n let cus: Curve[] = [];\r\n if (targetCur instanceof Polyline)\r\n cus = targetCur.Explode();\r\n else\r\n cus = [targetCur];\r\n\r\n return cus.every(c =>\r\n {\r\n let pts = getIntPtContextPts(sourceCur, c);\r\n if (pts.length <= 1)\r\n pts.push(c.StartPoint, c.EndPoint);\r\n return IsPtsAllInOrOnReg(sourceCur, pts);\r\n });\r\n}\r\n\r\n//获取交点处上下距0.01par的点\r\nfunction getIntPtContextPts(sourceCur: Curve, cu: Curve, pts: Vector3[] = [])\r\n{\r\n let interPts = cu.IntersectWith(sourceCur, IntersectOption.OnBothOperands);\r\n if (interPts.length > 0)\r\n {\r\n let pars = interPts.map(pt => cu.GetParamAtPoint(pt));\r\n for (let par of pars)\r\n {\r\n if (par >= 0.02)\r\n pts.push(cu.GetPointAtParam(par - 0.01));\r\n\r\n if (par <= (cu.EndParam - 0.02))\r\n pts.push(cu.GetPointAtParam(par + 0.01));\r\n }\r\n }\r\n return pts;\r\n}\r\n//判断点点是否全部都在封闭区域内或者在曲线上\r\nfunction IsPtsAllInOrOnReg(sourceReg: Polyline | Circle | Ellipse, pts: Vector3[])\r\n{\r\n return pts.every(pt =>\r\n {\r\n //是否点在封闭曲线内\r\n return sourceReg.PtOnCurve(pt) || sourceReg.PtInCurve(pt);\r\n });\r\n}\r\n\r\n//判断点是否全部都在封闭区域外或者在曲线上\r\nexport function IsPtsAllOutOrOnReg(sourceReg: Polyline | Circle, pts: Vector3[])\r\n{\r\n return pts.every(pt =>\r\n {\r\n //是否点在封闭曲线内\r\n return sourceReg.PtOnCurve(pt) || !sourceReg.PtInCurve(pt);\r\n });\r\n}\r\n","import { Line, Material, Object3D, Shape, Vector3 } from 'three';\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { Status } from '../../Common/Status';\r\nimport { equaln, equalv3 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectResult } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Entity } from './Entity';\r\n\r\nexport enum ExtendType\r\n{\r\n /**\r\n * 前后都不延伸\r\n */\r\n None = 0,\r\n /**\r\n * 只允许延伸前面\r\n */\r\n Front = 1,\r\n /**\r\n * 只允许延伸后面\r\n */\r\n Back = 2,\r\n /**\r\n * 前后延伸\r\n */\r\n Both = 3,\r\n}\r\n\r\n/**\r\n * 曲线的基类,子类请实现以下方法.\r\n */\r\n@Factory\r\nexport abstract class Curve extends Entity\r\n{\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Is2D()\r\n {\r\n return equaln(this._Matrix.elements[14], 0);\r\n }\r\n\r\n get StartPoint(): Vector3 { return; }\r\n set StartPoint(v: Vector3) { return; }\r\n get StartParam(): number { return; }\r\n get EndPoint(): Vector3 { return; }\r\n set EndPoint(v: Vector3) { return; }\r\n\r\n /** 曲线中点 */\r\n get Midpoint()\r\n {\r\n return this.GetPointAtParam(this.MidParam);\r\n }\r\n\r\n get MidParam()\r\n {\r\n if (this.EndParam === 1)\r\n return 0.5;\r\n else\r\n return this.GetParamAtDist(this.Length * 0.5);\r\n }\r\n\r\n get EndParam(): number { return; }\r\n get Area(): number { return 0; }\r\n /**\r\n *获得曲线的面积,逆时针为正,顺时针为负.\r\n */\r\n get Area2(): number { return 0; }\r\n get Length(): number { return 0; }\r\n get IsClose(): boolean { return false; }\r\n /** 曲线为顺时针 */\r\n get IsClockWise(): boolean { return this.Area2 < 0; }\r\n\r\n abstract get Shape(): Shape;\r\n\r\n GetPointAtParam(param: number): Vector3 { return; }\r\n GetPointAtDistance(distance: number): Vector3 { return; }\r\n GetDistAtParam(param: number): number { return; }\r\n GetDistAtPoint(pt: Vector3): number { return; }\r\n GetParamAtPoint(pt: Vector3): number { return; }\r\n GetParamAtPoint2(pt: Vector3): number { return this.GetParamAtPoint(pt); }\r\n\r\n GetParamAtDist(d: number): number { return; }\r\n\r\n /**\r\n * 返回曲线在指定位置的一阶导数(在wcs内)\r\n *\r\n * @param {(number | Vector3)} param\r\n * @returns {Vector3}\r\n * @memberof Curve\r\n */\r\n GetFistDeriv(param: number | Vector3): Vector3 { return; }\r\n GetFistDerivAngle(param: number | Vector3): number\r\n {\r\n let d = this.GetFistDeriv(param);\r\n return Math.atan2(d.y, d.x);\r\n }\r\n\r\n /**\r\n * 返回切割曲线后的结果.总是从起点开始切割,并且按顺序返回曲线.\r\n * @param {(number[] | number)} param\r\n * @returns {Array}\r\n */\r\n GetSplitCurves(param: number[] | number): Array { return; }\r\n //未完善\r\n GetCurveAtParamRange(startParam: number, EndParam: number): Array { return; }\r\n GetSplitCurvesByPts(pt: Vector3[] | Vector3): Array\r\n {\r\n let pts = Array.isArray(pt) ? pt : [pt];\r\n let pars = pts.map(p => this.GetParamAtPoint(p));\r\n return this.GetSplitCurves(pars);\r\n }\r\n protected SplitParamSort(param: number[] | number): number[]\r\n {\r\n if (Array.isArray(param))\r\n {\r\n param = param.filter(p => this.ParamOnCurve(p));\r\n if (param.length === 0)\r\n return [];\r\n param.push(0, this.EndParam);\r\n arraySortByNumber(param);\r\n arrayRemoveDuplicateBySort(param, (e1, e2) => equaln(e1, e2, 1e-7));\r\n return param;\r\n }\r\n else if (this.ParamOnCurve(param))\r\n return [0, param, this.EndParam];\r\n else\r\n return [];\r\n }\r\n Extend(newParam: number) { }\r\n /**\r\n * 连接曲线到本曲线,如果成功返回true\r\n * @param {Curve} cu 需要连接的曲线\r\n * @returns {boolean} 连接成功\r\n * @memberof Curve\r\n */\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-4): Status { return Status.False; }\r\n\r\n //翻转曲线.首尾调换.\r\n Reverse(): this { return this; }\r\n\r\n //点在曲线上\r\n PtOnCurve(pt: Vector3, fuzz = 1e-6): boolean\r\n {\r\n return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt));\r\n }\r\n\r\n //点在曲线中,不在起点或者终点.\r\n PtOnCurve2(pt: Vector3): boolean\r\n {\r\n return !(equalv3(this.StartPoint, pt, 1e-6) || equalv3(this.EndPoint, pt, 1e-6)) && this.ParamOnCurve(this.GetParamAtPoint(pt), 0);\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n return this.PtOnCurve(p, fuzz);\r\n }\r\n\r\n //参数在曲线上 容差,1e-6\r\n ParamOnCurve(param: number, fuzz = 1e-6): boolean { return !isNaN(param) && param >= -fuzz && param <= this.EndParam + fuzz; }\r\n GetOffsetCurves(offsetDist: number): Array { return; }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3 { return; }\r\n\r\n /**\r\n * 曲线相交点\r\n */\r\n IntersectWith(curve: Curve, intType: IntersectOption, tolerance = 1e-6): Vector3[]\r\n {\r\n return this.IntersectWith2(curve, intType, tolerance).map(r => r.pt);\r\n }\r\n\r\n /**\r\n * 曲线相交点和点的参数\r\n */\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-6): IntersectResult[] { return []; }\r\n\r\n\r\n /**\r\n * 拽托点个数\r\n */\r\n GetDragPointCount(drag: DragPointType): number { return 0; }\r\n\r\n //------------------绘制相关------------------\r\n //重载\r\n protected OnlyRenderType = true;\r\n\r\n /**\r\n * 重载:更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (type === RenderType.WireframePrint)\r\n {\r\n //打印模式暂时不需要改颜色\r\n }\r\n else\r\n {\r\n let m = obj as Line;\r\n m.material = material || ColorMaterial.GetLineMaterial(this._Color);\r\n }\r\n }\r\n\r\n UpdateJigMaterial(color = 8)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n this.UpdateDrawObjectMaterial(type, obj, ColorMaterial.GetLineMaterial(color));\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { curveLinkGroup, equalCurve } from \"../Common/CurveUtils\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { IntersectBox2 } from \"../Geometry/Box\";\r\nimport { Route } from \"../Geometry/CurveMap\";\r\nimport { equaln, equalv3 } from \"../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../Geometry/RegionParse\";\r\nimport { isTargetCurInOrOnSourceCur } from \"../GraphicsSystem/BoolOperateUtils\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\nimport { Arc } from \"./Entity/Arc\";\r\nimport { Circle } from \"./Entity/Circle\";\r\nimport { Curve } from \"./Entity/Curve\";\r\nimport { Polyline } from \"./Entity/Polyline\";\r\n\r\nlet cache = new WeakMap();\r\n\r\nconst COMBINE_FUZZ = 1e-2;\r\n\r\nexport class Contour\r\n{\r\n private _Curve: Polyline | Circle;\r\n\r\n protected SetCurve(cu: Polyline | Circle)\r\n {\r\n if (cu instanceof Polyline)\r\n {\r\n if (cu.Area2 < 0)\r\n cu.Reverse();\r\n }\r\n this._Curve = cu;\r\n }\r\n /**会将传入的闭合轮廓改为逆时针 */\r\n static CreateContour(cus: Curve[] | Polyline | Circle, needLink = true)\r\n {\r\n if (cus instanceof Curve)\r\n {\r\n if (cus.IsClose)\r\n {\r\n let c = new Contour();\r\n c.SetCurve(cus);\r\n return c;\r\n }\r\n return;\r\n }\r\n\r\n let closeCurve = Contour.Combine(cus, needLink, COMBINE_FUZZ) as Polyline | Circle;\r\n if (closeCurve && closeCurve.IsClose)\r\n {\r\n if (closeCurve instanceof Polyline && closeCurve.CloseMark === false)\r\n {\r\n closeCurve.CloseMark = true;\r\n closeCurve.RemoveVertexAt(closeCurve.NumberOfVertices - 1);\r\n }\r\n\r\n let c = new Contour();\r\n c.SetCurve(closeCurve);\r\n return c;\r\n }\r\n }\r\n get Curve(): Polyline | Circle\r\n {\r\n return this._Curve;\r\n }\r\n get Area()\r\n {\r\n return this._Curve.Area;\r\n }\r\n get BoundingBox()\r\n {\r\n return this._Curve.BoundingBox;\r\n }\r\n /**\r\n * 不等比例缩放\r\n * @param {number} ref 缩放参考值,大于该值的点缩放\r\n * @param {number} dist 缩放距离\r\n * @param {string} dir x y z\r\n */\r\n UnEqualProportionScale(ref: number, dist: number, dir: \"x\" | \"y\")\r\n {\r\n let cu = this._Curve;\r\n if (cu instanceof Polyline)\r\n {\r\n let lineData = cu.LineData;\r\n let length = lineData.length;\r\n let p = cu.Position[dir];\r\n\r\n let moveIndexs: number[] = [];\r\n for (let i = 0; i < length; i++)\r\n {\r\n if (lineData[i].pt[dir] + p > ref)\r\n moveIndexs.push(i);\r\n }\r\n let moveVec = new Vector3();\r\n moveVec[dir] = dist;\r\n cu.MoveStretchPoints(moveIndexs, moveVec);\r\n return true;\r\n }\r\n return false;\r\n }\r\n Clone()\r\n {\r\n return Contour.CreateContour([this._Curve.Clone()]);\r\n }\r\n //交集:结果数组为空则失败\r\n IntersectionBoolOperation(target: Contour): Contour[]\r\n {\r\n if (!IntersectBox2(this.BoundingBox, target.BoundingBox))\r\n return [];\r\n let resultCus = this.GetIntersetAndUnionList(target);\r\n return Contour.GetAllContour(resultCus.intersectionList);\r\n }\r\n //并集:结果轮廓数组长度大于2,则失败.等于1则成功.\r\n UnionBoolOperation(target: Contour): { contours: Contour[], holes: Contour[]; }\r\n {\r\n let resultCus = this.GetIntersetAndUnionList(target);\r\n\r\n //快速\r\n if (resultCus.unionList.every(c => c.IsClose))\r\n return {\r\n contours: Contour.GetAllContour(resultCus.unionList),\r\n holes: [],\r\n };\r\n\r\n //并集后的线段表如果有共线的直接合并起来\r\n let cus: Curve[] = [];\r\n for (let pl of resultCus.unionList)\r\n {\r\n if (pl instanceof Polyline)\r\n cus.push(...pl.Explode());\r\n else\r\n cus.push(pl);\r\n }\r\n let cuGroups = curveLinkGroup(cus);\r\n for (let g of cuGroups)\r\n {\r\n for (let i = 0; i < g.length; i++)\r\n {\r\n let c1 = g[i];\r\n let nextI = FixIndex(i + 1, g);\r\n let c2 = g[nextI];\r\n\r\n let status = c1.Join(c2);\r\n if (status === Status.True)\r\n {\r\n g.splice(nextI, 1);\r\n i--;\r\n }\r\n else if (status === Status.ConverToCircle)\r\n {\r\n g.length = 0;\r\n let a = c1 as Arc;\r\n g.push(new Circle(a.Center, a.Radius));\r\n break;\r\n }\r\n }\r\n }\r\n let allContour = Contour.GetAllContour(cuGroups);\r\n if (allContour.length < 2)\r\n {\r\n return {\r\n contours: allContour,\r\n holes: [],\r\n };\r\n }\r\n else\r\n {\r\n let cache = new WeakMap();\r\n for (let c of allContour)\r\n cache.set(c, c.Area);\r\n allContour.sort((a, b) => cache.get(b) - cache.get(a));\r\n return {\r\n contours: [allContour[0]],\r\n holes: allContour.slice(1)\r\n };\r\n }\r\n\r\n }\r\n //差集:等于0完全被减去\r\n SubstactBoolOperation(target: Contour): Contour[]\r\n {\r\n let subtractList = this.GetSubtractList(target);\r\n\r\n //纯网洞\r\n if (subtractList.every(c => c.IsClose))\r\n return Contour.GetAllContour(subtractList);\r\n\r\n let regParse = new RegionParse(subtractList, 2);\r\n\r\n let contours: Contour[] = [];\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c\r\n && !equalCurve(c.Curve, this.Curve)\r\n && !equalCurve(c.Curve, target.Curve)\r\n && c.Area > 1e-3)\r\n contours.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n\r\n return contours;\r\n }\r\n /**\r\n * 计算与目标轮廓布尔运算后的结果曲线.\r\n */\r\n GetIntersetAndUnionList(target: Contour): { intersectionList: Curve[], unionList: Curve[]; }\r\n {\r\n let intersectionList: Curve[] = [];\r\n let unionList: Curve[] = [];\r\n\r\n let sourceOutline = this._Curve;\r\n let targetOutline = target.Curve;\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3);\r\n\r\n //可能会有提升,但是好像不大(并且还有更慢的趋势)\r\n // if (!sourceOutline.BoundingBox.intersectsBox(targetOutline.BoundingBox, 1e-3))\r\n // return { intersectionList, unionList };\r\n\r\n let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n\r\n let sourceContainerTarget: boolean;\r\n let targetContainerSource: boolean;\r\n if (sourceOutline.Area > targetOutline.Area)\r\n {\r\n sourceContainerTarget = interPts.length === 0 ? fastCurveInCurve(sourceOutline as Polyline, targetOutline as Polyline) : this.CuInOutline(targetOutline);\r\n targetContainerSource = false;\r\n }\r\n else\r\n {\r\n sourceContainerTarget = false;\r\n targetContainerSource = interPts.length === 0 ? fastCurveInCurve(targetOutline as Polyline, sourceOutline as Polyline) : target.CuInOutline(sourceOutline);\r\n }\r\n\r\n //包含.相交.分离(三种状态)\r\n if (sourceContainerTarget)//源包含目标\r\n {\r\n intersectionList.push(targetOutline);\r\n unionList.push(sourceOutline);\r\n }\r\n else if (targetContainerSource)//目标包含源\r\n {\r\n unionList.push(targetOutline);\r\n intersectionList.push(sourceOutline);\r\n }\r\n else if (interPts.length <= 1)//分离\r\n {\r\n unionList.push(sourceOutline, targetOutline);\r\n }\r\n else//相交 interPts.length > 0\r\n {\r\n let pars1 = interPts.map(r => r.thisParam);\r\n let pars2 = interPts.map(r => r.argParam);\r\n\r\n let sourceCus: Array = sourceOutline.GetSplitCurves(pars1);\r\n let targetCus: Array = targetOutline.GetSplitCurves(pars2);\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let hasEqualCus = false;\r\n for (let i = 0; i < targetCus.length; i++)\r\n {\r\n let cu = targetCus[i];\r\n hasEqualCus = fastEqualCurve(cu, pl);\r\n if (hasEqualCus)\r\n {\r\n //方向相同\r\n if (\r\n equalv3(cu.GetFistDeriv(cu.EndParam * 0.5).normalize(), pl.GetFistDeriv(pl.EndParam * 0.5).normalize(), 1e-3)\r\n === isEqualNormal\r\n )\r\n {\r\n unionList.push(pl);\r\n intersectionList.push(pl);\r\n }\r\n targetCus.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n if (hasEqualCus)\r\n continue;\r\n\r\n if (fastCurveInCurve(targetOutline, pl))\r\n intersectionList.push(pl);\r\n else\r\n unionList.push(pl);\r\n }\r\n\r\n for (let pl of targetCus)\r\n {\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n intersectionList.push(pl);\r\n else\r\n unionList.push(pl);\r\n }\r\n\r\n //特殊的分离\r\n if (intersectionList.length === 0 && unionList.length === (sourceCus.length + targetCus.length))\r\n {\r\n return { intersectionList, unionList: [sourceOutline, targetOutline] };\r\n }\r\n }\r\n return { intersectionList, unionList };\r\n }\r\n GetSubtractList(target: Contour): Polyline[]\r\n {\r\n let sourceOutline = this._Curve as Polyline;\r\n let targetOutline = target.Curve as Polyline;\r\n\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3);\r\n\r\n let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n\r\n if (interPts.length <= 1)\r\n {\r\n //反包含\r\n if (fastCurveInCurve2(targetOutline, sourceOutline) || equalCurve(targetOutline, sourceOutline))\r\n return [];\r\n //包含\r\n if (fastCurveInCurve2(sourceOutline, targetOutline))\r\n return [sourceOutline, targetOutline];\r\n else//分离\r\n return [sourceOutline];\r\n }\r\n\r\n //相交\r\n let subtractList: Polyline[] = [];\r\n let sourceCus = sourceOutline.GetSplitCurves(interPts.map(r => r.thisParam)) as Polyline[];\r\n let targetCus = targetOutline.GetSplitCurves(interPts.map(r => r.argParam)) as Polyline[];\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let plMidParam = pl.MidParam;\r\n let plDir = pl.GetFistDeriv(plMidParam).normalize();\r\n\r\n let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl));\r\n if (index !== -1)\r\n {\r\n let cu = targetCus[index];\r\n let cuMidParam = cu.MidParam;\r\n let cuDir = cu.GetFistDeriv(cuMidParam).normalize();\r\n\r\n if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3))//不同向\r\n subtractList.push(pl);\r\n\r\n targetCus.splice(index, 1);\r\n\r\n continue;\r\n }\r\n if (!fastCurveInCurve(targetOutline, pl))\r\n subtractList.push(pl);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceCus.length;\r\n\r\n for (let pl of targetCus)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceCus.length)\r\n return [sourceOutline];\r\n\r\n return subtractList;\r\n }\r\n GetSubtractListByMoreTargets(targets: Contour[])\r\n {\r\n let { holes, subtractList } = this.GetSubListWithCus(targets);\r\n\r\n //纯网洞\r\n if (subtractList.every(c => c.IsClose))\r\n return {\r\n holes: holes.map(h => Contour.CreateContour(h)),\r\n outlines: Contour.GetAllContour(subtractList)\r\n };\r\n\r\n let regParse = new RegionParse(subtractList, 2);\r\n\r\n let contours: Contour[] = [];\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c\r\n && !equalCurve(c.Curve, this.Curve)\r\n && targets.every(target => !equalCurve(c.Curve, target.Curve))\r\n && c.Area > 1e-3)\r\n contours.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n\r\n return {\r\n holes: holes.map(h => Contour.CreateContour(h)),\r\n outlines: contours\r\n };\r\n\r\n }\r\n GetSubListWithCus(targets: Contour[])\r\n {\r\n let sourceOutline = this._Curve as Polyline;\r\n let subtractList: Polyline[] = [];\r\n let holes: Polyline[] = [];\r\n let intPars: number[] = [];\r\n let cuMap = new Map();\r\n\r\n let outBox = sourceOutline.BoundingBox;\r\n\r\n for (let con of targets)\r\n {\r\n const targetOutline = con.Curve as Polyline;\r\n\r\n if (!IntersectBox2(outBox, targetOutline.BoundingBox))\r\n continue;\r\n\r\n let pts = sourceOutline.IntersectWith2(con.Curve, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n if (pts.length <= 1)\r\n {\r\n //反包含\r\n if (fastCurveInCurve2(targetOutline, sourceOutline) || equalCurve(targetOutline, sourceOutline))\r\n return { holes, subtractList };\r\n //包含\r\n if (fastCurveInCurve2(sourceOutline, targetOutline))\r\n holes.push(targetOutline);\r\n else//分离\r\n {\r\n\r\n }\r\n }\r\n else\r\n {\r\n intPars.push(...pts.map(r => r.thisParam));\r\n cuMap.set(targetOutline, pts.map(r => r.argParam));\r\n }\r\n }\r\n intPars.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(intPars, (e1, e2) => equaln(e1, e2, 1e-8));\r\n let sourceCus = sourceOutline.GetSplitCurves(intPars) as Polyline[];\r\n let targetCus: Polyline[] = [];\r\n\r\n let targetMap = new WeakMap();\r\n\r\n let isEqualNormal: boolean;\r\n\r\n for (let [c, pars] of cuMap)\r\n {\r\n let cus = c.GetSplitCurves(pars) as Polyline[];\r\n cus.forEach(cu => targetMap.set(cu, c));\r\n targetCus.push(...cus);\r\n }\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let plMidParam = pl.MidParam;\r\n let plDir = pl.GetFistDeriv(plMidParam).normalize();\r\n\r\n let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl, 0.05));\r\n if (index !== -1)\r\n {\r\n let cu = targetCus[index];\r\n isEqualNormal = equalv3(sourceOutline.Normal, targetMap.get(cu).Normal, 1e-3);\r\n let cuMidParam = cu.MidParam;\r\n let cuDir = cu.GetFistDeriv(cuMidParam).normalize();\r\n\r\n if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3))//不同向\r\n subtractList.push(pl);\r\n\r\n targetCus.splice(index, 1);\r\n\r\n continue;\r\n }\r\n\r\n if (targets.every(t => !fastCurveInCurve(t.Curve as Polyline, pl)))\r\n subtractList.push(pl);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceCus.length;\r\n\r\n for (let pl of targetCus)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceCus.length)\r\n return { subtractList: [sourceOutline], holes };\r\n\r\n return { subtractList, holes };\r\n\r\n }\r\n /**\r\n * 获得全部闭合曲线\r\n * @若传入二维曲线数据,将默认子数组为闭合曲线段\r\n */\r\n static GetAllContour(cus: Curve[] | Curve[][]): Contour[]\r\n {\r\n if (cus.length === 0)\r\n return [];\r\n\r\n let cuGroups: Curve[][];\r\n if (Array.isArray(cus[0]))\r\n cuGroups = cus as Curve[][];\r\n else\r\n cuGroups = curveLinkGroup(cus as Curve[]);\r\n\r\n let contours: Contour[] = [];\r\n\r\n for (let g of cuGroups)\r\n contours.push(Contour.CreateContour(g, false));\r\n return contours.filter(c => c !== undefined && !equaln(c.Area, 0, 1e-6));\r\n }\r\n /**\r\n * 合并曲线组成为多段线\r\n * @param cus 曲线组\r\n * @param [needLink=true] 需要解析成首尾连接状态\r\n * @returns 单一曲线,如果返回超过1个,其他的将被遗弃.\r\n */\r\n static Combine(cus: Curve[], needLink = true, tolerance = 1e-3): Curve\r\n {\r\n if (cus.length === 0) return undefined;\r\n\r\n let groups = needLink ? curveLinkGroup(cus) : [cus];\r\n for (let g of groups)\r\n {\r\n if (g.length === 1)\r\n return g[0].Clone();\r\n else\r\n {\r\n if (cache.has(g))\r\n return cache.get(g);\r\n\r\n let gclone = g.map(c => c.Clone());\r\n\r\n arrayRemoveDuplicateBySort(gclone, (cu1: Curve, cu2: Curve) => cu1.Join(cu2, false, tolerance) === Status.True);\r\n\r\n if (gclone.length > 1 && gclone[0].Join(arrayLast(gclone), false, tolerance))\r\n gclone.pop();\r\n\r\n let pl = Polyline.Combine(gclone, tolerance);\r\n\r\n cache.set(g, pl);\r\n\r\n return pl;\r\n }\r\n }\r\n }\r\n get Shape(): THREE.Shape\r\n {\r\n return this._Curve.Shape;\r\n }\r\n CuInOutline(targetCur: Curve)\r\n {\r\n return isTargetCurInOrOnSourceCur(this._Curve, targetCur);\r\n }\r\n Equal(tar: Contour)\r\n {\r\n return equalCurve(this._Curve, tar._Curve);\r\n }\r\n}\r\n\r\n/**\r\n * 对于轮廓切割后的曲线判断相同,使用这个函数进行快速判断\r\n */\r\nfunction fastEqualCurve(c1: Curve, c2: Curve, tolerance = 1e-3)\r\n{\r\n let sp1 = c1.StartPoint;\r\n let ep1 = c1.EndPoint;\r\n let sp2 = c2.StartPoint;\r\n let ep2 = c2.EndPoint;\r\n\r\n if (!(\r\n (equalv3(sp1, sp2, tolerance) && equalv3(ep1, ep2, tolerance))\r\n || (equalv3(sp1, ep2, tolerance) && equalv3(ep1, sp2, tolerance))\r\n ))\r\n return false;\r\n\r\n return equalv3(c1.Midpoint, c2.Midpoint, tolerance);\r\n}\r\n\r\n\r\n//对于双多段线互相切割后的结果,快速判断曲线是否在另一条曲线内部\r\n//也许有一天这个中点算法需要改一下, 使用 src\\Geometry\\ExtrudeEdgeGeometry2.ts->CenterPoint 会比较稳妥\r\nfunction fastCurveInCurve(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.GetPointAtParam(targetCu.EndParam * 0.5));\r\n}\r\n\r\nfunction fastCurveInCurve2(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.StartPoint) &&\r\n sourceCu.PtInCurve(targetCu.GetPointAtParam(targetCu.EndParam * 0.5));\r\n}\r\n","import { Line3, Plane, Ray, Vector3 } from \"three\";\r\n\r\nexport class PlaneExt extends Plane\r\n{\r\n constructor(normal = new Vector3(0, 0, 1), constant?: number | Vector3)\r\n {\r\n super(normal);\r\n if (typeof constant === \"number\")\r\n this.constant = constant;\r\n else if (constant)\r\n this.constant = -this.normal.dot(constant);\r\n }\r\n\r\n intersectLine(line: Line3, optionalTarget = new Vector3(), extendLine = false): Vector3\r\n {\r\n let v1 = new Vector3();\r\n\r\n let direction = line.delta(v1);\r\n\r\n let denominator = this.normal.dot(direction);\r\n\r\n if (denominator === 0)\r\n {\r\n // line is coplanar, return origin\r\n if (this.distanceToPoint(line.start) === 0)\r\n {\r\n return optionalTarget.copy(line.start);\r\n }\r\n // Unsure if this is the correct method to handle this case.\r\n return undefined;\r\n }\r\n\r\n let t = - (line.start.dot(this.normal) + this.constant) / denominator;\r\n //If you not extendLine,check intersect point in Line\r\n if (!extendLine && (t < -1e-6 || t > 1))\r\n {\r\n return undefined;\r\n }\r\n\r\n return optionalTarget.copy(direction).multiplyScalar(t).add(line.start);\r\n }\r\n intersectRay(ray: Ray, optionalTarget?: Vector3, extendLine?: boolean): Vector3\r\n {\r\n // 从射线初始位置\r\n let line = new Line3(ray.origin.clone(), ray.origin.clone().add(ray.direction));\r\n return this.intersectLine(line, optionalTarget, extendLine);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Matrix3, Matrix4, Object3D, Shape, Vector3, Line as TLine, MathUtils } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getDeterminantFor2V, getArcOrCirNearPts, getTanPtsOnEllipse, Pts2Polyline } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { angle, equaln, equalv3, MoveMatrix, rotatePoint, angleTo, AsVector2, AsVector3 } from '../../Geometry/GeUtils';\r\nimport { IntersectEllipse, IntersectEllipseAndCircleOrArc, IntersectEllipseAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Arc } from './Arc';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\n\r\n@Factory\r\nexport class Ellipse extends Curve\r\n{\r\n private _radX: number;\r\n private _radY: number;\r\n private _rotate: number;\r\n private _startAngle = 0;\r\n private _endAngle = Math.PI * 2;\r\n constructor(\r\n center?: Vector3,\r\n radX: number = 1e-3,\r\n radY: number = 1e-3,\r\n angle: number = 0)\r\n {\r\n super();\r\n center && this._Matrix.setPosition(center);\r\n this._radX = radX;\r\n this._radY = radY;\r\n this._rotate = angle;\r\n }\r\n get StartParam(): number\r\n {\r\n return 0;\r\n }\r\n get EndParam(): number\r\n {\r\n return 1;\r\n }\r\n get StartPoint()\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get EndPoint()\r\n {\r\n return this.GetPointAtParam(1);\r\n }\r\n get Shape(): Shape\r\n {\r\n let sp = new Shape();\r\n sp.ellipse(0, 0, this._radX, this._radY, this._startAngle, this._endAngle, false, this._rotate);\r\n return sp;\r\n }\r\n get IsClose(): boolean\r\n {\r\n return equaln(this.TotalAngle, Math.PI * 2);\r\n }\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(v);\r\n this.Update();\r\n }\r\n get RadX()\r\n {\r\n return this._radX;\r\n }\r\n set RadX(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._radX = v;\r\n this.Update();\r\n }\r\n get RadY()\r\n {\r\n return this._radY;\r\n }\r\n set RadY(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._radY = v;\r\n this.Update();\r\n }\r\n get Rotation()\r\n {\r\n return this._rotate;\r\n }\r\n set Rotation(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._rotate = v;\r\n this.Update();\r\n }\r\n get StartAngle()\r\n {\r\n return this._startAngle;\r\n }\r\n get EndAngle()\r\n {\r\n return this._startAngle;\r\n }\r\n set StartAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._startAngle = v;\r\n this.Update();\r\n }\r\n set EndAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._endAngle = v;\r\n this.Update();\r\n }\r\n get Length()\r\n {\r\n let a = this._radX;\r\n let b = this._radY;\r\n return Math.PI * Math.abs(3 * (a + b) - Math.sqrt((3 * a + b) * (a + 3 * b))) * this.TotalAngle / Math.PI * 0.5;\r\n }\r\n get Area()\r\n {\r\n let area = Math.PI * this._radX * this._radY;\r\n let an = this._endAngle - this._startAngle;\r\n if (an < 0)\r\n an = Math.PI * 2 + an;\r\n area *= an / Math.PI * 0.5;\r\n let area2 = Math.abs(\r\n getDeterminantFor2V(\r\n AsVector2(this.StartPoint.sub(this.Center)),\r\n AsVector2(this.EndPoint.sub(this.Center)))\r\n ) / 2;\r\n if (an < Math.PI)\r\n area -= area2;\r\n else\r\n area += area2;\r\n return area;\r\n }\r\n get TotalAngle()\r\n {\r\n let totolAngle = this._endAngle - this._startAngle;\r\n if (totolAngle < 0)\r\n totolAngle = Math.PI * 2 + totolAngle;\r\n return totolAngle;\r\n }\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3().setFromPoints(this.GetGripPoints());\r\n }\r\n PtInCurve(pt: Vector3)\r\n {\r\n let p = rotatePoint(pt.clone().sub(this.Center), -this.Rotation);\r\n return p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2 < 1;\r\n }\r\n PtOnCurve(pt: Vector3)\r\n {\r\n if (this.PtOnEllipse(pt))\r\n {\r\n let a = this.GetCircleAngleAtPoint(pt);\r\n return a <= this.TotalAngle + 1e-6;\r\n }\r\n return false;\r\n }\r\n PtOnEllipse(pt: Vector3)\r\n {\r\n let p = rotatePoint(pt.clone().applyMatrix4(this.OCSInv), -this.Rotation);\r\n return equaln(p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2, 1, 1e-3);\r\n }\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.TotalAngle * param + this._startAngle;\r\n\r\n if (an > Math.PI)\r\n an -= 2 * Math.PI;\r\n\r\n let a = this.RadX;\r\n let b = this.RadY;\r\n let pt = new Vector3(a * Math.cos(an), b * Math.sin(an), 0);\r\n\r\n pt.applyMatrix4(new Matrix4().makeRotationZ(this._rotate));\r\n\r\n return pt.applyMatrix4(this.OCS);\r\n }\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnEllipse(pt))\r\n {\r\n return NaN;\r\n }\r\n let an = this.GetCircleAngleAtPoint(pt);\r\n let par = an / this.TotalAngle;\r\n\r\n if (this.IsClose || par < 1 + 1e-6)\r\n return par;\r\n else\r\n {\r\n let diffPar = Math.PI * 2 / this.TotalAngle - 1;\r\n if (par - 1 < diffPar / 2)\r\n return par;\r\n else\r\n return par - 1 - diffPar;\r\n }\r\n }\r\n GetPointAtDistance(distance: number)\r\n {\r\n let param = distance / this.Length;\r\n return this.GetPointAtParam(param);\r\n }\r\n GetDistAtParam(param: number)\r\n {\r\n return this.Length * param;\r\n }\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n GetAngleAtParam(par: number)\r\n {\r\n let pt = this.GetPointAtParam(par).applyMatrix4(this.OCSInv).applyMatrix4(new Matrix4().makeRotationZ(-this.Rotation));\r\n return angle(pt) + this._startAngle;\r\n }\r\n GetCircleAngleAtPoint(pt: Vector3)\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv);\r\n let an = angle(pt) - this._rotate;\r\n if (an < 0)\r\n an = Math.PI * 2 - an;\r\n if (an > Math.PI * 2)\r\n an -= Math.PI * 2;\r\n let dist = pt.length();\r\n let k = dist * Math.cos(an) / this._radX;\r\n if (Math.abs(k) > 1)\r\n k = Math.floor(Math.abs(k)) * Math.sign(k);\r\n if (Math.abs(an) <= Math.PI)\r\n an = Math.acos(k);\r\n else\r\n an = Math.PI * 2 - Math.acos(k);\r\n\r\n an -= this._startAngle;\r\n\r\n if (an < 0)\r\n an = Math.PI * 2 + an;\r\n return an;\r\n }\r\n\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n if (typeof pt === \"number\")\r\n pt = this.GetPointAtParam(pt);\r\n else\r\n pt = pt.clone();\r\n\r\n let refPts = this.GetGripPoints();\r\n\r\n let p = pt.clone().applyMatrix4(this.OCSInv).applyMatrix4(new Matrix4().makeRotationZ(-this._rotate));\r\n let vec = new Vector3();\r\n if (equalv3(pt, refPts[0]))\r\n vec.set(0, 1, 0);\r\n else if (equalv3(pt, refPts[1]))\r\n {\r\n vec.set(0, -1, 0);\r\n }\r\n else if (p.y > 0)\r\n {\r\n let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y);\r\n vec.set(-1, -k, 0);\r\n }\r\n else\r\n {\r\n let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y);\r\n vec.set(1, k, 0);\r\n }\r\n vec.applyMatrix4(new Matrix4().makeRotationZ(this._rotate));\r\n\r\n return vec.applyMatrix4(new Matrix4().extractRotation(this.OCS));\r\n }\r\n GetClosestPointTo(p: Vector3, extend: boolean): Vector3\r\n {\r\n //参考:https://wet-robots.ghost.io/simple-method-for-distance-to-ellipse/\r\n let ro = new Matrix4().makeRotationZ(this._rotate);\r\n let roInv = new Matrix4().getInverse(ro);\r\n let pt = p.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(roInv);\r\n let px = pt.x;\r\n let py = pt.y;\r\n let t = angle(pt);\r\n let a = this._radX;\r\n let b = this._radY;\r\n let x: number, y: number;\r\n for (let i = 0; i < 3; i++)\r\n {\r\n x = a * Math.cos(t);\r\n y = b * Math.sin(t);\r\n let ex = (a ** 2 - b ** 2) * Math.cos(t) ** 3 / a;\r\n let ey = (b * b - a * a) * Math.sin(t) ** 3 / b;\r\n let rx = x - ex;\r\n let ry = y - ey;\r\n let qx = px - ex;\r\n let qy = py - ey;\r\n\r\n let r = Math.sqrt(ry ** 2 + rx ** 2);\r\n let q = Math.sqrt(qy ** 2 + qx ** 2);\r\n\r\n let dc = r * Math.asin((rx * qy - ry * qx) / (r * q));\r\n let dt = dc / Math.sqrt(a * a + b * b - x * x - y * y);\r\n\r\n t += dt;\r\n }\r\n let retPt = new Vector3(x, y).applyMatrix4(ro).applyMatrix4(this.OCS);\r\n if (this.IsClose || extend)\r\n {\r\n return retPt;\r\n }\r\n else if (this.PtOnCurve(retPt))\r\n {\r\n return retPt;\r\n }\r\n else\r\n {\r\n let d1 = p.distanceToSquared(this.StartPoint);\r\n let d2 = p.distanceToSquared(this.EndPoint);\r\n return d1 < d2 ? this.StartPoint : this.EndPoint;\r\n }\r\n }\r\n GetOffsetCurves(offsetDist: number)\r\n {\r\n if ((offsetDist + Math.min(this._radX, this._radY)) > 0)\r\n {\r\n let el = this.Clone();\r\n el.RadX = this._radX + offsetDist;\r\n el.RadY = this._radY + offsetDist;\r\n return [el];\r\n }\r\n return [];\r\n }\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params: number[];\r\n if (param instanceof Array)\r\n {\r\n params = param.filter(p => this.ParamOnCurve(p));\r\n params.sort((a1, a2) => a2 - a1);//从大到小\r\n }\r\n else\r\n params = [param];\r\n\r\n //补上最后一个到第一个的弧\r\n if (this.IsClose)\r\n params.unshift(arrayLast(params));\r\n else\r\n {\r\n params.unshift(1);\r\n params.push(0);\r\n }\r\n arrayRemoveDuplicateBySort(params);\r\n\r\n let anglelist = params.map(param => this.TotalAngle * param + this._startAngle);\r\n let elllist: this[] = [];\r\n for (let i = 0; i < anglelist.length - 1; i++)\r\n {\r\n let sa = anglelist[i];\r\n let ea = anglelist[i + 1];\r\n let el = this.Clone();\r\n if (!equaln(sa, ea, 1e-6))\r\n {\r\n el.StartAngle = ea;\r\n el.EndAngle = equaln(sa, 0) ? Math.PI * 2 : sa;\r\n elllist.push(el);\r\n }\r\n }\r\n return elllist;\r\n }\r\n Join(el: Ellipse)\r\n {\r\n if (this.IsClose || el.IsClose || !this.IsCoplaneTo(el) || !equalv3(el.Center, this.Center))\r\n return Status.False;\r\n\r\n let status = Status.False;\r\n\r\n if (equaln(this._endAngle, this._startAngle))\r\n {\r\n this.EndAngle = this._endAngle;\r\n status = Status.True;\r\n }\r\n else if (equaln(this._startAngle, el._endAngle))\r\n {\r\n this.StartAngle = el._startAngle;\r\n status = Status.True;\r\n }\r\n if (status === Status.True && !this.IsClose && equaln(this._startAngle, this._endAngle))\r\n {\r\n this.StartAngle = 0;\r\n this.EndAngle = Math.PI * 2;\r\n }\r\n return status;\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n {\r\n let pts = this.GetGripPoints();\r\n return pts;\r\n }\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Nea:\r\n {\r\n return getArcOrCirNearPts(this, pickPoint, viewXform);\r\n }\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n return [this.GetClosestPointTo(lastPoint, false)];\r\n }\r\n case ObjectSnapMode.Tan:\r\n {\r\n //TODO:过某点获取椭圆全部切点\r\n if (lastPoint)\r\n {\r\n return getTanPtsOnEllipse(this, lastPoint);\r\n }\r\n }\r\n default:\r\n return [];\r\n }\r\n }\r\n IntersectWith2(curve: Curve, intType: IntersectOption)\r\n {\r\n //TODO:优化椭圆和椭圆,椭圆和圆相交\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectEllipseAndLine(curve, this, reverseIntersectOption(intType)));\r\n }\r\n else if (curve instanceof Circle || curve instanceof Arc)\r\n {\r\n return IntersectEllipseAndCircleOrArc(this, curve, intType);\r\n }\r\n else if (curve instanceof Polyline)\r\n {\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, intType));\r\n }\r\n else if (curve instanceof Ellipse)\r\n {\r\n return IntersectEllipse(this, curve, intType);\r\n }\r\n else\r\n return [];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let line = new TLine(this.UpdateGeometry(), ColorMaterial.GetLineMaterial(this._Color));\r\n this.UpdateDrawObject(renderType, line);\r\n return line;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let geo = (obj as TLine).geometry as BufferGeometry;\r\n this.UpdateGeometry(geo);\r\n }\r\n //更新Geometry\r\n private UpdateGeometry(geo?: BufferGeometry)\r\n {\r\n if (!geo)\r\n geo = new BufferGeometry();\r\n let curve = this.Shape;\r\n geo.setFromPoints(curve.getPoints(60));\r\n return geo;\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let tmpMat4 = new Matrix4().makeRotationZ(this.Rotation);\r\n let pts = [\r\n new Vector3(this._radX, 0),\r\n new Vector3(-this._radX, 0),\r\n new Vector3(0, this._radY),\r\n new Vector3(0, -this._radY)\r\n ].map(p => p.applyMatrix4(tmpMat4).applyMatrix4(this.OCS));\r\n\r\n if (!equaln(0, this._startAngle))\r\n pts.push(this.StartPoint);\r\n if (!equaln(0, this._endAngle))\r\n pts.push(this.EndPoint);\r\n\r\n pts.push(this.Center);\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n let pts = this.GetStretchPoints();\r\n\r\n if (indexList.length > 0)\r\n {\r\n let p = pts[indexList[0]].clone();\r\n p.add(vec);\r\n\r\n if (indexList[0] <= 1)\r\n this.RadX = p.distanceTo(this.Center);\r\n else if (indexList[0] <= 3)\r\n this.RadY = p.distanceTo(this.Center);\r\n else\r\n {\r\n let p1 = pts[indexList[0]];\r\n //TODO:跟cad不一致待优化\r\n if (equalv3(p1, this.StartPoint))\r\n {\r\n let v1 = p1.clone().sub(this.Center);\r\n let v2 = p.clone().sub(this.Center);\r\n let an = angleTo(v1, v2);\r\n this.StartAngle = this.StartAngle + an;\r\n }\r\n else if (equalv3(p1, this.EndPoint))\r\n {\r\n let v1 = p1.clone().sub(this.Center);\r\n let v2 = p.clone().sub(this.Center);\r\n let an = angleTo(v2, v1);\r\n this.EndAngle = this.EndAngle + an;\r\n }\r\n else\r\n this.Center = p;\r\n }\r\n }\r\n }\r\n Convert2Polyline(count = 0)\r\n {\r\n const MIN_LEN = 80;\r\n const par = this.TotalAngle / Math.PI * 0.5;\r\n if (!count)\r\n {\r\n count = Math.floor(this.Length / par / MIN_LEN);\r\n count = MathUtils.clamp(count, 15, 80);\r\n }\r\n\r\n count = Math.floor(count * par);\r\n\r\n if ((count & 1) === 0)\r\n count++;\r\n\r\n let pts = this.Shape.getPoints(count);\r\n if (this.IsClose)\r\n pts.pop();\r\n\r\n let pl = Pts2Polyline(pts, this.IsClose);\r\n pl.ApplyMatrix(this.OCS);\r\n if (this.IsClose)\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._radX = file.Read();\r\n this._radY = file.Read();\r\n this._rotate = file.Read();\r\n this._startAngle = file.Read();\r\n this._endAngle = file.Read();\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);\r\n file.Write(this.RadX);\r\n file.Write(this.RadY);\r\n file.Write(this.Rotation);\r\n file.Write(this._startAngle);\r\n file.Write(this._endAngle);\r\n }\r\n\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Line3, Matrix3, Matrix4, Object3D, Shape, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { PlaneExt } from '../../Geometry/Plane';\r\nimport { IntersectEllipseAndLine, IntersectLineAndArc, IntersectLineAndCircle, IntersectLineAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Arc } from './Arc';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Polyline } from './Polyline';\r\n\r\n@Factory\r\nexport class Line extends Curve\r\n{\r\n\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3)\r\n {\r\n super();\r\n }\r\n\r\n get Is2D()\r\n {\r\n return super.Is2D && equaln(this._StartPoint.z, 0) && equaln(this._EndPoint.z, 0);\r\n }\r\n\r\n get Shape()\r\n {\r\n return new Shape([AsVector2(this._StartPoint), AsVector2(this._EndPoint)]);\r\n }\r\n\r\n Z0()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.StartPoint = this.StartPoint.setZ(0);\r\n this.EndPoint = this.EndPoint.setZ(0);\r\n return this;\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.StartPoint = this.StartPoint.applyMatrix4(m);\r\n this.EndPoint = this.EndPoint.applyMatrix4(m);\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this.StartPoint = sp;\r\n this.EndPoint = ep;\r\n return this;\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let geo = BufferGeometryUtils.CreateFromPts([this._StartPoint, this._EndPoint]);\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry();\r\n geometry.setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, lineObj: TLine)\r\n {\r\n BufferGeometryUtils.UpdatePts(lineObj.geometry as BufferGeometry, [this._StartPoint, this._EndPoint]);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return [this.StartPoint, this.EndPoint];\r\n case ObjectSnapMode.Mid:\r\n return [this.GetPointAtParam(0.5)];\r\n case ObjectSnapMode.Nea:\r\n {\r\n let derv = this.GetFistDeriv(0).normalize();\r\n let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3);\r\n\r\n //平行不捕捉\r\n if (isParallelTo(viewNormal, derv))\r\n return [];\r\n\r\n let fNormal = new Vector3().crossVectors(viewNormal, derv);\r\n fNormal.crossVectors(derv, fNormal);\r\n\r\n let plane = new PlaneExt(fNormal, this.StartPoint);\r\n let plocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true);\r\n let pclosest = this.GetClosestPointTo(plocal, false);\r\n return [pclosest];\r\n }\r\n case ObjectSnapMode.Ext:\r\n return [this.GetClosestPointTo(pickPoint, true)];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(lastPoint, true);\r\n if (this.ParamOnCurve(param))\r\n return [closestPt];\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this.StartPoint, this.GetPointAtParam(0.5), this.EndPoint];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n if (index === 0)\r\n this.StartPoint = this.StartPoint.add(vec);\r\n else if (index === 2)\r\n this.EndPoint = this.EndPoint.add(vec);\r\n else\r\n {\r\n let m = MoveMatrix(vec);\r\n this.ApplyMatrix(m);\r\n }\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n if (index === 0)\r\n this.StartPoint = this.StartPoint.add(vec);\r\n else\r\n this.EndPoint = this.EndPoint.add(vec);\r\n }\r\n }\r\n\r\n GetFistDeriv(param: number | Vector3): Vector3\r\n {\r\n return this.EndPoint.sub(this.StartPoint);\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4)\r\n {\r\n if (curve instanceof Line)\r\n {\r\n return IntersectLineAndLine(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectLineAndArc(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectLineAndCircle(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Polyline)\r\n {\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n\r\n if (curve instanceof Ellipse)\r\n return IntersectEllipseAndLine(this, curve, intType, tolerance);\r\n\r\n //其他的尚未实现.\r\n return [];\r\n }\r\n\r\n //Param\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this.StartPoint.add(this.GetFistDeriv(0).multiplyScalar(param));\r\n }\r\n GetParamAtPoint(pt: Vector3): number\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(pt, true);\r\n if (!equalv3(closestPt, pt, 1e-5))\r\n return NaN;\r\n return param;\r\n }\r\n GetParamAtDist(d: number): number\r\n {\r\n return d / this.Length;\r\n }\r\n GetPointAtDistance(distance: number): Vector3\r\n {\r\n return this.GetPointAtParam(this.GetParamAtDist(distance));\r\n }\r\n GetDistAtParam(param: number): number\r\n {\r\n return this.Length * param;\r\n }\r\n GetDistAtPoint(pt: Vector3): number\r\n {\r\n return this.GetDistAtParam(this.GetParamAtPoint(pt));\r\n }\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params = this.SplitParamSort(param);\r\n let pts = params.map(param => this.GetPointAtParam(param));\r\n let ret = new Array();\r\n if (pts.length >= 2)\r\n {\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let newLine = this.Clone() as Line;\r\n newLine.ColorIndex = this.ColorIndex;\r\n newLine.StartPoint = pts[i];\r\n newLine.EndPoint = pts[i + 1];\r\n ret.push(newLine);\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n GetParamAtPoint2(pt: Vector3): number\r\n {\r\n let { param } = this.GetClosestAtPoint(pt, true);\r\n return param;\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n let { param } = this.GetClosestAtPoint(p, true);\r\n return this.ParamOnCurve(param, fuzz);\r\n }\r\n\r\n GetClosestAtPoint(pt: Vector3, extend: boolean): { closestPt: Vector3, param: number; }\r\n {\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n if (equalv3(pt, sp, 1e-8))\r\n return { closestPt: sp, param: 0 };\r\n else if (equalv3(pt, ep, 1e-8))\r\n return { closestPt: ep, param: 1 };\r\n\r\n let direction = this.GetFistDeriv(0);\r\n let length = direction.length();\r\n\r\n if (length === 0)\r\n {\r\n let param = NaN;\r\n if (equalv3(pt, this.StartPoint, 1e-6))\r\n param = 0;\r\n return { closestPt: sp, param: param };\r\n }\r\n\r\n direction.divideScalar(length);\r\n\r\n let diff = pt.clone().sub(sp);\r\n let param = direction.dot(diff);\r\n\r\n let closestPt: Vector3;\r\n if (extend)\r\n closestPt = sp.add(direction.multiplyScalar(param));\r\n else\r\n if (param < 0)\r\n {\r\n closestPt = sp;\r\n param = 0;\r\n }\r\n else if (param > length)\r\n {\r\n closestPt = this.EndPoint;\r\n param = length;\r\n }\r\n else\r\n closestPt = sp.add(direction.multiplyScalar(param));\r\n return {\r\n closestPt: closestPt,\r\n param: param / length\r\n };\r\n }\r\n\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.GetClosestAtPoint(pt, extend).closestPt;\r\n }\r\n\r\n Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < this.StartParam)\r\n {\r\n this.StartPoint = this.GetPointAtParam(newParam);\r\n }\r\n else if (newParam > this.EndParam)\r\n {\r\n this.EndPoint = this.GetPointAtParam(newParam);\r\n }\r\n }\r\n\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-5): Status\r\n {\r\n if (cu instanceof Line)\r\n {\r\n //平行\r\n if (!isParallelTo(this.GetFistDeriv(0).normalize(), cu.GetFistDeriv(0).normalize()))\r\n return Status.False;\r\n\r\n let sp = cu.StartPoint;\r\n let { closestPt: cp1, param: param1 } = this.GetClosestAtPoint(sp, true);\r\n if (!equalv3(sp, cp1, tolerance))//点在曲线上,允许较低的精度\r\n return Status.False;\r\n\r\n let ep = cu.EndPoint;\r\n let { closestPt: cp2, param: param2 } = this.GetClosestAtPoint(ep, true);\r\n if (!equalv3(ep, cp2, tolerance))\r\n return Status.False;\r\n\r\n if (param1 > param2)\r\n {\r\n [param1, param2] = [param2, param1];\r\n [sp, ep] = [ep, sp];\r\n }\r\n\r\n if (allowGap || Math.max(0, param1) < Math.min(1, param2) + tolerance / this.Length)//这里的容差是值容差,但是我们用它来判断参数,所以进行转换\r\n {\r\n if (param1 < 0)\r\n this.StartPoint = sp;\r\n if (param2 > 1)\r\n this.EndPoint = ep;\r\n return Status.True;\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n [this._StartPoint, this._EndPoint] = [this._EndPoint, this._StartPoint];\r\n return this;\r\n }\r\n\r\n GetOffsetCurves(offsetDist: number): Array\r\n {\r\n let derv = this.GetFistDeriv(0).normalize().multiplyScalar(offsetDist);\r\n derv.applyMatrix4(new Matrix4().makeRotationAxis(this.Normal, -Math.PI / 2));\r\n let newLine = this.Clone() as Line;\r\n newLine.StartPoint = this.StartPoint.add(derv);\r\n newLine.EndPoint = this.EndPoint.add(derv);\r\n return [newLine];\r\n }\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3().setFromPoints([this.StartPoint, this.EndPoint]);\r\n }\r\n\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return 1;\r\n }\r\n //属性\r\n get Length(): number { return this._StartPoint.distanceTo(this._EndPoint); }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._StartPoint.fromArray(file.Read());\r\n this._EndPoint.fromArray(file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.Write(this._StartPoint.toArray());\r\n file.Write(this._EndPoint.toArray());\r\n }\r\n //#endregion-----------------------------File End-----------------------------\r\n\r\n //#region 属性\r\n set StartPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCS);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCS);\r\n }\r\n set EndPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { Box3 } from \"three\";\r\nimport { equaln } from \"./GeUtils\";\r\n\r\nexport interface EBox\r\n{\r\n BoundingBox: Box3;\r\n}\r\n\r\n/**\r\n * 根据盒子x排序盒子\r\n * @param {EBox[]} arr\r\n */\r\nexport function SortEntityByBox(arr: T[], sort: boolean = true)\r\n{\r\n let boxMap: Map = new Map();\r\n arr.forEach(e => boxMap.set(e, e.BoundingBox));\r\n\r\n if (sort)\r\n arr.sort((e1, e2) =>\r\n {\r\n let b1 = boxMap.get(e1);\r\n let b2 = boxMap.get(e2);\r\n if (!equaln(b1.min.x, b2.min.x))\r\n return b1.min.x - b2.min.x;\r\n else\r\n {\r\n return b2.min.y - b1.min.y;\r\n }\r\n });\r\n\r\n return boxMap;\r\n}\r\n","import { debug } from \"request-promise-native\";\r\nimport { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { TestDraw } from \"../Add-on/test/TestUtil\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline } from \"../Common/CurveUtils\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { IntersectsBox } from \"../Geometry/Box\";\r\nimport { CurveMap, Route, Vertice } from \"../Geometry/CurveMap\";\r\nimport { angle, equaln, equalv2, equalv3, IdentityMtx4, SelectNearP } from \"../Geometry/GeUtils\";\r\nimport { SortEntityByBox } from \"../Geometry/SortEntityByBox\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\ninterface IOffsetResult\r\n{\r\n index: number;\r\n curve: Curve;\r\n sp?: Vector3;\r\n preArc?: Curve;\r\n ep?: Vector3;\r\n nextArc?: Curve;\r\n paddingCurve?: Curve[];\r\n}\r\n\r\nclass CurveTreeNode\r\n{\r\n children: CurveTreeNode[];\r\n box: Box3;\r\n used: boolean;\r\n constructor(public curve: Curve, box?: Box3)\r\n {\r\n this.box = box || curve.BoundingBox;\r\n }\r\n\r\n TrimBy(contour: Contour, box: Box3)\r\n {\r\n if (IntersectsBox(box, this.box))\r\n {\r\n if (this.children !== undefined)\r\n {\r\n for (let c of this.children)\r\n c.TrimBy(contour, box);\r\n }\r\n else\r\n {\r\n if (contour.Curve instanceof Circle && this.curve instanceof Arc)\r\n {\r\n if (equalv3(contour.Curve.Center, this.curve.Center))\r\n {\r\n if (contour.Curve.Radius > this.curve.Radius + 1e-4)\r\n this.children = [];\r\n\r\n return;\r\n }\r\n }\r\n\r\n //交点参数列表\r\n let iParams = this.curve.IntersectWith(contour.Curve, IntersectOption.OnBothOperands)\r\n .map(p => this.curve.GetParamAtPoint2(p));\r\n\r\n let cus = this.curve.GetSplitCurves(iParams);\r\n if (cus.length === 0)\r\n {\r\n let p = this.curve.GetPointAtParam(0.5);\r\n if (box.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p)))\r\n this.children = [];\r\n }\r\n else\r\n {\r\n this.children = [];\r\n for (let c of cus)\r\n {\r\n let p = c.GetPointAtParam(0.5);\r\n if (CurveIsFine(c) && (!(box.containsPoint(p) && contour.Curve.PtInCurve(p)) || contour.Curve.PtOnCurve(p)))\r\n this.children.push(new CurveTreeNode(c));\r\n }\r\n if (this.children.length === cus.length)\r\n this.children = undefined;\r\n }\r\n }\r\n }\r\n }\r\n\r\n get Nodes()\r\n {\r\n if (!this.children) return [this];\r\n else\r\n {\r\n let cus: CurveTreeNode[] = [];\r\n for (let c of this.children)\r\n cus.push(...c.Nodes);\r\n return cus;\r\n }\r\n }\r\n}\r\n\r\nexport class OffsetPolyline\r\n{\r\n //多段线信息\r\n _CacheOCS: Matrix4;\r\n _Vertexs: Vector3[];\r\n _SubCurves: Curve[];\r\n _Circles: Circle[];\r\n\r\n //偏移子曲线\r\n _SubOffsetedCurves: IOffsetResult[];\r\n //用于裁剪的曲线节点\r\n _CurveTreeNodes: CurveTreeNode[];\r\n //裁剪完的曲线节点\r\n _CurveTrimedTreeNodes: CurveTreeNode[];\r\n\r\n //裁剪轮廓\r\n _TrimPolylineContours: Contour[];\r\n _TrimCircleContours: Circle[];\r\n _TrimArcContours: Contour[];\r\n\r\n //结果曲线\r\n _RetCurves: Polyline[];\r\n\r\n _IsClose: boolean;\r\n _OffsetDistSign: number;\r\n\r\n constructor(public _Polyline: Polyline, public _OffsetDist: number, public _ToolPath = false,\r\n private _OffsetDistSq = (_OffsetDist ** 2) * 2.1//对直角走刀不进行圆弧过度\r\n )\r\n {\r\n }\r\n\r\n Do(): Polyline[]\r\n {\r\n this._OffsetDistSign = Math.sign(this._OffsetDist);\r\n this._TrimPolylineContours = [];\r\n this._TrimCircleContours = [];\r\n this._TrimArcContours = [];\r\n\r\n this._RetCurves = [];\r\n this._CurveTreeNodes = [];\r\n\r\n this.InitSubCurves();\r\n if (this._SubCurves.length === 0)\r\n return this._RetCurves;\r\n\r\n this.GeneralCirclesAndVertexs();\r\n this.OffsetSubCurves();\r\n this.LinkSubCurves();\r\n\r\n if (this._SubOffsetedCurves.length === 0)\r\n {\r\n this._SubOffsetedCurves.push({ curve: this._Circles[0], index: 0, paddingCurve: this._Circles.slice(1) });\r\n\r\n this._TrimPolylineContours.push(\r\n ...this._Circles.map(c => Contour.CreateContour(c, false)),\r\n ...this._SubCurves.map(c => Contour.CreateContour([c, new Line(c.StartPoint, c.EndPoint)], false))\r\n );\r\n }\r\n else\r\n this.GeneralTrimContours();\r\n this.TrimByContours();\r\n this.FilterInvalidCurve();\r\n this.JoinCollinear();\r\n this.LinkResultPolyline();\r\n return this._RetCurves;\r\n }\r\n\r\n InitSubCurves()\r\n {\r\n this._CacheOCS = this._Polyline.OCS;\r\n this._IsClose = this._Polyline.IsClose;\r\n this._Polyline.OCS = IdentityMtx4;\r\n this._SubCurves = this._Polyline.Explode().filter(c => c.Length > 1e-4);\r\n this._Polyline.OCS = this._CacheOCS;\r\n return this;\r\n }\r\n\r\n protected GeneralCirclesAndVertexs()\r\n {\r\n this._Vertexs = this._SubCurves.map(c => c.StartPoint);\r\n let lastCu = arrayLast(this._SubCurves);\r\n if (!equalv3(lastCu.EndPoint, this._Vertexs[0], 1e-3))\r\n this._Vertexs.push(lastCu.EndPoint);\r\n\r\n let radius = Math.abs(this._OffsetDist);\r\n this._Circles = this._Vertexs.map(p => new Circle(p, radius));\r\n }\r\n\r\n protected OffsetSubCurves()\r\n {\r\n this._SubOffsetedCurves = [];\r\n for (let index = 0; index < this._SubCurves.length; index++)\r\n {\r\n let curveOld = this._SubCurves[index];\r\n if (curveOld.Length > 1e-6)\r\n {\r\n let curve = curveOld.GetOffsetCurves(this._OffsetDist)[0];\r\n if (curve)\r\n this._SubOffsetedCurves.push({ curve, index });\r\n else\r\n this._TrimArcContours.push(Contour.CreateContour([curveOld, new Line(curveOld.StartPoint, curveOld.EndPoint)], false));\r\n }\r\n }\r\n }\r\n\r\n //连接(延伸)曲线,或者补(圆弧,直线)\r\n protected LinkSubCurves()\r\n {\r\n let count = this._SubOffsetedCurves.length;\r\n if (!this._IsClose) count--;\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let curveResNow = this._SubOffsetedCurves[i];\r\n let iNext = FixIndex(i + 1, this._SubOffsetedCurves);\r\n let curveResNext = this._SubOffsetedCurves[iNext];\r\n let curveNow = curveResNow.curve;\r\n let curveNext = curveResNext.curve;\r\n let isNeighbor = FixIndex(curveResNow.index + 1, this._SubCurves) === curveResNext.index;\r\n\r\n if (isNeighbor)\r\n {\r\n let sp = curveNow.EndPoint;\r\n let ep = curveNext.StartPoint;\r\n //直连\r\n if (equalv3(sp, ep, 1e-3))\r\n continue;\r\n\r\n let iPts = curveNow.IntersectWith(curveNext, IntersectOption.ExtendBoth);\r\n let tPts = iPts.filter(p => curveNow.PtOnCurve3(p) && curveNext.PtOnCurve3(p));\r\n\r\n let code = EntityEncode2(curveNow, curveNext);\r\n\r\n let tp: Vector3;\r\n if (code === 1)\r\n {\r\n if (tPts.length > 0)//不走刀或者有真交点 this._ToolPath === false ||\r\n tp = iPts[0];\r\n else\r\n {\r\n if (iPts.length > 0 && curveNow.GetParamAtPoint(iPts[0]) > 1)\r\n {\r\n let refP = this._Vertexs[curveResNext.index];\r\n let distSq = iPts[0].distanceToSquared(refP);\r\n if (this._ToolPath && distSq > this._OffsetDistSq)\r\n {\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];\r\n this._TrimCircleContours.push(this._Circles[curveResNext.index]);\r\n }\r\n else\r\n tp = iPts[0];\r\n }\r\n // else\r\n // curveResNow.paddingCurve = [new Line(sp, ep)];\r\n }\r\n }\r\n else\r\n {\r\n let refP = this._Vertexs[curveResNext.index];\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(iPts, refP);\r\n else //补单圆 或者尝试连接\r\n {\r\n let arc = this.CreateArc(refP, sp, ep);\r\n\r\n if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext, refP))\r\n {\r\n //设置新的连接点,并且备份旧点\r\n let oldp: Vector3;\r\n if (curveResNow.sp)\r\n {\r\n oldp = curveNow.StartPoint;\r\n curveNow.StartPoint = curveResNow.sp;\r\n }\r\n let oldp2: Vector3;\r\n if (curveResNext.ep)\r\n {\r\n oldp2 = curveNext.EndPoint;\r\n curveNext.EndPoint = curveResNext.ep;\r\n }\r\n\r\n let p: Vector3;\r\n\r\n if (code === 2 && iPts.length === 2)\r\n {\r\n let c = curveNow as Arc;\r\n let minArc = new Arc(c.Center, c.Radius, c.EndAngle, 0, c.IsClockWise);\r\n\r\n let p1 = iPts[0];\r\n let a1 = minArc.GetAngleAtPoint(p1);\r\n let anAll1 = c.ParamOnCurve(c.GetParamAtAngle(a1)) ? Infinity : minArc.ComputeAnlge(a1);\r\n\r\n let p2 = iPts[1];\r\n let a2 = minArc.GetAngleAtPoint(p2);\r\n let anAll2 = c.ParamOnCurve(c.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2);\r\n\r\n if (anAll2 < anAll1)\r\n p = p2;\r\n else\r\n p = p1;\r\n }\r\n else\r\n p = SelectNearP(iPts, refP);\r\n\r\n let onPre: boolean;\r\n let param = curveNow.GetParamAtPoint2(p);\r\n if (curveNow instanceof Line)\r\n onPre = param > 1;\r\n else\r\n onPre = param < 0 || param > 1;\r\n\r\n let onNext: boolean = false;\r\n if (onPre)\r\n {\r\n let param2 = curveNext.GetParamAtPoint2(p);\r\n if (curveNext instanceof Line)\r\n onNext = param2 < 0;\r\n else\r\n onNext = param2 < 0 || param2 > 1;\r\n }\r\n\r\n if (curveResNow.sp)\r\n curveNow.StartPoint = oldp;\r\n if (curveResNext.ep)\r\n curveNext.EndPoint = oldp2;\r\n\r\n if (onPre && onNext)\r\n tp = p;\r\n else\r\n curveResNow.paddingCurve = [arc];\r\n }\r\n else\r\n curveResNow.paddingCurve = [arc];\r\n\r\n this._TrimCircleContours.push(this._Circles[curveResNext.index]);\r\n }\r\n }\r\n if (tp)\r\n {\r\n curveResNow.ep = tp;\r\n curveResNext.sp = tp;\r\n\r\n curveResNow.nextArc = curveNext;\r\n curveResNext.preArc = curveNow;\r\n }\r\n }\r\n else\r\n {\r\n let padCirs: Circle[] = [];\r\n for (let s = FixIndex(curveResNow.index + 1, this._Circles); ; s = FixIndex(s + 1, this._Circles))\r\n {\r\n let c = this._Circles[s];\r\n this._TrimCircleContours.push(c);\r\n padCirs.push(c);\r\n if (s === curveResNext.index)\r\n break;\r\n }\r\n curveResNow.paddingCurve = padCirs;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n private IsSharpCorner(curveResNow: IOffsetResult, curveResNext: IOffsetResult, refP: Vector3): boolean\r\n {\r\n let v1 = this._SubCurves[curveResNow.index].GetPointAtParam(0.9);\r\n let v2 = this._SubCurves[curveResNext.index].GetPointAtParam(0.1);\r\n v1.subVectors(refP, v1);\r\n v2.sub(refP);\r\n v1.cross(v2);\r\n return Math.sign(v1.z) === this._OffsetDistSign;\r\n }\r\n\r\n protected GeneralTrimContours()\r\n {\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let cu2 = d.curve;\r\n if (d.sp && d.ep)\r\n {\r\n let param1 = cu2.GetParamAtPoint(d.sp);\r\n let param2 = cu2.GetParamAtPoint(d.ep);\r\n\r\n if (cu2.ParamOnCurve(param1) && cu2.ParamOnCurve(param2) && param1 > param2)\r\n [d.sp, d.ep] = [d.ep, d.sp];\r\n }\r\n if (d.sp) cu2.StartPoint = d.sp;\r\n if (d.ep) cu2.EndPoint = d.ep;\r\n\r\n //这是极端情况,圆弧被压缩成0长度圆弧,本质是空圆弧(我们会在下面判断它)(因为精度的问题)\r\n //因为精度的问题,这种0圆心角的圆弧会被当成全圆,但是偏移算法中,应该不可能出现全圆弧的圆弧,所以我们压扁它\r\n if (cu2 instanceof Arc\r\n && equaln(cu2.StartAngle, cu2.EndAngle, 1e-6)\r\n // && !equaln((this._SubCurves[d.index]).AllAngle, Math.PI * 2, 1e-3) 应该不会出现\r\n )\r\n {\r\n if (cu2.IsClockWise)\r\n cu2.StartAngle = cu2.EndAngle + 1e-6;\r\n else\r\n cu2.EndAngle = cu2.StartAngle + 1e-6;\r\n }\r\n }\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let cu1 = this._SubCurves[d.index];\r\n let cu2 = d.curve;\r\n\r\n let [p1, p2, p3, p4] = [cu1.StartPoint, cu2.StartPoint, cu1.EndPoint, cu2.EndPoint];\r\n let l1 = new Line(p1, p2);\r\n let l2 = new Line(p3, p4);\r\n\r\n let ipts = l1.IntersectWith(l2, IntersectOption.OnBothOperands, 1e-8);\r\n if (ipts.length > 0)\r\n {\r\n let p = ipts[0];\r\n l1.EndPoint = p;\r\n l2.EndPoint = p;\r\n let cus = [cu1, l1, l2];\r\n let contour = Contour.CreateContour(cus, false);\r\n if (contour)\r\n {\r\n this._TrimPolylineContours.push(contour);\r\n continue;\r\n }\r\n else\r\n {\r\n console.error(\"未预料到的错误,构建轮廓失败\" + this._OffsetDist);\r\n }\r\n }\r\n\r\n //真理1:针脚线不可能同时被两个圆弧所切割\r\n let l1Intact = true;\r\n let l2Intact = true;\r\n if (cu2 instanceof Arc)\r\n {\r\n if (Math.sign(cu2.Bul) !== this._OffsetDistSign)\r\n {\r\n let ipts1 = cu2.IntersectWith(l1, IntersectOption.OnBothOperands);\r\n let ipts2 = cu2.IntersectWith(l2, IntersectOption.OnBothOperands);\r\n\r\n let sp: Vector3;\r\n let ep: Vector3;\r\n if (ipts1.length === 2)\r\n sp = SelectNearP(ipts1, p1);\r\n if (ipts2.length === 2)\r\n ep = SelectNearP(ipts2, p3);\r\n\r\n if (sp || ep) cu2 = cu2.Clone();\r\n if (sp)\r\n {\r\n l1.EndPoint = sp;\r\n cu2.StartPoint = sp;\r\n l1Intact = false;\r\n }\r\n if (ep)\r\n {\r\n l2.EndPoint = ep;\r\n cu2.EndPoint = ep;\r\n l2Intact = false;\r\n }\r\n }\r\n }\r\n\r\n let l1PadArc: Arc;\r\n let l2PadArc: Arc;\r\n //真理2:隔壁的圆弧不可能破坏当前的圆弧,只能破坏当前的针脚\r\n if (l1Intact && d.preArc && d.preArc instanceof Arc)\r\n {\r\n let a = d.preArc;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l1, IntersectOption.OnBothOperands);\r\n if (ipts.length === 2)\r\n {\r\n let sp = SelectNearP(ipts, p1);\r\n l1.EndPoint = sp;\r\n l1PadArc = a.Clone();\r\n l1PadArc.StartPoint = sp;\r\n }\r\n }\r\n }\r\n if (l2Intact && d.nextArc && d.nextArc instanceof Arc)\r\n {\r\n let a = d.nextArc;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l2, IntersectOption.OnBothOperands);\r\n if (ipts.length === 2)\r\n {\r\n let ep = SelectNearP(ipts, p3);\r\n l2.EndPoint = ep;\r\n l2PadArc = a.Clone();\r\n l2PadArc.EndPoint = ep;\r\n }\r\n }\r\n }\r\n\r\n let pl = new Polyline();\r\n let cus = [cu1, l1];\r\n if (l1PadArc) cus.push(l1PadArc);\r\n cus.push(cu2, l2);\r\n if (l2PadArc) cus.push(l2PadArc);\r\n\r\n for (let c of cus)\r\n pl.Join(c);\r\n\r\n let contour = Contour.CreateContour(pl, false);\r\n if (contour)\r\n this._TrimPolylineContours.push(contour);\r\n else\r\n console.error(\"未预料到的错误,构建轮廓失败\" + this._OffsetDist);\r\n }\r\n\r\n if (!this._IsClose)\r\n {\r\n if (this._TrimCircleContours[0] !== this._Circles[0])\r\n this._TrimCircleContours.push(this._Circles[0]);\r\n let lastTrimCircle = arrayLast(this._TrimCircleContours);\r\n let lastCircle = arrayLast(this._Circles);\r\n if (lastTrimCircle !== lastCircle)\r\n this._TrimCircleContours.push(lastCircle);\r\n if (this._SubOffsetedCurves[0].index !== 0)\r\n this._TrimCircleContours.push(this._Circles[this._SubOffsetedCurves[0].index]);\r\n\r\n let lastIndex = this._Circles.length - 1;\r\n let lastD = arrayLast(this._SubOffsetedCurves);\r\n if (lastIndex !== lastD.index)\r\n this._TrimCircleContours.push(this._Circles[lastD.index + 1]);\r\n }\r\n\r\n this._TrimPolylineContours.push(\r\n ...this._TrimCircleContours.map(c => Contour.CreateContour(c, false)),\r\n ...this._TrimArcContours\r\n );\r\n }\r\n\r\n // 通过构建的轮廓对偏移曲线进行裁剪\r\n protected TrimByContours()\r\n {\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let c = d.curve;\r\n if (CurveIsFine(c))\r\n this._CurveTreeNodes.push(new CurveTreeNode(c));\r\n if (d.paddingCurve)\r\n this._CurveTreeNodes.push(...d.paddingCurve.map(c => new CurveTreeNode(c)));\r\n }\r\n let boxContours = SortEntityByBox(this._TrimPolylineContours, false);\r\n\r\n for (let i = 0; i < this._TrimPolylineContours.length; i++)\r\n {\r\n let c = this._TrimPolylineContours[i];\r\n for (let curveNode of this._CurveTreeNodes)\r\n {\r\n curveNode.TrimBy(c, boxContours.get(c));\r\n }\r\n }\r\n }\r\n\r\n //过滤方向相反和0长度线\r\n private FilterInvalidCurve()\r\n {\r\n this._CurveTrimedTreeNodes = [];\r\n for (let n of this._CurveTreeNodes)\r\n {\r\n let ns = n.Nodes;\r\n for (let sn of ns)\r\n {\r\n if (this.CheckPointDir(sn.curve.GetPointAtParam(0.5)))\r\n this._CurveTrimedTreeNodes.push(sn);\r\n }\r\n }\r\n }\r\n\r\n //合并共线\r\n private JoinCollinear()\r\n {\r\n for (let i = 0; i < this._CurveTrimedTreeNodes.length; i++)\r\n {\r\n let n = this._CurveTrimedTreeNodes[i];\r\n if (n.used) continue;\r\n let sp = n.curve.StartPoint;\r\n for (let j = i + 1; j < this._CurveTrimedTreeNodes.length; j++)\r\n {\r\n let n2 = this._CurveTrimedTreeNodes[j];\r\n if (n2.used) continue;\r\n let status = n.curve.Join(n2.curve);\r\n if (status === Status.ConverToCircle)\r\n {\r\n n.used = true;\r\n n2.used = true;\r\n let circle = new Circle((n.curve).Center, (n.curve).Radius);\r\n n.curve = circle;\r\n this._RetCurves.push(ConverCircleToPolyline(circle).ApplyMatrix(this._CacheOCS));\r\n }\r\n else if (status === Status.True)\r\n {\r\n if (equalv3(sp, n.curve.StartPoint))\r\n n2.used = true;\r\n else\r\n {\r\n n.used = true;\r\n n2.curve = n.curve;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //连接结果曲线,返回最终多段线\r\n private LinkResultPolyline()\r\n {\r\n let used = new Set();\r\n let cuMap = new CurveMap(1);\r\n for (let n of this._CurveTrimedTreeNodes)\r\n {\r\n if (!n.used)\r\n cuMap.AddCurveToMap(n.curve);\r\n }\r\n\r\n let preP: Vector3;\r\n\r\n let searchNext = (s: Vertice, pl: Polyline): Vertice =>\r\n {\r\n let minDist = Infinity;\r\n let minR: Route;\r\n for (let r of s.routes)\r\n {\r\n if (used.has(r.curve)) continue;\r\n\r\n if (preP)\r\n {\r\n let d = r.s.distanceToSquared(preP);\r\n if (d < minDist)\r\n {\r\n minR = r;\r\n minDist = d;\r\n }\r\n }\r\n else\r\n {\r\n minR = r;\r\n break;\r\n }\r\n }\r\n\r\n if (minR)\r\n {\r\n used.add(minR.curve);\r\n preP = minR.e;\r\n let status = pl.Join(minR.curve, false, 5e-2);\r\n if (status !== Status.True)\r\n console.warn(\"连接失败\");\r\n return minR.to;\r\n }\r\n };\r\n\r\n for (let s of cuMap.Stands)\r\n {\r\n preP = undefined;\r\n let pl = new Polyline();\r\n let ss = s;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl);\r\n ss = s;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl);\r\n\r\n if (pl.NumberOfVertices > 1)\r\n {\r\n //避免0长度的线\r\n if (pl.NumberOfVertices === 2 && pl.Length < 1e-6) continue;\r\n\r\n let d = pl.LineData;\r\n let ld = arrayLast(d);\r\n if (equalv2(d[0].pt, ld.pt, 1e-2))\r\n ld.pt.copy(d[0].pt);\r\n this._RetCurves.push(pl.ApplyMatrix(this._CacheOCS));\r\n }\r\n }\r\n }\r\n\r\n CheckPointDir(pt: Vector3): boolean\r\n {\r\n return this.GetPointAtCurveDir(pt) === this._OffsetDistSign;\r\n }\r\n\r\n GetPointAtCurveDir(pt: Vector3): number\r\n {\r\n let minIndex = Infinity;\r\n let minDist = Infinity;\r\n let minCp: Vector3;\r\n for (let i = 0; i < this._SubCurves.length; i++)\r\n {\r\n let c = this._SubCurves[i];\r\n let cp = c.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-5)) return 0;\r\n\r\n let dist = cp.distanceToSquared(pt);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n minIndex = i;\r\n minCp = cp;\r\n }\r\n }\r\n\r\n let c = this._SubCurves[minIndex];\r\n let param = c.GetParamAtPoint(minCp);\r\n\r\n if (equaln(param, 0) && ((minIndex === 0) ? this._IsClose : true))\r\n {\r\n let preIndex = FixIndex(minIndex - 1, this._SubCurves);\r\n let preCurve = this._SubCurves[preIndex];\r\n\r\n if (!equalv3(c.GetFistDeriv(0).normalize(), preCurve.GetFistDeriv(1).normalize()))\r\n {\r\n let p = c.StartPoint;\r\n let l1 = c.Length;\r\n let l2 = preCurve.Length;\r\n let minLength = Math.min(l1, l2) * 0.2;\r\n\r\n let nextP: Vector3;\r\n let preP: Vector3;\r\n if (c instanceof Arc)\r\n nextP = c.GetPointAtDistance(minLength);\r\n else\r\n nextP = c.EndPoint;\r\n\r\n if (preCurve instanceof Arc)\r\n preP = preCurve.GetPointAtDistance(l2 - minLength);\r\n else\r\n preP = preCurve.StartPoint;\r\n\r\n let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p)));\r\n\r\n let dir = arc.PtOnCurve3(pt) ? -1 : 1;\r\n return dir;\r\n }\r\n }\r\n else if (equaln(param, 1) && ((minIndex === this._SubCurves.length - 1) ? this._IsClose : true))\r\n {\r\n let nextIndex = FixIndex(minIndex + 1, this._SubCurves);\r\n let nextCurve = this._SubCurves[nextIndex];\r\n\r\n if (!equalv3(c.GetFistDeriv(1).normalize(), nextCurve.GetFistDeriv(0).normalize()))\r\n {\r\n let p = c.EndPoint;\r\n\r\n let l1 = c.Length;\r\n let l2 = nextCurve.Length;\r\n let minLength = Math.min(l1, l2) * 0.2;\r\n\r\n let nextP: Vector3;\r\n let preP: Vector3;\r\n if (c instanceof Arc)\r\n preP = c.GetPointAtDistance(l1 - minLength);\r\n else\r\n preP = c.StartPoint;\r\n\r\n if (nextCurve instanceof Arc)\r\n nextP = nextCurve.GetPointAtDistance(minLength);\r\n else\r\n nextP = nextCurve.EndPoint;\r\n\r\n let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p)));\r\n\r\n let dir = arc.PtOnCurve3(pt) ? -1 : 1;\r\n return dir;\r\n }\r\n }\r\n\r\n let dri = c.GetFistDeriv(param);\r\n let cross = dri.cross(pt.clone().sub(minCp));\r\n return -Math.sign(cross.z);\r\n }\r\n\r\n protected CreateArc(center: Vector3, startP: Vector3, endP?: Vector3)\r\n {\r\n let sa = angle(startP.clone().sub(center));\r\n let ea = endP ? angle(endP.clone().sub(center)) : sa;\r\n let arc = new Arc(center, Math.abs(this._OffsetDist), sa, ea, this._OffsetDist < 0);\r\n return arc;\r\n }\r\n}\r\n\r\nfunction EntityEncode(c: Curve)\r\n{\r\n if (c instanceof Line) return 1;\r\n else return 2;\r\n}\r\nfunction EntityEncode2(c1: Curve, c2: Curve)\r\n{\r\n return EntityEncode(c1) & EntityEncode(c2);\r\n}\r\n\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nfunction CurveIsFine(curve: Curve)\r\n{\r\n if (curve instanceof Arc && curve.AllAngle < 2e-6) return false;\r\n return curve.Length > 5e-5;\r\n}\r\n","import { Vector2, Vector3 } from 'three';\r\nimport { angle, equaln, equalv3 } from '../Geometry/GeUtils';\r\nimport { IntersectOption } from '../GraphicsSystem/IntersectWith';\r\nimport { Arc } from './Entity/Arc';\r\nimport { Line } from './Entity/Line';\r\nimport { Polyline } from './Entity/Polyline';\r\n\r\n/**\r\n * 点在扇形内部,提供一个简单实现的版本.\r\n * 优化版本请参照:http://www.cnblogs.com/miloyip/archive/2013/04/19/3029852.html\r\n * \r\n * @param arc 二维圆弧\r\n * @param pt \r\n * @returns 点在扇形内部.\r\n */\r\nfunction IsPointInCircularSector(arc: Arc, pt: Vector3): boolean\r\n{\r\n let center = arc.Center;\r\n let disSq = center.distanceTo(pt);\r\n if (disSq > arc.Radius * arc.Radius) return false;\r\n let an = angle(pt.clone().sub(center));\r\n let param = arc.GetParamAtAngle(an);\r\n return arc.ParamOnCurve(param);\r\n}\r\n\r\n/**\r\n * 点在弓型内部\r\n * \r\n * @param arc 二维圆弧\r\n * @param pt 点\r\n * @param isInChrodIsTrue 当点在弦上也认为在弓形内部\r\n * @returns 点在内部\r\n */\r\nexport function IsPointInBowArc(arc: Arc, pt: Vector3, isInChrodIsTrue = false): boolean\r\n{\r\n let pv = pt.clone().sub(arc.StartPoint);\r\n let av = arc.EndPoint.sub(arc.StartPoint);\r\n\r\n pv.cross(av);\r\n\r\n //未优化的代码\r\n // if (pv.z > 0 && arc.IsClockWise)\r\n // return false;\r\n // else if (pv.z < 0 && !arc.IsClockWise)\r\n // return false;\r\n // else\r\n // return arc.Center.distanceToSquared(pt) < arc.Radius * arc.Radius;\r\n\r\n //简化的代码\r\n if ((pv.z > 0) !== arc.IsClockWise || (isInChrodIsTrue && equaln(pv.z, 0)))\r\n {\r\n return arc.Center.distanceToSquared(pt) < arc.Radius * arc.Radius;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * 判断点在多段线内外\r\n * @param pl 多段线\r\n * @param pt 点\r\n * @returns 点在多段线内部\r\n */\r\nexport function IsPointInPolyLine(pl: Polyline, pt: Vector3): boolean\r\n{\r\n let crossings = 0;\r\n\r\n let insLine = new Line(pt, pt.clone().add(new Vector3(0, 10, 0)));\r\n\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n if (equaln(pl.GetBuilgeAt(i), 0, 5e-6))//直线\r\n {\r\n let sp = pl.GetPointAtParam(i);\r\n let ep = pl.GetPointAtParam(i + 1);\r\n //点位于线上面\r\n if (pt.y > Math.max(sp.y, ep.y))\r\n continue;\r\n //线垂直Y轴\r\n let derX = ep.x - sp.x;\r\n if (equaln(derX, 0, 5e-6))\r\n continue;\r\n\r\n //起点\r\n if (equaln(sp.x, pt.x, 5e-6))\r\n {\r\n if (sp.y > pt.y && derX < 0) crossings++;\r\n continue;\r\n }\r\n //终点\r\n if (equaln(ep.x, pt.x, 5e-6))\r\n {\r\n if (ep.y > pt.y && derX > 0) crossings++;\r\n continue;\r\n }\r\n\r\n //快速求交,只验证有没有交点\r\n let [x1, x2] = sp.x > ep.x ? [ep.x, sp.x] : [sp.x, ep.x];\r\n if (pt.x > x1 && pt.x < x2)\r\n {\r\n let derY = ep.y - sp.y;\r\n let k = derY / derX;\r\n\r\n if ((pt.x - sp.x) * k + sp.y > pt.y)\r\n crossings++;\r\n }\r\n }\r\n else //圆弧\r\n {\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n let sp = arc.StartPoint;\r\n let ep = arc.EndPoint;\r\n\r\n //如果相切\r\n if (equaln(Math.abs(pt.x - arc.Center.x), arc.Radius))\r\n {\r\n //当点和起点或者终点和点相切时\r\n if (equaln(sp.x, pt.x) && sp.y > pt.y)\r\n {\r\n if (ep.x - sp.x < -1e-5)\r\n crossings++;\r\n }\r\n else if (equaln(ep.x, pt.x) && ep.y > pt.y)\r\n {\r\n if (ep.x - sp.x > 1e-5)\r\n crossings++;\r\n }\r\n continue;\r\n }\r\n if (equaln(sp.x, pt.x) && sp.y > pt.y)\r\n {\r\n let der = arc.GetFistDeriv(0);\r\n if (der.x < -1e-5)\r\n crossings++;\r\n }\r\n if (equaln(ep.x, pt.x) && ep.y > pt.y)\r\n {\r\n let der = arc.GetFistDeriv(1);\r\n if (der.x > 1e-5)\r\n crossings++;\r\n }\r\n\r\n for (let pti of arc.IntersectWith(insLine, IntersectOption.ExtendArg))\r\n {\r\n if (pti.y < pt.y || equalv3(sp, pti, 1e-5) || equalv3(ep, pti, 1e-5))\r\n continue;\r\n\r\n let der = arc.GetFistDeriv(pti);\r\n if (!equaln(der.x, 0)) //相切.\r\n crossings++;\r\n }\r\n }\r\n }\r\n\r\n return (crossings % 2) === 1;\r\n}\r\n\r\n/**\r\n * 点在区域内部\r\n * \r\n * @param pt \r\n * @param pts \r\n * @returns \r\n */\r\nfunction IsPointInPolygon(pt: Vector3, pts: Vector2[])\r\n{\r\n let crossings = 0; //int\r\n let [px, py] = [pt.x, pt.y];\r\n\r\n let ptCout = pts.length;\r\n for (let i = 0; i < ptCout; i++)\r\n {\r\n let pti = pts[i];\r\n let ptn = pts[(i + 1) % ptCout];\r\n\r\n let [x1, x2] = [pti.x, ptn.x];\r\n\r\n /* This is done to ensure that we get the same result when\r\n the line goes from left to right and right to left */\r\n if (x1 > x2) [x1, x2] = [x2, x1];\r\n\r\n /* First check if the ray is possible to cross the line */\r\n if (px > x1 && px <= x2 && (py < pti.y || py <= ptn.y))\r\n {\r\n const eps = 0.000001;\r\n\r\n /* Calculate the equation of the line */\r\n let dx = ptn.x - pti.x;\r\n let dy = ptn.y - pti.y;\r\n let k;\r\n\r\n if (Math.abs(dx) < eps)\r\n k = 1e300;\r\n else\r\n k = dy / dx;\r\n\r\n let m = pti.y - k * pts[i].x;\r\n\r\n /* Find if the ray crosses the line */\r\n let y2 = k * px + m;\r\n if (py <= y2)\r\n crossings++;\r\n }\r\n }\r\n\r\n return crossings % 2 === 1;\r\n}\r\n","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Matrix3, Matrix4, Object3D, Vector2, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { CreateBoardUtil } from '../../ApplicationServices/mesh/createBoard';\r\nimport { arrayLast, arrayRemoveDuplicateBySort, changeArrayStartIndex } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { ComputerCurvesNormalOCS, getDeterminantFor2V } from '../../Common/CurveUtils';\r\nimport { matrixAlignCoordSys, matrixIsCoplane, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { FixIndex } from '../../Common/Utils';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, updateGeometry } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../../GraphicsSystem/OffsetPolyline';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Arc } from './Arc';\r\nimport { Curve, ExtendType } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Line } from './Line';\r\n\r\nexport interface PolylineProps\r\n{\r\n pt: Vector2,\r\n bul: number;\r\n}\r\n@Factory\r\nexport class Polyline extends Curve\r\n{\r\n private _ClosedMark: boolean = false;\r\n constructor(private _LineData: PolylineProps[] = [])\r\n {\r\n super();\r\n }\r\n\r\n UpdateMatrixTo(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p = new Vector3().setFromMatrixPosition(m);\r\n p.applyMatrix4(this.OCSInv);\r\n if (equaln(p.z, 0))\r\n {\r\n let dir = Math.sign(this.Area2);\r\n let tm = matrixAlignCoordSys(this.OCS, m);\r\n for (let p of this._LineData)\r\n {\r\n let p3 = AsVector3(p.pt);\r\n p3.applyMatrix4(tm);\r\n p.pt.set(p3.x, p3.y);\r\n }\r\n this.OCS = m;\r\n let newDir = Math.sign(this.Area2);\r\n if (dir !== newDir)\r\n for (let p of this._LineData)\r\n p.bul *= -1;\r\n }\r\n }\r\n\r\n /**\r\n * 原地翻转,仅改变法向量\r\n */\r\n Flip()\r\n {\r\n this.WriteAllObjectRecord();\r\n let x = new Vector3();\r\n let y = new Vector3();\r\n let z = new Vector3();\r\n this._Matrix.extractBasis(x, y, z);\r\n z.negate();\r\n y.crossVectors(z, x);\r\n let p = this.Position;\r\n this._Matrix.makeBasis(x, y, z).setPosition(p);\r\n\r\n for (let d of this._LineData)\r\n {\r\n d.pt.y *= -1;\r\n d.bul *= -1;\r\n }\r\n this.Update();\r\n return this;\r\n }\r\n\r\n //翻转曲线,首尾调换\r\n Reverse(): this\r\n {\r\n if (this._LineData.length === 0)\r\n return this;\r\n this.WriteAllObjectRecord();\r\n\r\n let pts = [];\r\n let buls = [];\r\n for (let data of this._LineData)\r\n {\r\n pts.push(data.pt);\r\n buls.push(-data.bul);\r\n }\r\n\r\n let lastBul = buls.pop();\r\n buls.reverse();\r\n buls.push(lastBul);\r\n\r\n pts.reverse();\r\n\r\n if (this._ClosedMark && !equalv2(pts[0], arrayLast(pts)))\r\n {\r\n pts.unshift(pts.pop());\r\n buls.unshift(buls.pop());\r\n }\r\n\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let d = this._LineData[i];\r\n d.pt = pts[i];\r\n d.bul = buls[i];\r\n }\r\n\r\n return this;\r\n }\r\n set LineData(data: PolylineProps[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData = data;\r\n this.Update();\r\n }\r\n get LineData()\r\n {\r\n return this._LineData;\r\n }\r\n\r\n get NumberOfVertices(): number\r\n {\r\n return this._LineData.length;\r\n }\r\n\r\n /**\r\n * 在指定位置插入点.\r\n * 例如:\r\n * pl.AddVertexAt(pl.NumberOfVerticesk,p);//在末尾插入一个点\r\n *\r\n * @param {number} index 索引位置\r\n * @param {Vector2} pt 点\r\n * @returns {this}\r\n * @memberof Polyline\r\n */\r\n AddVertexAt(index: number, pt: Vector2 | Vector2[]): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let pts: PolylineProps[];\r\n if (Array.isArray(pt))\r\n {\r\n pts = pt.map(p =>\r\n {\r\n return {\r\n pt: p.clone(),\r\n bul: 0\r\n };\r\n });\r\n }\r\n else\r\n pts = [{ pt: pt.clone(), bul: 0 }];\r\n\r\n this._LineData.splice(index, 0, ...pts);\r\n this.Update();\r\n return this;\r\n }\r\n RemoveVertexAt(index: number): this\r\n {\r\n if (index < this._LineData.length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.splice(index, 1);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n RemoveVertexIn(from: number, to: number): this\r\n {\r\n if (from + 1 < this._LineData.length && to > from)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.splice(from + 1, to - from - 1);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * 重设闭合多段线的起点\r\n * @param index 起始index,如果index非整数,将用最接近的整数作为起始索引\r\n */\r\n ResetStartPoint(index: number)\r\n {\r\n if (!this.IsClose || index >= this.EndParam) return false;\r\n\r\n if (equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt))\r\n this._LineData.pop();\r\n\r\n changeArrayStartIndex(this._LineData, Math.floor(index + 0.5));\r\n this._LineData.push({\r\n pt: this._LineData[0].pt.clone(),\r\n bul: 0\r\n });\r\n return true;\r\n }\r\n GetPoint2dAt(index: number): Vector2 | undefined\r\n {\r\n if (index >= 0 && this._LineData.length > index)\r\n return this._LineData[index].pt.clone();\r\n }\r\n /**\r\n * 设置指定点的位置\r\n *\r\n * @param {number} index\r\n * @param {Vector2} pt\r\n * @memberof Polyline\r\n */\r\n SetPointAt(index: number, pt: Vector2): this\r\n {\r\n let d = this._LineData[index];\r\n if (d)\r\n {\r\n this.WriteAllObjectRecord();\r\n d.pt.copy(pt);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n for (let i = 0; i <= this.EndParam; i++)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n p.applyMatrix4(m).applyMatrix4(this.OCSInv);\r\n this.SetPointAt(i, AsVector2(p));\r\n }\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldPts = this.GetStretchPoints();\r\n reviseMirrorMatrix(this._Matrix);\r\n for (let i = 0; i < oldPts.length; i++)\r\n {\r\n let newP = oldPts[i].applyMatrix4(this.OCSInv);\r\n let newBul = -this.GetBuilgeAt(i);\r\n this.SetPointAt(i, AsVector2(newP));\r\n this.SetBulgeAt(i, newBul);\r\n }\r\n this.Reverse();\r\n return this;\r\n }\r\n SetBulgeAt(index: number, bul: number): this\r\n {\r\n let d = this._LineData[index];\r\n if (d)\r\n {\r\n this.WriteAllObjectRecord();\r\n d.bul = bul;\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n GetBuilgeAt(index: number): number\r\n {\r\n return this._LineData[index].bul;\r\n }\r\n Rectangle(length: number, height: number): this\r\n {\r\n this.LineData = [\r\n { pt: new Vector2(), bul: 0 },\r\n { pt: new Vector2(length), bul: 0 },\r\n { pt: new Vector2(length, height), bul: 0 },\r\n { pt: new Vector2(0, height), bul: 0 }];\r\n this.CloseMark = true;\r\n return this;\r\n }\r\n RectangleFrom2Pt(p1: Vector3, p2: Vector3): this\r\n {\r\n let box = new Box3();\r\n box.setFromPoints([p2, p1].map((p: Vector3) => p.clone().applyMatrix4(this.OCSInv)));\r\n\r\n let px1 = AsVector2(box.min);\r\n let px3 = AsVector2(box.max);\r\n let px2 = new Vector2(px3.x, px1.y);\r\n let px4 = new Vector2(px1.x, px3.y);\r\n\r\n this.LineData = [\r\n { pt: px1, bul: 0 },\r\n { pt: px2, bul: 0 },\r\n { pt: px3, bul: 0 },\r\n { pt: px4, bul: 0 }];\r\n\r\n this.CloseMark = true;\r\n return this;\r\n }\r\n //多段线起点\r\n get StartPoint()\r\n {\r\n if (this._LineData.length > 0)\r\n return AsVector3(this._LineData[0].pt).applyMatrix4(this.OCS);\r\n return new Vector3();\r\n }\r\n set StartPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n\r\n if (this._LineData.length === 0)\r\n this.AddVertexAt(0, AsVector2(p));\r\n else if (this._LineData.length === 1)\r\n this.SetPointAt(0, AsVector2(p));\r\n else\r\n {\r\n let bul = this.GetBuilgeAt(0);\r\n if (bul !== 0)\r\n {\r\n let arc = this.GetCurveAtParam(0) as Arc;\r\n arc.StartPoint = p;\r\n //前面线的凸度调整\r\n this.SetBulgeAt(0, Math.tan(arc.AllAngle / 4) * Math.sign(bul));\r\n }\r\n this.SetPointAt(0, AsVector2(p));\r\n }\r\n }\r\n get EndPoint()\r\n {\r\n if (this._ClosedMark) return this.StartPoint;\r\n if (this._LineData.length > 0)\r\n return AsVector3(this._LineData[this.EndParam].pt).applyMatrix4(this.OCS);\r\n return new Vector3();\r\n }\r\n set EndPoint(p: Vector3)\r\n {\r\n if (this._LineData.length < 2 || this.CloseMark)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n\r\n let bul = this.GetBuilgeAt(this.EndParam - 1);\r\n if (bul !== 0)\r\n {\r\n let arc = this.GetCurveAtParam(this.EndParam - 1) as Arc;\r\n arc.ApplyMatrix(this.OCSInv);\r\n arc.EndPoint = p;\r\n //前面线的凸度调整\r\n this.SetBulgeAt(this.EndParam - 1, Math.tan(arc.AllAngle / 4) * Math.sign(bul));\r\n }\r\n this.SetPointAt(this.EndParam, AsVector2(p));\r\n }\r\n\r\n get CurveCount(): number\r\n {\r\n return this.EndParam;\r\n }\r\n\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n\r\n /**\r\n * 表示最后一条曲线的终止参数,使用该参数可以直接遍历到多段线的所有子线段. for(i 1 && (equalv3(this.StartPoint, this.EndPoint, 1e-4)));\r\n }\r\n set CloseMark(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = v;\r\n this.Update();\r\n }\r\n\r\n DigestionCloseMark()\r\n {\r\n if (this._ClosedMark && this._LineData.length > 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = false;\r\n\r\n if (!equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt))\r\n this._LineData.push({ pt: AsVector2(this._LineData[0].pt), bul: 0 });\r\n }\r\n }\r\n\r\n get Length()\r\n {\r\n return this.Explode().reduce((l, cu) => l + cu.Length, 0);\r\n }\r\n\r\n /**\r\n * 获得指定参数所在的点.\r\n * 当曲线存在闭合标志时,参数必须在曲线内部.\r\n * 当曲线不存在闭合标志时,参数允许延伸出曲线.\r\n *\r\n * @param {number} param 参数\r\n * @returns {Vector3} 三维点,可为空\r\n * @memberof Polyline\r\n */\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n if (param === Math.floor(param) && this.ParamOnCurve(param))\r\n return AsVector3(this.GetPoint2dAt(FixIndex(param, this.NumberOfVertices))).applyMatrix4(this.OCS);\r\n let cu: Curve = this.GetCurveAtParam(param);\r\n if (cu)\r\n return cu.GetPointAtParam(this.GetCurveParamAtParam(param));\r\n return undefined;\r\n }\r\n\r\n GetDistAtParam(param: number): number\r\n {\r\n if (this._ClosedMark && !this.ParamOnCurve(param))\r\n return NaN;\r\n\r\n //参数 整数\r\n let paramFloor = Math.floor(param);\r\n //需要计算的曲线个数\r\n let cuCout = paramFloor > this.EndParam ? this.EndParam : paramFloor;\r\n\r\n let dist = 0;\r\n //首先计算完整曲线的长度\r\n for (let i = 0; i < cuCout; i++)\r\n {\r\n dist += this.GetCurveAtIndex(i).Length;\r\n }\r\n\r\n //参数已经大于索引,证明参数在线外.\r\n if (paramFloor !== cuCout)\r\n {\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCout);\r\n }\r\n else if (param > paramFloor)\r\n {\r\n let lastParam = param - paramFloor;\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(lastParam);\r\n }\r\n\r\n return dist;\r\n }\r\n GetPointAtDistance(dist: number): Vector3\r\n {\r\n let param = this.GetParamAtDist(dist);\r\n return this.GetPointAtParam(param);\r\n }\r\n\r\n /**\r\n * 返回参数所在的点. 如果曲线不闭合,会试图返回延伸点参数\r\n *\r\n * @param {Vector3} pt\r\n * @returns {number}\r\n * @memberof Polyline\r\n */\r\n GetParamAtPoint(pt: Vector3): number\r\n {\r\n let cus = this.Explode();\r\n if (cus.length === 0) return NaN;\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let param = cu.GetParamAtPoint(pt);\r\n if (cu.ParamOnCurve(param))\r\n return i + param; //返回点在曲线内部的参数\r\n }\r\n\r\n //当曲线闭合时,不需要延伸首尾去判断参数\r\n if (this._ClosedMark) return NaN;\r\n\r\n //起点终点参数集合\r\n let seParams: number[] = [];\r\n //点在第一条曲线上的参数\r\n let startParam = cus[0].GetParamAtPoint(pt);\r\n if (!isNaN(startParam) && startParam < 0)\r\n seParams.push(startParam);\r\n //点在最后一条线上的参数\r\n let endParam = cus[cus.length - 1].GetParamAtPoint(pt);\r\n if (!isNaN(endParam) && endParam > 0)\r\n seParams.push(endParam + this.EndParam - 1);\r\n\r\n if (seParams.length == 1)\r\n {\r\n return seParams[0];\r\n }\r\n else if (seParams.length == 2)\r\n {\r\n //返回较近的参数\r\n if (pt.distanceToSquared(this.StartPoint)\r\n < pt.distanceToSquared(this.EndPoint))\r\n return seParams[0];\r\n else\r\n return seParams[1];\r\n }\r\n return NaN;\r\n }\r\n GetParamAtDist(dist: number): number\r\n {\r\n let cus = this.Explode();\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let len = cu.Length;\r\n if (dist <= len)\r\n return i + cu.GetParamAtDist(dist);\r\n else if (equaln(dist, len, 1e-8))\r\n return i + 1;\r\n dist -= len;\r\n }\r\n if (!this._ClosedMark)\r\n return cus.length + cus[cus.length - 1].GetParamAtDist(dist);\r\n\r\n return NaN;\r\n }\r\n GetDistAtPoint(pt: Vector3): number\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n if (!this.ParamOnCurve(param)) return NaN;\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n /**\r\n * 返回曲线的一阶导数.\r\n * 当曲线闭合(标志)且点不在曲线上.\r\n * 或者曲线不闭合(标志) 且点不在曲线上也不在延伸上\r\n *\r\n * @param {(number | Vector3)} param\r\n * @returns {Vector3}\r\n * @memberof Polyline\r\n */\r\n GetFistDeriv(param: number | Vector3): Vector3\r\n {\r\n if (param instanceof Vector3)\r\n param = this.GetParamAtPoint(param);\r\n\r\n if (isNaN(param))\r\n return undefined;\r\n\r\n let cu = this.GetCurveAtParam(param);\r\n\r\n if (!cu) return undefined;\r\n\r\n return cu.GetFistDeriv(this.GetCurveParamAtParam(param));\r\n }\r\n GetSplitCurves(param: number[] | number): Array\r\n {\r\n //参数需要转化为参数数组\r\n let params: number[];\r\n if (typeof param == \"number\")\r\n params = [param];\r\n else\r\n params = param;\r\n\r\n //校验参数在曲线中,修正参数\r\n let endParam = this.EndParam;\r\n params = params.filter(p => this.ParamOnCurve(p) && p > -1e-6)\r\n .map(a =>\r\n {\r\n if (a < 0) return 0;\r\n if (a > endParam) return endParam;\r\n if (equaln(a, Math.floor(a + 0.5), 1e-8))\r\n return Math.floor(a + 0.5);\r\n return a;\r\n });\r\n //排序\r\n params.sort((a, b) => a - b);\r\n let hasEndParam = arrayLast(params) === this.EndParam;\r\n //必须加入最后一个参数,保证切割后的曲线完整\r\n if (!hasEndParam)\r\n params.push(this.EndParam);\r\n arrayRemoveDuplicateBySort(params, (e1, e2) => equaln(e1, e2, 1e-8));\r\n params = params.filter(p => this.ParamOnCurve(p));\r\n if (params.length === 0)\r\n return [];\r\n\r\n //判断是否存在0参数\r\n let hasZeroParam = params[0] === 0;\r\n if (hasZeroParam)\r\n params.shift();\r\n\r\n let { pts, buls } = this.PtsBuls;\r\n\r\n //返回的多段线集合\r\n let pls: Polyline[] = [];\r\n\r\n let len = 0;//已经走过的参数长度(整数)\r\n\r\n //上一个切割参数的位置 0-1\r\n let prePa = 0;\r\n for (let pa of params)\r\n {\r\n //参数所在点\r\n let pt = AsVector2(this.GetPointAtParam(pa).applyMatrix4(this.OCSInv));\r\n pa -= len;\r\n let pafloor = Math.floor(pa);\r\n len += pafloor;\r\n\r\n let plData: PolylineProps[] = [];\r\n\r\n //添加点\r\n for (let i = 0; i < pafloor; i++)\r\n {\r\n if (i === 0 && !equaln(buls[0], 0, 1e-8))\r\n {\r\n buls[0] = Math.tan((1 - prePa) * Math.atan(buls[0]));\r\n }\r\n plData.push({ pt: pts[0], bul: buls[0] });\r\n pts.shift();\r\n buls.shift();\r\n }\r\n\r\n if (equaln(pa, pafloor, 1e-8))//如果pa在点上\r\n {\r\n plData.push({ pt: pts[0].clone(), bul: buls[0] });\r\n }\r\n else //在曲线上\r\n {\r\n let bul: number = buls[0];\r\n if (!equaln(bul, 0, 1e-6))\r\n bul = Math.tan((pa - pafloor - (0 === pafloor ? prePa : 0)) * Math.atan(buls[0])); //->凸度\r\n\r\n //加入顶点+凸度\r\n plData.push({ pt: pts[0].clone(), bul });\r\n //终点\r\n plData.push({ pt, bul: 0 });\r\n\r\n //修正剩余的点表和凸度表\r\n pts[0].copy(pt);\r\n }\r\n\r\n prePa = pa - pafloor;\r\n if (plData.length > 1)\r\n {\r\n let pl = new Polyline(plData).ApplyMatrix(this.OCS);\r\n pl.ColorIndex = this.ColorIndex;\r\n pls.push(pl);\r\n }\r\n }\r\n\r\n //当曲线为闭合曲线,并且不存在0切割参数时,首尾连接曲线\r\n if (this._ClosedMark && !hasZeroParam && !hasEndParam)\r\n {\r\n let lastPl = pls[pls.length - 1];\r\n if (equalv2(arrayLast(lastPl._LineData).pt, pls[0]._LineData[0].pt))\r\n lastPl._LineData.pop();\r\n\r\n lastPl._LineData.push(...pls[0]._LineData);\r\n\r\n pls.shift();\r\n }\r\n return pls;\r\n }\r\n\r\n //未完善\r\n GetCurveAtParamRange(startParam: number, endParam: number): Array\r\n {\r\n let sfloor = Math.floor(startParam + 0.5);\r\n if (equaln(sfloor, startParam, 1e-8)) startParam = sfloor;\r\n else sfloor = Math.floor(startParam);\r\n let efloor = Math.floor(endParam + 0.5);\r\n if (equaln(efloor, endParam, 1e-8)) endParam = efloor;\r\n else efloor = Math.floor(efloor);\r\n\r\n const GetCurve = (index: number) =>\r\n {\r\n let d = this._LineData[index];\r\n let next = this._LineData[index + 1];\r\n if (!equaln(d.bul, 0, 1e-8))\r\n return new Arc().ParseFromBul(d.pt, next.pt, d.bul);\r\n else\r\n return new Line(AsVector3(d.pt), AsVector3(next.pt));\r\n };\r\n\r\n let lined: PolylineProps[] = [];\r\n if (startParam === sfloor)\r\n {\r\n let d = this._LineData[sfloor];\r\n lined.push({ pt: d.pt.clone(), bul: d.bul });\r\n }\r\n else\r\n {\r\n let d = this._LineData[sfloor];\r\n let cu = GetCurve(sfloor);\r\n let remParam = startParam - sfloor;\r\n let p = cu.GetPointAtParam(remParam);\r\n let bul = d.bul;\r\n if (!equaln(bul, 0))\r\n bul = Math.tan(Math.atan(bul) * (1 - remParam));\r\n lined.push({ pt: AsVector2(p), bul: bul });\r\n }\r\n\r\n for (let i = sfloor + 1; i < efloor; i++)\r\n {\r\n let d = this._LineData[i];\r\n lined.push({ pt: d.pt.clone(), bul: d.bul });\r\n }\r\n\r\n if (efloor !== endParam)\r\n {\r\n let d = this.LineData[efloor];\r\n let remParam = endParam - efloor;\r\n let cu = GetCurve(efloor);\r\n let p = cu.GetPointAtParam(remParam);\r\n let bul = d.bul;\r\n if (!equaln(bul, 0))\r\n {\r\n arrayLast(lined).bul = Math.tan(Math.atan(bul) * remParam);\r\n bul = Math.tan(Math.atan(bul) * (1 - remParam));\r\n }\r\n lined.push({ pt: AsVector2(p), bul });\r\n }\r\n\r\n let pl = new Polyline(lined);\r\n pl.OCS = this.OCSNoClone;\r\n return;\r\n }\r\n\r\n Extend(newParam: number)\r\n {\r\n if (this.CloseMark || this.ParamOnCurve(newParam)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let ptIndex: number;\r\n let bulIndex: number;\r\n\r\n if (newParam < 0)\r\n {\r\n ptIndex = 0;\r\n bulIndex = 0;\r\n }\r\n else if (newParam > this.EndParam)\r\n {\r\n ptIndex = this.EndParam;\r\n bulIndex = ptIndex - 1;\r\n }\r\n\r\n //修改顶点\r\n this._LineData[ptIndex].pt = AsVector2(this.GetPointAtParam(newParam).applyMatrix4(this.OCSInv));\r\n\r\n //修改凸度\r\n let oldBul = this._LineData[bulIndex].bul;\r\n if (oldBul != 0)\r\n this._LineData[bulIndex].bul = Math.tan(Math.atan(oldBul) * (1 + newParam - ptIndex));\r\n\r\n this.Update();\r\n }\r\n\r\n //const this\r\n MatrixAlignTo2(toMatrix: Matrix4)\r\n {\r\n if (!matrixIsCoplane(this._Matrix, toMatrix, 1e-4))\r\n return this.PtsBuls;\r\n\r\n let m = matrixAlignCoordSys(this._Matrix, toMatrix);\r\n\r\n let z1 = this.Normal;\r\n let z2 = new Vector3().setFromMatrixColumn(toMatrix, 2);\r\n let isMirror = equalv3(z1, z2.negate());\r\n\r\n let pts: Vector2[] = [];\r\n let buls: number[] = [];\r\n for (let d of this._LineData)\r\n {\r\n let p = AsVector2(AsVector3(d.pt).applyMatrix4(m));\r\n pts.push(p);\r\n buls.push(isMirror ? -d.bul : d.bul);\r\n }\r\n return { pts, buls };\r\n }\r\n\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-4)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (this._ClosedMark)\r\n return Status.False;\r\n\r\n let [sp, ep, cuSp, cuEp] = [this.StartPoint, this.EndPoint, cu.StartPoint, cu.EndPoint];\r\n\r\n let ocsInv = this.OCSInv;\r\n let [cuSp2, cuEp2] = [cuSp, cuEp].map(p => AsVector2(p.clone().applyMatrix4(ocsInv)));\r\n\r\n if (this._LineData.length === 0)\r\n {\r\n if (cu instanceof Line)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: cu.Bul });\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (cu instanceof Polyline)\r\n {\r\n let f = new CADFiler();\r\n cu.WriteFile(f);\r\n this.ReadFile(f);\r\n }\r\n else\r\n return Status.False;\r\n }\r\n else\r\n {\r\n enum LinkType\r\n {\r\n None = 0,\r\n SpSp = 1,\r\n SpEp = 2,\r\n EpSp = 3,\r\n EpEp = 4,\r\n };\r\n\r\n let spspDisSq = cuSp.distanceToSquared(sp);\r\n let spepDisSq = cuSp.distanceToSquared(ep);\r\n let epspDisSq = cuEp.distanceToSquared(sp);\r\n let epepDisSq = cuEp.distanceToSquared(ep);\r\n let minDis = tolerance * tolerance;\r\n\r\n let linkType = LinkType.None;\r\n\r\n if (spspDisSq < minDis)\r\n {\r\n linkType = LinkType.SpSp;\r\n minDis = spspDisSq;\r\n }\r\n\r\n if (spepDisSq < minDis)\r\n {\r\n linkType = LinkType.SpEp;\r\n minDis = spepDisSq;\r\n }\r\n\r\n if (epspDisSq < minDis)\r\n {\r\n linkType = LinkType.EpSp;\r\n minDis = epspDisSq;\r\n }\r\n\r\n if (epepDisSq < minDis)\r\n linkType = LinkType.EpEp;\r\n\r\n if (linkType === LinkType.None)\r\n return Status.False;\r\n\r\n if (cu instanceof Line)\r\n {\r\n if (linkType === LinkType.SpSp)\r\n {\r\n this._LineData.unshift({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n this._LineData.unshift({ pt: cuSp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n }\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n let dir = equalv3(this.Normal, cu.Normal.negate()) ? -1 : 1;\r\n let bul = cu.Bul * dir;\r\n if (linkType === LinkType.SpSp)\r\n {\r\n this._LineData.unshift({ pt: cuEp2, bul: -bul });\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n arrayLast(this._LineData).bul = bul;\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n this._LineData.unshift({ pt: cuSp2, bul: bul });\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n arrayLast(this._LineData).bul = -bul;\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n }\r\n }\r\n else if (cu instanceof Polyline)\r\n {\r\n if (cu.CloseMark) return Status.False;\r\n\r\n let { pts, buls } = this.PtsBuls;\r\n\r\n if (linkType === LinkType.SpSp)\r\n {\r\n cu.Reverse();\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n cuPtsBul.pts.pop();\r\n cuPtsBul.buls.pop();\r\n pts = cuPtsBul.pts.concat(pts);\r\n buls = cuPtsBul.buls.concat(buls);\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n pts.pop();\r\n buls.pop();\r\n\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n pts = pts.concat(cuPtsBul.pts);\r\n buls = buls.concat(cuPtsBul.buls);\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n cuPtsBul.pts.pop();\r\n cuPtsBul.buls.pop();\r\n pts = cuPtsBul.pts.concat(pts);\r\n buls = cuPtsBul.buls.concat(buls);\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n pts.pop();\r\n buls.pop();\r\n\r\n cu.Reverse();\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n pts = pts.concat(cuPtsBul.pts);\r\n buls = buls.concat(cuPtsBul.buls);\r\n }\r\n\r\n this._LineData.length = 0;\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n this._LineData.push({ pt: pts[i], bul: buls[i] });\r\n }\r\n }\r\n else\r\n return Status.False;\r\n }\r\n\r\n //在上面的其他分支已经返回了假 所以这里直接返回真.\r\n this.Update();\r\n return Status.True;\r\n }\r\n\r\n /**\r\n * 将曲线数组组合成多段线\r\n * @param curves 已经使用CurveLinked的数组,总是首尾相连\r\n * @returns\r\n */\r\n static Combine(curves: Curve[], tolerance = 1e-5): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n pl.OCS = ComputerCurvesNormalOCS(curves);\r\n\r\n for (let cu of curves)\r\n pl.Join(cu, false, tolerance);\r\n\r\n let d = pl.LineData;\r\n if (d.length > 1)\r\n {\r\n let ld = arrayLast(d).pt;\r\n if (equalv2(d[0].pt, ld, tolerance))\r\n ld.copy(d[0].pt);\r\n }\r\n\r\n return pl;\r\n }\r\n /**首尾相连的曲线直接连接 */\r\n static FastCombine(curves: Curve[], tolerance = 1e-5): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n pl.OCS = ComputerCurvesNormalOCS(curves);\r\n\r\n let ocsInv = pl.OCSInv;\r\n\r\n let lineData: PolylineProps[] = [];\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let cu = curves[i];\r\n let bul = 0;\r\n if (cu instanceof Arc)\r\n bul = cu.Bul;\r\n\r\n lineData.push({\r\n pt: AsVector2(cu.StartPoint.applyMatrix4(ocsInv)),\r\n bul\r\n });\r\n\r\n if (i === curves.length - 1)\r\n {\r\n lineData.push({\r\n pt: AsVector2(cu.EndPoint.applyMatrix4(ocsInv)),\r\n bul: 0\r\n });\r\n }\r\n }\r\n\r\n if (lineData.length > 1)\r\n {\r\n let ld = arrayLast(lineData).pt;\r\n if (equalv2(lineData[0].pt, ld, tolerance))\r\n ld.copy(lineData[0].pt);\r\n }\r\n pl.LineData = lineData;\r\n return pl;\r\n }\r\n\r\n PtOnCurve(pt: Vector3): boolean\r\n {\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let c = this.GetCurveAtIndex(i);\r\n if (c.PtOnCurve(pt))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let c = this.GetCurveAtIndex(i);\r\n if (c.PtOnCurve3(p, fuzz))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n PtInCurve(pt: Vector3)\r\n {\r\n return this.IsClose && IsPointInPolyLine(this, pt);\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.GetClosestPointTo2(pt, extend ? ExtendType.Both : ExtendType.None);\r\n }\r\n GetClosestPointTo2(pt: Vector3, extType: ExtendType): Vector3\r\n {\r\n //当曲线空时,返回空\r\n if (this.EndParam < 1) return undefined;\r\n //当有闭合标志时,曲线在任何位置都不延伸\r\n if (this._ClosedMark) extType = ExtendType.None;\r\n\r\n //最近点\r\n let ptC = undefined;\r\n //最近点的距离\r\n let ptCDist = Infinity;\r\n\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n\r\n //前延伸\r\n if (i === 0 && (extType & ExtendType.Front) > 0)\r\n {\r\n let ptCFirst = cu.GetClosestPointTo(pt, true);\r\n if (cu.GetParamAtPoint(ptCFirst) <= 1)\r\n {\r\n ptC = ptCFirst;\r\n ptCDist = ptC.distanceToSquared(pt);\r\n }\r\n if (extType === ExtendType.Front)\r\n continue;\r\n }\r\n\r\n let ptCloseNew: Vector3; //新的最近点\r\n\r\n //后延伸 (此处与前延伸分开if 如果线只有一段,那么前后延伸都能同时触发)\r\n if (i === (this.EndParam - 1) && (extType & ExtendType.Back) > 0)\r\n {\r\n let ptCLast = cu.GetClosestPointTo(pt, true);\r\n if (cu.GetParamAtPoint(ptCLast) >= 0)\r\n ptCloseNew = ptCLast;\r\n else //如果延伸之后并不在曲线或者曲线的后延伸上\r\n ptCloseNew = cu.EndPoint;\r\n }\r\n else\r\n {\r\n ptCloseNew = cu.GetClosestPointTo(pt, false);\r\n }\r\n\r\n let newDist = ptCloseNew.distanceToSquared(pt);\r\n if (newDist < ptCDist)\r\n {\r\n ptC = ptCloseNew;\r\n ptCDist = newDist;\r\n }\r\n }\r\n\r\n return ptC;\r\n }\r\n //偏移\r\n GetOffsetCurves(offsetDist: number): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist);\r\n let curves = polyOffestUtil.Do();\r\n for (let cu of curves)\r\n cu.ColorIndex = this.ColorIndex;\r\n return curves;\r\n }\r\n GetFeedingToolPath(offsetDist: number, offsetDistSq = (offsetDist ** 2) * 2.1): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq);\r\n return polyOffestUtil.Do();\r\n }\r\n /**\r\n * 分解\r\n */\r\n Explode(): Curve[]\r\n {\r\n let exportCus: Curve[] = [];\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n exportCus.push(this.GetCurveAtIndex(i));\r\n }\r\n return exportCus;\r\n }\r\n\r\n /**\r\n * 根据参数得到参数所在的子曲线.\r\n *\r\n * 当曲线存在闭合标志时,参数必须在曲线内部,否则返回空.\r\n *\r\n * @param {number} param 参数值\r\n * @returns {Curve} 曲线(直线或者圆弧) 或空\r\n * @memberof Polyline\r\n */\r\n GetCurveAtParam(param: number): Curve\r\n {\r\n if (this._ClosedMark && !this.ParamOnCurve(param))\r\n return undefined;\r\n\r\n if (param < 0)\r\n return this.GetCurveAtIndex(0);\r\n else if (param >= this.EndParam)\r\n return this.GetCurveAtIndex(this.EndParam - 1);\r\n else return this.GetCurveAtIndex(Math.floor(param));\r\n }\r\n\r\n /**\r\n * 得到参数在子曲线中的表示\r\n *\r\n * @param {number} param 参数在多段线中表示\r\n * @returns {number} 参数在子曲线中表示\r\n * @memberof Polyline\r\n */\r\n GetCurveParamAtParam(param: number): number\r\n {\r\n if (param >= this.EndParam) param -= this.EndParam - 1;\r\n else if (param > 0) param -= Math.floor(param);\r\n\r\n return param;\r\n }\r\n\r\n /**\r\n * 获得曲线,来自索引位置.\r\n * @param {number} i 索引位置 整数\r\n */\r\n GetCurveAtIndex(i: number): Curve\r\n {\r\n if (i >= this._LineData.length) return undefined;\r\n\r\n if (!this.ParamOnCurve(i)) return undefined;\r\n\r\n if (!this._ClosedMark && i === this._LineData.length - 1) return undefined;\r\n\r\n let d1 = this._LineData[i];\r\n let d2 = this._LineData[FixIndex(i + 1, this._LineData)];\r\n\r\n let curve: Curve;\r\n if (equaln(d1.bul, 0, 1e-8))\r\n curve = new Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCS);\r\n else\r\n curve = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCS);\r\n\r\n curve.ColorIndex = this._Color;\r\n return curve;\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-5)\r\n {\r\n return IntersectPolylineAndCurve(this, curve, intType, tolerance);\r\n }\r\n\r\n //计算自交点.\r\n IntersectSelf(): number[]\r\n {\r\n let cus = this.Explode();\r\n if (cus.length === 0) return [];\r\n\r\n let intParams: number[] = [];\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n for (let j = i + 2; j < cus.length; j++)\r\n {\r\n let c2 = cus[j];\r\n let pts = c.IntersectWith(c2, IntersectOption.OnBothOperands);\r\n\r\n for (let p of pts)\r\n {\r\n intParams.push(i + c.GetParamAtPoint(p));\r\n intParams.push(j + c2.GetParamAtPoint(p));\r\n }\r\n }\r\n }\r\n return intParams;\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n let box = new Box3Ext();\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n box.union(cu.BoundingBox);\r\n }\r\n return box;\r\n }\r\n\r\n /**\r\n * 得到曲线有用的点表和凸度(闭合曲线首尾重复)\r\n */\r\n get PtsBuls(): { pts: Vector2[], buls: number[]; }\r\n {\r\n let pts: Vector2[] = [];\r\n let buls: number[] = [];\r\n\r\n if (this._LineData.length === 0)\r\n return { pts, buls };\r\n\r\n for (let data of this._LineData)\r\n {\r\n pts.push(data.pt.clone());\r\n buls.push(data.bul);\r\n }\r\n //闭合且起点不等于终点\r\n if (this._ClosedMark &&\r\n !this._LineData[0].pt.equals(arrayLast(this._LineData).pt))\r\n {\r\n pts.push(pts[0].clone());\r\n buls.push(buls[0]);\r\n }\r\n\r\n return { pts, buls };\r\n }\r\n get IsBulge()\r\n {\r\n if (!this.IsClose) return false;\r\n\r\n let refDir = Math.sign(this.Area2);\r\n let c1: Curve;\r\n let c2: Curve;\r\n\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n c1 = this.GetCurveAtIndex(i);\r\n c2 = this.GetCurveAtIndex(FixIndex(i + 1, this.EndParam));\r\n\r\n let len1 = c1.Length;\r\n let len2 = c2.Length;\r\n let minLen = Math.min(len1, len2) * 0.2;\r\n\r\n let p = c1.EndPoint;\r\n let p1: Vector3;\r\n let p2: Vector3;\r\n\r\n if (c1 instanceof Arc)\r\n {\r\n let dir = c1.IsClockWise ? -1 : 1;\r\n if (dir !== refDir)\r\n return false;\r\n p1 = c1.GetPointAtDistance(len1 - minLen);\r\n }\r\n else\r\n p1 = c1.StartPoint;\r\n\r\n if (c2 instanceof Arc)\r\n {\r\n let dir = c2.IsClockWise ? -1 : 1;\r\n if (dir !== refDir)\r\n return false;\r\n p2 = c2.GetPointAtDistance(minLen);\r\n }\r\n else\r\n p2 = c2.EndPoint;\r\n\r\n let vec1 = p.clone().sub(p1);\r\n let vec2 = p2.sub(p);\r\n let dir = Math.sign(vec1.cross(vec2).z);\r\n\r\n if (dir !== 0 && dir !== refDir)\r\n return false;\r\n }\r\n return true;\r\n }\r\n get Shape()\r\n {\r\n let { pts, buls } = this.PtsBuls;\r\n let curve = CreateBoardUtil.CreatePath(pts, buls);\r\n return curve;\r\n }\r\n get SVG()\r\n {\r\n let sp = this.StartPoint;\r\n let str = `M${sp.x} ${sp.y} `;\r\n for (let i = 1; i <= this.EndParam; i++)\r\n {\r\n let bul = this.GetBuilgeAt(i - 1);\r\n let p = this.GetPointAtParam(i);\r\n if (bul === 0)\r\n str += `L${p.x} ${p.y} `;\r\n else\r\n {\r\n let arc = this.GetCurveAtIndex(i - 1) as Arc;\r\n str += `A ${arc.Radius} ${arc.Radius} 0 ${Math.abs(bul) >= 1 ? 1 : 0} ${arc.IsClockWise ? 0 : 1} ${p.x} ${p.y}`;\r\n }\r\n }\r\n return str;\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let shape = this.Shape;\r\n\r\n let geo = BufferGeometryUtils.CreateFromPts(shape.getPoints(50).map(AsVector3));\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry().setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let obj = new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n return obj;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let shape = this.Shape;\r\n let pts = shape.getPoints(50).map(AsVector3);\r\n let plObj = en as TLine;\r\n let geo = plObj.geometry as BufferGeometry;\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts))\r\n {\r\n updateGeometry(plObj, BufferGeometryUtils.CreateFromPts(pts));\r\n }\r\n }\r\n\r\n GetDragPointCount(drag: DragPointType): number\r\n {\r\n if (drag === DragPointType.Grip)\r\n {\r\n let count = this.EndParam * 2 + 1;\r\n if (this.CloseMark) count--;\r\n return count;\r\n }\r\n else\r\n {\r\n return this._LineData.length;\r\n }\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n let midPts = [];\r\n let enParam = this.EndParam;\r\n for (let i = 0.5; i < enParam; i++)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n p && midPts.push(p);\r\n }\r\n return midPts;\r\n case ObjectSnapMode.Nea:\r\n {\r\n let nea: Vector3[] = [];\r\n for (let cu of this.Explode())\r\n {\r\n let neaa = cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n if (neaa)\r\n nea.push(...neaa);\r\n }\r\n return nea;\r\n }\r\n case ObjectSnapMode.Ext:\r\n {\r\n let cp = this.GetClosestPointTo(pickPoint, true);\r\n if (cp)\r\n return [cp];\r\n break;\r\n }\r\n case ObjectSnapMode.Cen:\r\n let cenPts: Vector3[] = [];\r\n for (let i = 0; i < this._LineData.length; i++)\r\n {\r\n let data = this._LineData[i];\r\n if (!equaln(data.bul, 0))\r\n {\r\n let cu = this.GetCurveAtIndex(i) as Arc;\r\n if (cu)//end bul !== 0 但是并没有圆弧\r\n cenPts.push(cu.Center);\r\n }\r\n }\r\n return cenPts;\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n let cp = this.GetClosestPointTo(pickPoint, false);\r\n if (!cp) return [];\r\n let cparam = this.GetParamAtPoint(cp);\r\n let cu = this.GetCurveAtParam(cparam);\r\n if (cu)\r\n {\r\n let closestPt = cu.GetClosestPointTo(lastPoint, true);\r\n if (closestPt && this.PtOnCurve(closestPt))\r\n return [closestPt];\r\n }\r\n }\r\n case ObjectSnapMode.Tan:\r\n if (lastPoint)\r\n {\r\n let clostPt = this.GetClosestPointTo(pickPoint, false);\r\n if (!clostPt) return [];\r\n let par = this.GetParamAtPoint(clostPt);\r\n let cu = this.GetCurveAtParam(par);\r\n if (cu instanceof Arc)\r\n return cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint);\r\n return [];\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let ptList: Vector3[] = [];\r\n if (this._LineData.length < 2)\r\n return ptList;\r\n\r\n let enParam = this.EndParam;\r\n if (this.CloseMark) enParam -= 0.5;\r\n for (let i = 0; i < enParam + 0.5; i += 0.5)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n ptList.push(p);\r\n }\r\n return ptList;\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let moveVLoc = AsVector2(moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n\r\n let calcIndexList = indexList;\r\n if (indexList.length > 1)\r\n {\r\n let centerIndexes = indexList.filter(i => i % 2 === 0);\r\n if (centerIndexes.length > 0)\r\n calcIndexList = centerIndexes;\r\n }\r\n\r\n for (let index of calcIndexList)\r\n {\r\n if (index % 2 === 0)\r\n {\r\n let cuIndex = index / 2;\r\n\r\n let ptCout = this._LineData.length;\r\n\r\n let frontIndex = cuIndex - 1;\r\n if (this._ClosedMark)\r\n frontIndex = FixIndex(frontIndex, ptCout);\r\n\r\n if (frontIndex >= 0 && this.GetBuilgeAt(frontIndex))\r\n {\r\n let arc = this.GetCurveAtIndex(frontIndex) as Arc;\r\n arc.MoveGripPoints([2], moveVec);\r\n this._LineData[frontIndex].bul = arc.Bul;\r\n }\r\n if ((cuIndex !== ptCout - 1) && this.GetBuilgeAt(cuIndex))\r\n {\r\n let arc = this.GetCurveAtIndex(cuIndex) as Arc;\r\n arc.MoveGripPoints([0], moveVec);\r\n this._LineData[cuIndex].bul = arc.Bul;\r\n }\r\n this._LineData[cuIndex].pt.add(moveVLoc);\r\n }\r\n else\r\n {\r\n let ptIndex = (index - 1) / 2;\r\n let nextIndex = (FixIndex(ptIndex + 1, this._LineData));\r\n let d = this._LineData[ptIndex];\r\n if (d.bul == 0)\r\n {\r\n this._LineData[ptIndex].pt.add(moveVLoc);\r\n this._LineData[nextIndex].pt.add(moveVLoc);\r\n }\r\n else\r\n {\r\n let arc = this.GetCurveAtIndex(ptIndex) as Arc;\r\n arc.MoveGripPoints([1], moveVec);\r\n this._LineData[ptIndex].bul = arc.Bul;\r\n }\r\n }\r\n }\r\n\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n let ocs = this.OCS;\r\n let ptList: Vector3[] = [];\r\n for (let data of this._LineData)\r\n {\r\n ptList.push(AsVector3(data.pt).applyMatrix4(ocs));\r\n }\r\n return ptList;\r\n }\r\n\r\n /**\r\n * 范围拉伸(stretch),对夹点进行拉伸.\r\n * 如果对圆弧的一侧进行拉伸,那么修改bul\r\n *\r\n * @param {Array} indexList\r\n * @param {Vector3} vec\r\n * @memberof Polyline\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n //本地坐标系移动向量\r\n let moveVLoc = vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv));\r\n\r\n let ptCout = this._LineData.length;\r\n\r\n for (let index of indexList)\r\n {\r\n if (index >= ptCout)\r\n throw \"在拉伸多段线顶点时,尝试拉伸不存在的顶点!(通常是因为模块中的板轮廓被破坏,导致的顶点丢失!)\";\r\n\r\n let frontIndex = index - 1;\r\n let nextIndex = index + 1;\r\n if (this._ClosedMark)\r\n {\r\n frontIndex = FixIndex(frontIndex, ptCout);\r\n nextIndex = FixIndex(nextIndex, ptCout);\r\n }\r\n\r\n /**\r\n * 根据新的拉伸点修改凸度.\r\n *\r\n * @param {number} nextIndex 隔壁点索引\r\n * @param {number} bulIndex 需要修改凸度位置的索引\r\n * @returns\r\n */\r\n const ChangeBul = (nextIndex: number, bulIndex: number) =>\r\n {\r\n //需要修改的点的数据\r\n let d = this._LineData[bulIndex];\r\n if (d === undefined || d.bul == 0) return;\r\n\r\n //如果隔壁点不在拉伸列表中\r\n if (indexList.indexOf(nextIndex) === -1)\r\n {\r\n let needChangeP = this.GetPointAtParam(index);\r\n let notChangeP = this.GetPointAtParam(nextIndex);\r\n\r\n //原先的弦长的一半\r\n let oldChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5;\r\n\r\n //弓高\r\n let arcHeight = oldChordLengthHalf * d.bul;\r\n\r\n needChangeP.add(vec);\r\n\r\n let newChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5;\r\n\r\n d.bul = arcHeight / newChordLengthHalf;\r\n }\r\n };\r\n\r\n ChangeBul(frontIndex, frontIndex);\r\n ChangeBul(nextIndex, index);\r\n\r\n //修改顶点\r\n this._LineData[index].pt.add(AsVector2(moveVLoc));\r\n }\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._LineData.length = 0;\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let v = new Vector2().fromArray(file.Read());\r\n let bul = file.Read();\r\n\r\n this._LineData.push({ pt: v, bul: bul });\r\n }\r\n if (ver > 1)\r\n this._ClosedMark = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n file.Write(this._LineData.length);\r\n\r\n for (let l of this._LineData)\r\n {\r\n file.Write(l.pt.toArray());\r\n file.Write(l.bul);\r\n }\r\n file.Write(this._ClosedMark);\r\n }\r\n}\r\n\r\nexport const TempPolyline = new Polyline();\r\n","import { Matrix4, Vector3 } from 'three';\r\nimport { arrayRemoveDuplicateBySort } from '../Common/ArrayExt';\r\nimport { Arc } from '../DatabaseServices/Entity/Arc';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Line } from '../DatabaseServices/Entity/Line';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { comparePoint, equaln, equalv3 } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 相交延伸选项.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum IntersectOption\r\n{\r\n /**\r\n * 两者都不延伸\r\n */\r\n OnBothOperands = 0,\r\n /**\r\n * 延伸自身\r\n */\r\n ExtendThis = 1,\r\n /**\r\n * 延伸参数\r\n */\r\n ExtendArg = 2,\r\n /**\r\n * 延伸两者\r\n */\r\n ExtendBoth = 3,\r\n}\r\n\r\nexport interface IntersectResult\r\n{\r\n pt: Vector3,\r\n thisParam: number,\r\n argParam: number,\r\n}\r\n\r\n//延伸自身还是参数反转\r\nexport function reverseIntersectOption(intType: IntersectOption)\r\n{\r\n if (intType === IntersectOption.ExtendThis)\r\n intType = IntersectOption.ExtendArg;\r\n else if (intType === IntersectOption.ExtendArg)\r\n intType = IntersectOption.ExtendThis;\r\n return intType;\r\n}\r\n/**\r\n * 校验相交点是否满足延伸选项\r\n * 算法会计算无限延伸状态下的曲线交点,调用该方法进行校验返回校验后的点表\r\n *\r\n * @param {Vector3[]} intRes 相交点.曲线当作完全状态下的相交点\r\n * @param {Curve} c1 曲线1 由this参数传入\r\n * @param {Curve} c2 曲线2 由arg 参数传入\r\n * @param {Intersect} extType 延伸选项.\r\n * @returns {Array} 校验完成后的点表\r\n */\r\nfunction CheckPointOnCurve(intRes: IntersectResult[], c1: Curve, c2: Curve, extType: IntersectOption, tolerance = 1e-6): Array\r\n{\r\n return intRes.filter(r =>\r\n {\r\n if (!(extType & IntersectOption.ExtendThis))\r\n if (!c1.ParamOnCurve(r.thisParam, tolerance))\r\n return false;\r\n\r\n if (!(extType & IntersectOption.ExtendArg))\r\n if (!c2.ParamOnCurve(r.argParam, tolerance))\r\n return false;\r\n return true;\r\n });\r\n}\r\nexport function IntersectCircleAndCircle(cu1: Circle | Arc, cu2: Circle | Arc): IntersectResult[]\r\n{\r\n if (!cu1.IsCoplaneTo(cu2)) return [];\r\n\r\n let c1OcsInv = cu1.OCSInv;\r\n let c1Ocs = cu1.OCS;\r\n\r\n let center1 = cu1.Center.applyMatrix4(c1OcsInv);\r\n let center2 = cu2.Center.applyMatrix4(c1OcsInv);\r\n let radius1 = cu1.Radius;\r\n let radius2 = cu2.Radius;\r\n\r\n let pts: IntersectResult[] = [];\r\n let dist = center2.distanceTo(center1);\r\n\r\n if (dist < Math.abs(radius1 - radius2) - 1e-3\r\n || dist > (radius1 + radius2 + 1e-3))\r\n return pts;\r\n if (equaln(dist, 0, 1e-6)) return pts;\r\n\r\n let dstsqr = dist * dist;\r\n let r1sqr = radius1 * radius1;\r\n let r2sqr = radius2 * radius2;\r\n\r\n let a = (dstsqr - r2sqr + r1sqr) / (2 * dist);\r\n let h = Math.sqrt(Math.abs(r1sqr - (a * a)));\r\n\r\n let ratio_a = a / dist;\r\n let ratio_h = h / dist;\r\n\r\n let dx = center2.x - center1.x;\r\n let dy = center2.y - center1.y;\r\n\r\n let phix = center1.x + (ratio_a * dx);\r\n let phiy = center1.y + (ratio_a * dy);\r\n\r\n dx *= ratio_h;\r\n dy *= ratio_h;\r\n\r\n let p1 = new Vector3(phix + dy, phiy - dx);\r\n let p2 = new Vector3(phix - dy, phiy + dx);\r\n p1.applyMatrix4(c1Ocs);\r\n p2.applyMatrix4(c1Ocs);\r\n\r\n pts.push({\r\n pt: p1,\r\n thisParam: cu1.GetParamAtPoint(p1),\r\n argParam: cu2.GetParamAtPoint(p1),\r\n });\r\n if (!equalv3(p1, p2))//防止点重复\r\n pts.push({\r\n pt: p2,\r\n thisParam: cu1.GetParamAtPoint(p2),\r\n argParam: cu2.GetParamAtPoint(p2),\r\n });\r\n\r\n return pts;\r\n}\r\n/**\r\n * 计算圆与圆弧的交点.\r\n *\r\n * @export\r\n * @param {Circle} circle 圆\r\n * @param {Arc} arc 圆弧\r\n * @param {IntersectOption} extType 延伸选项\r\n * @returns 交点集合\r\n */\r\nexport function IntersectCircleAndArc(circle: Circle, arc: Arc, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let pts = IntersectCircleAndCircle(circle, arc);\r\n return CheckPointOnCurve(pts, circle, arc, extType | IntersectOption.ExtendThis, tolerance);\r\n}\r\n\r\n/**\r\n * 计算圆弧与圆弧的交点\r\n *\r\n * @export\r\n * @param {Arc} arc1 圆弧\r\n * @param {Arc} arc2 圆弧\r\n * @param {IntersectOption} extType 延伸选项\r\n * @returns 交点集合\r\n */\r\nexport function IntersectArcAndArc(arc1: Arc, arc2: Arc, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let pts = IntersectCircleAndCircle(arc1, arc2);\r\n return CheckPointOnCurve(pts, arc1, arc2, extType, tolerance);\r\n}\r\n\r\nexport function IntersectEllipseAndLine(l: Line, el: Ellipse, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let pts = IntersectLineAndEllipseFor2D(l, el);\r\n return CheckPointOnCurve(pts, l, el, extType, tolerance);\r\n}\r\n\r\n/**\r\n * 通用方法:计算直线与圆的交点,默认延伸全部\r\n *\r\n * @export\r\n * @param {Line} line 直线\r\n * @param {(Circle | Arc)} circle 圆或圆弧\r\n * @returns 交点集合\r\n */\r\nfunction IntersectLineAndCircleOrArc(line: Line, circle: Circle | Arc): IntersectResult[]\r\n{\r\n let lineOrg = line.StartPoint;\r\n let lineDirection = line.EndPoint.sub(lineOrg);\r\n let dirLen = lineDirection.length();\r\n if (equaln(dirLen, 0)) return [];\r\n lineDirection.divideScalar(dirLen);\r\n\r\n let diff = lineOrg.clone().sub(circle.Center);\r\n let a0 = diff.dot(diff) - circle.Radius ** 2;\r\n let a1 = lineDirection.dot(diff);\r\n let discr = a1 ** 2 - a0;\r\n\r\n if (equaln(discr, 0, 1e-7))\r\n {\r\n let pt = lineOrg.add(lineDirection.multiplyScalar(-a1));\r\n\r\n return [{\r\n pt,\r\n thisParam: -a1 / dirLen,\r\n argParam: circle.GetParamAtPoint(pt)\r\n }];\r\n }\r\n else if (discr > 0)\r\n {\r\n let root = Math.sqrt(discr);\r\n let p1 = lineOrg.clone().add(lineDirection.clone().multiplyScalar(-a1 + root));\r\n let p2 = lineOrg.add(lineDirection.multiplyScalar(-a1 - root));\r\n\r\n return [\r\n {\r\n pt: p1,\r\n thisParam: (-a1 + root) / dirLen,\r\n argParam: circle.GetParamAtPoint(p1)\r\n }, {\r\n pt: p2,\r\n thisParam: (-a1 - root) / dirLen,\r\n argParam: circle.GetParamAtPoint(p2)\r\n }\r\n ];\r\n }\r\n return [];\r\n}\r\n\r\n//直线和圆\r\nexport function IntersectLineAndCircle(line: Line, circle: Circle, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let ptArr = IntersectLineAndCircleOrArc(line, circle);\r\n return CheckPointOnCurve(ptArr, line, circle, extType | IntersectOption.ExtendArg);\r\n}\r\n//直线和圆弧\r\nexport function IntersectLineAndArc(line: Line, arc: Arc, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let ptArr = IntersectLineAndCircleOrArc(line, arc);\r\n return CheckPointOnCurve(ptArr, line, arc, extType, tolerance);\r\n}\r\n//直线和直线\r\nexport function IntersectLAndLFor2D(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3): Vector3\r\n{\r\n let dx1 = p1.x - p2.x;\r\n let dx2 = p3.x - p4.x;\r\n let dx3 = p4.x - p2.x;\r\n let dy1 = p1.y - p2.y;\r\n let dy2 = p3.y - p4.y;\r\n let dy3 = p4.y - p2.y;\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);\r\n\r\n if (equaln(det, 0.0, 1e-5))\r\n {\r\n // if (equaln(dx2 * dy3, dy2 * dx3, 1e-5))\r\n // {\r\n // return midPoint(midPoint(p1, p2), midPoint(p3, p4));\r\n // }\r\n return;\r\n }\r\n\r\n let pt = new Vector3;\r\n let ratio = ((dx1 * dy3) - (dy1 * dx3)) / det;\r\n pt.x = (ratio * dx2) + p4.x;\r\n pt.y = (ratio * dy2) + p4.y;\r\n\r\n return pt;\r\n}\r\n\r\nexport function IntersectLAndLFor2D2(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3): Vector3[]\r\n{\r\n let dx1 = p1.x - p2.x;\r\n let dx2 = p3.x - p4.x;\r\n let dx3 = p4.x - p2.x;\r\n let dy1 = p1.y - p2.y;\r\n let dy2 = p3.y - p4.y;\r\n let dy3 = p4.y - p2.y;\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);\r\n\r\n if (equaln(det, 0.0, 1e-5))\r\n {\r\n if (equaln(dx2 * dy3, dy2 * dx3, 1e-5))\r\n return [p1, p2, p3, p4];\r\n return [];\r\n }\r\n\r\n let pt = new Vector3;\r\n let ratio = ((dx1 * dy3) - (dy1 * dx3)) / det;\r\n pt.x = (ratio * dx2) + p4.x;\r\n pt.y = (ratio * dy2) + p4.y;\r\n\r\n return [pt];\r\n}\r\n\r\nexport function IntersectLine3AndLine3(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3, epsilon = 1e-6)\r\n{\r\n let pts = ShortestLine3AndLine3(p1, p2, p3, p4);\r\n if (pts) return pts[0];\r\n}\r\n\r\n/**\r\n * 三维中两行之间最短的直线\r\n * ref:https://stackoverflow.com/questions/2316490/the-algorithm-to-find-the-point-of-intersection-of-two-3d-line-segment\r\n * ref:http://paulbourke.net/geometry/pointlineplane/\r\n * ref:http://paulbourke.net/geometry/pointlineplane/calclineline.cs\r\n *\r\n * @export\r\n * @param {Vector3} p1 l1.start\r\n * @param {Vector3} p2 l1.end\r\n * @param {Vector3} p3 l2.start\r\n * @param {Vector3} p4 l2.end\r\n * @returns 交点集合\r\n */\r\nfunction ShortestLine3AndLine3(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3, epsilon = 1e-6)\r\n{\r\n let p43 = p4.clone().sub(p3);\r\n if (p43.lengthSq() < epsilon)\r\n return;\r\n let p21 = p2.clone().sub(p1);\r\n if (p21.lengthSq() < epsilon)\r\n return;\r\n\r\n let p13 = p1.clone().sub(p3);\r\n\r\n let d1343 = p13.x * p43.x + p13.y * p43.y + p13.z * p43.z;\r\n let d4321 = p43.x * p21.x + p43.y * p21.y + p43.z * p21.z;\r\n let d1321 = p13.x * p21.x + p13.y * p21.y + p13.z * p21.z;\r\n let d4343 = p43.x * p43.x + p43.y * p43.y + p43.z * p43.z;\r\n let d2121 = p21.x * p21.x + p21.y * p21.y + p21.z * p21.z;\r\n\r\n let denom = d2121 * d4343 - d4321 * d4321;\r\n if (Math.abs(denom) < epsilon)\r\n return;\r\n let numer = d1343 * d4321 - d1321 * d4343;\r\n\r\n let mua = numer / denom;\r\n let mub = (d1343 + d4321 * (mua)) / d4343;\r\n\r\n let resultSegmentPoint1 = new Vector3();\r\n resultSegmentPoint1.x = p1.x + mua * p21.x;\r\n resultSegmentPoint1.y = p1.y + mua * p21.y;\r\n resultSegmentPoint1.z = p1.z + mua * p21.z;\r\n let resultSegmentPoint2 = new Vector3();\r\n resultSegmentPoint2.x = p3.x + mub * p43.x;\r\n resultSegmentPoint2.y = p3.y + mub * p43.y;\r\n resultSegmentPoint2.z = p3.z + mub * p43.z;\r\n\r\n return [resultSegmentPoint1, resultSegmentPoint2];\r\n}\r\n\r\n//直线和直线\r\nexport function IntersectLineAndLine(l1: Line, l2: Line, extType: IntersectOption, fuzz = 1e-4): IntersectResult[]\r\n{\r\n let [pt1, pt2, pt3, pt4] = [l1.StartPoint, l1.EndPoint, l2.StartPoint, l2.EndPoint];\r\n\r\n let ipts: Vector3[];\r\n if (equaln(pt1.z, 0, fuzz) && equaln(pt2.z, 0, fuzz) && equaln(pt3.z, 0, fuzz) && equaln(pt4.z, 0, fuzz))\r\n {\r\n ipts = IntersectLAndLFor2D2(pt1, pt2, pt3, pt4);\r\n ipts.sort(comparePoint(\"xy\"));\r\n arrayRemoveDuplicateBySort(ipts, (p1, p2) => equalv3(p1, p2, fuzz));\r\n }\r\n else\r\n {\r\n ipts = ShortestLine3AndLine3(pt1, pt2, pt3, pt4);\r\n if (!ipts) return [];\r\n if (ipts.length === 2)\r\n ipts.pop();\r\n }\r\n\r\n let ints: IntersectResult[] = [];\r\n for (let pt of ipts)\r\n {\r\n let { closestPt: p1, param: param1 } = l1.GetClosestAtPoint(pt, true);\r\n if (!equalv3(pt, p1, fuzz)) return [];\r\n if (!(extType & IntersectOption.ExtendThis))\r\n if (!(l1.ParamOnCurve(param1, 0) || equalv3(pt1, pt, fuzz) || equalv3(pt2, pt, fuzz)))\r\n return [];\r\n let { closestPt: p2, param: param2 } = l2.GetClosestAtPoint(pt, true);\r\n if (!equalv3(pt, p2, fuzz)) return [];\r\n if (!(extType & IntersectOption.ExtendArg))\r\n if (!(l2.ParamOnCurve(param2, 0) || equalv3(pt3, pt, fuzz) || equalv3(pt4, pt, fuzz)))\r\n return [];\r\n ints.push({ pt, thisParam: param1, argParam: param2 });\r\n }\r\n return ints;\r\n}\r\n\r\nexport function IntersectPolylineAndCurve(pl: Polyline, cu: Curve, extType: IntersectOption, tolerance = 1e-6): IntersectResult[]\r\n{\r\n let cus: Curve[] = pl.Explode();\r\n let cus2: Curve[];\r\n if (cu instanceof Polyline)\r\n cus2 = cu.Explode();\r\n else\r\n cus2 = [cu];\r\n\r\n let intRes: IntersectResult[] = [];\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu1 = cus[i];\r\n for (let j = 0; j < cus2.length; j++)\r\n {\r\n let cu2 = cus2[j];\r\n let ext = extType;\r\n\r\n let isStart = i === 0;\r\n let isEnd = i === cus.length - 1;\r\n\r\n let isStart2 = j === 0;\r\n let isEnd2 = j === cus2.length - 1;\r\n\r\n //当曲线闭合时,或者当前的子曲线不是起始和不是结束,那么不延伸曲线.\r\n if (pl.CloseMark || !(isStart || isEnd))\r\n ext = ext & ~IntersectOption.ExtendThis;\r\n if ((cu instanceof Polyline && cu.CloseMark) || !(isStart2 || isEnd2))\r\n ext = ext & ~IntersectOption.ExtendArg;\r\n\r\n let ptPars = cu1.IntersectWith2(cu2, ext, tolerance).filter(r1 => intRes.every(r2 => !equalv3(r1.pt, r2.pt)));\r\n\r\n //校验延伸\r\n if (IntersectOption.ExtendThis & ext)\r\n {\r\n //如果曲线是起始又是结束,那么不校验.\r\n if (isStart && isEnd)\r\n {\r\n }\r\n else if (isStart)\r\n {\r\n ptPars = ptPars.filter(res => res.thisParam <= 1);\r\n }\r\n else if (isEnd)\r\n {\r\n ptPars = ptPars.filter(res => res.thisParam >= 0);\r\n }\r\n }\r\n if (IntersectOption.ExtendArg & ext)\r\n {\r\n //如果曲线是起始又是结束,那么不校验.\r\n if (isStart2 && isEnd2)\r\n {\r\n }\r\n else if (isStart2)\r\n {\r\n ptPars = ptPars.filter(res => res.argParam + j <= cu2.EndParam);\r\n }\r\n else if (isEnd2)\r\n {\r\n ptPars = ptPars.filter(res => res.argParam + j >= 0);\r\n }\r\n }\r\n\r\n intRes.push(...ptPars.map(r =>\r\n {\r\n return {\r\n pt: r.pt,\r\n thisParam: i + r.thisParam,\r\n argParam: j + r.argParam,\r\n };\r\n }));\r\n }\r\n }\r\n return intRes;\r\n}\r\n\r\nexport function IntersectLineAndEllipseFor2D(l: Line, el: Ellipse)\r\n{\r\n if (!l.IsCoplaneTo(el)) return [];\r\n\r\n let mat = new Matrix4().makeRotationZ(-el.Rotation).multiply(el.OCSInv);\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let sp = l.StartPoint.applyMatrix4(mat);\r\n let ep = l.EndPoint.applyMatrix4(mat);\r\n let pts: Vector3[] = [];\r\n if (equaln(sp.x, ep.x))\r\n {\r\n let c = sp.x;\r\n let j = (b ** 2) * (1 - (c ** 2) / (a ** 2));\r\n if (equaln(j, 0))\r\n {\r\n pts = [new Vector3(sp.x, 0)];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let y1 = Math.sqrt(j);\r\n let y2 = -Math.sqrt(j);\r\n pts = [\r\n new Vector3(c, y1),\r\n new Vector3(c, y2)\r\n ];\r\n }\r\n }\r\n else\r\n {\r\n let k = (sp.y - ep.y) / (sp.x - ep.x);\r\n let c = sp.y - sp.x * k;\r\n let j = (2 * a * a * k * c) * (2 * a * a * k * c) - 4 * (b * b + a * a * k * k) * a * a * (c * c - b * b);\r\n if (equaln(j, 0))\r\n {\r\n let x1 = -2 * k * c * a * a / (2 * (b * b + a * a * k * k));\r\n let y1 = k * x1 + c;\r\n pts = [new Vector3(x1, y1)];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let x1 = (-2 * k * c * a * a + Math.sqrt(j)) / (2 * (b * b + a * a * k * k));\r\n let y1 = k * x1 + c;\r\n let x2 = (-2 * k * c * a * a - Math.sqrt(j)) / (2 * (b * b + a * a * k * k));\r\n let y2 = k * x2 + c;\r\n pts = [\r\n new Vector3(x1, y1),\r\n new Vector3(x2, y2)\r\n ];\r\n }\r\n }\r\n\r\n let matInv = new Matrix4().getInverse(mat);\r\n return pts.map(p =>\r\n {\r\n let pt = p.applyMatrix4(matInv);\r\n return {\r\n pt,\r\n thisParam: l.GetParamAtPoint(pt),\r\n argParam: el.GetParamAtPoint(pt)\r\n };\r\n });\r\n}\r\nexport function IntersectEllipseAndCircleOrArc(el: Ellipse, cir: Circle | Arc, type: IntersectOption)\r\n{\r\n if (!el.IsCoplaneTo(cir)) return [];\r\n\r\n let a = Math.max(el.RadX, el.RadY);\r\n let dist = el.Center.distanceTo(cir.Center);\r\n\r\n let disVail = dist > (a + cir.Radius);\r\n\r\n if (disVail)\r\n return [];\r\n\r\n if (equalv3(el.Center, cir.Center))\r\n {\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let r = cir.Radius;\r\n let j = ((a * b) ** 2 - (b * r) ** 2) / (a ** 2 - b ** 2);\r\n let pts: Vector3[] = [];\r\n if (equaln(j, 0) || equaln(j, r ** 2))\r\n {\r\n if (equaln(j, 0))\r\n pts = [\r\n new Vector3(a, 0),\r\n new Vector3(-a, 0)\r\n ];\r\n else\r\n pts = [\r\n new Vector3(0, r),\r\n new Vector3(0, -r)\r\n ];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let y1 = Math.sqrt(j);\r\n let y2 = - Math.sqrt(j);\r\n let n = r ** 2 - j;\r\n let x1 = Math.sqrt(n);\r\n let x2 = - Math.sqrt(n);\r\n pts = [\r\n new Vector3(x1, y1),\r\n new Vector3(x1, y2),\r\n new Vector3(x2, y1),\r\n new Vector3(x2, y2),\r\n ];\r\n }\r\n let ro = new Matrix4().makeRotationZ(el.Rotation);\r\n let res = pts.map(p =>\r\n {\r\n let pt = p.applyMatrix4(ro).applyMatrix4(el.OCS);\r\n return {\r\n pt,\r\n thisParam: el.GetParamAtPoint(pt),\r\n argParam: cir.GetParamAtPoint(pt)\r\n };\r\n });\r\n return CheckPointOnCurve(res, el, cir, type);\r\n }\r\n else\r\n {\r\n let pts = el.Shape.getPoints(60);\r\n let lineData = pts.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n let pl = new Polyline(lineData);\r\n let cirClone = cir.Clone().ApplyMatrix(el.OCSInv);\r\n\r\n if (type === IntersectOption.ExtendBoth)\r\n type = IntersectOption.ExtendArg;\r\n else if (type !== IntersectOption.ExtendArg)\r\n type = IntersectOption.OnBothOperands;\r\n\r\n let intPts = IntersectPolylineAndCurve(pl, cirClone, type);\r\n intPts.forEach(r => r.pt.applyMatrix4(el.OCS));\r\n return intPts;\r\n }\r\n}\r\nexport function IntersectEllipse(el1: Ellipse, el2: Ellipse, type: IntersectOption)\r\n{\r\n if (!el1.IsCoplaneTo(el2)) return [];\r\n\r\n let isEqul = equalv3(el1.Center, el2.Center)\r\n && equaln(el1.RadX, el2.RadX)\r\n && equaln(el1.RadY, el2.RadY)\r\n && equalv3(el1.StartPoint, el2.StartPoint);\r\n\r\n if (isEqul)\r\n return [];\r\n\r\n let a1 = Math.max(el1.RadX, el1.RadY);\r\n let a2 = Math.max(el2.RadX, el2.RadY);\r\n\r\n let dist = el1.Center.distanceToSquared(el2.Center);\r\n if (dist > (a1 + a2) ** 2)\r\n {\r\n return [];\r\n }\r\n\r\n if (!el1.BoundingBox.intersectsBox(el2.BoundingBox))\r\n return [];\r\n\r\n let diffMat = el1.OCSInv.multiply(el2.OCS);\r\n let pts1 = el1.Shape.getPoints(60);\r\n let pts2 = el2.Shape.getPoints(60);\r\n\r\n let lineData1 = pts1.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n let lineData2 = pts2.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n\r\n let pl1 = new Polyline(lineData1);\r\n let pl2 = new Polyline(lineData2).ApplyMatrix(diffMat);\r\n\r\n let intPts = pl1.IntersectWith2(pl2, 0);\r\n intPts.forEach(r => r.pt.applyMatrix4(el1.OCS));\r\n return intPts;\r\n}\r\n","import { BufferGeometry, EllipseCurve, Line as TLine, Material, Matrix3, Matrix4, Object3D, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getArcOrCirNearPts, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { clamp } from '../../Common/Utils';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { angle, AsVector3, equaln, MoveMatrix, polar } from '../../Geometry/GeUtils';\r\nimport { IntersectCircleAndArc, IntersectCircleAndCircle, IntersectEllipseAndCircleOrArc, IntersectLineAndCircle, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Shape2 } from '../Shape2';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Arc } from './Arc';\r\nimport { Curve } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\nlet circleGeometry: BufferGeometry;\r\nfunction GetCircleGeometry()\r\n{\r\n if (!circleGeometry)\r\n circleGeometry = BufferGeometryUtils.CreateFromPts(\r\n new EllipseCurve(0, 0, 1, 1, 0, 2 * Math.PI, false, 0).getPoints(360).map(AsVector3)\r\n );\r\n return circleGeometry;\r\n}\r\n\r\n@Factory\r\nexport class Circle extends Curve\r\n{\r\n constructor(center?: Vector3, radius: number = 1e-6)\r\n {\r\n super();\r\n center && this._Matrix.setPosition(center);\r\n this._Radius = radius;\r\n }\r\n private _Radius: number;\r\n\r\n get Shape()\r\n {\r\n let sp = new Shape2();\r\n sp.ellipse(0, 0, this._Radius, this._Radius, 0, 2 * Math.PI, false, 0);\r\n return sp;\r\n }\r\n\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(v);\r\n this.Update();\r\n }\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Radius = clamp(v, 1e-9, 1e19);\r\n this.Update();\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Center = this.Center.applyMatrix4(m);\r\n this.Radius = this.Radius * m.getMaxScaleOnAxis();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n return this;\r\n }\r\n\r\n //******************** Curve function start*****************//\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get StartParam(): number\r\n {\r\n return 0;\r\n }\r\n get EndPoint(): Vector3\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get EndParam(): number\r\n {\r\n return 1;\r\n }\r\n PtInCurve(pt: Vector3)\r\n {\r\n return pt.distanceToSquared(this.Center) < Math.pow(this.Radius, 2);\r\n }\r\n get Area()\r\n {\r\n return Math.PI * this._Radius ** 2;\r\n }\r\n get Area2()\r\n {\r\n return Math.PI * this._Radius ** 2;\r\n }\r\n get Length()\r\n {\r\n return Math.PI * 2 * this._Radius;\r\n }\r\n\r\n get IsClose(): boolean\r\n {\r\n return true;\r\n }\r\n\r\n //曲线为顺时针\r\n get IsClockWise(): boolean { return false; }\r\n\r\n GetPointAtParam(param: number)\r\n {\r\n return (polar(new Vector3(), param * 2 * Math.PI, this._Radius) as Vector3).applyMatrix4(this._Matrix);\r\n }\r\n\r\n GetPointAtDistance(distance: number)\r\n {\r\n let param = distance / (Math.PI * 2 * this._Radius);\r\n return this.GetPointAtParam(param);\r\n }\r\n\r\n GetDistAtParam(param: number)\r\n {\r\n return Math.PI * 2 * this._Radius * param;\r\n }\r\n\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n GetParamAtDist(d: number)\r\n {\r\n return d / (Math.PI * 2 * this._Radius);\r\n }\r\n\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params: number[];\r\n if (param instanceof Array)\r\n {\r\n params = param.filter(p => this.ParamOnCurve(p));\r\n params.sort((a1, a2) => a2 - a1);//从大到小\r\n arrayRemoveDuplicateBySort(params);\r\n if (params.length < 2) return [];\r\n }\r\n else //圆不能被单个参数切割\r\n return [];\r\n\r\n //补上最后一个到第一个的弧\r\n params.unshift(arrayLast(params));\r\n\r\n let anglelist = params.map(param => Math.PI * 2 * param);\r\n\r\n let curvelist = new Array();\r\n for (let i = 0; i < anglelist.length - 1; i++)\r\n {\r\n let sa = anglelist[i];\r\n let ea = anglelist[i + 1];\r\n if (!equaln(sa, ea, 1e-6))\r\n {\r\n let arc = new Arc(new Vector3(), this._Radius, ea, sa, false);\r\n arc.ColorIndex = this.ColorIndex;\r\n arc.ApplyMatrix(this.OCS);\r\n curvelist.push(arc);\r\n }\r\n }\r\n return curvelist;\r\n }\r\n\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnCurve(pt))\r\n return NaN;\r\n return angle(pt.clone().applyMatrix4(this.OCSInv)) / (Math.PI * 2);\r\n }\r\n\r\n PtOnCurve(pt: Vector3)\r\n {\r\n return equaln(pt.distanceToSquared(this.Center), this._Radius * this._Radius, 1e-5);\r\n }\r\n GetOffsetCurves(offsetDist: number): Curve[]\r\n {\r\n if ((offsetDist + this._Radius) > 0)\r\n {\r\n let circle = this.Clone();\r\n circle.Radius = this._Radius + offsetDist;\r\n return [circle];\r\n }\r\n return [];\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption)\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectCircleAndArc(this, curve, intType);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType)));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectCircleAndCircle(this, curve);\r\n }\r\n if (curve instanceof Ellipse)\r\n {\r\n return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType));\r\n }\r\n if (curve instanceof Polyline)\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType)));\r\n return [];\r\n }\r\n //******************** Curve function end*****************//\r\n\r\n get BoundingBox(): Box3Ext\r\n {\r\n return new Box3Ext().setFromPoints(this.GetGripPoints());\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n let cirGeo = GetCircleGeometry();\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let geometry = new LineGeometry().setPositions(cirGeo.attributes.position.array as number[]);\r\n obj.add(new Line2(geometry, ColorMaterial.PrintLineMatrial));\r\n }\r\n else\r\n {\r\n let line = new TLine(cirGeo, ColorMaterial.GetLineMaterial(this._Color));\r\n obj.add(line);\r\n }\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n obj.children[0].scale.set(this._Radius, this._Radius, this._Radius);\r\n obj.children[0].updateMatrix();\r\n }\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material: Material)\r\n {\r\n if (type === RenderType.WireframePrint)\r\n {\r\n //TODO:打印线需要其他颜色?\r\n }\r\n else\r\n {\r\n let m = obj.children[0] as TLine;\r\n m.material = material ? material : ColorMaterial.GetLineMaterial(this._Color);\r\n return obj;\r\n }\r\n\r\n }\r\n\r\n GetDragPointCount(drag: DragPointType): number\r\n {\r\n if (drag === DragPointType.Grip)\r\n return 5;\r\n else\r\n return 1;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let pts = [\r\n new Vector3(),\r\n new Vector3(0, this._Radius),\r\n new Vector3(0, -this._Radius),\r\n new Vector3(-this._Radius, 0),\r\n new Vector3(this._Radius, 0),\r\n ];\r\n\r\n let ocs = this.OCS;\r\n pts.forEach(p => p.applyMatrix4(ocs));\r\n return pts;\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.Nea:\r\n {\r\n return getArcOrCirNearPts(this, pickPoint, viewXform);\r\n }\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n let l = new Line(this.Center, lastPoint);\r\n return l.IntersectWith(this, IntersectOption.ExtendBoth);\r\n }\r\n case ObjectSnapMode.Tan:\r\n let pts = GetTanPtsOnArcOrCircle(this, lastPoint);\r\n if (pts)\r\n return pts;\r\n case ObjectSnapMode.End:\r\n {\r\n let pts = this.GetGripPoints();\r\n pts.shift();\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n\r\n let pts = this.GetGripPoints();\r\n if (indexList.length > 0)\r\n {\r\n let index = indexList[0];\r\n let p = pts[index];\r\n if (p)\r\n {\r\n if (index > 0)\r\n {\r\n p.add(vec);\r\n this.Radius = p.distanceTo(this.Center);\r\n }\r\n else\r\n {\r\n this.Center = this.Center.add(vec);\r\n }\r\n }\r\n }\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n let pts = [new Vector3()];\r\n let ocs = this.OCS;\r\n pts.forEach(p => p.applyMatrix4(ocs));\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n let mat = MoveMatrix(vec);\r\n this.ApplyMatrix(mat);\r\n }\r\n }\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n if (typeof pt === \"number\")\r\n pt = this.GetPointAtParam(pt);\r\n else\r\n pt = pt.clone();\r\n\r\n pt.applyMatrix4(this.OCSInv);\r\n\r\n let an = angle(pt) + Math.PI * 0.5;\r\n\r\n return polar(new Vector3(), an, 1).applyMatrix4(new Matrix4().extractRotation(this.OCS));\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(this.OCS);\r\n if (equaln(pt.distanceToSquared(this.Center), 0, 1e-10))\r\n return this.GetPointAtParam(0);\r\n let l = new Line(this.Center, pt);\r\n let pts = l.IntersectWith(this, IntersectOption.ExtendBoth);\r\n pts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(pt) - p2.distanceToSquared(pt);\r\n });\r\n return pts[0];\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Radius = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);\r\n file.Write(this._Radius);\r\n }\r\n //#endregion\r\n}\r\n","\r\n/**\r\n * 一个简单的计数器实现,本质是使用一个Map来保存元素的个数\r\n * \r\n * 例:\r\n * let count = new Count();\r\n * count.AddCount(\"Test\", 1);\r\n * count.GetCount(\"Test\");//现在 Test 的个数为1\r\n */\r\nexport class Count\r\n{\r\n private m_CountMap = new WeakMap();\r\n GetCount(obj: any): number\r\n {\r\n let count = this.m_CountMap.get(obj);\r\n if (!count)\r\n {\r\n this.m_CountMap.set(obj, 0);\r\n count = 0;\r\n }\r\n return count;\r\n }\r\n AddCount(obj: any, add: number)\r\n {\r\n this.m_CountMap.set(obj, this.GetCount(obj) + add);\r\n }\r\n}\r\n","import { Vector3, MathUtils } from \"three\";\r\nimport { YAxis, ZAxis, equaln } from \"./GeUtils\";\r\n\r\n/**\r\n * 轨道控制的数学类,观察向量和角度的互相转换\r\n * 当x当抬头或者低头到90度时,触发万向锁.\r\n */\r\nexport class Orbit\r\n{\r\n //抬头低头 正数抬头 负数低头\r\n private phi: number = 0;//Φ\r\n\r\n //身体旋转 0为正右边 逆时针旋转\r\n theta: number = 0;//θ\r\n\r\n get RoX()\r\n {\r\n return this.phi;\r\n }\r\n set RoX(v)\r\n {\r\n this.phi = MathUtils.clamp(v, Math.PI * -0.49, Math.PI * 0.49);\r\n }\r\n\r\n /**\r\n * 使用旋转角度 计算观察向量\r\n * @param [outDirection] 引用传入,如果传入,那么就不构造新的向量\r\n * @returns 返回观察向量\r\n */\r\n UpdateDirection(outDirection = new Vector3()): Vector3\r\n {\r\n outDirection.z = Math.sin(this.phi);\r\n //归一化专用.\r\n let d = Math.abs(Math.cos(this.phi));\r\n\r\n outDirection.x = Math.cos(this.theta) * d;\r\n outDirection.y = Math.sin(this.theta) * d;\r\n\r\n return outDirection;\r\n }\r\n\r\n /**\r\n * 使用观察向量,计算旋转角度\r\n * @param dir 这个向量会被修改成单位向量.\r\n */\r\n SetFromDirection(dir: Vector3): void\r\n {\r\n dir.normalize();\r\n this.phi = Math.asin(dir.z);\r\n if (equaln(dir.x, 0) && equaln(dir.y, 0))\r\n if (dir.z > 0)\r\n this.theta = Math.PI * -0.5;\r\n else\r\n this.theta = Math.PI * 0.5;\r\n else\r\n this.theta = Math.atan2(dir.y, dir.x);\r\n }\r\n\r\n /**\r\n * 参考任意轴坐标系算法.\r\n * http://help.autodesk.com/view/ACD/2017/CHS/?guid=GUID-E19E5B42-0CC7-4EBA-B29F-5E1D595149EE\r\n */\r\n static ComputUpDirection(n: Vector3, ay: Vector3 = new Vector3(), ax: Vector3 = new Vector3()): Vector3\r\n {\r\n n.normalize();\r\n if (Math.abs(n.x) < 0.015625 && Math.abs(n.y) < 0.015625)\r\n ax.crossVectors(YAxis, n);\r\n else\r\n ax.crossVectors(ZAxis, n);\r\n ay.crossVectors(n, ax);\r\n ax.normalize();\r\n ay.normalize();\r\n return ay;\r\n }\r\n}\r\n","import { Box3, Line3, Matrix3, Matrix4, Vec2, Vector2, Vector3 } from 'three';\r\nimport { Arc } from '../DatabaseServices/Entity/Arc';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Line } from '../DatabaseServices/Entity/Line';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { IsPointInBowArc } from '../DatabaseServices/PointInPolyline';\r\nimport { Count } from '../Geometry/Count';\r\nimport { CurveMap, Vertice } from '../Geometry/CurveMap';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, isParallelTo, XAxis, ZeroVec, isPerpendicularityTo, YAxis, isIntersect } from '../Geometry/GeUtils';\r\nimport { Vec3 } from '../Geometry/IVec3';\r\nimport { Orbit } from '../Geometry/Orbit';\r\nimport { PlaneExt } from '../Geometry/Plane';\r\nimport { IntersectOption, IntersectResult } from '../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../GraphicsSystem/OffsetPolyline';\r\nimport { arrayLast, changeArrayStartIndex, equalArray } from './ArrayExt';\r\nimport { Status } from './Status';\r\nimport { FixIndex, LINK_FUZZ } from './Utils';\r\n\r\n//3点获取圆心\r\nexport function getCircleCenter(pt1: Vector3, pt2: Vector3, pt3: Vector3)\r\n{\r\n if (!(pt1 && pt2 && pt3))\r\n return;\r\n let A1 = pt1.x - pt2.x;\r\n let B1 = pt1.y - pt2.y;\r\n let C1 = (Math.pow(pt1.x, 2) - Math.pow(pt2.x, 2) + Math.pow(pt1.y, 2) - Math.pow(pt2.y, 2)) / 2;\r\n let A2 = pt3.x - pt2.x;\r\n let B2 = pt3.y - pt2.y;\r\n let C2 = (Math.pow(pt3.x, 2) - Math.pow(pt2.x, 2) + Math.pow(pt3.y, 2) - Math.pow(pt2.y, 2)) / 2;\r\n //令temp = A1*B2 - A2*B1\r\n let temp = A1 * B2 - A2 * B1;\r\n let center = new Vector3();\r\n //判断三点是否共线\r\n if (temp === 0)\r\n {\r\n //共线则将第一个点pt1作为圆心\r\n center.x = pt1.x;\r\n center.y = pt1.y;\r\n }\r\n else\r\n {\r\n //不共线则求出圆心:\r\n center.x = (C1 * B2 - C2 * B1) / temp;\r\n center.y = (A1 * C2 - A2 * C1) / temp;\r\n }\r\n\r\n return center;\r\n}\r\n\r\n// 弦长+切线获取圆心角\r\nexport function getCirAngleByChordAndTangent(chord: Vector3, tangentLine: Vector3)\r\n{\r\n let dir = tangentLine.clone().cross(chord).normalize();\r\n\r\n let ctAngle = chord.angleTo(tangentLine);\r\n\r\n // 圆心角\r\n let cirAng = Math.PI - 2 * Math.abs(ctAngle - Math.PI / 2);\r\n\r\n if (ctAngle > Math.PI / 2)\r\n {\r\n cirAng = Math.PI * 2 - cirAng;\r\n }\r\n return cirAng *= dir.z;\r\n}\r\n//行列式\r\nexport function getDeterminantFor2V(v1: Vector2, v2: Vector2): number\r\n{\r\n return v1.x * v2.y - v1.y * v2.x;\r\n}\r\n\r\nexport function getDeterminantFor3V(v1: Vector3, v2: Vector3, v3: Vector3)\r\n{\r\n let mat = new Matrix3();\r\n mat.set(v1.x, v1.y, v1.z, v2.x, v2.y, v2.z, v3.x, v3.y, v3.z);\r\n return mat.determinant();\r\n}\r\n\r\n/**\r\n * 曲线根据连接来分组,每组都是一条首尾相连的曲线表.\r\n *\r\n * @export\r\n * @param {Curve[]} cus 传入的分组的曲线表\r\n * @returns {Array>} 返回如下\r\n * [\r\n * [c1,c2,c3...],//后面的曲线的起点总是等于上一个曲线的终点\r\n * [c1,c2,c3...],\r\n * ]\r\n */\r\nexport function curveLinkGroup(cus: Curve[]): Array>\r\n{\r\n //返回的曲线组\r\n let groupCus = new Array>();\r\n\r\n //将封闭的曲线先提取出来\r\n cus = cus.filter(c =>\r\n {\r\n let isClose = c.IsClose;\r\n if (isClose)\r\n groupCus.push([c]);\r\n return !isClose;\r\n });\r\n if (cus.length === 0) return groupCus;\r\n //曲线节点图\r\n let cuMap = new CurveMap();\r\n cus.forEach(c => cuMap.AddCurveToMap(c));\r\n\r\n //曲线站点表\r\n let stands = cuMap.Stands;\r\n //曲线使用计数\r\n let cuCount = new Count();\r\n\r\n /**\r\n * 从站点的路线中任意取一条,加入到曲线数组中.\r\n *\r\n * @param {Curve[]} cus 已经连接的曲线列表\r\n * @param {boolean} isEndSeach true:从终点搜索,false:从起点搜索\r\n * @returns {Stand} 如果站点中存在可以取得的曲线,返回下个站点,否则返回undefined\r\n */\r\n function linkCurve(stand: Vertice, cus: Curve[], isEndSeach: boolean): Vertice | undefined\r\n {\r\n for (let route of stand.routes)\r\n {\r\n let cu = route.curve;\r\n if (cuCount.GetCount(cu) === 0)\r\n {\r\n if (isEndSeach)\r\n {\r\n //保证曲线总是从起点连接到终点\r\n if (!equalv3(cu.StartPoint, stand.position))\r\n cu.Reverse();\r\n cus.push(cu);\r\n }\r\n else\r\n {\r\n //保证曲线总是从起点连接到终点\r\n if (!equalv3(cu.EndPoint, stand.position))\r\n cu.Reverse();\r\n cus.unshift(cu);\r\n }\r\n\r\n cuCount.AddCount(cu, 1);\r\n return route.to;\r\n }\r\n }\r\n }\r\n\r\n for (let stand of stands)\r\n {\r\n let startStand = stand;\r\n let cus: Curve[] = []; //形成合并轮廓的曲线组\r\n while (startStand)\r\n startStand = linkCurve(startStand, cus, true);\r\n\r\n if (cus.length > 0)\r\n {\r\n startStand = cuMap.GetOnlyVertice(cus[0].StartPoint);\r\n while (startStand)\r\n startStand = linkCurve(startStand, cus, false);\r\n }\r\n\r\n if (cus.length > 0)\r\n groupCus.push(cus);\r\n }\r\n\r\n return groupCus;\r\n}\r\n\r\nexport function equalCurve(cu1: Curve, cu2: Curve, tolerance = 1e-4)\r\n{\r\n if ((cu1 instanceof Polyline) && (cu2 instanceof Polyline))\r\n {\r\n if (cu1.IsClose !== cu2.IsClose || !isParallelTo(cu1.Normal, cu2.Normal))\r\n return false;\r\n\r\n let area1 = cu1.Area2;\r\n let area2 = cu2.Area2;\r\n\r\n if (!equaln(Math.abs(area1), Math.abs(area2), 0.1))\r\n return false;\r\n\r\n let ptsBuls1 = cu1.PtsBuls;\r\n let ptsBuls2 = cu2.PtsBuls;\r\n\r\n let pts1 = ptsBuls1.pts;\r\n let pts2 = ptsBuls2.pts;\r\n let buls1 = ptsBuls1.buls;\r\n let buls2 = ptsBuls2.buls;\r\n\r\n let isEqualArea = equaln(area1, area2, 0.1);\r\n if (!equalv3(cu1.Normal, cu2.Normal))\r\n {\r\n if (isEqualArea)\r\n {\r\n pts2.reverse();\r\n buls2.reverse();\r\n buls2.push(buls2.shift());\r\n }\r\n else\r\n buls2 = buls2.map(bul => -bul);\r\n }\r\n else if (!isEqualArea)\r\n {\r\n pts2.reverse();\r\n buls2.reverse();\r\n buls2 = buls2.map(bul => -bul);\r\n buls2.push(buls2.shift());\r\n }\r\n\r\n if (cu1.IsClose && equalv2(pts1[0], arrayLast(pts1), tolerance))\r\n {\r\n pts1.pop();\r\n buls1.pop();\r\n }\r\n if (cu2.IsClose && equalv2(pts2[0], arrayLast(pts2), tolerance))\r\n {\r\n pts2.pop();\r\n buls2.pop();\r\n }\r\n\r\n let cu1Sp = AsVector2(cu1.StartPoint.applyMatrix4(cu2.OCSInv));\r\n\r\n let index = pts2.findIndex(p => equalv2(cu1Sp, p, tolerance));\r\n changeArrayStartIndex(buls2, index);\r\n changeArrayStartIndex(pts2, index);\r\n\r\n return equalArray(buls1, buls2, equaln) &&\r\n equalArray(pts1, pts2, (p1: Vector2, p2: Vector2) =>\r\n equalv3(\r\n AsVector3(p1).applyMatrix4(cu1.OCS),\r\n AsVector3(p2).applyMatrix4(cu2.OCS),\r\n tolerance\r\n )\r\n );\r\n }\r\n else if (cu1 instanceof Circle && cu2 instanceof Circle)\r\n {\r\n return equalv3(cu1.Center, cu2.Center) && equaln(cu1.Radius, cu2.Radius, 1e-6);\r\n }\r\n else if (cu1 instanceof Arc && cu2 instanceof Arc)\r\n {\r\n if (!equalv3(cu1.StartPoint, cu2.EndPoint)) cu1.Reverse();\r\n return equalv3(cu1.Center, cu2.Center)\r\n && equaln(cu1.Radius, cu2.Radius, 1e-6)\r\n && equaln(cu1.StartAngle, cu2.StartAngle)\r\n && equaln(cu1.EndAngle, cu2.EndAngle);\r\n }\r\n else if (cu1 instanceof Ellipse && cu2 instanceof Ellipse)\r\n {\r\n return equalv3(cu1.Center, cu2.Center)\r\n && equaln(cu1.RadX, cu2.RadX)\r\n && equaln(cu1.RadY, cu2.RadY)\r\n && equalv3(cu1.StartPoint, cu2.StartPoint);\r\n }\r\n else if (cu1 instanceof Line && cu2 instanceof Line)\r\n {\r\n let ps1 = [cu1.StartPoint, cu1.EndPoint];\r\n let ps2 = [cu2.StartPoint, cu2.EndPoint];\r\n return ps1.every(p => ps2.some(p1 => equalv3(p1, p)));\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n* 计算点在曲线前进方向的方位,左边或者右边\r\n*\r\n* @param {Curve} cu\r\n* @param {Vector3} pt\r\n* @returns {boolean} 左边为-1,右边为1\r\n*/\r\nexport function GetPointAtCurveDir(cu: Curve, pt: Vector3): number\r\n{\r\n if (cu instanceof Circle)\r\n return cu.PtInCurve(pt) ? -1 : 1;\r\n else if (cu instanceof Polyline)\r\n {\r\n let u = new OffsetPolyline(cu, 1);\r\n u.InitSubCurves();\r\n return u.GetPointAtCurveDir(pt.clone().applyMatrix4(cu.OCSInv).setZ(0));\r\n }\r\n //最近点\r\n let cp = cu.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-6)) return 0;\r\n //最近点参数\r\n let cparam = cu.GetParamAtPoint(cp);\r\n let dri = cu.GetFistDeriv(cparam);\r\n let cross = dri.cross(pt.clone().sub(cp)).applyMatrix4(cu.OCSInv);\r\n return -Math.sign(cross.z);\r\n}\r\n\r\n/**\r\n * 点在多段线的某个索引的圆弧(弓形)内\r\n *\r\n * @param {Polyline} pl\r\n * @param {number} index\r\n * @param {Vector3} pt\r\n * @returns {number}\r\n */\r\nfunction PointInPolylineArc(pl: Polyline, index: number, pt: Vector3): number\r\n{\r\n let bul = pl.GetBuilgeAt(index);\r\n if (equaln(bul, 0, 1e-8)) return 0;\r\n\r\n let arc = pl.GetCurveAtIndex(index) as Arc;\r\n\r\n if (IsPointInBowArc(arc, pt, true))\r\n return Math.sign(bul);\r\n\r\n return 0;\r\n}\r\n\r\nexport function ConverCircleToPolyline(cir: Circle): Polyline\r\n{\r\n //该写法不支持三维坐标系\r\n // let pl = new Polyline();\r\n // let bul = Math.tan(Math.PI * 0.125);\r\n // for (let i = 0; i < 4; i++)\r\n // {\r\n // let p = cir.GetPointAtParam(i * 0.25);\r\n // pl.AddVertexAt(i, Vec3DTo2D(p));\r\n // pl.SetBulgeAt(i, bul);\r\n // }\r\n // pl.CloseMark = true;\r\n // return pl;\r\n\r\n let arcs = cir.GetSplitCurves([0, 0.5]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCS;\r\n pl.Join(arcs[0]);\r\n pl.Join(arcs[1]);\r\n return pl;\r\n}\r\n\r\nexport function GetTanPtsOnArcOrCircle(cu: Arc | Circle, lastPoint?: Vector3)\r\n{\r\n if (lastPoint)\r\n {\r\n //ref:wykobi\r\n let ocsInv = cu.OCSInv;\r\n let v = lastPoint.clone().applyMatrix4(ocsInv);\r\n\r\n let lengthSq = v.lengthSq();\r\n let radiusSq = cu.Radius ** 2;\r\n\r\n if (lengthSq >= radiusSq)\r\n {\r\n let ratio = 1 / lengthSq;\r\n let deltaDist = Math.sqrt(lengthSq - radiusSq);\r\n\r\n let pts = [\r\n new Vector3(\r\n cu.Radius * (cu.Radius * v.x - v.y * deltaDist) * ratio,\r\n cu.Radius * (cu.Radius * v.y + v.x * deltaDist) * ratio,\r\n ),\r\n new Vector3(\r\n cu.Radius * (cu.Radius * v.x + v.y * deltaDist) * ratio,\r\n cu.Radius * (cu.Radius * v.y - v.x * deltaDist) * ratio,\r\n ),\r\n ];\r\n for (let p of pts)\r\n p.applyMatrix4(cu.OCS);\r\n return pts;\r\n }\r\n }\r\n}\r\n\r\nexport function CircleInternalTangentLines(cir0: Circle, cir1: Circle): Line[]\r\n{\r\n let c0 = new Vector3();\r\n let c1 = cir1.Center.applyMatrix4(cir0.OCSInv);\r\n\r\n let dist = c0.distanceTo(c1);\r\n\r\n if (dist - (cir0.Radius + cir1.Radius) < 0)\r\n return [];\r\n else if (equaln(dist - (cir0.Radius + cir1.Radius), 0))\r\n return [];\r\n else\r\n {\r\n let m = cir0.Radius / cir1.Radius;\r\n let h0 = (m * dist) / (m + 1);\r\n let h1 = dist / (m + 1);\r\n\r\n let i = new Vector3(\r\n (h1 * c0.x + h0 * c1.x) / dist,\r\n (h1 * c0.y + h0 * c1.y) / dist\r\n ).applyMatrix4(cir0.OCS);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(cir0, i);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(cir1, i);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\nexport function CircleOuterTangentLines(circle0: Circle, circle1: Circle): Line[]\r\n{\r\n let c0 = circle0.Center;\r\n let c1 = circle1.Center;\r\n\r\n let dist = c0.distanceTo(c1);\r\n\r\n let rd = Math.abs(circle0.Radius - circle1.Radius);\r\n if (dist < rd)\r\n return [];\r\n else if (equaln(Math.abs(dist - rd), 0))\r\n return [];\r\n else if (equaln(circle0.Radius, circle1.Radius))\r\n {\r\n let cp = circle0.GetClosestPointTo(c1, true);\r\n let derv = circle0.GetFistDeriv(cp).multiplyScalar(circle0.Radius);\r\n let dervn = derv.clone().negate();\r\n\r\n let c0p0 = c0.clone().add(derv);\r\n let c0p1 = c0.clone().add(dervn);\r\n\r\n let c1p0 = c1.clone().add(derv);\r\n let c1p1 = c1.clone().add(dervn);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n else\r\n {\r\n let c0 = new Vector3();\r\n let c1 = circle1.Center.applyMatrix4(circle0.OCSInv);\r\n\r\n let p: Vector3;\r\n if (circle0.Radius > circle1.Radius)\r\n p = new Vector3(\r\n c1.x * circle0.Radius - c0.x * circle1.Radius,\r\n c1.y * circle0.Radius - c0.y * circle1.Radius\r\n );\r\n else\r\n p = new Vector3(\r\n c0.x * circle1.Radius - c1.x * circle0.Radius,\r\n c0.y * circle1.Radius - c1.y * circle0.Radius\r\n );\r\n\r\n let diff = Math.abs(circle0.Radius - circle1.Radius);\r\n\r\n p.x /= diff;\r\n p.y /= diff;\r\n\r\n p.applyMatrix4(circle0.OCS);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(circle0, p);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(circle1, p);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\nexport function getArcOrCirNearPts(cu: Circle | Arc | Ellipse, pickPoint: Vector3, viewXform: Matrix3)\r\n{\r\n let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3);\r\n\r\n let plane = new PlaneExt(cu.Normal, cu.Center);\r\n\r\n let pickLocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true);\r\n\r\n if (pickLocal)\r\n {\r\n let x = new Vector3().fromArray(viewXform.elements, 0).add(pickLocal);\r\n let y = new Vector3().fromArray(viewXform.elements, 3).add(pickLocal);\r\n\r\n x = plane.intersectLine(new Line3(x, x.clone().add(viewNormal)), new Vector3(), true);\r\n y = plane.intersectLine(new Line3(y, y.clone().add(viewNormal)), new Vector3(), true);\r\n\r\n let lx = new Line(pickLocal, x);\r\n let ly = new Line(pickLocal, y);\r\n\r\n let ins = cu.IntersectWith(lx, IntersectOption.ExtendBoth);\r\n ins.push(...cu.IntersectWith(ly, IntersectOption.ExtendBoth));\r\n return ins;\r\n }\r\n else\r\n {\r\n let ptLocal = plane.projectPoint(pickPoint, new Vector3());\r\n let lz = new Line(ptLocal, ptLocal.clone().add(viewNormal));\r\n return cu.IntersectWith(lz, IntersectOption.ExtendBoth);\r\n }\r\n}\r\n\r\nexport function getTanPtsOnEllipse(cu: Ellipse, lastPoint: Vector3)\r\n{\r\n return [];\r\n}\r\n\r\nexport interface IRectInfo\r\n{\r\n isRect: boolean;\r\n size?: Vector3;\r\n box?: Box3;\r\n OCS?: Matrix4;\r\n}\r\n\r\nexport function IsRect(cu: Curve): IRectInfo\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (!cu.IsClose) return { isRect: false };\r\n\r\n let pts = cu.GetStretchPoints();\r\n\r\n if (pts.length < 4) return { isRect: false };\r\n\r\n let xVec: Vector3;\r\n let p1 = pts[0];\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n xVec = pts[i].clone().sub(p1).normalize();\r\n if (!equalv3(xVec, ZeroVec))\r\n break;\r\n }\r\n\r\n if (!xVec) return { isRect: false };\r\n\r\n let zVec = cu.Normal;\r\n let yVec = zVec.clone().cross(xVec).normalize();\r\n\r\n let rectOCS = new Matrix4().makeBasis(xVec, yVec, zVec);\r\n let rectOCSInv = new Matrix4().getInverse(rectOCS);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(rectOCSInv);\r\n\r\n let box = new Box3().setFromPoints(pts);\r\n\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x * size.y, cu.Area, 0.1))\r\n {\r\n return {\r\n isRect: true,\r\n size,\r\n box,\r\n OCS: rectOCS,\r\n };\r\n }\r\n }\r\n return { isRect: false };\r\n}\r\n\r\n/**用4个矩形点构造矩形 */\r\nexport function getRectFrom4Pts(pts: Vector3[])\r\n{\r\n if (pts.length !== 4) return;\r\n let p = pts.shift();\r\n pts.sort((p1, p2) => p.distanceTo(p1) - p.distanceTo(p2));\r\n pts.splice(1, 0, p);\r\n let lineData = pts.map(p =>\r\n {\r\n return {\r\n pt: new Vector2(p.x, p.y),\r\n bul: 0\r\n };\r\n });\r\n let l = new Polyline(lineData);\r\n l.CloseMark = true;\r\n return l;\r\n}\r\n\r\nexport function MergeCurvelist(cus: Curve[])\r\n{\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c1 = cus[i];\r\n let nextI = FixIndex(i + 1, cus);\r\n let c2 = cus[nextI];\r\n\r\n\r\n let status = equaln(c2.Length, 0, LINK_FUZZ) ? Status.True : c1.Join(c2, false, LINK_FUZZ);\r\n if (status === Status.True)\r\n {\r\n cus.splice(nextI, 1);\r\n i--;\r\n }\r\n else if (status === Status.ConverToCircle)\r\n {\r\n cus.length = 0;\r\n let a = c1 as Arc;\r\n cus.push(new Circle(a.Center, a.Radius));\r\n break;\r\n }\r\n }\r\n return cus;\r\n}\r\n\r\nexport function SwapParam(res: IntersectResult[]): IntersectResult[]\r\n{\r\n for (let r of res)\r\n [r.thisParam, r.argParam] = [r.argParam, r.thisParam];\r\n return res;\r\n}\r\n\r\nexport function ComputerCurvesNormalOCS(curves: Curve[], allowAutoCalc: boolean = true): Matrix4 | undefined\r\n{\r\n if (!curves || curves.length === 0) return;\r\n\r\n //准备计算多段线的法向量\r\n let normal: Vector3;\r\n let firstV: Vector3;\r\n for (let c of curves)\r\n {\r\n if (c instanceof Arc)\r\n {\r\n normal = c.Normal;\r\n break;\r\n }\r\n else if (firstV)\r\n {\r\n let v = c.GetFistDeriv(0);\r\n v.cross(firstV);\r\n if (!equalv3(v, ZeroVec))\r\n {\r\n normal = v.normalize();\r\n break;\r\n }\r\n }\r\n else\r\n {\r\n let cus = c.Explode() as Curve[];\r\n let ocs = ComputerCurvesNormalOCS(cus, false);\r\n if (ocs)\r\n return ocs;\r\n let fv = c.GetFistDeriv(0);\r\n if (fv && !equalv3(fv, ZeroVec, 1e-5))\r\n firstV = fv;\r\n }\r\n }\r\n\r\n if (!normal && !allowAutoCalc) return;\r\n\r\n let x = new Vector3();\r\n let y = new Vector3();\r\n if (!normal)\r\n {\r\n if (!firstV)\r\n return curves[0].OCS;\r\n\r\n normal = firstV.normalize();\r\n Orbit.ComputUpDirection(normal, y, x);\r\n [x, y, normal] = [normal, x, y];\r\n }\r\n else\r\n {\r\n if (equalv3(normal, curves[0].Normal.negate()))\r\n normal.negate();\r\n Orbit.ComputUpDirection(normal, y, x);\r\n }\r\n return new Matrix4().makeBasis(x, y, normal).setPosition(curves[0].StartPoint);\r\n}\r\n\r\n\r\nexport function Pts2Polyline(pts: (Vec3 | Vec2)[], isClose: boolean): Polyline\r\n{\r\n let pl = new Polyline();\r\n for (let i = 0; i < pts.length; i += 2)\r\n {\r\n let p1 = AsVector3(pts[i]);\r\n let arc: Arc | Line;\r\n let p2: Vector3;\r\n let p3: Vector3;\r\n\r\n if (isClose)\r\n {\r\n p2 = AsVector3(pts[FixIndex(i + 1, pts.length)]);\r\n p3 = AsVector3(pts[FixIndex(i + 2, pts.length)]);\r\n }\r\n else\r\n {\r\n if (i >= pts.length - 2) break;\r\n p2 = AsVector3(pts[i + 1]);\r\n p3 = AsVector3(pts[i + 2]);\r\n }\r\n let v1 = p1.clone().sub(p2);\r\n let v2 = p2.clone().sub(p3);\r\n\r\n if (equaln(v1.angleTo(v2), 0))\r\n arc = new Line(p1, p3);\r\n else\r\n arc = new Arc().FromThreePoint(p1, p2, p3);\r\n pl.Join(arc);\r\n }\r\n return pl;\r\n}\r\n\r\n/**获取矩形信息 */\r\nexport function GetRectData(cu: Curve): { isRect: boolean, size?: Vector3, box?: Box3, OCS?: Matrix4; }\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (!cu.IsClose) return { isRect: false };\r\n\r\n let pts = cu.GetStretchPoints();\r\n if (cu.Area2 < 0)\r\n pts.reverse();\r\n\r\n if (equalv3(pts[0], arrayLast(pts)))\r\n pts.pop();\r\n\r\n if (pts.length < 4) return { isRect: false };\r\n\r\n let xVec: Vector3;\r\n let p1 = pts[0];\r\n\r\n let originIndex = 0;\r\n\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n if (pts[i].y < p1.y)\r\n {\r\n p1 = pts[i];\r\n originIndex = i;\r\n }\r\n else if (equaln(pts[i].y, p1.y))\r\n {\r\n if (pts[i].x < p1.x)\r\n {\r\n p1 = pts[i];\r\n originIndex = i;\r\n }\r\n }\r\n }\r\n\r\n let tempPts = pts.splice(0, originIndex);\r\n pts.push(...tempPts);\r\n\r\n p1 = pts[0];\r\n\r\n\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n let v = pts[i].clone().sub(p1);\r\n if (equalv3(v, ZeroVec))\r\n continue;\r\n if (!xVec)\r\n xVec = v;\r\n else\r\n {\r\n if (isParallelTo(v, xVec))\r\n xVec.copy(v);\r\n else\r\n break;\r\n }\r\n }\r\n\r\n let yVec: Vector3;\r\n\r\n for (let i = pts.length - 1; i > 0; i--)\r\n {\r\n let v = pts[i].clone().sub(p1);\r\n if (equalv3(v, ZeroVec))\r\n continue;\r\n if (!yVec)\r\n yVec = v;\r\n else\r\n {\r\n if (isParallelTo(v, yVec))\r\n yVec.copy(v);\r\n else\r\n break;\r\n }\r\n }\r\n\r\n if (!xVec || !yVec) return { isRect: false };\r\n\r\n //2向量必须垂直\r\n if (!isPerpendicularityTo(xVec.clone().normalize(), yVec.clone().normalize()))\r\n return { isRect: false };\r\n\r\n if (yVec.length() > xVec.length())\r\n [xVec, yVec] = [yVec.negate(), xVec];\r\n\r\n if (xVec.angleTo(XAxis) > Math.PI / 4)\r\n [xVec, yVec] = [yVec.negate(), xVec];\r\n\r\n\r\n let rectOCS = new Matrix4().makeBasis(xVec.normalize(), yVec.normalize(), xVec.clone().cross(yVec));\r\n let rectOCSInv = new Matrix4().getInverse(rectOCS);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(rectOCSInv);\r\n\r\n let box = new Box3().setFromPoints(pts);\r\n\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x * size.y, cu.Area, 0.1))\r\n {\r\n return {\r\n isRect: true,\r\n size,\r\n box,\r\n OCS: rectOCS,\r\n };\r\n }\r\n }\r\n return { isRect: false };\r\n}\r\n\r\nconst PolylineSpliteRectFuzz = 1e-3;\r\n/**封闭多段线 分割成矩形 */\r\nexport function PolylineSpliteRect(outline: Polyline): Polyline[]\r\n{\r\n if (!outline.IsClose || IsRect(outline).isRect)\r\n return [outline];\r\n\r\n let firstDerv = outline.GetFistDeriv(0).normalize();\r\n if (!isParallelTo(firstDerv, XAxis, PolylineSpliteRectFuzz) && !isParallelTo(firstDerv, YAxis, PolylineSpliteRectFuzz)) return [outline];\r\n\r\n let cus = outline.Explode();\r\n let yCus: Curve[] = [];\r\n\r\n for (let c of cus)\r\n {\r\n if (c instanceof Arc) return [outline];\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (isParallelTo(derv, YAxis, PolylineSpliteRectFuzz))\r\n yCus.push(c);\r\n else\r\n if (!isParallelTo(derv, XAxis, PolylineSpliteRectFuzz))\r\n {\r\n return [outline];\r\n }\r\n }\r\n\r\n yCus.sort((c1, c2) => c1.StartPoint.x - c2.StartPoint.x);\r\n\r\n\r\n let rects: Polyline[] = [];\r\n\r\n for (let i = 0; i < yCus.length - 1; i++)\r\n {\r\n let c1 = yCus[i];\r\n let c2 = yCus[i + 1];\r\n\r\n let x1 = c1.StartPoint.x;\r\n let x2 = c2.StartPoint.x;\r\n if (equaln(x1, x2))\r\n continue;\r\n\r\n let y1: number;\r\n let y2: number;\r\n\r\n let res = c1.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n\r\n let res2 = c2.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n let pars = [...res.map(r => Math.floor(r.argParam)), ...res2.map(r => Math.floor(r.argParam))];\r\n pars = [...new Set(pars)];\r\n pars.sort((a, b) => a - b);\r\n\r\n let ys: number[] = [];\r\n for (let par of pars)\r\n {\r\n let c = outline.GetCurveAtParam(par);\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, PolylineSpliteRectFuzz))\r\n {\r\n let x3 = c.StartPoint.x;\r\n let x4 = c.EndPoint.x;\r\n if (x3 > x4)\r\n [x3, x4] = [x4, x3];\r\n if (isIntersect(x1, x2, x3, x4, -PolylineSpliteRectFuzz))\r\n ys.push(c.StartPoint.y);\r\n }\r\n }\r\n\r\n if (ys.length < 2) return [outline];\r\n\r\n ys.sort((a, b) => a - b);\r\n\r\n y1 = ys[0];\r\n y2 = arrayLast(ys);\r\n\r\n rects.push(new Polyline().RectangleFrom2Pt(new Vector3(x1, y1), new Vector3(x2, y2)));\r\n }\r\n\r\n return rects;\r\n\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Matrix3, Matrix4, Object3D, Shape, Vector2, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getArcOrCirNearPts, getCircleCenter, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { matrixSetVector, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { angle, AsVector3, clampRad, equaln, equalv3, midPoint, MoveMatrix, polar } from '../../Geometry/GeUtils';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\n/**\r\n * 圆弧实体类\r\n * 与ACAD不同,这个类加入了时针变量,并且默认构造的圆弧为顺时针圆弧.\r\n *\r\n * 关于时针圆弧:\r\n * 起始圆弧到终止圆弧总是在0-2PI之间.(一个完整的圆).\r\n * 圆弧的绘制从起始圆弧绘制到终止圆弧. 按照时针绘制.\r\n * 参考计算圆弧的完整角度方法查看该计算方式.\r\n */\r\n@Factory\r\nexport class Arc extends Curve\r\n{\r\n constructor(center: Vector3 = new Vector3(), radius: number = 0.1, startAngle: number = 0.1, endAngle: number = 0, clockwise = true)\r\n {\r\n super();\r\n this._Matrix.setPosition(center);\r\n this._Radius = radius;\r\n this._StartAngle = clampRad(startAngle);\r\n this._EndAngle = clampRad(endAngle);\r\n this._Clockwise = clockwise;\r\n }\r\n private _Radius: number;\r\n private _StartAngle: number;\r\n private _EndAngle: number;\r\n /**\r\n * 曲线为顺时针\r\n */\r\n private _Clockwise = true;\r\n\r\n get Shape()\r\n {\r\n let sp = new Shape();\r\n sp.absarc(0, 0, this._Radius, this._StartAngle, this._EndAngle, this._Clockwise);\r\n return sp;\r\n }\r\n\r\n get Center()\r\n {\r\n return this.Position;\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.Position = v;\r\n }\r\n\r\n get Normal()\r\n {\r\n return new Vector3().setFromMatrixColumn(this._Matrix, 2);\r\n }\r\n set Normal(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n matrixSetVector(this._Matrix, 2, v);\r\n this.Update();\r\n }\r\n\r\n get Area(): number\r\n {\r\n return 0.5 * this.AllAngle * this.Radius * this.Radius;\r\n }\r\n //获得曲线的面积,逆时针为正,顺时针为负.\r\n get Area2(): number\r\n {\r\n let clockwise = this._Clockwise ? -1 : 1;\r\n return 0.5 * this.AllAngle * this.Radius * this.Radius * clockwise;\r\n }\r\n get IsClose(): boolean\r\n {\r\n return false;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n let pts = [this.StartPoint, this.EndPoint];\r\n\r\n //TODO:考虑三维圆弧.\r\n let addPts = [\r\n this.Center.add(new Vector3(this._Radius, 0)),\r\n this.Center.add(new Vector3(0, this._Radius)),\r\n this.Center.add(new Vector3(-this._Radius, 0)),\r\n this.Center.add(new Vector3(0, -this._Radius)),\r\n ];\r\n addPts.forEach(p =>\r\n {\r\n if (this.PtOnCurve(p))\r\n pts.push(p);\r\n });\r\n return new Box3().setFromPoints(pts);\r\n }\r\n\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Radius = v <= 0 ? 1e-19 : v;\r\n this.Update();\r\n }\r\n\r\n get IsClockWise()\r\n {\r\n return this._Clockwise;\r\n }\r\n set IsClockWise(v: boolean)\r\n {\r\n if (v !== this._Clockwise)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Clockwise = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get StartAngle()\r\n {\r\n return this._StartAngle;\r\n }\r\n set StartAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartAngle = v;\r\n this.Update();\r\n }\r\n\r\n get EndAngle()\r\n {\r\n return this._EndAngle;\r\n }\r\n set EndAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndAngle = v;\r\n this.Update();\r\n }\r\n\r\n //******************** Curve function start*****************//\r\n get StartPoint()\r\n {\r\n return polar(new Vector3(), this._StartAngle, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n set StartPoint(v: Vector3)\r\n {\r\n let vTemp = v.clone().applyMatrix4(this.OCSInv);\r\n this.StartAngle = angle(vTemp);\r\n }\r\n get EndPoint()\r\n {\r\n return polar(new Vector3(), this._EndAngle, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n set EndPoint(v: Vector3)\r\n {\r\n let vTemp = v.clone().applyMatrix4(this.OCSInv);\r\n this.EndAngle = angle(vTemp);\r\n }\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return 1;\r\n }\r\n get Length()\r\n {\r\n return this.AllAngle * this._Radius;\r\n }\r\n\r\n GetParamAtPoint2(pt: Vector3): number\r\n {\r\n return this.GetParamAtAngle(this.GetAngleAtPoint(pt));\r\n }\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n let param = this.GetParamAtPoint2(p);\r\n return this.ParamOnCurve(param, fuzz);\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Center = this.Center.applyMatrix4(m);\r\n this.Radius = this.Radius * m.getMaxScaleOnAxis();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this._Clockwise = !this._Clockwise;\r\n this.StartPoint = sp;\r\n this.EndPoint = ep;\r\n return this;\r\n }\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.GetAngleAtParam(param);\r\n return polar(new Vector3(), an, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n GetPointAtDistance(distance: number)\r\n {\r\n let len = this.Length;\r\n if (len == 0) return;\r\n return this.GetPointAtParam(distance / len);\r\n }\r\n\r\n GetDistAtParam(param: number)\r\n {\r\n return Math.abs(param * this.Length);\r\n }\r\n\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n GetParamAtPoint(pt: Vector3)\r\n {\r\n if (this._Radius == 0 ||\r\n this.AllAngle == 0 ||\r\n !equaln(pt.distanceTo(this.Center), this._Radius, 1e-6))\r\n return NaN;\r\n\r\n return this.GetParamAtAngle(this.GetAngleAtPoint(pt));\r\n }\r\n\r\n /**\r\n * 利用角度计算该角度在圆弧中代表的参数.\r\n * 如果角度在圆弧内,那么返回0-1\r\n * 如果角度不在圆弧内,那么尝试返回离圆弧起始或者结束的较近的参数\r\n *\r\n * @param {number} an\r\n * @returns\r\n * @memberof Arc\r\n */\r\n GetParamAtAngle(an: number)\r\n {\r\n //如果以pt为终点,那么所有的角度为\r\n let ptAllAn = this.ComputeAnlge(an);\r\n let allAn = this.AllAngle;\r\n\r\n //减去圆弧角度,剩余角度的一半\r\n let surplusAngleHalf = Math.PI - allAn / 2;\r\n\r\n if (ptAllAn > allAn + surplusAngleHalf)//返回负数\r\n return ((ptAllAn - allAn) - (surplusAngleHalf * 2)) / allAn;\r\n else//返回正数\r\n return ptAllAn / allAn;\r\n }\r\n\r\n /**\r\n * 根据角度获得参数,不过在这里我们可以指定我们是要获取前面的参数还是后面的参数(正负)\r\n * @param an\r\n * @param [isStart] true:返回负数,false 返回正数\r\n * @returns\r\n */\r\n GetParamAtAngle2(an: number, isStart = true)\r\n {\r\n //如果以pt为终点,那么所有的角度为\r\n let ptAllAn = this.ComputeAnlge(an);\r\n let allAn = this.AllAngle;\r\n\r\n //减去圆弧角度,剩余角度的一半\r\n let surplusAngleHalf = Math.PI - allAn / 2;\r\n\r\n if (isStart)//返回负数\r\n return ((ptAllAn - allAn) - (surplusAngleHalf * 2)) / allAn;\r\n else//返回正数\r\n return ptAllAn / allAn;\r\n }\r\n\r\n GetAngleAtPoint(pt: Vector3)\r\n {\r\n let ptTmp = pt.clone().applyMatrix4(this.OCSInv);\r\n return angle(ptTmp);\r\n }\r\n\r\n GetAngleAtParam(param: number)\r\n {\r\n return clampRad(this._StartAngle + param * this.AllAngle * (this._Clockwise ? -1 : 1));\r\n }\r\n\r\n GetSplitCurves(param: number[] | number): Arc[]\r\n {\r\n let params = this.SplitParamSort(param);\r\n //角度列表\r\n let ans = params.map(p => this.GetAngleAtParam(p));\r\n //返回圆弧表\r\n let arcs: Arc[] = [];\r\n for (let i = 0; i < ans.length - 1; i++)\r\n {\r\n let arc = this.Clone() as Arc;\r\n arc.ColorIndex = this.ColorIndex;\r\n arc.StartAngle = ans[i];\r\n arc.EndAngle = ans[i + 1];\r\n arcs.push(arc);\r\n }\r\n return arcs;\r\n }\r\n GetOffsetCurves(offsetDist: number)\r\n {\r\n if (this._Clockwise) offsetDist *= -1;\r\n if ((offsetDist + this._Radius) > 0)\r\n {\r\n let arc = this.Clone() as Arc;\r\n arc.Radius = offsetDist + this._Radius;\r\n return [arc];\r\n }\r\n return [];\r\n }\r\n Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < 0)\r\n {\r\n this._StartAngle = this.GetAngleAtParam(newParam);\r\n }\r\n else if (newParam > 1)\r\n {\r\n this._EndAngle = this.GetAngleAtParam(newParam);\r\n }\r\n this.Update();\r\n }\r\n\r\n Join(cu: Curve): Status\r\n {\r\n if (cu instanceof Arc)\r\n {\r\n //非常小的圆弧直接结束\r\n if (cu.AllAngle < 5e-6) return Status.False;\r\n\r\n if (equalv3(cu.Center, this.Center) && equaln(cu._Radius, this._Radius))\r\n {\r\n this.WriteAllObjectRecord();\r\n let [sa, ea] = [cu.StartAngle, cu.EndAngle];\r\n if (cu._Clockwise != this._Clockwise)\r\n [sa, ea] = [ea, sa];\r\n\r\n let allAn = this.AllAngle;\r\n let saAllan = this.ComputeAnlge(sa);\r\n let eaAllan = this.ComputeAnlge(ea);\r\n\r\n if (equaln(sa, this._StartAngle)) //this起点对起点\r\n {\r\n if (eaAllan > allAn)\r\n this.EndAngle = ea;\r\n\r\n return Status.True;\r\n }\r\n else if (equaln(sa, this._EndAngle))//this终点对起点\r\n {\r\n if (eaAllan < allAn || equaln(ea, this._StartAngle))\r\n return Status.ConverToCircle;\r\n else\r\n this.EndAngle = ea;\r\n\r\n return Status.True;\r\n }\r\n else if (equaln(ea, this.StartAngle))//this起点对终点\r\n {\r\n if (saAllan < allAn)\r\n return Status.ConverToCircle;\r\n else\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n else if (equaln(ea, this._EndAngle))//this终点对终点\r\n {\r\n if (saAllan > allAn)\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n else if (this.ParamOnCurve(this.GetParamAtAngle(sa)))\r\n {\r\n if (eaAllan < saAllan)\r\n return Status.ConverToCircle;\r\n else if (eaAllan > allAn)\r\n this.EndAngle = ea;\r\n return Status.True;\r\n }\r\n else if (this.ParamOnCurve(this.GetParamAtAngle(ea)))\r\n {\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n\r\n //使用按负方向去计算它的参数\r\n let saParam: number;\r\n if (saAllan > allAn)\r\n saParam = (saAllan - Math.PI * 2) / allAn;\r\n else\r\n saParam = saAllan / allAn;\r\n\r\n let eaParam: number;\r\n if (eaAllan > saAllan && saAllan > allAn)\r\n eaParam = (eaAllan - Math.PI * 2) / allAn;\r\n else\r\n eaParam = eaAllan / allAn;\r\n\r\n let pMin = Math.max(0, saParam);\r\n let pMax = Math.min(1, eaParam);\r\n\r\n if (pMin <= pMax + 1e-5)\r\n {\r\n if (saParam < 0)\r\n this.StartAngle = sa;\r\n if (eaParam > 1)\r\n this.EndAngle = ea;\r\n return Status.True;\r\n }\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Clockwise = !this._Clockwise;\r\n [this._StartAngle, this._EndAngle] = [this._EndAngle, this._StartAngle];\r\n return this;\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4)\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectArcAndArc(this, curve, intType);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndArc(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return SwapParam(IntersectCircleAndArc(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Polyline)\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance));\r\n\r\n if (curve instanceof Ellipse)\r\n return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType));\r\n return [];\r\n }\r\n\r\n /**\r\n * 计算出圆弧所包含的角度\r\n *\r\n * @readonly\r\n * @type {number}\r\n * @memberof Arc\r\n */\r\n get AllAngle(): number\r\n {\r\n return this.ComputeAnlge(this._EndAngle);\r\n }\r\n\r\n get Bul(): number\r\n {\r\n if (equaln(this.AllAngle, Math.PI * 2))\r\n return 1;\r\n return Math.tan(this.AllAngle * 0.25) * (this.IsClockWise ? -1 : 1);\r\n }\r\n\r\n /**\r\n * 计算所包含的角度\r\n *\r\n * @private\r\n * @param {number} endAngle 结束的角度\r\n * @returns\r\n * @memberof Arc\r\n */\r\n ComputeAnlge(endAngle: number)\r\n {\r\n //顺时针\r\n if (this._Clockwise)\r\n {\r\n if (this._StartAngle > endAngle)\r\n return this.StartAngle - endAngle;\r\n else //越过0点绘制圆弧\r\n return (Math.PI * 2) - (endAngle - this._StartAngle);\r\n }\r\n else\r\n {\r\n if (endAngle > this._StartAngle)\r\n return endAngle - this._StartAngle;\r\n else\r\n return (Math.PI * 2) - (this._StartAngle - endAngle);\r\n }\r\n }\r\n\r\n /**\r\n * 解析两点和凸度所构成的圆弧\r\n *\r\n * @param {Vector2} p1\r\n * @param {Vector2} p2\r\n * @param {number} bul 凸度,在cad中,凸度为 <(四分之一圆心角)的正切值>\r\n */\r\n ParseFromBul(p1: Vector3 | Vector2, p2: Vector3 | Vector2, bul: number): Arc\r\n {\r\n if (p1 instanceof Vector2)\r\n p1 = AsVector3(p1);\r\n if (p2 instanceof Vector2)\r\n p2 = AsVector3(p2);\r\n\r\n let ocsInv = this.OCSInv;\r\n p1 = p1.clone().applyMatrix4(ocsInv);\r\n p2 = p2.clone().applyMatrix4(ocsInv);\r\n\r\n //弦向量\r\n let chordV = p2.clone().sub(p1);\r\n //弦角度\r\n let chordAn = angle(chordV);\r\n //弦长度/2\r\n let chordLengthHalf = chordV.length() / 2;\r\n\r\n let allAngle = Math.atan(bul) * 4;\r\n let HalfAngle = allAngle * 0.5;\r\n //半径\r\n this._Radius = chordLengthHalf / Math.sin(HalfAngle);\r\n\r\n //指向圆心的角度\r\n let toCenterAn = chordAn + Math.PI * 0.5;//弦角度转90\r\n\r\n //圆心\r\n let center = midPoint(p1, p2);\r\n polar(center, toCenterAn, this._Radius - (bul * chordLengthHalf));\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n\r\n this._Radius = Math.abs(this._Radius);\r\n\r\n this._StartAngle = angle(p1.clone().sub(center));\r\n this._EndAngle = angle(p2.clone().sub(center));\r\n\r\n this._Clockwise = bul < 0;\r\n\r\n return this;\r\n }\r\n FromThreePoint(pt1: Vector3, pt2: Vector3, pt3: Vector3)\r\n {\r\n if (!(pt1 && pt2 && pt3))\r\n return;\r\n\r\n let ocsInv = this.OCSInv;\r\n pt1 = pt1.clone().applyMatrix4(ocsInv);\r\n pt2 = pt2.clone().applyMatrix4(ocsInv);\r\n pt3 = pt3.clone().applyMatrix4(ocsInv);\r\n\r\n let center = getCircleCenter(pt1, pt2, pt3);\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n //用圆心和其中一个点求距离得到半径:\r\n this._Radius = center.distanceTo(pt1);\r\n //起始角度 端点角度\r\n this._StartAngle = angle(pt1.clone().sub(center));\r\n this._EndAngle = angle(pt3.clone().sub(center));\r\n //求出向量p1->p2,p1->p3\r\n let p1 = pt2.clone().sub(pt1);\r\n let p2 = pt3.clone().sub(pt1);\r\n\r\n this._Clockwise = p1.cross(p2).z < 0;\r\n return this;\r\n }\r\n\r\n /**\r\n * 重载: 初始化绘制实体.\r\n *\r\n * @param {RenderType} [renderType=RenderType.Wireframe]\r\n */\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let geo = BufferGeometryUtils.CreateFromPts(this.Shape.getPoints(60).map(AsVector3));\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry();\r\n geometry.setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n //更新Geometry\r\n private UpdateGeometry(geo: BufferGeometry)\r\n {\r\n let pts = this.Shape.getPoints(60).map(AsVector3);\r\n BufferGeometryUtils.UpdatePts(geo, pts);\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n *\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n * @memberof Arc\r\n */\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let geo = obj[\"geometry\"] as BufferGeometry;\r\n this.UpdateGeometry(geo);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return [this.StartPoint, this.EndPoint];\r\n case ObjectSnapMode.Mid:\r\n return [this.GetPointAtParam(0.5)];\r\n case ObjectSnapMode.Nea:\r\n return getArcOrCirNearPts(this, pickPoint, viewXform)\r\n .filter(p => this.PtOnCurve(p));\r\n case ObjectSnapMode.Ext:\r\n return [this.GetClosestPointTo(pickPoint, true)];\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n let l = new Line(this.Center, lastPoint);\r\n return l.IntersectWith(this, IntersectOption.ExtendBoth).filter(p => this.PtOnCurve(p));\r\n }\r\n case ObjectSnapMode.Tan:\r\n let pts = GetTanPtsOnArcOrCircle(this, lastPoint);\r\n if (pts)\r\n return pts.filter(p => this.PtOnCurve(p));\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [\r\n this.StartPoint,\r\n this.GetPointAtParam(0.5),\r\n this.EndPoint,\r\n this.Center.clone(),\r\n ];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n this.WriteAllObjectRecord();\r\n let ptsArr = this.GetGripPoints();\r\n let index = indexList[0];\r\n let p = ptsArr[index];\r\n if (p)\r\n {\r\n p.add(vec);\r\n if (index > 2)\r\n this.Center = this.Center.add(vec);\r\n else\r\n this.FromThreePoint(ptsArr[0], ptsArr[1], ptsArr[2]);\r\n this.Update();\r\n }\r\n }\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length === 0)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n if (indexList.length === 2)\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n else\r\n for (let index of indexList)\r\n {\r\n let pts = [this.StartPoint, this.EndPoint];\r\n let [sp, ep] = pts;\r\n\r\n let oldChordLengthHalf = sp.distanceTo(ep) * 0.5;\r\n\r\n let arcHeight = oldChordLengthHalf * this.Bul;\r\n\r\n pts[index].add(vec);\r\n\r\n let newChordLengthHalf = sp.distanceTo(ep) * 0.5;\r\n\r\n let newBul = arcHeight / newChordLengthHalf;\r\n\r\n //根据凸度构造新的弧\r\n this.ParseFromBul(sp, ep, newBul);\r\n this.Update();\r\n }\r\n }\r\n\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n let an: number;\r\n if (typeof pt === \"number\")\r\n an = this.GetAngleAtParam(pt);\r\n else\r\n an = angle(pt.clone().applyMatrix4(this.OCSInv));\r\n\r\n an += Math.PI * 0.5 * (this._Clockwise ? -1 : 1);\r\n\r\n let ocs = new Matrix4().extractRotation(this.OCS);\r\n return polar(new Vector3(), an, this._Radius).applyMatrix4(ocs);\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n let l = new Line(this.Center, pt);\r\n let inPts: Vector3[] = this.IntersectWith(l, extend ? IntersectOption.ExtendBoth : IntersectOption.ExtendArg);\r\n if (inPts.length < 2)\r\n inPts.push(this.StartPoint, this.EndPoint);\r\n return inPts.reduce((p1, p2) => p1.distanceToSquared(pt) < p2.distanceToSquared(pt) ? p1 : p2);\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n if (ver === 1)\r\n {\r\n this.Center = new Vector3().fromArray(file.Read());\r\n this.Normal = new Vector3().fromArray(file.Read());\r\n }\r\n this._Radius = file.Read();\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n this._Clockwise = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n file.Write(this._Radius);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.Write(this._Clockwise);\r\n }\r\n //#endregion\r\n}\r\n","\r\ntype LogFunction = (message?: any, ...optionalParams: any[]) => void;\r\n\r\nexport const _LogInjectFunctions: LogFunction[] = [];\r\n\r\nexport function Log(message?: any, ...optionalParams: any[]): void\r\n{\r\n for (let f of _LogInjectFunctions)\r\n f(message, ...optionalParams);\r\n}\r\n\r\nexport const LogEnable = {\r\n Display: false\r\n};\r\n","\r\n\r\nlet instanceMap = new Map();\r\n\r\n/**\r\n * 构造单例类的静态类.\r\n * # Example:\r\n * class A extends Singleton(){};\r\n * //获得单例\r\n * let a = A.GetInstance();\r\n */\r\nexport class Singleton\r\n{\r\n protected constructor() { }\r\n\r\n //FIXME: https://github.com/Microsoft/TypeScript/issues/5863\r\n static GetInstance(): T\r\n {\r\n if (instanceMap.has(this))\r\n return instanceMap.get(this);\r\n //@ts-ignore\r\n let __instance__ = new this.prototype.constructor();\r\n instanceMap.set(this, __instance__);\r\n return __instance__;\r\n }\r\n}\r\n","import { Geometry, Matrix4, Vector3 } from \"three\";\r\n\r\nexport function ScaleUV(geo: Geometry, scale = 1e-3)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n uv.multiplyScalar(scale);\r\n }\r\n }\r\n }\r\n}\r\nexport function ScaleUV2(geo: Geometry, ocs: Matrix4, xScale = 1e-3, yScale = 1e-3, isInvert = false)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n let p = new Vector3(uv.x, uv.y).applyMatrix4(ocs);\r\n uv.x = p.x;\r\n uv.y = p.y;\r\n if (isInvert)\r\n {\r\n uv.x /= yScale;\r\n uv.y /= xScale;\r\n }\r\n else\r\n {\r\n uv.x /= xScale;\r\n uv.y /= yScale;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { Matrix3, Matrix4, Path, Shape as TShape, Vector3, Box3 } from 'three';\r\nimport { arrayRemoveIf } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Contour } from './Contour';\r\nimport { Circle } from './Entity/Circle';\r\nimport { Curve } from './Entity/Curve';\r\nimport { Polyline } from './Entity/Polyline';\r\nimport { equaln } from '../Geometry/GeUtils';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\n\r\nexport class Shape\r\n{\r\n private _Outline: Contour;\r\n private _Holes: Contour[] = [];\r\n private _Shape: TShape = new TShape();\r\n constructor(out?: Contour, hols?: Contour[])\r\n {\r\n this._Outline = out || new Contour();\r\n hols && this._Holes.push(...hols);\r\n }\r\n\r\n get Outline()\r\n {\r\n return this._Outline;\r\n }\r\n get Holes()\r\n {\r\n return this._Holes;\r\n }\r\n get Area()\r\n {\r\n let outlineArea = this._Outline.Area;\r\n let holeArea = this._Holes.map(l => l.Area).reduce((a1, a2) => a1 + a2, 0);\r\n return outlineArea - holeArea;\r\n }\r\n get BoundingBox()\r\n {\r\n return this._Outline.BoundingBox;\r\n }\r\n set Outline(cus: Contour)\r\n {\r\n this._Outline = cus;\r\n this.UpdateShape();\r\n }\r\n set Holes(cus: Contour[])\r\n {\r\n this._Holes = cus;\r\n this.UpdateShape();\r\n }\r\n get Shape()\r\n {\r\n this.UpdateShape();\r\n return this._Shape;\r\n }\r\n get Position()\r\n {\r\n return this._Outline.Curve.Position;\r\n }\r\n set Position(p: Vector3)\r\n {\r\n let vec = p.clone().sub(this._Outline.Curve.Position);\r\n this._Outline.Curve.Position = p;\r\n for (let h of this._Holes)\r\n h.Curve.Position = h.Curve.Position.add(vec);\r\n }\r\n Z0()\r\n {\r\n this._Outline.Curve.Z0();\r\n for (let h of this._Holes)\r\n h.Curve.Z0();\r\n return this;\r\n }\r\n\r\n MatrixPlanarizere()\r\n {\r\n this._Outline.Curve.MatrixPlanarizere();\r\n for (let h of this._Holes)\r\n h.Curve.MatrixPlanarizere();\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n this._Outline.Curve.ApplyMatrix(m);\r\n this._Holes.forEach(h => h.Curve.ApplyMatrix(m));\r\n return this;\r\n }\r\n ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n\r\n let cu = this.Outline.Curve;\r\n let cus = this._Holes.map(h => h.Curve);\r\n cus.unshift(cu);\r\n for (let c of cus)\r\n {\r\n c.ApplyMatrix(c.OCS);\r\n c.ApplyMatrix(m);\r\n c.ApplyMatrix(c.OCSInv);\r\n }\r\n\r\n return this;\r\n }\r\n Explode()\r\n {\r\n let cus: Curve[] = [];\r\n let contours: Contour[] = [this._Outline, ...this._Holes];\r\n for (let con of contours)\r\n {\r\n if (con.Curve instanceof Polyline)\r\n cus.push(...con.Curve.Explode());\r\n else\r\n cus.push(con.Curve.Clone());\r\n }\r\n return cus;\r\n }\r\n Clone()\r\n {\r\n let shape = new Shape();\r\n shape.Outline = this._Outline.Clone();\r\n shape.Holes = this.Holes.map(h => h.Clone());\r\n return shape;\r\n }\r\n SetColor(color: number)\r\n {\r\n this._Outline.Curve.ColorIndex = color;\r\n this._Holes.forEach(h => h.Curve.ColorIndex = color);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let cus: Curve[] = [this._Outline.Curve];\r\n for (let h of this._Holes)\r\n {\r\n cus.push(h.Curve);\r\n }\r\n let pts: Vector3[] = [];\r\n for (let c of cus)\r\n {\r\n pts.push(...c.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints()\r\n {\r\n let pts = this.Outline.Curve.GetGripPoints();\r\n for (let h of this._Holes)\r\n {\r\n pts.push(...h.Curve.GetGripPoints());\r\n }\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n let i = indexList[0];\r\n let outlineIndex = this._Outline.Curve.GetGripPoints().length;\r\n\r\n let cu = this._Outline.Curve;\r\n\r\n if (i >= outlineIndex)\r\n {\r\n for (let h of this._Holes)\r\n {\r\n let len = h.Curve.GetGripPoints().length;\r\n if (indexList[0] < outlineIndex + len)\r\n {\r\n indexList = [indexList[0] - outlineIndex];\r\n cu = h.Curve;\r\n break;\r\n }\r\n outlineIndex += len;\r\n }\r\n }\r\n cu.MoveGripPoints(indexList, vec);\r\n }\r\n GetStretchPoints()\r\n {\r\n let pts = this.Outline.Curve.GetStretchPoints();\r\n for (let h of this._Holes)\r\n {\r\n pts.push(...h.Curve.GetStretchPoints());\r\n }\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n let outlen = 0;\r\n for (let cu of [this._Outline.Curve, ...this._Holes.map(h => h.Curve)])\r\n {\r\n let count = cu.GetStretchPoints().length;\r\n let refIndex = outlen + count;\r\n let curIndexs = [];\r\n while (indexList.length)\r\n {\r\n if (indexList[0] < refIndex)\r\n curIndexs.push(indexList.shift() - outlen);\r\n else\r\n break;\r\n }\r\n cu.MoveStretchPoints(curIndexs, vec);\r\n\r\n if (indexList.length === 0)\r\n break;\r\n\r\n outlen += count;\r\n }\r\n }\r\n //交集 如果成功返回一个面域 失败返回0个\r\n IntersectionBoolOperation(targetShape: Shape): Shape[]\r\n {\r\n let resOutlines = this._Outline.IntersectionBoolOperation(targetShape._Outline);\r\n let cus = this.targetOutlineSubHoleOutline(resOutlines, Shape.mergeContours([...this._Holes, ...targetShape._Holes]));\r\n return Shape.pairHoleAndOutline(cus);\r\n }\r\n\r\n //并集,如果成功返回1个形状,不成功返回2个形状\r\n UnionBoolOperation(targetShape: Shape, checkIntersect = false): Shape[]\r\n {\r\n if (checkIntersect && !this.BoundingBox.intersectsBox(targetShape.BoundingBox, 1e-3)) return [this, targetShape];\r\n\r\n let { contours, holes } = this._Outline.UnionBoolOperation(targetShape._Outline);\r\n\r\n let shapes: Shape[] = [];\r\n\r\n //提取出所有的孔洞, 目标线段孔洞和原线段差,如果孔洞和目标相减后有被包围轮廓,应把这个单独提取出来作为形状\r\n let unionHoles: Contour[] = [];\r\n\r\n //合并运算时提取出运算后的孔洞和形状\r\n const pickUpHoleOrShape = (srcHoles: Contour[], tarHoles: Contour[], outline: Contour) =>\r\n {\r\n srcHoles.forEach(cu =>\r\n {\r\n let tmpContours = cu.SubstactBoolOperation(outline).sort((a, b) => b.Area - a.Area);\r\n let isAllContainered = tmpContours.length > 1 && tmpContours.slice(1).every((cu, index) => tmpContours[0].CuInOutline(cu.Curve));\r\n\r\n //洞是否被最大的洞包含,是,则把被包含的洞都提取出来加入形状数组\r\n if (isAllContainered)\r\n {\r\n shapes.push(...this.targetOutlinesSubHoles(tmpContours.slice(1).map(c => new Shape(c)), tarHoles.map(c => new Shape(c))));\r\n } else\r\n unionHoles.push(...tmpContours);\r\n });\r\n\r\n };\r\n pickUpHoleOrShape(targetShape._Holes, this._Holes, this._Outline);\r\n pickUpHoleOrShape(this._Holes, targetShape._Holes, targetShape._Outline);\r\n targetShape._Holes.forEach(cu =>\r\n {\r\n this._Holes.forEach(c =>\r\n {\r\n unionHoles.push(...c.IntersectionBoolOperation(cu));\r\n });\r\n });\r\n\r\n shapes.push(...this.targetOutlinesSubHoles(contours.map(c => new Shape(c, holes)), unionHoles.map(c => new Shape(c))));\r\n return shapes;\r\n }\r\n\r\n /**\r\n * 如果完全被减掉,就返回0个.其他的返回1个或者n个\r\n * @param targetShapes 已经是合并后的形状数组\r\n */\r\n SubstactBoolOperation(targetShapes: Shape[])\r\n {\r\n let originOutline = this.Outline;\r\n let targetOutlines = targetShapes.map(s => s.Outline);\r\n const { holes, outlines } = originOutline.GetSubtractListByMoreTargets(targetOutlines);\r\n holes.push(...this.Holes);\r\n\r\n let newShapes: Shape[] = [];\r\n\r\n if (outlines.length === 1 && equaln(outlines[0].Area, originOutline.Area))\r\n {\r\n newShapes = [new Shape(outlines[0], Shape.mergeContours(holes))];\r\n }\r\n else if (holes.length === 0)\r\n {\r\n newShapes = outlines.map(o => new Shape(o));\r\n }\r\n else\r\n {\r\n for (let outline of outlines)\r\n newShapes.push(...new Shape(outline).SubstactBoolOperation(holes.map(h => new Shape(h))));\r\n }\r\n\r\n let holeShape = this.Holes.map(h => new Shape(h));\r\n\r\n for (let target of targetShapes)\r\n {\r\n let tmpInterList: Contour[] = [];\r\n if (target.Holes.length === 0) continue;\r\n for (let hole of target.Holes)\r\n {\r\n let list = hole.IntersectionBoolOperation(originOutline);\r\n tmpInterList.push(...list);\r\n }\r\n\r\n for (let ot of tmpInterList)\r\n {\r\n let subShapes: Shape[] = [];\r\n subShapes.push(...holeShape);\r\n for (let t of targetShapes)\r\n {\r\n if (t !== target)\r\n subShapes.push(new Shape(t.Outline));\r\n }\r\n\r\n newShapes.push(...new Shape(ot).SubstactBoolOperation(subShapes));\r\n }\r\n\r\n }\r\n\r\n return newShapes;\r\n }\r\n Equal(targetShape: Shape)\r\n {\r\n if (this._Outline.Equal(targetShape._Outline))\r\n {\r\n return this._Holes.length === targetShape._Holes.length\r\n && this._Holes.every(h1 =>\r\n targetShape._Holes.some(h2 => h1.Equal(h2))\r\n );\r\n }\r\n return false;\r\n }\r\n private targetOutlinesSubHoles(targetShapes: Shape[], holeShapes: Shape[])\r\n {\r\n let resultShapes: Shape[] = [];\r\n for (let ts of targetShapes)\r\n {\r\n let res = ts.SubstactBoolOperation(holeShapes);\r\n resultShapes.push(...res);\r\n }\r\n return resultShapes;\r\n\r\n }\r\n /**\r\n * 目标轮廓减去洞\r\n *\r\n * @private\r\n * @param {Contour[]} tarContours 轮廓列表\r\n * @param {Contour[]} holes 洞列表\r\n * @returns {Contour[]} 新的轮廓列表\r\n * @memberof Shape\r\n */\r\n private targetOutlineSubHoleOutline(tarContours: Contour[], holes: Contour[]): Contour[]\r\n {\r\n if (!holes.length)\r\n return tarContours;\r\n\r\n let resultContours: Contour[] = [];\r\n\r\n for (let minuendContour of tarContours)\r\n {\r\n //需要被差集的形状列表\r\n let tmpContour: Contour[] = [minuendContour];\r\n for (let hole of holes)\r\n {\r\n //缓存差集生成的轮廓\r\n let tmps: Contour[] = [];\r\n tmpContour.forEach(r =>\r\n {\r\n let cus = r.SubstactBoolOperation(hole);\r\n tmps.push(...cus);\r\n });\r\n tmpContour = tmps;//使用新生成的进行下一轮计算\r\n }\r\n resultContours.push(...tmpContour);\r\n }\r\n\r\n return resultContours;\r\n }\r\n\r\n //整理轮廓数组,匹配洞和外轮廓\r\n static pairHoleAndOutline(contours: Contour[]): Shape[]\r\n {\r\n let shapes: Shape[] = [];\r\n contours.sort((a, b) => b.Area - a.Area);\r\n while (contours.length)\r\n {\r\n //洞列表\r\n let tmpHoles: Contour[] = [];\r\n let outline: Contour = contours.shift();\r\n\r\n //取出包含的洞\r\n arrayRemoveIf(contours, (con: Contour) =>\r\n {\r\n let bisIn = outline.CuInOutline(con.Curve);\r\n if (bisIn) tmpHoles.push(con);\r\n return bisIn;\r\n });\r\n let holes: Contour[] = Shape.removeBeContaineredHoles(tmpHoles);\r\n shapes.push(new Shape(outline, holes));\r\n }\r\n return shapes;\r\n }\r\n /**\r\n * 合并洞,本质是使用(并集算法)将可以并集的洞合并在一起,减少洞的数量.\r\n * canSidewipe 用于走刀,擦边的是否合并\r\n */\r\n static mergeContours(holes: Contour[], canSidewipe = true): Contour[]\r\n {\r\n if (holes.length <= 1) return holes;\r\n let rets: Contour[] = [];//返回的合并轮廓\r\n let cache = new Map();\r\n\r\n while (holes.length > 0)\r\n {\r\n let c = holes.shift();//取第一个\r\n let b1 = cache.get(c);\r\n if (!b1)\r\n {\r\n b1 = c.BoundingBox;\r\n cache.set(c, b1);\r\n }\r\n\r\n while (true)\r\n {\r\n //剩余的 不相交的形状表 remaining\r\n let remHoles = holes.filter(ic =>\r\n {\r\n let b2 = cache.get(ic);\r\n if (!b2)\r\n {\r\n b2 = ic.BoundingBox;\r\n cache.set(ic, b2);\r\n }\r\n\r\n if (!IntersectBox2(b1, b2))\r\n return true;\r\n\r\n let unions = c.UnionBoolOperation(ic);\r\n\r\n if (unions.holes.length > 0)\r\n console.warn(\"未知情况\");\r\n\r\n if (unions.contours.length === 1)//并集成功\r\n {\r\n if (!canSidewipe)\r\n {\r\n if (equaln(c.Area + ic.Area, unions.contours[0].Area, 0.1))\r\n return true;\r\n }\r\n c = unions.contours[0]; //更新c\r\n b1 = c.BoundingBox;\r\n cache.set(c, b1);\r\n }\r\n\r\n return unions.contours.length !== 1; //过滤出并集失败的形状\r\n });\r\n\r\n //如果c和剩余的轮廓都不相交,那么退出\r\n if (remHoles.length === holes.length)\r\n {\r\n rets.push(c); //c已经是一个独立的轮廓,不和任意轮廓相交(不能合并了)\r\n break;//退出循环.下一个\r\n }\r\n else\r\n holes = remHoles; //更新为剩下的轮廓列表\r\n }\r\n }\r\n\r\n return rets;\r\n }\r\n\r\n /**\r\n * 移除被包含的洞.(移除无效的洞,已经被更大的洞包含)\r\n *\r\n * @private\r\n * @param {Contour[]} tmpHoles 洞列表\r\n * @returns {Contour[]} 返回的洞列表都不会互相包含.\r\n * @memberof Shape\r\n */\r\n private static removeBeContaineredHoles(tmpHoles: Contour[]): Contour[]\r\n {\r\n let holes: Contour[] = [];\r\n if (tmpHoles.length <= 1) return tmpHoles;\r\n tmpHoles.sort((a, b) => b.Area - a.Area);\r\n while (tmpHoles.length)\r\n {\r\n let srcHole = tmpHoles.shift();\r\n holes.push(srcHole);\r\n\r\n //移除包含的洞\r\n arrayRemoveIf(tmpHoles, h => srcHole.CuInOutline(h.Curve));\r\n }\r\n return holes;\r\n }\r\n UpdateShape()\r\n {\r\n this._Shape = this.Outline.Shape;\r\n for (let h of this._Holes)\r\n {\r\n if (h.Curve instanceof Polyline)\r\n h.Curve.UpdateMatrixTo(this.Outline.Curve.OCS);\r\n\r\n if (h.Curve instanceof Circle)\r\n {\r\n let sp = new Path();\r\n let cen = h.Curve.Center.applyMatrix4(this.Outline.Curve.OCSInv);\r\n sp.ellipse(cen.x, cen.y, h.Curve.Radius, h.Curve.Radius, 0, 2 * Math.PI, false, 0);\r\n this._Shape.holes.push(sp);\r\n }\r\n else\r\n this._Shape.holes.push(h.Shape);\r\n }\r\n }\r\n //读写文件\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();//1\r\n this._Outline = Contour.CreateContour([file.ReadObject() as Curve]);\r\n\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n this._Holes.push(\r\n Contour.CreateContour([file.ReadObject() as Curve])\r\n );\r\n }\r\n\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.WriteObject(this._Outline.Curve);\r\n file.Write(this._Holes.length);\r\n this._Holes.forEach(h => file.WriteObject(h.Curve));\r\n }\r\n}\r\n","import { BoolOpeartionType } from '../GraphicsSystem/BoolOperateUtils';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Shape } from './Shape';\r\nimport { Matrix4 } from 'three';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\n\r\n\r\nexport class ShapeManager\r\n{\r\n private _ShapeList: Shape[] = [];\r\n get ShapeList()\r\n {\r\n return this._ShapeList.slice();\r\n }\r\n get ShapeCount()\r\n {\r\n return this._ShapeList.length;\r\n }\r\n get ShapeArea()\r\n {\r\n return this._ShapeList.map(s => s.Area).reduce((a1, a2) => a1 + a2, 0);\r\n }\r\n AppendShapeList(shapes: Shape | Shape[])\r\n {\r\n Array.isArray(shapes) ? this._ShapeList.push(...shapes) : this._ShapeList.push(shapes);\r\n return this;\r\n }\r\n Clear()\r\n {\r\n this._ShapeList.length = 0;\r\n }\r\n BoolOper(otherMg: ShapeManager, booltype: BoolOpeartionType)\r\n {\r\n switch (booltype)\r\n {\r\n case BoolOpeartionType.Intersection:\r\n return this.IntersectionBoolOperation(otherMg);\r\n case BoolOpeartionType.Union:\r\n return this.UnionBoolOperation(otherMg);\r\n case BoolOpeartionType.Subtract:\r\n return this.SubstactBoolOperation(otherMg);\r\n }\r\n }\r\n //交集 如果成功返回一个面域 失败返回0个\r\n IntersectionBoolOperation(target: ShapeManager)\r\n {\r\n let shapes: Shape[] = [];\r\n for (let srcShape of this._ShapeList)\r\n {\r\n for (let tarShape of target._ShapeList)\r\n {\r\n let tmpShapes = srcShape.IntersectionBoolOperation(tarShape);\r\n shapes.push(...tmpShapes);\r\n }\r\n }\r\n this.Clear();\r\n this._ShapeList = shapes;\r\n return this._ShapeList.length > 0;\r\n }\r\n //并集,如果有一个形状并集成功,就成功\r\n UnionBoolOperation(targetMg: ShapeManager)\r\n {\r\n let isSuccess = false;\r\n let srcShapes = this._ShapeList;\r\n let tarShapes = targetMg._ShapeList;\r\n\r\n let alones: Shape[] = [];//孤立的形状\r\n\r\n const boxCache = new WeakMap();\r\n\r\n for (let src of srcShapes)\r\n {\r\n let notUnions: Shape[] = [];//未被合并的形状列表 来自tarShapes\r\n let srcBox = src.BoundingBox;\r\n for (let tar of tarShapes)\r\n {\r\n let tarBox = boxCache.get(tar);\r\n if (!tarBox)\r\n {\r\n tarBox = tar.BoundingBox;\r\n boxCache.set(tar, tarBox);\r\n }\r\n if (!IntersectBox2(srcBox, tarBox))\r\n {\r\n notUnions.push(tar);\r\n continue;\r\n }\r\n let unions = src.UnionBoolOperation(tar);\r\n if (unions.length === 1)//并集成功\r\n {\r\n isSuccess = true;\r\n src = unions[0];//src设置为 合并完的形状\r\n }\r\n else//并集失败\r\n notUnions.push(tar); //设置为未计算\r\n }\r\n\r\n //如果发现src和任意一个形状并集成功,那么\r\n if (notUnions.length != tarShapes.length)\r\n {\r\n notUnions.push(src); //加入src 进行下一轮\r\n tarShapes = notUnions;\r\n }\r\n else\r\n alones.push(src);//它是孤独的一个形状\r\n }\r\n\r\n this._ShapeList = alones.concat(tarShapes);\r\n return isSuccess;\r\n }\r\n SubstactBoolOperation(target: ShapeManager)\r\n {\r\n let newShapes: Shape[] = [];\r\n for (let s of this._ShapeList)\r\n {\r\n let ss = s.SubstactBoolOperation(target.ShapeList);\r\n newShapes.push(...ss);\r\n }\r\n this._ShapeList = newShapes;\r\n return true;\r\n }\r\n\r\n /**\r\n * 与region.ApplyMatrix不同的是,这个是直接操作内部对象.\r\n * 通常用来计算布尔运算时需要真实的移动这个位置.\r\n * 并且将不会刷新显示\r\n *\r\n * @param {Matrix4} mat4\r\n * @memberof ShapeManager\r\n */\r\n ApplyMatrix(mat4: Matrix4)\r\n {\r\n for (let s of this._ShapeList)\r\n {\r\n s.Outline.Curve.ApplyMatrix(mat4);\r\n s.Holes.forEach(o => o.Curve.ApplyMatrix(mat4));\r\n }\r\n\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();//1\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let obj = new Shape();\r\n obj.ReadFile(file);\r\n this._ShapeList.push(obj);\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.ShapeList.length);\r\n for (let s of this.ShapeList)\r\n {\r\n s.WriteFile(file);\r\n }\r\n }\r\n}\r\n","import { Box3, BufferGeometry, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Vector2, Vector3 } from 'three';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils, BufferGeometryUtils as BufferGeometryUtils2 } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector3, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { ScaleUV } from '../../Geometry/UVUtils';\r\nimport { BoolOpeartionType } from '../../GraphicsSystem/BoolOperateUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { Shape } from '../Shape';\r\nimport { ShapeManager } from '../ShapeManager';\r\nimport { Curve } from './Curve';\r\nimport { Entity } from './Entity';\r\n\r\n@Factory\r\nexport class Region extends Entity\r\n{\r\n static CreateFromCurves(cus: Curve[]): Region | undefined\r\n {\r\n let shapes = Contour.GetAllContour(cus).map(out => new Shape(out));\r\n if (shapes.length > 0)\r\n {\r\n let reg = new Region();\r\n //MarkX:曲线同面域一起移动\r\n reg.ApplyMatrix(shapes[0].Outline.Curve.OCS);\r\n reg.ShapeManager.AppendShapeList(shapes);\r\n return reg;\r\n }\r\n }\r\n\r\n constructor(private _ShapeManager: ShapeManager = new ShapeManager())\r\n {\r\n super();\r\n }\r\n\r\n //如果需要修改获取到的属性,需要Clone后进行操作,否则会对原实体进行破坏\r\n get ShapeManager()\r\n {\r\n return this._ShapeManager;\r\n }\r\n get Area()\r\n {\r\n return this.ShapeManager.ShapeArea;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3();\r\n for (let s of this._ShapeManager.ShapeList)\r\n box.union(s.BoundingBox);\r\n return box;\r\n }\r\n Explode()\r\n {\r\n let shapeList = this._ShapeManager.ShapeList;\r\n if (shapeList.length <= 1)\r\n {\r\n return shapeList[0].Explode();\r\n }\r\n else\r\n {\r\n let regs: Region[] = [];\r\n shapeList.forEach(s =>\r\n {\r\n let reg = new Region().ApplyMatrix(this.OCS);\r\n reg.ShapeManager.AppendShapeList(s);\r\n regs.push(reg);\r\n });\r\n return regs;\r\n }\r\n }\r\n\r\n /**\r\n * 对于布尔操作,这个将会变换内部轮廓到对方坐标系.\r\n * 并且这个变换不会更新图形绘制.\r\n * @param {Matrix4} m\r\n * @memberof Region\r\n */\r\n ShapeApplyMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ShapeManager.ApplyMatrix(m);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let pts: Vector3[] = [];\r\n for (let s of this._ShapeManager.ShapeList)\r\n {\r\n pts.push(...s.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let pts: Vector3[] = [];\r\n for (let s of this._ShapeManager.ShapeList)\r\n pts.push(...s.GetStretchPoints());\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let moveVLoc = moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv));\r\n this.ApplyMatrix(MoveMatrix(moveVLoc));\r\n }\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n //面域移动,组成面域的曲线也要移动 MarkX:曲线同面域一起移动\r\n this._ShapeManager.ShapeList.forEach(s => s.ApplyMatrix(m));\r\n return super.ApplyMatrix(m);\r\n }\r\n\r\n get Position()\r\n {\r\n return super.Position;\r\n }\r\n set Position(pt: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let moveX = pt.x - this._Matrix.elements[12];\r\n let moveY = pt.y - this._Matrix.elements[13];\r\n let moveZ = pt.z - this._Matrix.elements[14];\r\n this._Matrix.setPosition(pt);\r\n this._SpaceOCS.elements[12] += moveX;\r\n this._SpaceOCS.elements[13] += moveY;\r\n this._SpaceOCS.elements[14] += moveZ;\r\n\r\n let m = new Matrix4().setPosition(moveX, moveY, moveZ);\r\n for (let s of this.ShapeManager.ShapeList)\r\n s.ApplyMatrix(m);\r\n\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.ApplyScaleMatrix(m);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n\r\n //Z轴归0\r\n Z0()\r\n {\r\n super.Z0();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.Z0();\r\n\r\n return this;\r\n }\r\n MatrixPlanarizere()\r\n {\r\n super.MatrixPlanarizere();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.MatrixPlanarizere();\r\n return this;\r\n }\r\n\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n return this;\r\n }\r\n /**\r\n * 请注意:该计算会操作otherRegion的矩阵\r\n * @param {Region} otherRegion\r\n * @param {BoolOpeartionType} boolType\r\n */\r\n BooleanOper(otherRegion: Region, boolType: BoolOpeartionType): boolean\r\n {\r\n if (this.IsCoplaneTo(otherRegion))\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldOcs = this.OCS;\r\n\r\n //把形状曲线转移到二维屏幕计算后还原回来\r\n this.ShapeApplyMatrix(this.OCSInv);\r\n otherRegion.ShapeApplyMatrix(this.OCSInv);\r\n let isSuccess = this._ShapeManager.BoolOper(otherRegion._ShapeManager, boolType);\r\n this.ShapeApplyMatrix(oldOcs);\r\n this.Update();\r\n return isSuccess;\r\n }\r\n return false;\r\n }\r\n\r\n private _MeshGeometry: BufferGeometry;\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n this.UpdateGeometry();\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n this.UpdateGeometry();\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private UpdateGeometry()\r\n {\r\n let shapeList = this._ShapeManager.ShapeList;\r\n\r\n let edgePts: Vector3[] = [];\r\n let meshGeoms: BufferGeometry[] = [];\r\n\r\n const AddEdgePts = (pts: Vector2[], diffMat: Matrix4) =>\r\n {\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = AsVector3(pts[i]);\r\n p.applyMatrix4(diffMat);\r\n edgePts.push(p);\r\n if (i !== 0 && i !== pts.length - 1)\r\n edgePts.push(p);\r\n }\r\n };\r\n\r\n for (let i = 0; i < shapeList.length; i++)\r\n {\r\n let shape = shapeList[i];\r\n let geometry = new ShapeGeometry(shape.Shape, 60);//60 可以优化.\r\n let diffMat = this.OCSInv.clone().multiply(shape.Outline.Curve.OCSNoClone);\r\n geometry.applyMatrix4(diffMat);\r\n ScaleUV(geometry);\r\n meshGeoms.push(new BufferGeometry().fromGeometry(geometry));\r\n\r\n let shapeInfo = shape.Shape.extractPoints(60);\r\n\r\n let pts = shapeInfo.shape;\r\n AddEdgePts(pts, diffMat);\r\n\r\n let holePtss = shapeInfo.holes;\r\n for (let holePts of holePtss)\r\n AddEdgePts(holePts, diffMat);\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(edgePts);\r\n this._MeshGeometry = BufferGeometryUtils2.MergeBufferGeometries(meshGeoms);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n this._MeshGeometry.computeVertexNormals();\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(0));\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return new Object3D().add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n mesh,\r\n );\r\n }\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return obj.add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n mesh,\r\n );\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(0);\r\n }\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (type === RenderType.Wireframe || type === RenderType.Print)\r\n {\r\n let line = obj as LineSegments;\r\n line.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Conceptual)\r\n {\r\n for (let i = 0; i < obj.children.length; i++)\r\n {\r\n if (i % 2 === 0)\r\n {\r\n let l = obj.children[i] as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj.children[i] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n for (let m of obj.children)\r\n {\r\n let mesh = m as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._ShapeManager.Clear();\r\n this._ShapeManager.ReadFile(file);\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n this._ShapeManager.WriteFile(file);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { ConverCircleToPolyline } from \"../../Common/CurveUtils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\n\r\n/**\r\n * 把板件炸开成面域,0,1为正反面,其余的为边面(没有圆弧面)\r\n */\r\nexport function Board2Regions(br: Board): Region[]\r\n{\r\n let ocs = br.OCS;\r\n\r\n let cu = br.ContourCurve.Clone();\r\n\r\n if (cu instanceof Circle)\r\n cu = ConverCircleToPolyline(cu);\r\n\r\n let frontReg = Region.CreateFromCurves([cu.Clone()]);\r\n let regFrontOcs = ocs.clone();\r\n regFrontOcs.setPosition(br.Position.add(br.Normal.multiplyScalar(br.Thickness)));\r\n frontReg.ApplyMatrix(regFrontOcs);\r\n\r\n let backReg = Region.CreateFromCurves([cu.Flip()]);\r\n backReg.ApplyMatrix(ocs);\r\n\r\n let resultRegs = [frontReg, backReg];\r\n\r\n //edges\r\n let lines = cu.Explode().filter(c => c instanceof Line);\r\n\r\n\r\n for (let l of lines)\r\n {\r\n let rectPl = new Polyline().Rectangle(l.Length, br.Thickness);\r\n let reg = Region.CreateFromCurves([rectPl]);\r\n if (!reg) continue;\r\n\r\n let p = l.StartPoint.applyMatrix4(ocs);\r\n let x = l.GetFistDeriv(0).transformDirection(ocs);\r\n let y = br.Normal;\r\n let z = new Vector3().crossVectors(x, y);\r\n\r\n let mtx = new Matrix4().makeBasis(x, y, z).setPosition(p);\r\n reg.ApplyMatrix(mtx);\r\n resultRegs.push(reg);\r\n }\r\n\r\n return resultRegs;\r\n}\r\n","\r\n/**统一板件属性key的命名,修改值会导致无法 .xxx该属性 */\r\nexport enum EBoardKeyList\r\n{\r\n Height = \"height\",\r\n Width = \"width\",\r\n Thick = \"thickness\",\r\n RoomName = \"roomName\",\r\n CabinetName = \"cabinetName\",\r\n BrMat = \"boardName\", //板材\r\n Mat = \"material\", //材料\r\n Color = \"color\",\r\n Lines = \"lines\", //纹路\r\n ProcessGroup = \"ProcessGroup\",\r\n BigHole = \"bigHoleDir\",\r\n /**\r\n * 排钻类型,当没有定义每个边的排钻数据时,使用统一的排钻类型\r\n */\r\n DrillType = \"drillType\",\r\n ComposingFace = \"composingFace\",\r\n /**\r\n * 封边数组,定义每个边的封边信息\r\n */\r\n HighSealed = \"highSealed\",\r\n UpSealed = \"sealedUp\",\r\n DownSealed = \"sealedDown\",\r\n LeftSealed = \"sealedLeft\",\r\n RightSealed = \"sealedRight\",\r\n KnifeRad = \"knifeRadius\",\r\n SpliteHeight = \"spliteHeight\",\r\n SpliteWidth = \"spliteWidth\",\r\n SpliteThickness = \"spliteThickness\",\r\n}\r\n","import { BoardProcessOption } from \"../../UI/Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { CADFiler } from \"../../DatabaseServices/CADFiler\";\r\n\r\n/**序列化板件数据 */\r\nexport function serializeBoardData(file: CADFiler, processData: BoardProcessOption)\r\n{\r\n file.Write(processData[EBoardKeyList.RoomName]);\r\n file.Write(processData[EBoardKeyList.CabinetName]);\r\n file.Write(processData[EBoardKeyList.BrMat]);\r\n file.Write(processData[EBoardKeyList.Mat]);\r\n file.Write(processData[EBoardKeyList.Color]);\r\n file.Write(processData[EBoardKeyList.Lines]);\r\n file.Write(processData[EBoardKeyList.BigHole]);\r\n file.Write(processData[EBoardKeyList.DrillType]);\r\n file.Write(processData[EBoardKeyList.ComposingFace]);\r\n file.Write(processData[EBoardKeyList.HighSealed].length);\r\n for (let n of processData[EBoardKeyList.HighSealed])\r\n {\r\n file.Write(n.size);\r\n }\r\n file.Write(processData[EBoardKeyList.UpSealed]);\r\n file.Write(processData[EBoardKeyList.DownSealed]);\r\n file.Write(processData[EBoardKeyList.LeftSealed]);\r\n file.Write(processData[EBoardKeyList.RightSealed]);\r\n file.Write(processData.spliteHeight);\r\n file.Write(processData.spliteWidth);\r\n file.Write(processData.spliteThickness);\r\n\r\n file.Write(processData.highDrill.length);\r\n for (let n of processData.highDrill)\r\n file.Write(n);\r\n\r\n file.Write(processData.frontDrill);\r\n file.Write(processData.backDrill);\r\n file.Write(processData.remarks.length);\r\n for (let d of processData.remarks)\r\n {\r\n file.Write(d[0]);\r\n file.Write(d[1]);\r\n }\r\n}\r\n\r\n//反序列化板件数据\r\nexport function deserializationBoardData(file: CADFiler, processData: BoardProcessOption, ver: number)\r\n{\r\n processData[EBoardKeyList.RoomName] = file.Read();\r\n processData[EBoardKeyList.CabinetName] = file.Read();\r\n processData[EBoardKeyList.BrMat] = file.Read();\r\n processData[EBoardKeyList.Mat] = file.Read();\r\n processData[EBoardKeyList.Color] = file.Read();\r\n processData[EBoardKeyList.Lines] = file.Read();\r\n processData[EBoardKeyList.BigHole] = file.Read();\r\n processData[EBoardKeyList.DrillType] = file.Read();\r\n processData[EBoardKeyList.ComposingFace] = file.Read();\r\n\r\n let count = file.Read();\r\n processData[EBoardKeyList.HighSealed].length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let size = file.Read();\r\n if (ver < 4)\r\n {\r\n file.Read();\r\n }\r\n processData[EBoardKeyList.HighSealed].push({ size });\r\n }\r\n\r\n processData[EBoardKeyList.UpSealed] = file.Read();\r\n processData[EBoardKeyList.DownSealed] = file.Read();\r\n processData[EBoardKeyList.LeftSealed] = file.Read();\r\n processData[EBoardKeyList.RightSealed] = file.Read();\r\n processData.spliteHeight = file.Read();\r\n processData.spliteWidth = file.Read();\r\n processData.spliteThickness = file.Read();\r\n\r\n count = file.Read();\r\n processData.highDrill = file.ReadArray(count);\r\n\r\n processData.frontDrill = file.Read();\r\n processData.backDrill = file.Read();\r\n\r\n if (ver >= 7)\r\n {\r\n let count = file.Read();\r\n processData.remarks.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n processData.remarks.push(d);\r\n }\r\n }\r\n}\r\n","import { ExtrudeBufferGeometry, UVGenerator, Vector2 } from \"three\";\r\n\r\nclass BoardUVGenerator implements UVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n\r\n return [\r\n new Vector2(a_x, a_y),\r\n new Vector2(b_x, b_y),\r\n new Vector2(c_x, c_y)\r\n ];\r\n }\r\n generateSideWallUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number, indexD: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var a_z = vertices[indexA * 3 + 2];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var b_z = vertices[indexB * 3 + 2];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n var c_z = vertices[indexC * 3 + 2];\r\n var d_x = vertices[indexD * 3];\r\n var d_y = vertices[indexD * 3 + 1];\r\n var d_z = vertices[indexD * 3 + 2];\r\n let pts: Vector2[];\r\n if (Math.abs(a_y - b_y) < 0.01)\r\n {\r\n pts = [\r\n new Vector2(a_z - 1, a_x),\r\n new Vector2(b_z - 1, b_x),\r\n new Vector2(c_z - 1, c_x),\r\n new Vector2(d_z - 1, d_x)\r\n ];\r\n\r\n }\r\n else\r\n {\r\n pts = [\r\n new Vector2(a_z - 1, a_y),\r\n new Vector2(b_z - 1, b_y),\r\n new Vector2(c_z - 1, c_y),\r\n new Vector2(d_z - 1, d_y)\r\n ];\r\n }\r\n return pts;\r\n }\r\n}\r\n\r\nclass BoardUVGenerator2 extends BoardUVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n\r\n return [\r\n new Vector2(a_y, a_x),\r\n new Vector2(b_y, b_x),\r\n new Vector2(c_y, c_x)\r\n ];\r\n }\r\n}\r\n\r\nexport let boardUVGenerator = new BoardUVGenerator();\r\nexport let boardUVGenerator2 = new BoardUVGenerator2();\r\n","import { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ObjectId } from \"../../DatabaseServices/ObjectId\";\r\n\r\nexport enum BoardType\r\n{\r\n Layer = 0, //层板\r\n Vertical = 1, //立板\r\n Behind = 2 //背板\r\n}\r\n\r\n/**\r\n *勿随意更改属性名,若更改,需更改对应UI模态框的属性和检验方法的key\r\n *\r\n */\r\nexport interface IBaseOption\r\n{\r\n version?: number;\r\n}\r\n\r\n//板件数据,配置信息+加工信息\r\nexport interface BoardData\r\n{\r\n boardConfig: BoardConfigOption;\r\n boardProcess: BoardProcessOption;\r\n}\r\n//排钻类型\r\nexport enum DrillType\r\n{\r\n Yes = \"排\",\r\n None = \"不排\",\r\n More = \"**多种**\",\r\n Invail = \"无效配置\",\r\n}\r\n//偏心轮类型\r\nexport enum FaceDirection\r\n{\r\n Front = 0,\r\n Back = 1,\r\n}\r\n\r\n//纹路类型\r\nexport enum LinesType\r\n{\r\n /** 正纹 */\r\n Positive = 0,\r\n /** 反纹 */\r\n Reverse = 1,\r\n /** 可翻转 */\r\n CanReversal = 2,\r\n}\r\n\r\n// 排版面\r\nexport enum ComposingType\r\n{\r\n Positive, Reverse, Arbitrary\r\n}\r\n/**\r\n *背板靠上还是靠下\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum BehindHeightPositon\r\n{\r\n ForTop = \"top\", //靠上\r\n ForBottom = \"bottom\",//靠下\r\n AllHeight = \"all\" //总高\r\n}\r\n\r\n/**\r\n *板件相对位置\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum BrRelativePos\r\n{\r\n Front = \"front\",\r\n Back = \"back\",\r\n Top = \"top\",\r\n Bottom = \"bottom\",\r\n Left = \"left\",\r\n Right = \"right\",\r\n Div = \"div\"\r\n}\r\n\r\nexport interface IHighSealedItem\r\n{\r\n size: number;\r\n}\r\n\r\nexport interface BoardProcessOption extends IBaseOption\r\n{\r\n [EBoardKeyList.RoomName]?: string;\r\n [EBoardKeyList.CabinetName]?: string;//柜名\r\n [EBoardKeyList.BrMat]?: string;//板材名\r\n [EBoardKeyList.Mat]?: string;//材料\r\n [EBoardKeyList.Color]?: string;\r\n [EBoardKeyList.Lines]?: LinesType;//纹路\r\n [EBoardKeyList.ProcessGroup]?: ObjectId[];//纹路\r\n [EBoardKeyList.BigHole]?: FaceDirection;//大孔面\r\n [EBoardKeyList.DrillType]?: string;//排钻类型\r\n [EBoardKeyList.ComposingFace]?: ComposingType;//排版面\r\n [EBoardKeyList.HighSealed]?: IHighSealedItem[];//封边数据\r\n [EBoardKeyList.UpSealed]?: string;//封边上下左右\r\n [EBoardKeyList.DownSealed]?: string;\r\n [EBoardKeyList.LeftSealed]?: string;\r\n [EBoardKeyList.RightSealed]?: string;\r\n [EBoardKeyList.SpliteHeight]?: string;//拆单高/宽/厚\r\n [EBoardKeyList.SpliteWidth]?: string;\r\n [EBoardKeyList.SpliteThickness]?: string;\r\n highDrill?: string[];\r\n frontDrill: boolean;\r\n backDrill: boolean;\r\n remarks: [string, string][];\r\n useBoardProcessOption?: boolean;\r\n}\r\n\r\n/**\r\n *板件参数\r\n */\r\nexport interface BoardConfigOption extends IBaseOption\r\n{\r\n type: BoardType;\r\n name: string;\r\n thickness?: number;\r\n height?: number;\r\n width?: number;\r\n}\r\nexport interface SideBoardOption extends BoardConfigOption\r\n{\r\n spaceSize?: number; //空间宽度\r\n leftShrink: number; //左侧板内缩\r\n rightShrink: number;\r\n}\r\n\r\n/**\r\n *背板参数\r\n *\r\n * @export\r\n * @interface BehindBoardOption\r\n * @extends {BoardConfigOption}\r\n */\r\nexport interface BehindBoardOption extends BoardConfigOption\r\n{\r\n //上下左右延伸\r\n leftExt: number;\r\n rightExt: number;\r\n topExt: number;\r\n bottomExt: number;\r\n //板件位置\r\n boardPosition: BehindHeightPositon;\r\n moveDist: number;\r\n\r\n spaceSize?: number;\r\n count?: number;\r\n //板件相对位置\r\n boardRelative?: BrRelativePos;\r\n calcHeight: string;//高度表达式\r\n calcSpaceSize: string;\r\n calcMoveDist: string;\r\n}\r\n\r\n/**\r\n *层板参数\r\n *\r\n * @export\r\n * @interface LayerBoardOption\r\n * @extends {BoardConfigOption}\r\n */\r\nexport interface LayerBoardOption extends BoardConfigOption\r\n{\r\n calcHeight: string;\r\n frontShrink: number;\r\n leftShrink: number;\r\n rightShrink: number;\r\n isTotalLength: boolean;\r\n isActive: boolean;\r\n spaceSize?: number;\r\n count?: number;\r\n boardRelative?: BrRelativePos;\r\n calcSpaceSize: string;\r\n calcFrontShrink: string;\r\n calcLeftShrink: string;\r\n calcRightShrink: string;\r\n}\r\n\r\n/**\r\n *层板钉参数\r\n *\r\n * @export\r\n * @interface LayerNailOption\r\n */\r\nexport interface LayerNailOption extends IBaseOption\r\n{\r\n isDraw: boolean; //是否绘制\r\n addCount: number;//增\r\n dist: number;\r\n isGroup: boolean;\r\n isInBack: boolean; //是否在背板绘制\r\n front: number;\r\n behind: number;\r\n count: number;\r\n rad: number;\r\n length: number;\r\n depth: number;\r\n}\r\n\r\n/**\r\n *立板参数\r\n */\r\nexport interface VerticalBoardOption extends BoardConfigOption\r\n{\r\n frontShrink: number; //前缩\r\n bottomShrink: number;//底缩\r\n isTotalLength: boolean; //是否取总高\r\n isTotalWidth: boolean;//是否取总宽\r\n count?: number;\r\n spaceSize?: number;\r\n boardRelative?: BrRelativePos;\r\n calcWidth: string; //板深表达式\r\n calcHeight: string;\r\n calcSpaceSize: string;\r\n calcFrontShrink: string;\r\n calcBottomShrink: string;\r\n}\r\nexport interface TBBoardOption extends BoardConfigOption\r\n{\r\n isDraw: boolean;\r\n frontDist: number; //前距\r\n behindDistance: number; //后距\r\n isWrapSide: boolean; //顶包侧\r\n useLFData: boolean;\r\n leftExt: number;\r\n rightExt: number;\r\n offset: number;//上留或者下留\r\n isDrawFooter?: boolean;\r\n footThickness?: number; //地脚厚\r\n footBehindShrink?: number;//内缩\r\n isDrawBackFooter?: boolean;\r\n footerOffset?: number;\r\n isDrawStrengthenStrip?: boolean;\r\n divCount?: number;\r\n}\r\nexport interface SingleBoardOption extends BoardConfigOption\r\n{\r\n rotateX: number;\r\n rotateY: number;\r\n rotateZ: number;\r\n\r\n}\r\nexport enum StripType\r\n{\r\n H = \"h\",\r\n V = \"v\",\r\n}\r\nexport interface ClosingStripOption extends BoardConfigOption\r\n{\r\n boardRelative: BrRelativePos;\r\n striptype: StripType;//收口条类型\r\n frontShrink: number; //前缩\r\n isDrawFuZhu: boolean; //是否绘制辅助条\r\n fzWidth: number;\r\n fzThickness: number;\r\n}\r\n\r\nexport interface IGrooveOption extends IBaseOption\r\n{\r\n grooveAddLength: string;//槽加长/宽/高\r\n grooveAddWidth: string;\r\n grooveAddDepth: string;\r\n knifeRadius?: string;\r\n}\r\n\r\nexport interface IShinkOption extends IBaseOption\r\n{\r\n left: number;\r\n right: number;\r\n front: number;\r\n back: number;\r\n isLREqual: boolean;\r\n isFBEqual: boolean;\r\n}\r\n\r\nexport type IUiOption = {\r\n [P in (keyof T)]: T[P] extends number ? string : T[P]\r\n};\r\n\r\nexport interface INailRule extends IBaseOption\r\n{\r\n startDist: number;\r\n endDist: number;\r\n count: number;\r\n}\r\n\r\nexport interface IHightDrillOption\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\nexport enum CurtailType\r\n{\r\n PerBr = \"0\",\r\n Total = \"1\",\r\n}\r\n\r\nexport interface IBoardBatchCurtailOption extends IBaseOption\r\n{\r\n type: CurtailType;\r\n front: number;\r\n back: number;\r\n left: number;\r\n right: number;\r\n moveBrs: boolean;\r\n}\r\n\r\nexport enum BoardOpenDir\r\n{\r\n Left = 1,\r\n Right = 2,\r\n Up = 3,\r\n Down = 4,\r\n None = 0,\r\n}\r\n\r\nexport type AnyObject = { [key: string]: any; };\r\n\r\n//见光面封边设置\r\nexport interface ISmoothEdgeOption extends IBaseOption\r\n{\r\n smoothEdge: number;//见光面\r\n edge: number;//非见光面\r\n scale: number;//见光比例\r\n filterArr: string[];//\r\n}\r\n\r\nexport interface IDrawBoardAutoCutOption\r\n{\r\n isAutoCut: boolean;//是否自动切割\r\n isRelevance: boolean;//是否关联切割\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\n\r\n//将嵌入的实体绘制对象添加到当前的绘制对象(由于内嵌的实体可能被重复引用)\r\nexport function AddEntityDrawObject(obj: Object3D, embedEntity: Entity, renderType: RenderType = RenderType.Wireframe)\r\n{\r\n let embedObject = embedEntity.GetDrawObjectFromRenderType(renderType);\r\n if (embedObject.parent)\r\n obj.children.push(embedObject);//为了避免这个内嵌实体加入到不同的Object中(因为我们有PrintObject),这个写法能行,是因为我们会在其他地方更新它的矩阵\r\n else\r\n obj.add(embedObject);\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\n\r\nlet x = new Vector3();\r\nlet y = new Vector3();\r\nlet z = new Vector3();\r\nexport function IsMirror(mtx: Matrix4): boolean\r\n{\r\n mtx.extractBasis(x, y, z);\r\n // for a true orthogonal, non-mirrored base, u.cross(v) == w\r\n // If they have an opposite direction then we are mirroring\r\n const mirrorvalue = x.cross(y).dot(z);\r\n const ismirror = (mirrorvalue < 0);\r\n return ismirror;\r\n}\r\n","export const _CSGDEBUG = false;\r\n\r\n/** Epsilon used during determination of near zero distances.\r\n * @default\r\n */\r\nexport const EPS = 1e-5;\r\n\r\n// Tag factory: we can request a unique tag through CSG.getTag()\r\nexport let staticTag = 1;\r\nexport const getTag = () => staticTag++;\r\n","import { Vector3 } from \"three\";\r\n/** Class Vector3D\r\n * Represents a 3D vector with X, Y, Z coordinates.\r\n */\r\nexport class Vector3D extends Vector3\r\n{\r\n clone()\r\n {\r\n return new Vector3D(this.x, this.y, this.z) as this;\r\n }\r\n // find a vector that is somewhat perpendicular to this one\r\n randomNonParallelVector()\r\n {\r\n let x = Math.abs(this.x);\r\n let y = Math.abs(this.y);\r\n let z = Math.abs(this.z);\r\n\r\n if (x <= y && x <= z)\r\n return new Vector3D(1, 0, 0);\r\n else if (y <= x && y <= z)\r\n return new Vector3D(0, 1, 0);\r\n else\r\n return new Vector3D(0, 0, 1);\r\n }\r\n\r\n toString()\r\n {\r\n return (\r\n \"(\" +\r\n this.x.toFixed(5) +\r\n \", \" +\r\n this.y.toFixed(5) +\r\n \", \" +\r\n this.z.toFixed(5) +\r\n \")\"\r\n );\r\n }\r\n}\r\n","import { Vector3D } from \"./Vector3\";\r\nimport { Vector2 } from \"three\";\r\n\r\nexport class Vector2D extends Vector2\r\n{\r\n // extend to a 3D vector by adding a z coordinate:\r\n toVector3D(z: number)\r\n {\r\n return new Vector3D(this.x, this.y, z);\r\n }\r\n clone()\r\n {\r\n return new Vector2D(this.x, this.y) as this;\r\n }\r\n // returns the vector rotated by 90 degrees clockwise\r\n normal()\r\n {\r\n return new Vector2D(this.y, -this.x);\r\n }\r\n\r\n cross(a: Vector2)\r\n {\r\n return this.x * a.y - this.y * a.x;\r\n }\r\n}\r\n","import { getTag } from \"../constants\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Matrix4 } from \"three\";\r\n\r\n// # class Vertex\r\n// Represents a vertex of a polygon. Use your own vertex class instead of this\r\n// one to provide additional features like texture coordinates and vertex\r\n// colors. Custom vertex classes need to provide a `pos` property\r\n// `flipped()`, and `interpolate()` methods that behave analogous to the ones\r\n// FIXME: And a lot MORE (see plane.fromVector3Ds for ex) ! This is fragile code\r\n// defined by `Vertex`.\r\nexport class Vertex3D\r\n{\r\n tag: number;\r\n constructor(public pos: Vector3D, public uv = new Vector2D()) { }\r\n\r\n clone()\r\n {\r\n return new Vertex3D(this.pos.clone(), this.uv.clone());\r\n }\r\n\r\n // Return a vertex with all orientation-specific data (e.g. vertex normal) flipped. Called when the\r\n // orientation of a polygon is flipped.\r\n flipped()\r\n {\r\n return this;\r\n }\r\n\r\n getTag()\r\n {\r\n let result = this.tag;\r\n if (!result)\r\n {\r\n result = getTag();\r\n this.tag = result;\r\n }\r\n return result;\r\n }\r\n\r\n // Create a new vertex between this vertex and `other` by linearly\r\n // interpolating all properties using a parameter of `t`. Subclasses should\r\n // override this to interpolate additional properties.\r\n interpolate(other: Vertex3D, t: number)\r\n {\r\n let pos = this.pos.clone().lerp(other.pos, t);\r\n let uv = this.uv.clone().lerp(other.uv, t);\r\n return new Vertex3D(pos, uv);\r\n }\r\n\r\n // Affine transformation of vertex. Returns a new Vertex\r\n\r\n transform(matrix4x4: Matrix4)\r\n {\r\n const newpos = this.pos.clone().applyMatrix4(matrix4x4);\r\n return new Vertex3D(newpos, this.uv);\r\n }\r\n}\r\n","import { Matrix4 } from \"three\";\r\nimport { equaln, equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { getTag } from \"../constants\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\n\r\n// # class Plane\r\n// Represents a plane in 3D space.\r\nexport class Plane\r\n{\r\n normal: Vector3D;\r\n w: number;\r\n tag: number;\r\n constructor(normal: Vector3D, w: number)\r\n {\r\n this.normal = normal;\r\n this.w = w;\r\n }\r\n\r\n flipped()\r\n {\r\n return new Plane(this.normal.clone().negate(), -this.w);\r\n }\r\n\r\n getTag()\r\n {\r\n if (!this.tag)\r\n this.tag = getTag();\r\n return this.tag;\r\n }\r\n\r\n coplanarTo(plane: Plane)\r\n {\r\n return equalv3(this.normal, plane.normal, 1e-4) && equaln(this.w, plane.w, 1e-4);\r\n }\r\n\r\n transform(matrix4x4: Matrix4)\r\n {\r\n // get two vectors in the plane:\r\n let r = this.normal.randomNonParallelVector();\r\n let u = this.normal.clone().cross(r);\r\n let v = this.normal.clone().cross(u);\r\n // get 3 points in the plane:\r\n let point1 = this.normal.clone().multiplyScalar(this.w);\r\n let point2 = u.add(point1);\r\n let point3 = v.add(point1);\r\n // transform the points:\r\n point1.applyMatrix4(matrix4x4);\r\n point2.applyMatrix4(matrix4x4);\r\n point3.applyMatrix4(matrix4x4);\r\n // and create a new plane from the transformed points:\r\n let newplane = Plane.fromVector3Ds(point1, point2, point3);\r\n if (IsMirror(matrix4x4))\r\n {\r\n // the transform is mirroring\r\n // We should mirror the plane:\r\n newplane = newplane.flipped();\r\n }\r\n return newplane;\r\n }\r\n\r\n splitLineBetweenPoints(p1: Vertex3D, p2: Vertex3D): Vertex3D\r\n {\r\n let direction = p2.pos.clone().sub(p1.pos);\r\n let labda = (this.w - this.normal.dot(p1.pos)) / this.normal.dot(direction);\r\n if (isNaN(labda)) labda = 0;\r\n if (labda > 1) labda = 1;\r\n if (labda < 0) labda = 0;\r\n let pos = p1.pos.clone().add(direction.multiplyScalar(labda));\r\n let uv = p1.uv.clone().lerp(p2.uv, labda);\r\n return new Vertex3D(pos, uv);\r\n }\r\n\r\n static fromVector3Ds(a: Vector3D, b: Vector3D, c: Vector3D)\r\n {\r\n let n = b.clone()\r\n .sub(a)\r\n .cross(c.clone().sub(a))\r\n .normalize();\r\n return new Plane(n, n.dot(a));\r\n }\r\n}\r\n","import { _CSGDEBUG, EPS } from \"../constants\";\r\nimport { Plane } from \"./Plane\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { Matrix4 } from \"three\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\n\r\nexport enum Type\r\n{\r\n CoplanarFront = 0,\r\n CoplanarBack = 1,\r\n Front = 2,\r\n Back = 3,\r\n Spanning = 4,\r\n}\r\n\r\n\r\ninterface SplitPolygonData\r\n{\r\n type: Type;\r\n front: Polygon;\r\n back: Polygon;\r\n}\r\n\r\n/** Class Polygon\r\n * Represents a convex polygon. The vertices used to initialize a polygon must\r\n * be coplanar and form a convex loop. They do not have to be `Vertex`\r\n * instances but they must behave similarly (duck typing can be used for\r\n * customization).\r\n *
\r\n * Each convex polygon has a `shared` property, which is shared between all\r\n * polygons that are clones of each other or were split from the same polygon.\r\n * This can be used to define per-polygon properties (such as surface color).\r\n *
\r\n * The plane of the polygon is calculated from the vertex coordinates if not provided.\r\n * The plane can alternatively be passed as the third argument to avoid calculations.\r\n *\r\n *表示凸多边形。 用于初始化多边形的顶点必须共面并形成凸环。\r\n *多边形是彼此克隆或从同一多边形分割的多边形。\r\n *这可用于定义每个多边形属性(例如表面颜色)。\r\n */\r\nexport class Polygon\r\n{\r\n cachedBoundingSphere: [Vector3D, number];\r\n cachedBoundingBox: [Vector3D, Vector3D];\r\n constructor(public vertices: Vertex3D[], public plane?: Plane)\r\n {\r\n if (!plane)\r\n this.plane = Plane.fromVector3Ds(vertices[0].pos, vertices[1].pos, vertices[2].pos);\r\n\r\n if (_CSGDEBUG)\r\n if (!this.checkIfConvex()) throw new Error(\"Not convex!\");\r\n }\r\n\r\n /** Check whether the polygon is convex. (it should be, otherwise we will get unexpected results)*/\r\n checkIfConvex(): boolean\r\n {\r\n return Polygon.verticesConvex(this.vertices, this.plane.normal);\r\n }\r\n\r\n // returns an array with a Vector3D (center point) and a radius\r\n\r\n boundingSphere()\r\n {\r\n if (!this.cachedBoundingSphere)\r\n {\r\n let box = this.boundingBox();\r\n let middle = box[0].clone().add(box[1]).multiplyScalar(0.5);\r\n let radius3 = box[1].clone().sub(middle);\r\n let radius = radius3.length();\r\n this.cachedBoundingSphere = [middle, radius];\r\n }\r\n return this.cachedBoundingSphere;\r\n }\r\n\r\n // returns an array of two Vector3Ds (minimum coordinates and maximum coordinates)\r\n\r\n boundingBox(): Vector3D[]\r\n {\r\n if (!this.cachedBoundingBox)\r\n {\r\n let minpoint: Vector3D;\r\n let maxpoint: Vector3D;\r\n let vertices = this.vertices;\r\n let numvertices = vertices.length;\r\n if (numvertices === 0)\r\n minpoint = new Vector3D(0, 0, 0);\r\n else\r\n minpoint = vertices[0].pos.clone();\r\n maxpoint = minpoint.clone();\r\n for (let i = 1; i < numvertices; i++)\r\n {\r\n let point = vertices[i].pos;\r\n minpoint.min(point);\r\n maxpoint.max(point);\r\n }\r\n this.cachedBoundingBox = [minpoint, maxpoint];\r\n }\r\n return this.cachedBoundingBox;\r\n }\r\n\r\n flipped()\r\n {\r\n let newvertices = this.vertices.map(v => v.flipped());\r\n newvertices.reverse();\r\n let newplane = this.plane.flipped();\r\n return new Polygon(newvertices, newplane);\r\n }\r\n\r\n // Affine transformation of polygon. Returns a new Polygon\r\n transform(matrix4x4: Matrix4)\r\n {\r\n let newvertices = this.vertices.map(v => v.transform(matrix4x4));\r\n let newplane = this.plane.transform(matrix4x4);\r\n if (IsMirror(matrix4x4))\r\n {\r\n // need to reverse the vertex order\r\n // in order to preserve the inside/outside orientation:\r\n newvertices.reverse();\r\n }\r\n return new Polygon(newvertices, newplane);\r\n }\r\n\r\n splitByPlane(plane: Plane): SplitPolygonData\r\n {\r\n let result: SplitPolygonData = { type: null, front: null, back: null };\r\n // cache in local lets (speedup):\r\n let planeNormal = plane.normal;\r\n let vertices = this.vertices;\r\n let numVertices = vertices.length;\r\n if (this.plane.coplanarTo(plane))\r\n {\r\n result.type = Type.CoplanarFront;\r\n }\r\n else\r\n {\r\n let thisW = plane.w;\r\n let hasFront = false;\r\n let hasBack = false;\r\n let vertexIsBack: boolean[] = [];\r\n let MINEPS = -EPS;\r\n for (let i = 0; i < numVertices; i++)\r\n {\r\n let t = planeNormal.dot(vertices[i].pos) - thisW;\r\n let isBack = t < 0;\r\n vertexIsBack.push(isBack);\r\n if (t > EPS) hasFront = true;\r\n if (t < MINEPS) hasBack = true;\r\n }\r\n if (!hasFront && !hasBack)\r\n {\r\n // all points coplanar\r\n let t = planeNormal.dot(this.plane.normal);\r\n result.type = t >= 0 ? Type.CoplanarFront : Type.CoplanarBack;\r\n }\r\n else if (!hasBack)\r\n result.type = Type.Front;\r\n else if (!hasFront)\r\n result.type = Type.Back;\r\n else\r\n {\r\n result.type = Type.Spanning;\r\n let frontVertices: Vertex3D[] = [];\r\n let backVertices: Vertex3D[] = [];\r\n let isBack = vertexIsBack[0];\r\n for (\r\n let vertexIndex = 0;\r\n vertexIndex < numVertices;\r\n vertexIndex++\r\n )\r\n {\r\n let vertex = vertices[vertexIndex];\r\n let nextVertexindex = vertexIndex + 1;\r\n if (nextVertexindex >= numVertices) nextVertexindex = 0;\r\n let nextIsBack = vertexIsBack[nextVertexindex];\r\n if (isBack === nextIsBack)\r\n {\r\n // line segment is on one side of the plane:\r\n if (isBack)\r\n backVertices.push(vertex);\r\n else\r\n frontVertices.push(vertex);\r\n }\r\n else\r\n {\r\n let intersectionVertex = plane.splitLineBetweenPoints(vertex, vertices[nextVertexindex]);\r\n if (isBack)\r\n {\r\n backVertices.push(vertex);\r\n backVertices.push(intersectionVertex);\r\n frontVertices.push(intersectionVertex);\r\n }\r\n else\r\n {\r\n frontVertices.push(vertex);\r\n frontVertices.push(intersectionVertex);\r\n backVertices.push(intersectionVertex);\r\n }\r\n }\r\n isBack = nextIsBack;\r\n } // for vertexindex\r\n // remove duplicate vertices:\r\n let EPS_SQUARED = EPS * EPS;\r\n arrayRemoveDuplicateBySort(backVertices, (v1, v2) =>\r\n {\r\n return v1.pos.distanceToSquared(v2.pos) < EPS_SQUARED;\r\n });\r\n arrayRemoveDuplicateBySort(frontVertices, (v1, v2) =>\r\n {\r\n return v1.pos.distanceToSquared(v2.pos) < EPS_SQUARED;\r\n });\r\n if (frontVertices.length >= 3)\r\n result.front = new Polygon(frontVertices, this.plane);\r\n if (backVertices.length >= 3)\r\n result.back = new Polygon(backVertices, this.plane);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n static verticesConvex(vertices: Vertex3D[], planenormal: Vector3D)\r\n {\r\n let count = vertices.length;\r\n if (count < 3) return false;\r\n\r\n let prevPrevPos = vertices[count - 2].pos;\r\n let prevPos = vertices[count - 1].pos;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let pos = vertices[i].pos;\r\n if (!Polygon.isConvexPoint(prevPrevPos, prevPos, pos, planenormal))\r\n return false;\r\n\r\n prevPrevPos = prevPos;\r\n prevPos = pos;\r\n }\r\n return true;\r\n }\r\n\r\n // 计算3点是否凸角\r\n static isConvexPoint(prevpoint: Vector3D, point: Vector3D, nextpoint: Vector3D, normal: Vector3D)\r\n {\r\n let crossproduct = point.clone().sub(prevpoint).cross(nextpoint.clone().sub(point));\r\n let crossdotnormal = crossproduct.dot(normal);\r\n return crossdotnormal >= 0;\r\n }\r\n}\r\n","import { EPS, _CSGDEBUG } from \"./constants\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Polygon, Type } from \"./math/Polygon3\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\n\r\n// # class PolygonTreeNode\r\n// This class manages hierarchical splits of polygons\r\n// At the top is a root node which doesn hold a polygon, only child PolygonTreeNodes\r\n// Below that are zero or more 'top' nodes; each holds a polygon. The polygons can be in different planes\r\n// splitByPlane() splits a node by a plane. If the plane intersects the polygon, two new child nodes\r\n// are created holding the splitted polygon.\r\n// getPolygons() retrieves the polygon from the tree. If for PolygonTreeNode the polygon is split but\r\n// the two split parts (child nodes) are still intact, then the unsplit polygon is returned.\r\n// This ensures that we can safely split a polygon into many fragments. If the fragments are untouched,\r\n// getPolygons() will return the original unsplit polygon instead of the fragments.\r\n// remove() removes a polygon from the tree. Once a polygon is removed, the parent polygons are invalidated\r\n// since they are no longer intact.\r\n// constructor creates the root node:\r\n//此类管理多边形的层次分割\r\n//顶部是一个根节点,它不包含多边形,只有子PolygonTreeNodes\r\n//下面是零个或多个“顶部”节点; 每个都有一个多边形。 多边形可以位于不同的平面中\r\n// splitByPlane()按平面拆分节点。 如果平面与多边形相交,则会有两个新的子节点\r\n//创建持有分割多边形。\r\n// getPolygons()从树中检索多边形。 如果对于PolygonTreeNode,则多边形被拆分但是\r\n//两个分割部分(子节点)仍然完好无损,然后返回未分割的多边形。\r\n//这确保我们可以安全地将多边形拆分为多个片段。 如果碎片未受影响,\r\n// getPolygons()将返回原始的未分割多边形而不是片段。\r\n// remove()从树中删除多边形。 删除多边形后,父多边形将失效\r\n//因为它们不再完好无损\r\n//构造函数创建根节点:\r\nclass PolygonTreeNode\r\n{\r\n parent: PolygonTreeNode;\r\n children: PolygonTreeNode[] = [];\r\n polygon: Polygon;\r\n removed: boolean = false;\r\n constructor(polygon?: Polygon)\r\n {\r\n this.polygon = polygon;\r\n }\r\n\r\n // fill the tree with polygons. Should be called on the root node only; child nodes must\r\n // always be a derivate (split) of the parent node.\r\n addPolygons(polygons: Polygon[])\r\n {\r\n // new polygons can only be added to root node; children can only be splitted polygons\r\n if (!this.isRootNode())\r\n throw new Error(\"Assertion failed\");\r\n\r\n for (let polygon of polygons)\r\n this.addChild(polygon);\r\n }\r\n\r\n // remove a node\r\n // - the siblings become toplevel nodes\r\n // - the parent is removed recursively\r\n\r\n remove()\r\n {\r\n if (this.removed) return;\r\n\r\n this.removed = true;\r\n\r\n if (_CSGDEBUG)\r\n {\r\n if (this.isRootNode()) throw new Error(\"Assertion failed\"); // can't remove root node\r\n if (this.children.length) throw new Error(\"Assertion failed\"); // we shouldn't remove nodes with children\r\n }\r\n\r\n // remove ourselves from the parent's children list:\r\n let parentschildren = this.parent.children;\r\n let i = parentschildren.indexOf(this);\r\n if (i < 0) throw new Error(\"Assertion failed\");\r\n parentschildren.splice(i, 1);\r\n\r\n // invalidate the parent's polygon, and of all parents above it:\r\n this.parent.recursivelyInvalidatePolygon();\r\n }\r\n\r\n isRemoved()\r\n {\r\n return this.removed;\r\n }\r\n\r\n isRootNode()\r\n {\r\n return !this.parent;\r\n }\r\n\r\n // invert all polygons in the tree. Call on the root node\r\n\r\n invert()\r\n {\r\n if (!this.isRootNode()) throw new Error(\"Assertion failed\"); // can only call this on the root node\r\n this.invertSub();\r\n }\r\n\r\n getPolygon(): Polygon\r\n {\r\n if (!this.polygon) throw new Error(\"Assertion failed\"); // doesn't have a polygon, which means that it has been broken down\r\n return this.polygon;\r\n }\r\n\r\n getPolygons(outPolygons: Polygon[] = []): Polygon[]\r\n {\r\n let children: PolygonTreeNode[] = [this];\r\n let queue = [children];\r\n for (let i = 0; i < queue.length; ++i)\r\n {\r\n // queue size can change in loop, don't cache length\r\n children = queue[i];\r\n for (let node of children)\r\n {\r\n if (node.polygon)\r\n // the polygon hasn't been broken yet. We can ignore the children and return our polygon:\r\n outPolygons.push(node.polygon);\r\n else\r\n // our polygon has been split up and broken, so gather all subpolygons from the children\r\n queue.push(node.children);\r\n }\r\n }\r\n\r\n return outPolygons;\r\n }\r\n\r\n // split the node by a plane; add the resulting nodes to the frontnodes and backnodes array\r\n // If the plane doesn't intersect the polygon, the 'this' object is added to one of the arrays\r\n // If the plane does intersect the polygon, two new child nodes are created for the front and back fragments,\r\n // and added to both arrays.\r\n\r\n splitByPlane(\r\n plane: Plane,\r\n coplanarFrontNodes: PolygonTreeNode[],\r\n coplanarBackNodes: PolygonTreeNode[],\r\n frontNodes: PolygonTreeNode[],\r\n backNodes: PolygonTreeNode[]\r\n )\r\n {\r\n if (this.children.length)\r\n {\r\n let queue = [this.children];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n // queue.length can increase, do not cache\r\n let nodes = queue[i];\r\n for (let j = 0, l = nodes.length; j < l; j++)\r\n {\r\n // ok to cache length\r\n let node = nodes[j];\r\n if (node.children.length)\r\n queue.push(node.children);\r\n else\r\n {\r\n // no children. Split the polygon:\r\n node.splitByPlaneNotChildren(plane, coplanarFrontNodes, coplanarBackNodes, frontNodes, backNodes);\r\n }\r\n }\r\n }\r\n }\r\n else\r\n {\r\n this.splitByPlaneNotChildren(plane, coplanarFrontNodes, coplanarBackNodes, frontNodes, backNodes);\r\n }\r\n }\r\n\r\n // only to be called for nodes with no children\r\n // 仅用于没有子节点的节点\r\n private splitByPlaneNotChildren(\r\n plane: Plane,\r\n coplanarFrontNodes: PolygonTreeNode[],\r\n coplanarBackNodes: PolygonTreeNode[],\r\n frontNodes: PolygonTreeNode[],\r\n backNodes: PolygonTreeNode[]\r\n )\r\n {\r\n if (!this.polygon) return;\r\n\r\n let polygon = this.polygon;\r\n let bound = polygon.boundingSphere();\r\n let sphereradius = bound[1] + EPS; // FIXME Why add imprecision?\r\n let planenormal = plane.normal;\r\n let spherecenter = bound[0];\r\n let d = planenormal.dot(spherecenter) - plane.w;\r\n if (d > sphereradius)\r\n frontNodes.push(this);\r\n else if (d < -sphereradius)\r\n backNodes.push(this);\r\n else\r\n {\r\n let splitresult = polygon.splitByPlane(plane);\r\n switch (splitresult.type)\r\n {\r\n case Type.CoplanarFront:\r\n coplanarFrontNodes.push(this);\r\n break;\r\n\r\n case Type.CoplanarBack:\r\n coplanarBackNodes.push(this);\r\n break;\r\n\r\n case Type.Front:\r\n frontNodes.push(this);\r\n break;\r\n\r\n case Type.Back:\r\n backNodes.push(this);\r\n break;\r\n\r\n case Type.Spanning:\r\n if (splitresult.front)\r\n {\r\n let frontNode = this.addChild(splitresult.front);\r\n frontNodes.push(frontNode);\r\n }\r\n if (splitresult.back)\r\n {\r\n let backNode = this.addChild(splitresult.back);\r\n backNodes.push(backNode);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // add child to a node\r\n // this should be called whenever the polygon is split\r\n // a child should be created for every fragment of the split polygon\r\n // returns the newly created child\r\n addChild(polygon: Polygon): PolygonTreeNode\r\n {\r\n let newchild = new PolygonTreeNode(polygon);\r\n newchild.parent = this;\r\n this.children.push(newchild);\r\n return newchild;\r\n }\r\n\r\n invertSub()\r\n {\r\n let queue: PolygonTreeNode[][] = [[this]];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n let children = queue[i];\r\n for (let j = 0, l = children.length; j < l; j++)\r\n {\r\n let node = children[j];\r\n if (node.polygon)\r\n node.polygon = node.polygon.flipped();\r\n queue.push(node.children);\r\n }\r\n }\r\n }\r\n\r\n recursivelyInvalidatePolygon()\r\n {\r\n let node: PolygonTreeNode = this;\r\n while (node.polygon)\r\n {\r\n node.polygon = null;\r\n if (node.parent)\r\n node = node.parent;\r\n }\r\n }\r\n}\r\n\r\n// # class Tree\r\n// This is the root of a BSP tree\r\n// We are using this separate class for the root of the tree, to hold the PolygonTreeNode root\r\n// The actual tree is kept in this.rootnode\r\nexport class Tree\r\n{\r\n polygonTree = new PolygonTreeNode();\r\n rootNode = new Node(null);\r\n constructor(polygons: Polygon[])\r\n {\r\n this.addPolygons(polygons);\r\n }\r\n\r\n invert()\r\n {\r\n this.polygonTree.invert();\r\n this.rootNode.invert();\r\n }\r\n\r\n // Remove all polygons in this BSP tree that are inside the other BSP tree\r\n /**\r\n * this 减去 tree 删除此BSP树中位于其他BSP树内的所有多边形\r\n * @param tree 不会被修改\r\n * @param [alsoRemovecoplanarFront=false] 同时删除共面\r\n */\r\n clipTo(tree: Tree, alsoRemovecoplanarFront = false)\r\n {\r\n this.rootNode.clipTo(tree, alsoRemovecoplanarFront);\r\n }\r\n\r\n allPolygons()\r\n {\r\n return this.polygonTree.getPolygons();\r\n }\r\n\r\n addPolygons(polygons: Polygon[])\r\n {\r\n if (polygons.length > 1e4)\r\n return;\r\n let polygonTreeNodes = polygons.map((p) => this.polygonTree.addChild(p));\r\n this.rootNode.addPolygonTreeNodes(polygonTreeNodes);\r\n }\r\n}\r\n\r\n// # class Node\r\n// Holds a node in a BSP tree. A BSP tree is built from a collection of polygons\r\n// by picking a polygon to split along.\r\n// Polygons are not stored directly in the tree, but in PolygonTreeNodes, stored in\r\n// this.polygontreenodes. Those PolygonTreeNodes are children of the owning\r\n// Tree.polygonTree\r\n// This is not a leafy BSP tree since there is\r\n// no distinction between internal and leaf nodes.\r\nclass Node\r\n{\r\n plane: Plane;\r\n front: Node;\r\n back: Node;\r\n polygonTreeNodes: PolygonTreeNode[] = [];\r\n parent: Node;\r\n constructor(parent: Node)\r\n {\r\n this.parent = parent;\r\n }\r\n\r\n // Convert solid space to empty space and empty space to solid space.\r\n invert()\r\n {\r\n let queue: Node[] = [this];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n let node = queue[i];\r\n if (node.plane) node.plane = node.plane.flipped();\r\n if (node.front) queue.push(node.front);\r\n if (node.back) queue.push(node.back);\r\n let temp = node.front;\r\n node.front = node.back;\r\n node.back = temp;\r\n }\r\n }\r\n\r\n // clip polygontreenodes to our plane\r\n // calls remove() for all clipped PolygonTreeNodes\r\n //将polygontreenodes剪辑到我们的飞机上\r\n //为所有剪切的PolygonTreeNodes调用remove()\r\n clipPolygons(polygonTreeNodes: PolygonTreeNode[], alsoRemoveCoplanarFront: boolean)\r\n {\r\n interface D\r\n {\r\n node: Node;\r\n polygonTreeNodes: PolygonTreeNode[];\r\n }\r\n\r\n let args: D = { node: this, polygonTreeNodes };\r\n let stack: D[] = [];\r\n\r\n do\r\n {\r\n let node = args.node;\r\n let polygonTreeNodes1 = args.polygonTreeNodes;\r\n\r\n // begin \"function\"\r\n if (node.plane)\r\n {\r\n let backnodes: PolygonTreeNode[] = [];\r\n let frontnodes: PolygonTreeNode[] = [];\r\n let coplanarfrontnodes = alsoRemoveCoplanarFront ? backnodes : frontnodes;\r\n let plane = node.plane;\r\n for (let node1 of polygonTreeNodes1)\r\n {\r\n if (!node1.isRemoved())\r\n node1.splitByPlane(plane, coplanarfrontnodes, backnodes, frontnodes, backnodes);\r\n }\r\n\r\n if (node.front && frontnodes.length > 0)\r\n stack.push({ node: node.front, polygonTreeNodes: frontnodes });\r\n\r\n let numbacknodes = backnodes.length;\r\n if (node.back && numbacknodes > 0)\r\n stack.push({ node: node.back, polygonTreeNodes: backnodes });\r\n else\r\n {\r\n // there's nothing behind this plane. Delete the nodes behind this plane:\r\n // 这架飞机背后什么也没有。 删除此平面后面的节点:\r\n for (let i = 0; i < numbacknodes; i++)\r\n backnodes[i].remove();\r\n }\r\n }\r\n args = stack.pop();\r\n }\r\n while (args);\r\n }\r\n\r\n // Remove all polygons in this BSP tree that are inside the other BSP tree\r\n // `tree`.\r\n clipTo(tree: Tree, alsoRemovecoplanarFront: boolean)\r\n {\r\n let node: Node = this;\r\n let stack: Node[] = [];\r\n do\r\n {\r\n if (node.polygonTreeNodes.length > 0)\r\n {\r\n tree.rootNode.clipPolygons(\r\n node.polygonTreeNodes,\r\n alsoRemovecoplanarFront\r\n );\r\n }\r\n if (node.front) stack.push(node.front);\r\n if (node.back) stack.push(node.back);\r\n node = stack.pop();\r\n }\r\n while (node);\r\n }\r\n\r\n addPolygonTreeNodes(polygonTreeNodes: PolygonTreeNode[])\r\n {\r\n interface D\r\n {\r\n node: Node;\r\n polygontreenodes: PolygonTreeNode[];\r\n }\r\n let args: D = { node: this, polygontreenodes: polygonTreeNodes };\r\n let stack: D[] = [];\r\n do\r\n {\r\n let node = args.node;\r\n polygonTreeNodes = args.polygontreenodes;\r\n\r\n if (polygonTreeNodes.length === 0)\r\n {\r\n args = stack.pop();\r\n continue;\r\n }\r\n if (!node.plane)\r\n {\r\n let bestplane = polygonTreeNodes[Math.floor(polygonTreeNodes.length / 2)].getPolygon().plane;\r\n node.plane = bestplane;\r\n }\r\n let frontNodes: PolygonTreeNode[] = [];\r\n let backNodes: PolygonTreeNode[] = [];\r\n\r\n for (let i = 0, n = polygonTreeNodes.length; i < n; ++i)\r\n {\r\n polygonTreeNodes[i].splitByPlane(\r\n node.plane,\r\n node.polygonTreeNodes,\r\n backNodes,\r\n frontNodes,\r\n backNodes\r\n );\r\n }\r\n\r\n if (frontNodes.length > 0)\r\n {\r\n if (!node.front) node.front = new Node(node);\r\n stack.push({ node: node.front, polygontreenodes: frontNodes });\r\n }\r\n if (backNodes.length > 0)\r\n {\r\n if (!node.back) node.back = new Node(node);\r\n stack.push({ node: node.back, polygontreenodes: backNodes });\r\n }\r\n\r\n args = stack.pop();\r\n }\r\n while (args);\r\n }\r\n\r\n getParentPlaneNormals(normals: Vector3D[], maxdepth: number)\r\n {\r\n if (maxdepth > 0)\r\n {\r\n if (this.parent)\r\n {\r\n normals.push(this.parent.plane.normal);\r\n this.parent.getParentPlaneNormals(normals, maxdepth - 1);\r\n }\r\n }\r\n }\r\n}\r\n","\r\n// //////////////////////////////\r\n// ## class fuzzyFactory\r\n// This class acts as a factory for objects. We can search for an object with approximately\r\n// the desired properties (say a rectangle with width 2 and height 1)\r\n// The lookupOrCreate() method looks for an existing object (for example it may find an existing rectangle\r\n// with width 2.0001 and height 0.999. If no object is found, the user supplied callback is\r\n// called, which should generate a new object. The new object is inserted into the database\r\n// so it can be found by future lookupOrCreate() calls.\r\n// Constructor:\r\n// numdimensions: the number of parameters for each object\r\n// for example for a 2D rectangle this would be 2\r\n// tolerance: The maximum difference for each parameter allowed to be considered a match\r\nexport class FuzzyFactory\r\n{\r\n lookuptable: {};\r\n multiplier: number;\r\n constructor(numdimensions: number, tolerance: number)\r\n {\r\n this.lookuptable = {};\r\n this.multiplier = 1.0 / tolerance;\r\n }\r\n\r\n // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */});\r\n // Performs a fuzzy lookup of the object with the specified elements.\r\n // If found, returns the existing object\r\n // If not found, calls the supplied callback function which should create a new object with\r\n // the specified properties. This object is inserted in the lookup database.\r\n lookupOrCreate(els: number[], object: T): T\r\n {\r\n let hash = \"\";\r\n let multiplier = this.multiplier;\r\n for (let el of els)\r\n {\r\n let valueQuantized = Math.round(el * multiplier);\r\n hash += valueQuantized + \"/\";\r\n }\r\n if (hash in this.lookuptable) return this.lookuptable[hash];\r\n else\r\n {\r\n let hashparts = els.map(el =>\r\n {\r\n let q0 = Math.floor(el * multiplier);\r\n let q1 = q0 + 1;\r\n return [\"\" + q0 + \"/\", \"\" + q1 + \"/\"];\r\n });\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n hash = \"\";\r\n hashparts.forEach(hashpart =>\r\n {\r\n hash += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this.lookuptable[hash] = object;\r\n }\r\n return object;\r\n }\r\n }\r\n}\r\n","import { FuzzyFactory } from \"./FuzzyFactory\";\r\nimport { EPS } from \"./constants\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\n\r\nexport class FuzzyCSGFactory\r\n{\r\n vertexfactory = new FuzzyFactory(3, EPS);\r\n planefactory = new FuzzyFactory(4, EPS);\r\n constructor() { }\r\n\r\n getVertex(sourcevertex: Vertex3D): Vertex3D\r\n {\r\n let elements = [sourcevertex.pos.x, sourcevertex.pos.y, sourcevertex.pos.z];\r\n let result = this.vertexfactory.lookupOrCreate(elements, sourcevertex);\r\n return result;\r\n }\r\n\r\n getPlane(sourceplane: Plane): Plane\r\n {\r\n let elements: number[] = [sourceplane.normal.x, sourceplane.normal.y, sourceplane.normal.z, sourceplane.w];\r\n let result = this.planefactory.lookupOrCreate(elements, sourceplane);\r\n return result;\r\n }\r\n\r\n getPolygon(sourcePolygon: Polygon, outputPolygon = sourcePolygon): Polygon\r\n {\r\n let newPlane = this.getPlane(sourcePolygon.plane);\r\n let newVertices = sourcePolygon.vertices.map(vertex => this.getVertex(vertex));\r\n // two vertices that were originally very close may now have become\r\n // truly identical (referring to the same Vertex object).\r\n // Remove duplicate vertices:\r\n let newVerticesDedup: Vertex3D[] = [];//新的顶点列表(已过滤重复)\r\n if (newVertices.length > 0)\r\n {\r\n let prevVertexTag = newVertices[newVertices.length - 1].getTag();\r\n for (let vertex of newVertices)\r\n {\r\n let vertextag = vertex.getTag();\r\n if (vertextag !== prevVertexTag)\r\n newVerticesDedup.push(vertex);\r\n prevVertexTag = vertextag;\r\n }\r\n }\r\n // If it's degenerate, remove all vertices:\r\n if (newVerticesDedup.length < 3)\r\n newVerticesDedup = [];\r\n\r\n outputPolygon.vertices = newVertices;\r\n outputPolygon.plane = newPlane;\r\n return outputPolygon;\r\n }\r\n}\r\n","import { FuzzyCSGFactory } from \"../FuzzyFactory3d\";\r\nimport { FuzzyCAGFactory } from \"../FuzzyFactory2d\";\r\nimport { CSG } from \"../CSG\";\r\nimport { CAG } from \"../CAG\";\r\nimport { EPS } from \"../constants\";\r\nimport { Polygon } from \"../math/Polygon3\";\r\n\r\n/**\r\n * Returns a cannoicalized version of the input csg : ie every very close\r\n * points get deduplicated\r\n * \r\n * 返回删除重复点的csg,重复点将被合并\r\n */\r\nexport function canonicalizeCSG(csg: CSG): CSG\r\n{\r\n const factory = new FuzzyCSGFactory();\r\n let result = CSGFromCSGFuzzyFactory(factory, csg);\r\n result.isCanonicalized = true;\r\n result.isRetesselated = csg.isRetesselated;\r\n return result;\r\n}\r\n\r\nexport function canonicalizeCAG(cag: CAG)\r\n{\r\n let factory = new FuzzyCAGFactory();\r\n let result = CAGFromCAGFuzzyFactory(factory, cag);\r\n result.isCanonicalized = true;\r\n return result;\r\n}\r\n\r\nexport function CSGFromCSGFuzzyFactory(factory: FuzzyCSGFactory, sourcecsg: CSG)\r\n{\r\n let newpolygons: Polygon[] = sourcecsg.polygons.filter(poly =>\r\n {\r\n return factory.getPolygon(poly).vertices.length >= 3;\r\n });\r\n return new CSG(newpolygons);\r\n}\r\n\r\nfunction CAGFromCAGFuzzyFactory(factory: FuzzyCAGFactory, sourcecag: CAG)\r\n{\r\n let newsides = sourcecag.sides\r\n .map(side => factory.getSide(side))\r\n // remove bad sides (mostly a user input issue)\r\n .filter((side) => side.length() > EPS);\r\n return new CAG(newsides);\r\n};\r\n","import { Vector3D } from \"../math/Vector3\";\r\nimport { CSG } from \"../CSG\";\r\n/**\r\n * Returns an array of Vector3D, providing minimum coordinates and maximum coordinates\r\n * of this solid.\r\n * @example\r\n * let bounds = A.getBounds()\r\n * let minX = bounds[0].x\r\n */\r\nexport function bounds(csg: CSG): Vector3D[]\r\n{\r\n if (!csg.cachedBoundingBox)\r\n {\r\n let minpoint: Vector3D;\r\n let maxpoint: Vector3D;\r\n let polygons = csg.polygons;\r\n let numpolygons = polygons.length;\r\n for (let i = 0; i < numpolygons; i++)\r\n {\r\n let polygon = polygons[i];\r\n let bounds = polygon.boundingBox();\r\n if (i === 0)\r\n {\r\n minpoint = bounds[0].clone();\r\n maxpoint = bounds[1].clone();\r\n }\r\n else\r\n {\r\n minpoint.min(bounds[0]);\r\n maxpoint.max(bounds[1]);\r\n }\r\n }\r\n // FIXME: not ideal, we are mutating the input, we need to move some of it out\r\n csg.cachedBoundingBox = [minpoint, maxpoint];\r\n }\r\n return csg.cachedBoundingBox;\r\n};\r\n","import { Vector2D } from \"./math/Vector2\";\r\n\r\nexport function fnNumberSort(a, b)\r\n{\r\n return a - b;\r\n}\r\n\r\nexport const solve2Linear = function (a: number, b: number, c: number, d: number, u: number, v: number)\r\n{\r\n let det = a * d - b * c;\r\n let invdet = 1.0 / det;\r\n let x = u * d - b * v;\r\n let y = -u * c + a * v;\r\n x *= invdet;\r\n y *= invdet;\r\n return [x, y];\r\n};\r\n\r\nexport function insertSorted(array: T[], element: T, comparefunc: (a: T, b: T) => number)\r\n{\r\n let leftbound = 0;\r\n let rightbound = array.length;\r\n while (rightbound > leftbound)\r\n {\r\n let testindex = Math.floor((leftbound + rightbound) / 2);\r\n let testelement = array[testindex];\r\n let compareresult = comparefunc(element, testelement);\r\n if (compareresult > 0)\r\n // element > testelement\r\n leftbound = testindex + 1;\r\n else\r\n rightbound = testindex;\r\n }\r\n array.splice(leftbound, 0, element);\r\n}\r\n\r\n// Get the x coordinate of a point with a certain y coordinate, interpolated between two\r\n// points (CSG.Vector2D).\r\n// Interpolation is robust even if the points have the same y coordinate\r\nexport function interpolateBetween2DPointsForY(point1: Vector2D, point2: Vector2D, y: number)\r\n{\r\n let f1 = y - point1.y;\r\n let f2 = point2.y - point1.y;\r\n if (f2 < 0)\r\n {\r\n f1 = -f1;\r\n f2 = -f2;\r\n }\r\n let t: number;\r\n if (f1 <= 0)\r\n t = 0.0;\r\n else if (f1 >= f2)\r\n t = 1.0;\r\n else if (f2 < 1e-10)\r\n // FIXME Should this be CSG.EPS?\r\n t = 0.5;\r\n else\r\n t = f1 / f2;\r\n let result = point1.x + t * (point2.x - point1.x);\r\n return result;\r\n}\r\n","import { Vector2D } from \"./Vector2\";\r\n\r\n/** class Line2D\r\n * Represents a directional line in 2D space\r\n * A line is parametrized by its normal vector (perpendicular to the line, rotated 90 degrees counter clockwise)\r\n * and w. The line passes through the point .times(w).\r\n * Equation: p is on line if normal.dot(p)==w\r\n */\r\nexport class Line2D\r\n{\r\n normal: Vector2D;\r\n w: number;\r\n constructor(normal: Vector2D, w: number)\r\n {\r\n this.normal = normal.clone();\r\n let l = this.normal.length();\r\n w *= l;\r\n this.normal.normalize();\r\n this.w = w;\r\n }\r\n\r\n direction()\r\n {\r\n return this.normal;\r\n }\r\n static fromPoints(p1: Vector2D, p2: Vector2D)\r\n {\r\n let direction = p2.clone().sub(p1);\r\n let normal = direction\r\n .normal()\r\n .negate()\r\n .normalize();\r\n let w = p1.dot(normal);\r\n return new Line2D(normal, w);\r\n }\r\n}\r\n","import { Plane } from \"./Plane\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vector3D } from \"./Vector3\";\r\n\r\n/** class OrthoNormalBasis\r\n * Reprojects points on a 3D plane onto a 2D plane\r\n * or from a 2D plane back onto the 3D plane\r\n */\r\n\r\nexport class OrthoNormalBasis\r\n{\r\n v: Vector3D;\r\n u: Vector3D;\r\n planeorigin: Vector3D;\r\n constructor(public plane: Plane, rightVector: Vector3D = plane.normal.randomNonParallelVector())\r\n {\r\n this.v = plane.normal.clone().cross(rightVector).normalize();\r\n this.u = this.v.clone().cross(plane.normal);\r\n this.plane = plane;\r\n this.planeorigin = plane.normal.clone().multiplyScalar(plane.w);\r\n }\r\n to2D(vec3: Vector3D)\r\n {\r\n return new Vector2D(vec3.dot(this.u), vec3.dot(this.v));\r\n }\r\n\r\n to3D(vec2: Vector2D)\r\n {\r\n return this.planeorigin.clone()\r\n .add(this.u.clone().multiplyScalar(vec2.x))\r\n .add(this.v.clone().multiplyScalar(vec2.y));\r\n }\r\n}\r\n","import { EPS } from \"../constants\";\r\nimport { fnNumberSort, insertSorted, interpolateBetween2DPointsForY } from \"../utils\";\r\nimport { Line2D } from \"./Line2\";\r\nimport { OrthoNormalBasis } from \"./OrthoNormalBasis\";\r\nimport { Polygon } from \"./Polygon3\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\n\r\n//在这个文件中 Top 表示的是 y最小.\r\n// Bottom 表示的是 y最大\r\n\r\ninterface ActivePolygon\r\n{\r\n polygonindex: number;\r\n leftvertexindex: number;\r\n rightvertexindex: number;\r\n\r\n topleft: Vector2D;\r\n bottomleft: Vector2D;\r\n\r\n topright: Vector2D;\r\n bottomright: Vector2D;\r\n}\r\n\r\ninterface OutPolygon\r\n{\r\n topleft: Vector2D;\r\n topright: Vector2D;\r\n bottomleft: Vector2D;\r\n bottomright: Vector2D;\r\n leftline: Line2D;\r\n rightline: Line2D;\r\n outpolygon?: { leftpoints: Vector2D[]; rightpoints: Vector2D[]; };\r\n leftlinecontinues?: boolean;\r\n rightlinecontinues?: boolean;\r\n}\r\n\r\n//一组共面多边形的Retesselation函数。 请参阅此文件顶部的介绍。\r\nexport function reTesselateCoplanarPolygons(sourcePolygons: Polygon[], destpolygons: Polygon[] = []): void\r\n{\r\n let numPolygons = sourcePolygons.length;\r\n if (numPolygons < 2)\r\n {\r\n destpolygons.push(...sourcePolygons);\r\n return;\r\n }\r\n\r\n let plane = sourcePolygons[0].plane;\r\n let orthobasis = new OrthoNormalBasis(plane);\r\n\r\n // let xcoordinatebins = {}\r\n let yCoordinateBins: { [key: number]: number; } = {}; //整数map\r\n let yCoordinateBinningFactor = (1.0 / EPS) * 10;\r\n\r\n let polygonVertices2d: (Vector2D[])[] = []; // (Vector2[])[];\r\n let polygonTopVertexIndexes: number[] = []; // 每个多边形最顶层顶点的索引数组 minIndex\r\n let topY2PolygonIndexes: { [key: number]: number[]; } = {}; // Map\r\n let yCoordinateToPolygonIndexes: { [key: string]: { [key: number]: boolean; }; } = {}; // Map > Y坐标映射所有的多边形\r\n\r\n //将多边形转换为2d点表 polygonVertices2d\r\n //建立y对应的多边形Map yCoordinateToPolygonIndexes\r\n for (let polygonIndex = 0; polygonIndex < numPolygons; polygonIndex++)\r\n {\r\n let poly3d = sourcePolygons[polygonIndex];\r\n let numVertices = poly3d.vertices.length;\r\n\r\n if (numVertices === 0) continue;\r\n\r\n let vertices2d: Vector2D[] = []; //Vector2d[];\r\n let minIndex = -1;\r\n let miny: number, maxy: number;\r\n for (let i = 0; i < numVertices; i++)\r\n {\r\n let pos2d = orthobasis.to2D(poly3d.vertices[i].pos);\r\n // perform binning of y coordinates: If we have multiple vertices very\r\n // close to each other, give them the same y coordinate:\r\n let yCoordinatebin = Math.floor(pos2d.y * yCoordinateBinningFactor);\r\n let newy: number;\r\n if (yCoordinatebin in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin];\r\n else if (yCoordinatebin + 1 in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin + 1];\r\n else if (yCoordinatebin - 1 in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin - 1];\r\n else\r\n {\r\n newy = pos2d.y;\r\n yCoordinateBins[yCoordinatebin] = pos2d.y;\r\n }\r\n pos2d = new Vector2D(pos2d.x, newy);\r\n vertices2d.push(pos2d);\r\n if (i === 0 || newy < miny)\r\n {\r\n miny = newy;\r\n minIndex = i;\r\n }\r\n if (i === 0 || newy > maxy) maxy = newy;\r\n\r\n if (!(newy in yCoordinateToPolygonIndexes))\r\n yCoordinateToPolygonIndexes[newy] = {};\r\n\r\n yCoordinateToPolygonIndexes[newy][polygonIndex] = true;\r\n }\r\n\r\n //退化多边形,所有顶点都具有相同的y坐标。 从现在开始忽略它:\r\n if (miny >= maxy) continue;\r\n\r\n if (!(miny in topY2PolygonIndexes)) topY2PolygonIndexes[miny] = [];\r\n\r\n topY2PolygonIndexes[miny].push(polygonIndex);\r\n\r\n // reverse the vertex order:\r\n vertices2d.reverse();\r\n minIndex = numVertices - minIndex - 1;\r\n polygonVertices2d.push(vertices2d);\r\n polygonTopVertexIndexes.push(minIndex);\r\n }\r\n\r\n //所有的y坐标,从小到大排序\r\n let yCoordinates: string[] = [];\r\n for (let ycoordinate in yCoordinateToPolygonIndexes)\r\n yCoordinates.push(ycoordinate);\r\n yCoordinates.sort(fnNumberSort);\r\n\r\n //迭代y坐标 从低到高\r\n\r\n // activepolygons :'active'的源多边形,即与y坐标相交\r\n // 多边形是从左往右排序的\r\n // activepolygons 中的每个元素都具有以下属性:\r\n // polygonindex 源多边形的索引(即sourcepolygons的索引 和polygonvertices2d数组)\r\n // leftvertexindex 左边 在当前y坐标处或刚好在当前y坐标之上\r\n // rightvertexindex 右边\r\n // topleft bottomleft 与当前y坐标交叉的多边形左侧的坐标\r\n // topright bottomright 与当前y坐标交叉的多边形右侧的坐标\r\n\r\n let activePolygons: ActivePolygon[] = [];\r\n let prevOutPolygonRow: OutPolygon[] = []; //上一个输出多边形行?\r\n for (let yindex = 0; yindex < yCoordinates.length; yindex++)\r\n {\r\n let yCoordinateStr = yCoordinates[yindex];\r\n let yCoordinate = Number(yCoordinateStr);\r\n\r\n // 用当前的y 更新 activePolygons\r\n // - 删除以y坐标结尾的所有多边形 删除polygon maxy = y 的多边形\r\n // - 更新 leftvertexindex 和 rightvertexindex (指向当前顶点索引)\r\n // 在多边形的左侧和右侧\r\n\r\n // 迭代在Y坐标处有一个角的所有多边形\r\n let polygonIndexeSwithCorner = yCoordinateToPolygonIndexes[yCoordinateStr];\r\n for (\r\n let activePolygonIndex = 0;\r\n activePolygonIndex < activePolygons.length;\r\n activePolygonIndex++\r\n )\r\n {\r\n let activepolygon = activePolygons[activePolygonIndex];\r\n let polygonindex = activepolygon.polygonindex;\r\n\r\n if (!polygonIndexeSwithCorner[polygonindex])//如果不在角内\r\n continue;\r\n\r\n //多边形在此y坐标处有一个角\r\n let vertices2d = polygonVertices2d[polygonindex];\r\n let numvertices = vertices2d.length;\r\n let newleftvertexindex = activepolygon.leftvertexindex;\r\n let newrightvertexindex = activepolygon.rightvertexindex;\r\n\r\n //看看我们是否需要增加 leftvertexindex 或减少 rightvertexindex :\r\n while (true)\r\n {\r\n let nextleftvertexindex = newleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n if (vertices2d[nextleftvertexindex].y !== yCoordinate) break;\r\n newleftvertexindex = nextleftvertexindex;\r\n }\r\n //减少 rightvertexindex\r\n let nextrightvertexindex = newrightvertexindex - 1;\r\n if (nextrightvertexindex < 0)\r\n nextrightvertexindex = numvertices - 1;\r\n if (vertices2d[nextrightvertexindex].y === yCoordinate)\r\n newrightvertexindex = nextrightvertexindex;\r\n\r\n if (\r\n newleftvertexindex !== activepolygon.leftvertexindex //有向上更新\r\n && newleftvertexindex === newrightvertexindex //指向同一个点\r\n )\r\n {\r\n\r\n // We have increased leftvertexindex or decreased rightvertexindex, and now they point to the same vertex\r\n // This means that this is the bottom point of the polygon. We'll remove it:\r\n //我们增加了leftvertexindex或减少了rightvertexindex,现在它们指向同一个顶点\r\n //这意味着这是多边形的底点。 我们将删除它:\r\n activePolygons.splice(activePolygonIndex, 1);\r\n --activePolygonIndex;\r\n } else\r\n {\r\n activepolygon.leftvertexindex = newleftvertexindex;\r\n activepolygon.rightvertexindex = newrightvertexindex;\r\n activepolygon.topleft = vertices2d[newleftvertexindex];\r\n activepolygon.topright = vertices2d[newrightvertexindex];\r\n let nextleftvertexindex = newleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n activepolygon.bottomleft = vertices2d[nextleftvertexindex];\r\n let nextrightvertexindex = newrightvertexindex - 1;\r\n if (nextrightvertexindex < 0) nextrightvertexindex = numvertices - 1;\r\n activepolygon.bottomright = vertices2d[nextrightvertexindex];\r\n }\r\n }\r\n\r\n let nextYCoordinate: number; // number y\r\n if (yindex >= yCoordinates.length - 1)\r\n {\r\n // last row, all polygons must be finished here:\r\n // 最后一行,所有多边形必须在这里完成:\r\n activePolygons = [];\r\n }\r\n else // yindex < ycoordinates.length-1\r\n {\r\n nextYCoordinate = Number(yCoordinates[yindex + 1]);\r\n let middleYCoordinate = 0.5 * (yCoordinate + nextYCoordinate);\r\n // update activepolygons by adding any polygons that start here:\r\n // 添加从这里开始的多边形 到 activePolygons\r\n let startingPolygonIndexes = topY2PolygonIndexes[yCoordinateStr];\r\n for (let polygonindex_key in startingPolygonIndexes)\r\n {\r\n let polygonindex = startingPolygonIndexes[polygonindex_key];\r\n let vertices2d = polygonVertices2d[polygonindex];\r\n let numvertices = vertices2d.length;\r\n let topVertexIndex = polygonTopVertexIndexes[polygonindex];\r\n // the top of the polygon may be a horizontal line. In that case topvertexindex can point to any point on this line.\r\n // Find the left and right topmost vertices which have the current y coordinate:\r\n // 顶部可以是一条直线,寻找最左边的点和最右边的点\r\n let topleftvertexindex = topVertexIndex;\r\n while (true)\r\n {\r\n let i = topleftvertexindex + 1;\r\n if (i >= numvertices) i = 0;\r\n if (vertices2d[i].y !== yCoordinate) break;\r\n if (i === topVertexIndex) break; // should not happen, but just to prevent endless loops\r\n topleftvertexindex = i;\r\n }\r\n let toprightvertexindex = topVertexIndex;\r\n while (true)\r\n {\r\n let i = toprightvertexindex - 1;\r\n if (i < 0) i = numvertices - 1;\r\n if (vertices2d[i].y !== yCoordinate) break;\r\n if (i === topleftvertexindex) break; // should not happen, but just to prevent endless loops\r\n toprightvertexindex = i;\r\n }\r\n\r\n let nextleftvertexindex = topleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n let nextrightvertexindex = toprightvertexindex - 1;\r\n if (nextrightvertexindex < 0) nextrightvertexindex = numvertices - 1;\r\n let newactivepolygon: ActivePolygon = {\r\n polygonindex: polygonindex,\r\n leftvertexindex: topleftvertexindex,\r\n rightvertexindex: toprightvertexindex,\r\n topleft: vertices2d[topleftvertexindex],\r\n topright: vertices2d[toprightvertexindex],\r\n bottomleft: vertices2d[nextleftvertexindex],\r\n bottomright: vertices2d[nextrightvertexindex]\r\n };\r\n\r\n //二分插入\r\n insertSorted(activePolygons, newactivepolygon, function (el1: ActivePolygon, el2: ActivePolygon)\r\n {\r\n let x1 = interpolateBetween2DPointsForY(\r\n el1.topleft,\r\n el1.bottomleft,\r\n middleYCoordinate\r\n );\r\n let x2 = interpolateBetween2DPointsForY(\r\n el2.topleft,\r\n el2.bottomleft,\r\n middleYCoordinate\r\n );\r\n if (x1 > x2) return 1;\r\n if (x1 < x2) return -1;\r\n return 0;\r\n });\r\n }\r\n }\r\n\r\n //#region\r\n // if( (yindex === ycoordinates.length-1) || (nextycoordinate - ycoordinate > EPS) )\r\n // if(true)\r\n // {\r\n\r\n let newOutPolygonRow: OutPolygon[] = []; //输出多边形\r\n\r\n // Build the output polygons for the next row in newOutPolygonRow:\r\n //现在 activepolygons 是最新的\r\n //为 newOutPolygonRow 中的下一行构建输出多边形:\r\n for (let activepolygonKey in activePolygons)\r\n {\r\n let activepolygon = activePolygons[activepolygonKey];\r\n\r\n let x = interpolateBetween2DPointsForY(\r\n activepolygon.topleft,\r\n activepolygon.bottomleft,\r\n yCoordinate\r\n );\r\n let topleft = new Vector2D(x, yCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topright,\r\n activepolygon.bottomright,\r\n yCoordinate\r\n );\r\n let topright = new Vector2D(x, yCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topleft,\r\n activepolygon.bottomleft,\r\n nextYCoordinate\r\n );\r\n let bottomleft = new Vector2D(x, nextYCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topright,\r\n activepolygon.bottomright,\r\n nextYCoordinate\r\n );\r\n let bottomright = new Vector2D(x, nextYCoordinate);\r\n let outPolygon = {\r\n topleft: topleft,\r\n topright: topright,\r\n bottomleft: bottomleft,\r\n bottomright: bottomright,\r\n leftline: Line2D.fromPoints(topleft, bottomleft),\r\n rightline: Line2D.fromPoints(bottomright, topright)\r\n };\r\n\r\n if (newOutPolygonRow.length > 0)\r\n {\r\n let prevoutpolygon =\r\n newOutPolygonRow[newOutPolygonRow.length - 1];\r\n let d1 = outPolygon.topleft.distanceTo(prevoutpolygon.topright);\r\n let d2 = outPolygon.bottomleft.distanceTo(\r\n prevoutpolygon.bottomright\r\n );\r\n if (d1 < EPS && d2 < EPS)\r\n {\r\n // we can join this polygon with the one to the left:\r\n outPolygon.topleft = prevoutpolygon.topleft;\r\n outPolygon.leftline = prevoutpolygon.leftline;\r\n outPolygon.bottomleft = prevoutpolygon.bottomleft;\r\n newOutPolygonRow.splice(newOutPolygonRow.length - 1, 1);\r\n }\r\n }\r\n\r\n newOutPolygonRow.push(outPolygon);\r\n }\r\n\r\n if (yindex > 0)\r\n {\r\n // try to match the new polygons against the previous row:\r\n //尝试将新多边形与上一行匹配:\r\n let prevContinuedIndexes: { [key: number]: boolean; } = {};\r\n let matchedIndexes: { [key: number]: boolean; } = {};\r\n for (let i = 0; i < newOutPolygonRow.length; i++)\r\n {\r\n let thispolygon = newOutPolygonRow[i];\r\n for (let ii = 0; ii < prevOutPolygonRow.length; ii++)\r\n {\r\n if (!matchedIndexes[ii])\r\n {\r\n // not already processed?\r\n // We have a match if the sidelines are equal or if the top coordinates\r\n // are on the sidelines of the previous polygon\r\n let prevpolygon = prevOutPolygonRow[ii];\r\n if (prevpolygon.bottomleft.distanceTo(thispolygon.topleft) < EPS)\r\n {\r\n if (prevpolygon.bottomright.distanceTo(thispolygon.topright) < EPS)\r\n {\r\n // Yes, the top of this polygon matches the bottom of the previous:\r\n matchedIndexes[ii] = true;\r\n // Now check if the joined polygon would remain convex:\r\n let d1 = thispolygon.leftline.direction().x - prevpolygon.leftline.direction().x;\r\n let d2 = thispolygon.rightline.direction().x - prevpolygon.rightline.direction().x;\r\n let leftlinecontinues = Math.abs(d1) < EPS;\r\n let rightlinecontinues = Math.abs(d2) < EPS;\r\n let leftlineisconvex = leftlinecontinues || d1 >= 0;\r\n let rightlineisconvex = rightlinecontinues || d2 >= 0;\r\n if (leftlineisconvex && rightlineisconvex)\r\n {\r\n // yes, both sides have convex corners:\r\n // This polygon will continue the previous polygon\r\n thispolygon.outpolygon = prevpolygon.outpolygon;\r\n thispolygon.leftlinecontinues = leftlinecontinues;\r\n thispolygon.rightlinecontinues = rightlinecontinues;\r\n prevContinuedIndexes[ii] = true;\r\n }\r\n break;\r\n }\r\n }\r\n } // if(!prevcontinuedindexes[ii])\r\n } // for ii\r\n } // for i\r\n for (let ii = 0; ii < prevOutPolygonRow.length; ii++)\r\n {\r\n if (!prevContinuedIndexes[ii])\r\n {\r\n // polygon ends here\r\n // Finish the polygon with the last point(s):\r\n let prevpolygon = prevOutPolygonRow[ii];\r\n prevpolygon.outpolygon.rightpoints.push(prevpolygon.bottomright);\r\n if (prevpolygon.bottomright.distanceTo(prevpolygon.bottomleft) > EPS)\r\n {\r\n // polygon ends with a horizontal line:\r\n prevpolygon.outpolygon.leftpoints.push(prevpolygon.bottomleft);\r\n }\r\n // reverse the left half so we get a counterclockwise circle:\r\n prevpolygon.outpolygon.leftpoints.reverse();\r\n let points2d = prevpolygon.outpolygon.rightpoints.concat(prevpolygon.outpolygon.leftpoints);\r\n\r\n let vertices = points2d.map(v => new Vertex3D(orthobasis.to3D(v)));\r\n let polygon = new Polygon(vertices, plane);\r\n destpolygons.push(polygon);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < newOutPolygonRow.length; i++)\r\n {\r\n let thispolygon = newOutPolygonRow[i];\r\n if (!thispolygon.outpolygon)\r\n {\r\n // polygon starts here:\r\n thispolygon.outpolygon = {\r\n leftpoints: [],\r\n rightpoints: []\r\n };\r\n thispolygon.outpolygon.leftpoints.push(thispolygon.topleft);\r\n if (thispolygon.topleft.distanceTo(thispolygon.topright) > EPS)\r\n {\r\n // we have a horizontal line at the top:\r\n thispolygon.outpolygon.rightpoints.push(thispolygon.topright);\r\n }\r\n }\r\n else\r\n {\r\n // continuation of a previous row\r\n if (!thispolygon.leftlinecontinues)\r\n {\r\n thispolygon.outpolygon.leftpoints.push(thispolygon.topleft);\r\n }\r\n if (!thispolygon.rightlinecontinues)\r\n {\r\n thispolygon.outpolygon.rightpoints.push(thispolygon.topright);\r\n }\r\n }\r\n }\r\n\r\n prevOutPolygonRow = newOutPolygonRow;\r\n // }\r\n //#endregion\r\n } // for yindex\r\n}\r\n","import { CSG } from \"../CSG\";\r\nimport { FuzzyCSGFactory } from \"../FuzzyFactory3d\";\r\nimport { Polygon } from \"../math/Polygon3\";\r\nimport { reTesselateCoplanarPolygons } from \"../math/reTesselateCoplanarPolygons\";\r\n\r\nexport function reTesselate(csg: CSG): CSG\r\n{\r\n if (csg.isRetesselated) return csg;\r\n\r\n let polygonsPerPlane: { [key: number]: Polygon[]; } = {};\r\n let isCanonicalized = csg.isCanonicalized;\r\n let fuzzyfactory = new FuzzyCSGFactory();\r\n\r\n for (let polygon of csg.polygons)\r\n {\r\n let plane = polygon.plane;\r\n if (!isCanonicalized)\r\n {\r\n // in order to identify polygons having the same plane, we need to canonicalize the planes\r\n // We don't have to do a full canonizalization (including vertices), to save time only do the planes and the shared data:\r\n plane = fuzzyfactory.getPlane(plane);\r\n }\r\n let tag = plane.getTag();\r\n if (!(tag in polygonsPerPlane)) polygonsPerPlane[tag] = [polygon];\r\n else polygonsPerPlane[tag].push(polygon);\r\n }\r\n\r\n let destpolygons: Polygon[] = [];\r\n for (let planetag in polygonsPerPlane)\r\n {\r\n let sourcepolygons = polygonsPerPlane[planetag];\r\n reTesselateCoplanarPolygons(sourcepolygons, destpolygons);\r\n }\r\n let resultCSG = new CSG(destpolygons);\r\n resultCSG.isRetesselated = true;\r\n return resultCSG;\r\n};\r\n","import { Matrix4 } from \"three\";\r\nimport { IsMirror } from \"./math/IsMirrot\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\nimport { Tree } from \"./trees\";\r\nimport { canonicalizeCSG } from \"./utils/canonicalize\";\r\nimport { bounds } from \"./utils/csgMeasurements\";\r\nimport { reTesselate } from \"./utils/retesellate\";\r\n\r\n/** Class CSG\r\n * Holds a binary space partition tree representing a 3D solid. Two solids can\r\n * be combined using the `union()`, `subtract()`, and `intersect()` methods.\r\n * @constructor\r\n */\r\nexport class CSG\r\n{\r\n /** # 是否已精简重复点 */\r\n isCanonicalized: boolean = false;\r\n /** # 是否已合并轮廓 */\r\n isRetesselated: boolean = false;\r\n cachedBoundingBox: Vector3D[];\r\n constructor(public polygons: Polygon[] = [])\r\n {\r\n }\r\n /**\r\n * Return a new CSG solid representing the space in either this solid or\r\n * in the given solids. Neither this solid nor the given solids are modified.\r\n * @param {CSG[]} csg - list of CSG objects\r\n * @returns {CSG} new CSG object\r\n * @example\r\n * let C = A.union(B)\r\n * @example\r\n * +-------+ +-------+\r\n * | | | |\r\n * | A | | |\r\n * | +--+----+ = | +----+\r\n * +----+--+ | +----+ |\r\n * | B | | |\r\n * | | | |\r\n * +-------+ +-------+\r\n */\r\n union(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n {\r\n csgs = csg.slice(0);\r\n csgs.push(this);\r\n }\r\n else csgs = [this, csg];\r\n\r\n let i: number;\r\n // combine csg pairs in a way that forms a balanced binary tree pattern\r\n for (i = 1; i < csgs.length; i += 2)\r\n {\r\n csgs.push(csgs[i - 1].unionSub(csgs[i]));\r\n }\r\n return csgs[i - 1].reTesselated().canonicalized();\r\n }\r\n\r\n unionSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n if (!this.mayOverlap(csg))\r\n return this.unionForNonIntersecting(csg);\r\n\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.clipTo(b);\r\n\r\n // b.clipTo(a, true); // ERROR: this doesn't work\r\n b.clipTo(a);\r\n b.invert();\r\n b.clipTo(a);\r\n b.invert();\r\n\r\n let newpolygons = [...a.allPolygons(), ...b.allPolygons()];\r\n let resultCSG = new CSG(newpolygons);\r\n if (retesselate) resultCSG = resultCSG.reTesselated();\r\n if (canonicalize) resultCSG = resultCSG.canonicalized();\r\n return resultCSG;\r\n }\r\n\r\n // Like union, but when we know that the two solids are not intersecting\r\n // Do not use if you are not completely sure that the solids do not intersect!\r\n unionForNonIntersecting(csg: CSG): CSG\r\n {\r\n let newpolygons = [...this.polygons, ...csg.polygons];\r\n let result = new CSG(newpolygons);\r\n result.isCanonicalized = this.isCanonicalized && csg.isCanonicalized;\r\n result.isRetesselated = this.isRetesselated && csg.isRetesselated;\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid representing space in this solid but\r\n * not in the given solids. Neither this solid nor the given solids are modified.\r\n * @returns new CSG object\r\n * @example\r\n * let C = A.subtract(B)\r\n * @example\r\n * +-------+ +-------+\r\n * | | | |\r\n * | A | | |\r\n * | +--+----+ = | +--+\r\n * +----+--+ | +----+\r\n * | B |\r\n * | |\r\n * +-------+\r\n */\r\n subtract(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n csgs = csg;\r\n else\r\n csgs = [csg];\r\n let result: CSG = this;\r\n for (let i = 0; i < csgs.length; i++)\r\n {\r\n let islast = i === csgs.length - 1;\r\n result = result.subtractSub(csgs[i], islast, islast);\r\n }\r\n return result;\r\n }\r\n\r\n subtractSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.invert();\r\n a.clipTo(b);\r\n b.clipTo(a, true);\r\n a.addPolygons(b.allPolygons());\r\n a.invert();\r\n let result = new CSG(a.allPolygons());\r\n // if (retesselate) result = result.reTesselated();\r\n // if (canonicalize) result = result.canonicalized();\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid representing space in both this solid and\r\n * in the given solids. Neither this solid nor the given solids are modified.\r\n * let C = A.intersect(B)\r\n * @returns new CSG object\r\n * @example\r\n * +-------+\r\n * | |\r\n * | A |\r\n * | +--+----+ = +--+\r\n * +----+--+ | +--+\r\n * | B |\r\n * | |\r\n * +-------+\r\n */\r\n intersect(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n csgs = csg;\r\n else\r\n csgs = [csg];\r\n let result: CSG = this;\r\n for (let i = 0; i < csgs.length; i++)\r\n {\r\n let islast = i === csgs.length - 1;\r\n result = result.intersectSub(csgs[i], islast, islast);\r\n }\r\n return result;\r\n }\r\n\r\n intersectSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.invert();\r\n b.clipTo(a);\r\n b.invert();\r\n a.clipTo(b);\r\n b.clipTo(a);\r\n a.addPolygons(b.allPolygons());\r\n a.invert();\r\n let result = new CSG(a.allPolygons());\r\n // if (retesselate) result = result.reTesselated();\r\n // if (canonicalize) result = result.canonicalized();\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid with solid and empty space switched.\r\n * This solid is not modified.\r\n */\r\n invert(): CSG\r\n {\r\n let flippedpolygons = this.polygons.map(p => p.flipped());\r\n return new CSG(flippedpolygons);\r\n }\r\n\r\n // Affine transformation of CSG object. Returns a new CSG object\r\n transform1(matrix4x4: Matrix4)\r\n {\r\n let newpolygons = this.polygons.map(p =>\r\n {\r\n return p.transform(matrix4x4);\r\n });\r\n let result = new CSG(newpolygons);\r\n result.isCanonicalized = this.isCanonicalized;\r\n result.isRetesselated = this.isRetesselated;\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid that is transformed using the given Matrix.\r\n * Several matrix transformations can be combined before transforming this solid.\r\n * @param {CSG.Matrix4x4} matrix4x4 - matrix to be applied\r\n * @returns {CSG} new CSG object\r\n * @example\r\n * var m = new CSG.Matrix4x4()\r\n * m = m.multiply(CSG.Matrix4x4.rotationX(40))\r\n * m = m.multiply(CSG.Matrix4x4.translation([-.5, 0, 0]))\r\n * let B = A.transform(m)\r\n */\r\n transform(matrix4x4: Matrix4): this\r\n {\r\n let ismirror = IsMirror(matrix4x4);\r\n let transformedvertices = {};\r\n let transformedplanes = {};\r\n let newpolygons = this.polygons.map(p =>\r\n {\r\n let newplane: Plane;\r\n let plane = p.plane;\r\n let planetag = plane.getTag();\r\n if (planetag in transformedplanes)\r\n {\r\n newplane = transformedplanes[planetag];\r\n } else\r\n {\r\n newplane = plane.transform(matrix4x4);\r\n transformedplanes[planetag] = newplane;\r\n }\r\n let newvertices = p.vertices.map(v =>\r\n {\r\n let newvertex: Vertex3D;\r\n let vertextag = v.getTag();\r\n if (vertextag in transformedvertices)\r\n {\r\n newvertex = transformedvertices[vertextag];\r\n }\r\n else\r\n {\r\n newvertex = v.transform(matrix4x4);\r\n transformedvertices[vertextag] = newvertex;\r\n }\r\n return newvertex;\r\n });\r\n if (ismirror) newvertices.reverse();\r\n return new Polygon(newvertices, newplane);\r\n });\r\n let result = new CSG(newpolygons);\r\n result.isRetesselated = this.isRetesselated;\r\n result.isCanonicalized = this.isCanonicalized;\r\n return result as this;\r\n }\r\n canonicalized()\r\n {\r\n if (this.isCanonicalized) return this;\r\n return canonicalizeCSG(this);\r\n }\r\n reTesselated()\r\n {\r\n if (this.isRetesselated) return this;\r\n return reTesselate(this);\r\n }\r\n\r\n //如果两个实体有可能重叠,返回true\r\n mayOverlap(csg: CSG): boolean\r\n {\r\n if (this.polygons.length === 0 || csg.polygons.length === 0)\r\n return false;\r\n\r\n let mybounds = bounds(this);\r\n let otherbounds = bounds(csg);\r\n if (mybounds[1].x < otherbounds[0].x) return false;\r\n if (mybounds[0].x > otherbounds[1].x) return false;\r\n if (mybounds[1].y < otherbounds[0].y) return false;\r\n if (mybounds[0].y > otherbounds[1].y) return false;\r\n if (mybounds[1].z < otherbounds[0].z) return false;\r\n if (mybounds[0].z > otherbounds[1].z) return false;\r\n return true;\r\n }\r\n\r\n toTriangles(): Polygon[]\r\n {\r\n let polygons: Polygon[] = [];\r\n for (let poly of this.polygons)\r\n {\r\n let firstVertex = poly.vertices[0];\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n polygons.push(\r\n new Polygon(\r\n [\r\n firstVertex,\r\n poly.vertices[i + 1],\r\n poly.vertices[i + 2]\r\n ],\r\n poly.plane\r\n )\r\n );\r\n }\r\n }\r\n return polygons;\r\n }\r\n}\r\n","import { BufferGeometry, Face3, Geometry, Vector2, Vector3 } from \"three\";\r\nimport { equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { CSG } from \"./CSG\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Vector2D } from \"./math/Vector2\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\n\r\nexport function Geometry2CSG(geometry: Geometry | BufferGeometry): CSG\r\n{\r\n if (geometry instanceof BufferGeometry)\r\n geometry = new Geometry().fromBufferGeometry(geometry);\r\n\r\n let polygons: Polygon[] = [];\r\n for (let i = 0; i < geometry.faces.length; i++)\r\n {\r\n let face = geometry.faces[i];\r\n let faceVertexUvs = geometry.faceVertexUvs[0][i];\r\n let vertices: Vertex3D[] = [];\r\n\r\n if (face instanceof Face3)\r\n {\r\n let uv = faceVertexUvs ? faceVertexUvs[0].clone() : null;\r\n let vertex1 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.a]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex1);\r\n\r\n uv = faceVertexUvs ? faceVertexUvs[1].clone() : null;\r\n let vertex2 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.b]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex2);\r\n\r\n uv = faceVertexUvs ? faceVertexUvs[2].clone() : null;\r\n let vertex3 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.c]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex3);\r\n }\r\n\r\n let polygon = new Polygon(vertices);\r\n let normal = Vector3DToVector3(polygon.plane.normal);\r\n if (!isNaN(polygon.plane.w) && !equalv3(normal, new Vector3()))\r\n polygons.push(polygon);\r\n }\r\n\r\n return new CSG(polygons);\r\n}\r\n\r\nexport function CSG2Geometry(csg: CSG): Geometry\r\n{\r\n let geo = new Geometry;\r\n let uvs: Vector2[][] = geo.faceVertexUvs[0];\r\n\r\n for (let poly of csg.polygons)\r\n {\r\n let normal = Vector3DToVector3(poly.plane.normal);\r\n if (equalv3(normal, ZeroVec)) continue;\r\n for (let v of poly.vertices)\r\n {\r\n v.tag = geo.vertices.length;\r\n geo.vertices.push(Vector3DToVector3(v.pos));\r\n }\r\n\r\n let firstVertex = poly.vertices[0];\r\n\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n let [a, b, c] = [\r\n firstVertex.tag,\r\n poly.vertices[i + 1].tag,\r\n poly.vertices[i + 2].tag\r\n ];\r\n let f = new Face3(a, b, c, normal);\r\n\r\n geo.faces.push(f);\r\n uvs.push([\r\n Vector2DToVector2(firstVertex.uv),\r\n Vector2DToVector2(poly.vertices[i + 1].uv),\r\n Vector2DToVector2(poly.vertices[i + 2].uv)\r\n ]);\r\n }\r\n }\r\n return geo;\r\n}\r\n\r\nfunction Vector3ToVector3D(v: Vector3): Vector3D\r\n{\r\n return new Vector3D(v.x, v.y, v.z);\r\n}\r\n\r\nexport function Vector3DToVector3(v: Vector3D): Vector3\r\n{\r\n return new Vector3(v.x, v.y, v.z);\r\n}\r\nfunction Vector2DToVector2(v: Vector2D): Vector2\r\n{\r\n return new Vector2(v.x, v.y);\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ToFixed } from \"../Common/Utils\";\r\nimport { CSG } from \"../csg/core/CSG\";\r\nimport { Polygon } from \"../csg/core/math/Polygon3\";\r\nimport { Vec3 } from \"./IVec3\";\r\n\r\n/**\r\n * 解决 THREEBSP(CSG) 产生的结果没有办法得到分裂的个数.\r\n * 本类分析了THREEBSP的组合情况.\r\n * \r\n * Example:\r\n * \r\n * let topology = new BSPGroupParse(csg);\r\n * topology.parse();\r\n */\r\nexport class BSPGroupParse\r\n{\r\n constructor(bsp?: CSG, public fractionDigits = 1)\r\n {\r\n if (bsp)\r\n for (let poly of bsp.polygons)\r\n this.Add(poly);\r\n }\r\n Add(poly: Polygon)\r\n {\r\n let strs = poly.vertices.map(p => this.GenerateP(p.pos));\r\n let str0 = strs[0];\r\n let s0 = this.Get(str0);\r\n for (let i = 1; i < strs.length; i++)\r\n {\r\n let stri = strs[i];\r\n s0.add(stri);\r\n this.Get(stri).add(str0);\r\n }\r\n }\r\n\r\n /**\r\n * 返回组合点\r\n */\r\n Parse(): Vector3[][]\r\n {\r\n let set = new Set([...this.map.keys()]);\r\n let res: Vector3[][] = [];\r\n while (set.size > 0)\r\n {\r\n let fp = set[Symbol.iterator]().next().value;\r\n set.delete(fp);\r\n let cset = new Set();\r\n cset.add(fp);\r\n this.GetPts(fp, cset, set);\r\n let pts = [...cset].map(str =>\r\n {\r\n let v3 = this.vecMap.get(str);\r\n return new Vector3(v3.x, v3.y, v3.z);\r\n });\r\n res.push(pts);\r\n }\r\n return res;\r\n }\r\n private map = new Map>();\r\n private Get(vstr: string): Set\r\n {\r\n if (!this.map.has(vstr))\r\n {\r\n let s = new Set();\r\n this.map.set(vstr, s);\r\n return s;\r\n }\r\n return this.map.get(vstr);\r\n }\r\n private GetPts(p: string, cset: Set, oset: Set)\r\n {\r\n let strs = this.map.get(p);\r\n for (let str of strs)\r\n {\r\n if (!cset.has(str))\r\n {\r\n cset.add(str);\r\n oset.delete(str);\r\n this.GetPts(str, cset, oset);\r\n }\r\n }\r\n }\r\n private vecMap = new Map();\r\n private GenerateP(v: Vec3)\r\n {\r\n let str = [v.x, v.y, v.z].map(n => ToFixed(n, this.fractionDigits)).join(\",\");\r\n this.vecMap.set(str, v);\r\n return str;\r\n }\r\n}\r\n","import { BufferGeometry, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { equalv3 } from \"./GeUtils\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\n\r\nexport function GenerateExtrudeEdgeGeometry(contourPoints: Vector3[][], height: number): BufferGeometry\r\n{\r\n let pts: Vector3[] = [];\r\n for (let cs of contourPoints)\r\n pts.push(...GenerateExtrudeEdgeGeometryPoints(cs, height));\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return geo;\r\n}\r\n\r\nfunction GenerateExtrudeEdgeGeometryPoints(contourPoints: Vector3[], height: number): Vector3[]\r\n{\r\n if (contourPoints.length < 3) return [];\r\n if (equalv3(contourPoints[0], arrayLast(contourPoints)))\r\n contourPoints.pop();\r\n let pts: Vector3[] = [];\r\n let hpts = contourPoints.map(p => new Vector3(p.x, p.y, height));\r\n let count = contourPoints.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n pts.push(contourPoints[i], contourPoints[FixIndex(i + 1, count)], hpts[i], hpts[FixIndex(i + 1, count)], contourPoints[i], hpts[i]);\r\n }\r\n return pts;\r\n}\r\n\r\nexport function GenerateBoxEdgeGeometry(length: number, width: number, height: number): BufferGeometry\r\n{\r\n let pts = [new Vector3(), new Vector3(length), new Vector3(length, width), new Vector3(0, width)];\r\n return GenerateExtrudeEdgeGeometry([pts], height);\r\n}\r\n","import { arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { Status } from \"../../Common/Status\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\n\r\nexport function SimplifyPolyline(polyline: Polyline)\r\n{\r\n let curves = polyline.Explode();\r\n\r\n let oldCount = curves.length;\r\n curves = arrayRemoveDuplicateBySort(curves, (c1, c2) =>\r\n {\r\n return c1.Join(c2) !== Status.False;\r\n });\r\n\r\n if (oldCount === curves.length) return;\r\n\r\n polyline.Erase();\r\n\r\n if (curves.length === 1)\r\n return curves[0];\r\n else\r\n {\r\n let pl = new Polyline;\r\n for (let cu of curves)\r\n pl.Join(cu);\r\n return pl;\r\n }\r\n}\r\n","import { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { Vec3 } from \"../../Geometry/IVec3\";\r\nimport { IntersectOption } from \"../IntersectWith\";\r\n\r\n/**\r\n * V型刀走刀数据,第一刀直接扎进去,最后一刀提刀\r\n * @param polyline\r\n * @param feedingDepth 走刀深度\r\n * @param knifAngle 通常为60度.按弧度表示\r\n */\r\nexport function VKnifToolPath(polyline: Polyline, feedingDepth: number, knifAngle: number): { pt: Vec3, bul: number; }[]\r\n{\r\n let x = feedingDepth * Math.tan(knifAngle);\r\n let cus = polyline.Explode();\r\n arrayRemoveIf(cus, c => c.Length < 0.01);\r\n\r\n let offsetx = [x, -x];\r\n\r\n let ptsbul: { pt: Vec3, bul: number; }[] = [];\r\n\r\n let isClose = polyline.IsClose;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let nextIndex = FixIndex(i + 1, cus.length);\r\n let c1 = cus[i];\r\n let c2 = cus[nextIndex];\r\n\r\n let d = { pt: c1.StartPoint, bul: 0 };\r\n\r\n let curP = c1.EndPoint;\r\n\r\n if (c1 instanceof Arc)\r\n {\r\n d.bul = c1.Bul;\r\n c1 = new Line(curP.clone().sub(c1.GetFistDeriv(1).multiplyScalar(100)), curP);\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(c2.StartPoint, c2.StartPoint.add(c2.GetFistDeriv(0).multiplyScalar(100)));\r\n\r\n ptsbul.push(d);\r\n\r\n if (!isClose && i === cus.length - 1)//最后一条\r\n {\r\n ptsbul.push({ pt: c1.EndPoint, bul: 0 });\r\n break;\r\n }\r\n\r\n //圆弧与直线相切,此时不要提刀\r\n if (isParallelTo(c1.GetFistDeriv(0), c2.GetFistDeriv(0))) continue;\r\n\r\n //提刀\r\n for (let x of offsetx)\r\n {\r\n let co1 = c1.GetOffsetCurves(x)[0];\r\n let co2 = c2.GetOffsetCurves(x)[0];\r\n\r\n if (!co1 || !co2) continue;\r\n\r\n let ipts = co1.IntersectWith(co2, IntersectOption.ExtendBoth);\r\n\r\n if (ipts.length === 0) continue;\r\n\r\n if (co1.PtOnCurve(ipts[0])) continue;\r\n\r\n //抬刀路径\r\n ptsbul.push({ pt: curP, bul: 0 });\r\n ptsbul.push({ pt: ipts[0].setZ(feedingDepth), bul: 0 });\r\n }\r\n }\r\n\r\n if (isClose)\r\n {\r\n //第一刀\r\n ptsbul.unshift(ptsbul[ptsbul.length - 1]);//, ptsbul[ptsbul.length - 2]\r\n }\r\n return ptsbul;\r\n}\r\n","export enum Intent\r\n{\r\n NONE = \"none\",\r\n PRIMARY = \"primary\",\r\n SUCCESS = \"success\",\r\n WARNING = \"warning\",\r\n DANGER = \"danger\",\r\n}\r\n\r\nexport interface IToasterOption\r\n{\r\n message: string | string[],\r\n timeout: number;\r\n intent: Intent;\r\n key?: string;\r\n}\r\n\r\n\r\ntype ToasterFunction = (option: IToasterOption) => void;\r\n\r\nexport const ToasterInjectFunctions: ToasterFunction[] = [];\r\n\r\nexport function Toaster(option: IToasterOption): void\r\n{\r\n for (let f of ToasterInjectFunctions)\r\n f(option);\r\n}\r\n","import { Factory } from '../CADFactory';\r\nimport { Entity } from '../Entity/Entity';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { CADFiler } from '../CADFiler';\r\n\r\n@Factory\r\nexport class Hole extends Entity\r\n{\r\n @AutoRecord FId: ObjectId;\r\n @AutoRecord MId: ObjectId;\r\n protected _Height: number;\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this._Height !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n if (ver <= 4)\r\n {\r\n //临时兼容旧图纸排钻,更新旧图纸后去掉兼容代码\r\n file['readIndex']--;\r\n }\r\n else\r\n {\r\n this._Height = file.Read();\r\n this.FId = file.ReadSoftObjectId();\r\n this.MId = file.ReadSoftObjectId();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(5);//ver\r\n file.Write(this._Height);\r\n file.WriteSoftObjectId(this.FId);\r\n file.WriteSoftObjectId(this.MId);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, CylinderBufferGeometry, Float32BufferAttribute, LineSegments, Matrix4, Mesh, Object3D, Shape as TShape, Vector3, Matrix3 } from \"three\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory, CADFactory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Hole } from \"./Hole\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Circle } from \"../Entity/Circle\";\r\n\r\nexport enum GangDrillType\r\n{\r\n /**偏心轮 */\r\n Pxl = 0,\r\n /**连接杆 */\r\n Ljg = 1,\r\n /**预埋件 */\r\n Ymj = 2,\r\n /**层板钉 */\r\n Nail = 3,\r\n /** 木销 */\r\n Wood = 4,\r\n /** 通孔 */\r\n TK = 5,\r\n WoodPXL = 6,\r\n}\r\n\r\nlet TempCircle1 = new Circle();\r\nlet TempCircle2 = new Circle();\r\n\r\n@Factory\r\nexport class CylinderHole extends Hole\r\n{\r\n private _Radius: number = 1;\r\n private type: GangDrillType = GangDrillType.Pxl;\r\n constructor()\r\n {\r\n super();\r\n this._Color = 1;\r\n }\r\n static CreateCylHole(radius: number, height: number, type: GangDrillType)\r\n {\r\n let drill = new CylinderHole();\r\n drill.Height = height;\r\n drill._Radius = radius;\r\n drill.type = type;\r\n return drill;\r\n }\r\n get Type()\r\n {\r\n return this.type;\r\n }\r\n set Type(t: GangDrillType)\r\n {\r\n if (this.type !== t)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.type = t;\r\n }\r\n }\r\n\r\n set Radius(r: number)\r\n {\r\n if (r !== this._Radius)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._MeshGeometry = null;\r\n this._EdgeGeometry = null;\r\n this._Radius = r;\r\n this.Update();\r\n }\r\n }\r\n get Height()\r\n {\r\n return super.Height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this._Height !== v)\r\n {\r\n this._MeshGeometry = null;\r\n this._EdgeGeometry = null;\r\n super.Height = v;\r\n }\r\n }\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3(new Vector3(-this._Radius, -this._Radius, 0), new Vector3(this._Radius, this._Radius, this._Height));\r\n return box.applyMatrix4(this.OCS);\r\n }\r\n private _MeshGeometry: CylinderBufferGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n this._MeshGeometry = FastDrillingMeshGeometry(this.Radius, this.Height);\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this._EdgeGeometry = FastDrillingEdgeGeometry(this._Radius, this.Height);\r\n return this._EdgeGeometry;\r\n }\r\n GetGripPoints()\r\n {\r\n let cir = new Circle(new Vector3(), this._Radius);\r\n let pts = cir.GetGripPoints();\r\n pts.push(...pts.map(p => p.clone().add(new Vector3(0, 0, this.Height))));\r\n return pts.map(p => p.applyMatrix4(this.OCS));\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n TempCircle1.Radius = this.Radius;\r\n TempCircle1.OCS = this._Matrix;\r\n TempCircle2.Radius = this.Radius;\r\n TempCircle2.OCS = this._Matrix;\r\n TempCircle2.Position = TempCircle2.Position.add(this.Normal.multiplyScalar(this.Height));\r\n\r\n for (let c of [TempCircle2, TempCircle1])\r\n {\r\n pts.push(...c.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n InitDrawObject(renderType: RenderType)\r\n {\r\n return this.GetObject3DByRenderType(renderType);\r\n }\r\n private GetObject3DByRenderType(renderType: RenderType)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n else\r\n return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n obj.add(this.GetObject3DByRenderType(type));\r\n }\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D)\r\n {\r\n if (type === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._Radius = file.Read();\r\n if (ver <= 4)\r\n {\r\n //临时兼容旧排钻\r\n this._Height = file.Read();\r\n this.type = file.Read();\r\n this.FId = file.ReadSoftObjectId();\r\n this.MId = file.ReadSoftObjectId();\r\n }\r\n else\r\n {\r\n this.type = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(5);//ver\r\n file.Write(this._Radius);\r\n file.Write(this.type);\r\n }\r\n}\r\n\r\nlet cache = new Map();\r\nlet ro = new Matrix4();\r\nro.makeRotationX(Math.PI / 2);\r\nexport function FastDrillingMeshGeometry(radius: number, height: number)\r\n{\r\n let key = `${radius},${height}`;\r\n if (cache.has(key))\r\n return cache.get(key);\r\n let geo = new CylinderBufferGeometry(radius, radius, height, 8, 1);\r\n geo.applyMatrix4(ro);\r\n geo.translate(0, 0, height / 2);\r\n cache.set(key, geo);\r\n return geo;\r\n}\r\n\r\nlet cache2 = new Map();\r\nexport function FastDrillingEdgeGeometry(radius: number, height: number): BufferGeometry\r\n{\r\n let key = `${radius},${height}`;\r\n if (cache2.has(key))\r\n return cache2.get(key);\r\n\r\n let sp = new TShape();\r\n sp.ellipse(0, 0, radius, radius, 0, 2 * Math.PI, false, 0);\r\n\r\n let pts = sp.getPoints(4);\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = pts[i];\r\n let np = pts[FixIndex(i + 1, pts.length)];\r\n coords.push(p.x, p.y, 0, np.x, np.y, 0);//bottom\r\n coords.push(p.x, p.y, height, np.x, np.y, height);//top\r\n coords.push(p.x, p.y, 0, p.x, p.y, height);//edge\r\n }\r\n\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n cache2.set(key, geo);\r\n return geo;\r\n}\r\n\r\nCADFactory.RegisterObjectAlias(CylinderHole, \"GangDrill\");\r\n","import { IBaseOption } from \"./BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\n\r\nexport enum EWineRackType\r\n{\r\n Oblique = 0,\r\n Upright = 1,\r\n}\r\n\r\nexport enum EWRackArrayType\r\n{\r\n ByWidth = 0,\r\n ByCount = 1,\r\n Fixed = 2, //固定\r\n}\r\n\r\n/**铺满方式 */\r\nexport enum EFullType\r\n{\r\n ByHeight = 0,\r\n ByWidth = 1,\r\n Symmetry = 2,\r\n}\r\n\r\n/**高度优先时靠左还是靠右 */\r\nexport enum EFullDir\r\n{\r\n Left = 0,\r\n Right = 1,\r\n}\r\n\r\nexport interface IWineRackOption extends IBaseOption\r\n{\r\n type: EWineRackType;\r\n arrayType: EWRackArrayType;\r\n fullType: EFullType;\r\n isFull: boolean;\r\n fullDir: EFullDir;\r\n isLock: boolean;\r\n heightCount: number;\r\n widthCount: number;\r\n isTotalDepth: boolean;\r\n depth: number; //格子深\r\n calcDepth: string;\r\n gripWidth: number; //格子宽度\r\n boardThick: number;\r\n grooveWidthAdd: number;\r\n leftEdge: number;\r\n rightEdge: number;\r\n topEdge: number;\r\n bottomEdge: number;\r\n frontCut: number;\r\n leftCut: number;\r\n rightCut: number;\r\n topCut: number;\r\n grooveLengthAdd: number;\r\n isDrawLy: boolean;\r\n isDrawVer: boolean;\r\n brThick2: number; //补板厚\r\n}\r\n\r\nexport interface IR2WROption\r\n{\r\n depth: number;\r\n addLen: number;\r\n knifeRadius: number;\r\n [EBoardKeyList.UpSealed]: number;\r\n [EBoardKeyList.DownSealed]: number;\r\n [EBoardKeyList.LeftSealed]: number;\r\n [EBoardKeyList.RightSealed]: number;\r\n}\r\n","import { LinesType, FaceDirection, ComposingType, IBaseOption } from \"./BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\n\r\nexport const DRILL_KEYS = [\"downDrill\", \"rightDrill\", \"upDrill\", \"leftDrill\"];\r\n\r\nexport interface IBoardFindOption extends IBaseOption\r\n{\r\n condition: IFindCondition;\r\n compareType: ICompareType;\r\n tolerance: ITolerance;\r\n layer: string;\r\n [EBoardKeyList.Height]: string;\r\n [EBoardKeyList.Width]: string;\r\n [EBoardKeyList.Thick]: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n brName: string; //板名\r\n [EBoardKeyList.BrMat]: string; //板材\r\n [EBoardKeyList.Mat]: string;\r\n [EBoardKeyList.Color]: string;\r\n [EBoardKeyList.Lines]: LinesType;\r\n [EBoardKeyList.BigHole]: FaceDirection;\r\n [EBoardKeyList.DrillType]: string;\r\n [EBoardKeyList.ComposingFace]: ComposingType;\r\n [EBoardKeyList.UpSealed]: string;\r\n [EBoardKeyList.DownSealed]: string;\r\n [EBoardKeyList.LeftSealed]: string;\r\n [EBoardKeyList.RightSealed]: string;\r\n highDrill: string[];\r\n upDownDrill: [boolean, boolean];\r\n isClose: boolean;\r\n remarks: [string, string][];\r\n isChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: string;\r\n}\r\nexport interface IFindCondition\r\n{\r\n layer: boolean;\r\n [EBoardKeyList.Height]: boolean;\r\n [EBoardKeyList.Width]: boolean;\r\n [EBoardKeyList.Thick]: boolean;\r\n useWood: boolean;\r\n useDrill: boolean;\r\n useNail: boolean;\r\n useDoor: boolean;\r\n useDim: boolean;\r\n useSpecial: boolean;\r\n useModeling: boolean;\r\n [EBoardKeyList.RoomName]: boolean;\r\n [EBoardKeyList.CabinetName]: boolean;\r\n brName: boolean;\r\n [EBoardKeyList.Mat]: boolean;\r\n [EBoardKeyList.Lines]: boolean;\r\n [EBoardKeyList.BigHole]: boolean;\r\n [EBoardKeyList.DrillType]: boolean;\r\n useKeyWord: boolean;\r\n [EBoardKeyList.ComposingFace]: boolean;\r\n [EBoardKeyList.UpSealed]: boolean;\r\n [EBoardKeyList.DownSealed]: boolean;\r\n [EBoardKeyList.LeftSealed]: boolean;\r\n [EBoardKeyList.RightSealed]: boolean;\r\n upDrill: boolean;\r\n downDrill: boolean;\r\n leftDrill: boolean;\r\n rightDrill: boolean;\r\n useZhengFanDrill: boolean;\r\n useChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: boolean;\r\n}\r\n\r\nexport interface ICompareType\r\n{\r\n [EBoardKeyList.Height]: ECompareType;\r\n [EBoardKeyList.Width]: ECompareType;\r\n [EBoardKeyList.Thick]: ECompareType;\r\n [EBoardKeyList.RoomName]: ECompareType;\r\n [EBoardKeyList.CabinetName]: ECompareType;\r\n brName: ECompareType;\r\n [EBoardKeyList.BrMat]: ECompareType;\r\n [EBoardKeyList.Mat]: ECompareType;\r\n [EBoardKeyList.Color]: ECompareType;\r\n [EBoardKeyList.Lines]: ECompareType;\r\n [EBoardKeyList.BigHole]: ECompareType;\r\n [EBoardKeyList.DrillType]: ECompareType;\r\n [EBoardKeyList.ComposingFace]: ECompareType;\r\n [EBoardKeyList.KnifeRad]: ECompareType;\r\n}\r\nexport interface ITolerance\r\n{\r\n [EBoardKeyList.Height]: string;\r\n [EBoardKeyList.Width]: string;\r\n [EBoardKeyList.Thick]: string;\r\n [EBoardKeyList.KnifeRad]: string;\r\n}\r\n\r\nexport enum EFindType\r\n{\r\n Find = 0,\r\n Modify = 1,\r\n FindMaxSize = 2,\r\n FindSplite = 3,\r\n GetOption = 4,\r\n RemoveModeling = 5,\r\n RemoveSpecialShape = 6,\r\n RemoveModelingAndSpecial = 7,\r\n ModifyHardware = 8,\r\n FindMinSize = 9,\r\n}\r\n\r\nexport enum ECompareType\r\n{\r\n Equal = \"=\",\r\n UnEqual = \"!=\",\r\n Greater = \">=\",\r\n Less = \"<=\"\r\n}\r\n","import { IBaseOption } from \"./BoardInterface\";\r\n\r\nexport enum ELatticeArrayType\r\n{\r\n ByWidth = 0,\r\n ByCount = 1,\r\n}\r\n\r\nexport interface ILatticeOption extends IBaseOption\r\n{\r\n arrayType: ELatticeArrayType;\r\n gripWidth: number;\r\n gripDepth: number;\r\n widthCount: number;\r\n depthCount: number;\r\n knifeRad: number,\r\n thickness: number,\r\n arcLen: number;\r\n downDist: number;\r\n space: number; //四周间隙\r\n grooveAddWidth: number; //齿加宽\r\n upSealed: number;\r\n downSealed: number;\r\n leftSealed: number;\r\n rightSealed: number;\r\n isAuto: boolean; //自动识别弧长\r\n isChange: boolean; //左右侧板跟随变化\r\n isOpenCut: boolean;\r\n upCut: number;\r\n downCut: number;\r\n}\r\n","import { INeedUpdateParams } from \"../Components/Template/TemplateComponent\";\r\nimport { IBaseOption } from \"./BoardInterface\";\r\n\r\nexport interface IDoorAndDrawerConfigOption extends IBaseOption\r\n{\r\n col: number;\r\n row: number;\r\n isAllSelect: boolean; //是否行列全选\r\n topOffset: number; //上留空\r\n bottomOffset: number; //下留空\r\n doorPosType: DoorPosType;\r\n offset: number; //内偏移\r\n topExt: number;\r\n bottomExt: number;\r\n leftExt: number;\r\n rightExt: number;\r\n topSpace: number; //间隙\r\n bottomSpace: number;\r\n leftSpace: number;\r\n rightSpace: number;\r\n midSpace: number;\r\n thickness: number; //立板厚度\r\n depth: number; //立板深度\r\n isAuto: boolean; //智能识别\r\n boardName: string; //柜名\r\n handleAngle: number; //拉手\r\n handleHorPos: HandleHorPos; //水平位置距离\r\n horSpacing: number;\r\n handleVePos: HandleVePos; // 垂直位置距离\r\n veSpacing: number;\r\n upOffsetExpr: string;\r\n downOffsetExpr: string;\r\n}\r\n\r\n/**\r\n * 门板数据接口\r\n */\r\nexport interface IDoorConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n doorThickness: number; //门板厚度\r\n topBrSeal: number; //层板封边\r\n bottomBrSeal: number;\r\n leftBrSeal: number;\r\n rightBrSeal: number;\r\n topDoorSeal: number; //门板封边\r\n bottomDoorSeal: number;\r\n leftDoorSeal: number;\r\n rightDoorSeal: number;\r\n hingeCount: number; //铰链\r\n hindeTopDist: number;\r\n hindeBottomDist: number;\r\n}\r\n\r\n/**\r\n * 抽屉数据接口\r\n */\r\nexport interface IDrawerConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n drawerTotalDepth: number; //抽屉总深\r\n trackDepth: number; //轨道深度\r\n isAutoSelectTrack: boolean;\r\n isLockTopOffset: boolean;\r\n isLockBottomOffset: boolean;\r\n}\r\n\r\n//门板位置类型\r\nexport enum DoorPosType\r\n{\r\n Out = 0, //外盖\r\n In = 1,\r\n}\r\n\r\nexport enum HandleHorPos\r\n{\r\n Left = 0,\r\n Right = 1,\r\n Mid = 2,\r\n}\r\nexport enum HandleVePos\r\n{\r\n Top = 0,\r\n Bottom = 1,\r\n Mid = 2,\r\n}\r\n//门板开门类型\r\nexport enum DoorOpenDir\r\n{\r\n Left = \"lf\",\r\n Right = \"rt\",\r\n Top = \"tp\",\r\n Bottom = \"bm\",\r\n None = \"none\",\r\n}\r\n\r\n//抽屉门板信息\r\nexport interface IDrawerInfo extends IBaseOption\r\n{\r\n row: number,\r\n col: number,\r\n divWidth: number, //预览UI尺寸\r\n divHeight: number,\r\n showWidth: string, //UI展示数据\r\n showHeight: string,\r\n width: number, //门板计算尺寸\r\n height: number,\r\n isLockWidth: boolean,\r\n isLockHeight: boolean,\r\n isSelect: boolean;\r\n tempInfo: ISelectTempInfo;\r\n marginRight?: number;\r\n}\r\n\r\nexport interface IDoorInfo extends IDrawerInfo\r\n{\r\n openDir: DoorOpenDir,\r\n\r\n isDrawLayer: boolean;\r\n isDrawVer: boolean;\r\n}\r\n\r\nexport interface IDrawerDoorTempInfo\r\n{\r\n name: string;\r\n id: string;\r\n logo?: string;\r\n props?: INeedUpdateParams[];\r\n title?: string;\r\n isHandle?: boolean;\r\n tagName?: string;\r\n isKuGan?: boolean;\r\n}\r\n\r\n/**选择的模板信息,temp-抽屉或门板,handletemp-拉手模板,其他是铰链模板 */\r\nexport interface ISelectTempInfo\r\n{\r\n temp: IDrawerDoorTempInfo;\r\n handleTemp: IDrawerDoorTempInfo;\r\n hingeTemp?: IDrawerDoorTempInfo;\r\n [key: string]: IDrawerDoorTempInfo;\r\n}\r\n\r\n/**抽屉一定要有的参数 */\r\nexport const DrawerTempParName = [\"ZYS\", \"YYS\", \"SYS\", \"XYS\"];\r\n/**禁止改的属性 */\r\nexport const DisableChangeParName = [\"L\", \"W\", \"H\", \"ZYS\", \"YYS\", \"SYS\", \"XYS\", \"ZG\", \"YG\", \"SG\", \"XG\"];\r\n\r\n/**门板需要的参数 */\r\nexport const DoorNeedParamNames = [\"L\", \"W\", \"H\", \"PX\", \"PY\", \"PZ\", \"RX\", \"RY\", \"RZ\", \"SG\", \"XG\", \"ZG\", \"YG\", \"XBH\", \"BH\"];\r\n","import { IBaseOption } from \"../../Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\n\r\nexport interface IHardwareOption extends IBaseOption\r\n{\r\n name: string;\r\n unit: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n costExpr: string;\r\n actualExpr: string;\r\n model: string;\r\n factory: string;\r\n brand: string;\r\n spec: string;\r\n comments: string;\r\n isHole: boolean;\r\n}\r\n\r\nexport interface ICylMetalsOption extends IHardwareOption\r\n{\r\n rad: number;\r\n height: number;\r\n count: string;\r\n}\r\n\r\nexport interface IExtMetalsOption extends IHardwareOption\r\n{\r\n thickness: number;\r\n knifeRad: number;\r\n addLen: number;\r\n isHole: boolean;\r\n count: string;\r\n}\r\n\r\nexport enum EMetalsType\r\n{\r\n Metals = \"五金\",\r\n Comp = \"组件\",\r\n}\r\n\r\nexport interface ICompHardwareOption extends IHardwareOption\r\n{\r\n type: EMetalsType;\r\n isSplite: boolean;\r\n isSplitePrice: boolean;\r\n color: string;\r\n [EBoardKeyList.Mat]: string;\r\n count: string;\r\n}\r\n\r\nexport interface IToplineOption extends IHardwareOption\r\n{\r\n addLen: string;\r\n}\r\n","import { LayerBoardOption, BrRelativePos, VerticalBoardOption, BehindBoardOption, BehindHeightPositon, TBBoardOption, LayerNailOption, SingleBoardOption, ClosingStripOption, StripType, LinesType, FaceDirection, ComposingType, IBoardBatchCurtailOption, CurtailType, BoardProcessOption, SideBoardOption, BoardType } from \"../UI/Store/BoardInterface\";\r\nimport { IWineRackOption, EWineRackType, EWRackArrayType, EFullType, EFullDir } from \"../UI/Store/WineRackInterface\";\r\nimport { IBoardFindOption, ECompareType } from \"../UI/Store/BoardFindInterface\";\r\nimport { ILatticeOption, ELatticeArrayType } from \"../UI/Store/LatticeInterface\";\r\nimport { HandleVePos, DoorPosType, HandleHorPos, IDrawerConfigOption, IDoorConfigOption } from \"../UI/Store/DoorInterface\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { ICylMetalsOption, IExtMetalsOption, ICompHardwareOption, EMetalsType, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { Curve2RecOption } from \"../Add-on/twoD2threeD/Modals/Curve2RecModal\";\r\nimport { IUpdateBoardInfosOption } from \"../UI/Components/Board/UpdateBoardInfointerface\";\r\nimport { IRec2BrOption } from \"../Add-on/twoD2threeD/R2bInterface\";\r\n\r\nexport const DefaultLayerBoardConfig: LayerBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"层板\",\r\n frontShrink: 0,\r\n leftShrink: 0,\r\n rightShrink: 0,\r\n calcHeight: \"W\",\r\n isTotalLength: true,\r\n boardRelative: BrRelativePos.Div,\r\n thickness: 18,\r\n count: 1,\r\n spaceSize: 300,\r\n isActive: false,\r\n calcSpaceSize: \"0\",\r\n calcFrontShrink: \"0\",\r\n calcLeftShrink: \"0\",\r\n calcRightShrink: \"0\",\r\n};\r\nObject.freeze(DefaultLayerBoardConfig);\r\n\r\nexport const DefaultVerticalBoardConfig: VerticalBoardOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"立板\",\r\n frontShrink: 0,\r\n bottomShrink: 0,\r\n calcWidth: \"W\",\r\n calcHeight: \"H\",\r\n isTotalLength: true,\r\n isTotalWidth: true,\r\n boardRelative: BrRelativePos.Div,\r\n thickness: 18,\r\n count: 1,\r\n spaceSize: 0,\r\n calcSpaceSize: \"0\",\r\n calcBottomShrink: \"0\",\r\n calcFrontShrink: \"0\",\r\n};\r\nObject.freeze(DefaultVerticalBoardConfig);\r\n\r\nexport const DefaultBehindBoardConfig: BehindBoardOption = {\r\n version: 2,\r\n type: BoardType.Behind,\r\n name: \"背板\",\r\n leftExt: 0,\r\n rightExt: 0,\r\n topExt: 0,\r\n bottomExt: 0,\r\n thickness: 18,\r\n boardPosition: BehindHeightPositon.AllHeight,\r\n calcHeight: \"H\",\r\n moveDist: 0,\r\n boardRelative: BrRelativePos.Back,\r\n spaceSize: 0,\r\n count: 1,\r\n calcSpaceSize: \"0\",\r\n calcMoveDist: \"0\",\r\n};\r\nObject.freeze(DefaultBehindBoardConfig);\r\n\r\nexport const DefaultWineRackConfig: IWineRackOption = {\r\n version: 1,\r\n type: EWineRackType.Oblique,\r\n arrayType: EWRackArrayType.ByWidth,\r\n fullType: EFullType.ByWidth,\r\n isFull: false,\r\n isLock: false,\r\n fullDir: EFullDir.Left,\r\n heightCount: 3.5,\r\n widthCount: 3.5,\r\n isTotalDepth: true,\r\n depth: 0,\r\n gripWidth: 100,\r\n calcDepth: \"W\",\r\n boardThick: 18,\r\n grooveWidthAdd: 0,\r\n leftEdge: 1,\r\n rightEdge: 1,\r\n topEdge: 1,\r\n bottomEdge: 1,\r\n frontCut: 0,\r\n leftCut: 0,\r\n rightCut: 0,\r\n topCut: 0,\r\n grooveLengthAdd: 3,\r\n isDrawLy: false,\r\n isDrawVer: false,\r\n brThick2: 18,\r\n};\r\nObject.freeze(DefaultWineRackConfig);\r\n\r\nexport const DefaultTopBoardOption: TBBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"顶板\",\r\n isDraw: true,\r\n thickness: 18,\r\n frontDist: 0,\r\n behindDistance: 0,\r\n isWrapSide: false,\r\n useLFData: true,\r\n leftExt: 0,\r\n rightExt: 0,\r\n offset: 0,\r\n};\r\nObject.freeze(DefaultTopBoardOption);\r\n\r\nexport const DefaultBottomBoardOption: TBBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"底板\",\r\n isDraw: true,\r\n thickness: 18,\r\n frontDist: 0,\r\n behindDistance: 0,\r\n isWrapSide: false,\r\n useLFData: true,\r\n leftExt: 0,\r\n rightExt: 0,\r\n offset: 80,\r\n footThickness: 18,\r\n isDrawFooter: true,\r\n footBehindShrink: 0,\r\n isDrawBackFooter: false,\r\n isDrawStrengthenStrip: false,\r\n footerOffset: 0,\r\n divCount: 1,\r\n};\r\nObject.freeze(DefaultBottomBoardOption);\r\n\r\nexport const DefaultSideBoardOption: SideBoardOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"\",\r\n height: 2000,\r\n width: 600,\r\n thickness: 18,\r\n spaceSize: 1200,\r\n leftShrink: 0,\r\n rightShrink: 0,\r\n};\r\nObject.freeze(DefaultSideBoardOption);\r\n\r\nexport const DefaultSingleBoardOption: SingleBoardOption = {\r\n version: 1,\r\n name: \"层板\",\r\n type: BoardType.Layer,\r\n height: 1200,\r\n width: 600,\r\n thickness: 18,\r\n rotateX: 0,\r\n rotateY: 0,\r\n rotateZ: 0\r\n};\r\nObject.freeze(DefaultSingleBoardOption);\r\n\r\nexport const DefaultClosingStripOption: ClosingStripOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"收口条\",\r\n striptype: StripType.H,\r\n boardRelative: BrRelativePos.Left,\r\n width: 54,\r\n thickness: 18,\r\n frontShrink: 0,\r\n isDrawFuZhu: true,\r\n fzWidth: 80,\r\n fzThickness: 18,\r\n};\r\nObject.freeze(DefaultClosingStripOption);\r\n\r\nexport const DefaultBoardFindOption: IBoardFindOption = {\r\n version: 5,\r\n condition: {\r\n layer: false,\r\n height: false,\r\n width: false,\r\n thickness: false,\r\n useWood: false,\r\n useDrill: false,\r\n useNail: false,\r\n useDoor: false,\r\n useDim: false,\r\n useSpecial: false,\r\n useModeling: false,\r\n roomName: false,\r\n cabinetName: false,\r\n brName: false,\r\n material: false,\r\n lines: false,\r\n bigHoleDir: false,\r\n drillType: false,\r\n useKeyWord: false,\r\n composingFace: false,\r\n sealedUp: false,\r\n sealedDown: false,\r\n sealedLeft: false,\r\n sealedRight: false,\r\n upDrill: false,\r\n downDrill: false,\r\n leftDrill: false,\r\n rightDrill: false,\r\n useZhengFanDrill: false,\r\n useChaidan: false,\r\n [EBoardKeyList.KnifeRad]: false,\r\n },\r\n compareType: {\r\n height: ECompareType.Equal,\r\n width: ECompareType.Equal,\r\n thickness: ECompareType.Equal,\r\n roomName: ECompareType.Equal,\r\n cabinetName: ECompareType.Equal,\r\n brName: ECompareType.Equal,\r\n [EBoardKeyList.Mat]: ECompareType.Equal,\r\n [EBoardKeyList.Color]: ECompareType.Equal,\r\n [EBoardKeyList.BrMat]: ECompareType.Equal,\r\n lines: ECompareType.Equal,\r\n bigHoleDir: ECompareType.Equal,\r\n drillType: ECompareType.Equal,\r\n composingFace: ECompareType.Equal,\r\n [EBoardKeyList.KnifeRad]: ECompareType.Equal,\r\n\r\n },\r\n tolerance: {\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n },\r\n layer: \"0\",\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n brName: \"\",\r\n [EBoardKeyList.BrMat]: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n drillType: \"\",\r\n composingFace: ComposingType.Positive,\r\n sealedUp: \"\",\r\n sealedDown: \"\",\r\n sealedLeft: \"\",\r\n sealedRight: \"\",\r\n highDrill: [],\r\n upDownDrill: [true, true],\r\n isClose: false,\r\n remarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n isChaidan: false,\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n};\r\nObject.freeze(DefaultBoardFindOption);\r\n\r\nexport const DefaultLatticOption: ILatticeOption = {\r\n version: 1,\r\n arrayType: ELatticeArrayType.ByWidth,\r\n gripWidth: 100,\r\n gripDepth: 100,\r\n widthCount: 3,\r\n depthCount: 4,\r\n knifeRad: 3,\r\n thickness: 18,\r\n arcLen: 50,\r\n downDist: 0,\r\n space: 0.2,\r\n grooveAddWidth: 0.2,\r\n upSealed: 1,\r\n downSealed: 1,\r\n leftSealed: 1,\r\n rightSealed: 1,\r\n isAuto: true,\r\n isChange: true,\r\n isOpenCut: false,\r\n upCut: 0,\r\n downCut: 4,\r\n};\r\nObject.freeze(DefaultLatticOption);\r\n\r\nexport const DefaultDoorOption: IDoorConfigOption = {\r\n version: 3,\r\n col: 2,\r\n row: 1,\r\n isAllSelect: true,\r\n topOffset: 0,\r\n bottomOffset: 0,\r\n doorPosType: DoorPosType.Out,\r\n offset: 0,\r\n topExt: 18,\r\n bottomExt: 18,\r\n leftExt: 18,\r\n rightExt: 18,\r\n topSpace: 2,\r\n bottomSpace: 2,\r\n leftSpace: 2,\r\n rightSpace: 2,\r\n midSpace: 2,\r\n thickness: 18,\r\n depth: 0,\r\n isAuto: true,\r\n boardName: \"\",\r\n doorThickness: 18,\r\n topBrSeal: 1,\r\n bottomBrSeal: 1,\r\n leftBrSeal: 1,\r\n rightBrSeal: 1,\r\n topDoorSeal: 1,\r\n bottomDoorSeal: 1,\r\n leftDoorSeal: 1,\r\n rightDoorSeal: 1,\r\n handleAngle: 0,\r\n handleHorPos: HandleHorPos.Right,\r\n horSpacing: 50,\r\n handleVePos: HandleVePos.Mid,\r\n veSpacing: 10,\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n downOffsetExpr: \"0\",\r\n upOffsetExpr: \"0\",\r\n};\r\nObject.freeze(DefaultDoorOption);\r\n\r\nexport const DefaultDrawerOption: IDrawerConfigOption = {\r\n version: 4,\r\n col: 1,\r\n row: 1,\r\n isAllSelect: true,\r\n topOffset: 0,\r\n bottomOffset: 0,\r\n doorPosType: DoorPosType.Out,\r\n offset: 0,\r\n topExt: 18,\r\n bottomExt: 18,\r\n leftExt: 18,\r\n rightExt: 18,\r\n topSpace: 2,\r\n bottomSpace: 2,\r\n leftSpace: 2,\r\n rightSpace: 2,\r\n midSpace: 2,\r\n thickness: 18,\r\n depth: 0,\r\n isAuto: true,\r\n boardName: \"\",\r\n handleAngle: 90,\r\n handleHorPos: HandleHorPos.Mid,\r\n horSpacing: 10,\r\n handleVePos: HandleVePos.Mid,\r\n veSpacing: 10,\r\n drawerTotalDepth: 0,\r\n trackDepth: 0,\r\n isAutoSelectTrack: true,\r\n isLockTopOffset: false,\r\n isLockBottomOffset: false,\r\n downOffsetExpr: \"0\",\r\n upOffsetExpr: \"0\",\r\n};\r\nObject.freeze(DefaultDrawerOption);\r\n\r\nexport const DefaultBoardBatchCurtailOption: IBoardBatchCurtailOption = {\r\n version: 1,\r\n type: CurtailType.Total,\r\n front: 0,\r\n back: 0,\r\n left: 0,\r\n right: 0,\r\n moveBrs: false,\r\n};\r\nObject.freeze(DefaultBoardBatchCurtailOption);\r\n\r\nexport const DefaultLatticeConfig: ILatticeOption = {\r\n arrayType: ELatticeArrayType.ByWidth,\r\n gripWidth: 100,\r\n gripDepth: 100,\r\n widthCount: 3,\r\n depthCount: 4,\r\n knifeRad: 3,\r\n thickness: 18,\r\n arcLen: 50,\r\n downDist: 0,\r\n space: 0.5,\r\n grooveAddWidth: 0,\r\n upSealed: 1,\r\n downSealed: 0,\r\n leftSealed: 0,\r\n rightSealed: 0,\r\n isAuto: true,\r\n isChange: true,\r\n isOpenCut: false,\r\n upCut: 0,\r\n downCut: 4,\r\n};\r\nObject.freeze(DefaultLatticeConfig);\r\n\r\nexport const DefaultNailOption: LayerNailOption = {\r\n version: 1,\r\n isDraw: true,\r\n addCount: 0,\r\n dist: 50,\r\n isGroup: false,\r\n isInBack: false,\r\n front: 50,\r\n behind: 50,\r\n count: 2,\r\n rad: 2.5,\r\n length: 34,\r\n depth: 11\r\n};\r\nObject.freeze(DefaultNailOption);\r\n\r\nexport const DefaultCylinederMetalsOption: ICylMetalsOption = {\r\n version: 2,\r\n rad: 50,\r\n height: 200,\r\n name: \"圆柱体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*R*R*3.14\",\r\n actualExpr: \"L*R*R*3.14*3\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n comments: \"\",\r\n isHole: true,\r\n};\r\nObject.freeze(DefaultCylinederMetalsOption);\r\nexport const DefaultExtruderMetalsOption: IExtMetalsOption = {\r\n version: 1,\r\n thickness: 100,\r\n knifeRad: 0,\r\n isHole: true,\r\n addLen: 0,\r\n name: \"拉伸实体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*W*H*100\",\r\n actualExpr: \"L*W*H*200\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n comments: \"\",\r\n};\r\nObject.freeze(DefaultExtruderMetalsOption);\r\nexport const DefaultCompositeMetalsOption: ICompHardwareOption = {\r\n version: 2,\r\n type: EMetalsType.Metals,\r\n isSplite: false,\r\n isSplitePrice: false,\r\n name: \"复合实体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*W*H*100\",\r\n actualExpr: \"L*W*H*300\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n color: \"\",\r\n material: \"\",\r\n comments: \"\",\r\n isHole: true,\r\n};\r\nObject.freeze(DefaultCompositeMetalsOption);\r\nexport const DefaultToplineMetalsOption: IToplineOption = {\r\n version: 3,\r\n name: \"顶线\",\r\n unit: \"毫米\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"\",\r\n actualExpr: \"\",\r\n model: \"\",\r\n factory: \"\",\r\n brand: \"\",\r\n spec: \"\",\r\n comments: \"\",\r\n addLen: \"0\",\r\n isHole: false,\r\n};\r\nObject.freeze(DefaultToplineMetalsOption);\r\n\r\nexport const DefaultBoardProcessOption: BoardProcessOption = {\r\n version: 3,\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n boardName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n drillType: \"\",\r\n composingFace: ComposingType.Arbitrary,\r\n highSealed: [],\r\n sealedUp: \"1\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n spliteHeight: \"\",\r\n spliteWidth: \"\",\r\n spliteThickness: \"\",\r\n highDrill: [],\r\n frontDrill: true,\r\n backDrill: true,\r\n remarks: [],\r\n useBoardProcessOption: true,\r\n};\r\nObject.freeze(DefaultBoardProcessOption);\r\n\r\nexport const DefaultCurve2RecOption: Curve2RecOption = {\r\n version: 1,\r\n isSaveMax: false,\r\n isSaveSmall: true,\r\n width: 90,\r\n isAnaly: true,\r\n gap: 3\r\n};\r\nObject.freeze(DefaultCurve2RecOption);\r\n\r\nexport const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {\r\n [EBoardKeyList.RoomName]: \"\",\r\n [EBoardKeyList.CabinetName]: \"\",\r\n [EBoardKeyList.Lines]: LinesType.Positive,\r\n [EBoardKeyList.BigHole]: FaceDirection.Front,\r\n [EBoardKeyList.DrillType]: \"\",\r\n [EBoardKeyList.ComposingFace]: ComposingType.Arbitrary,\r\n upDownDrill: [true, true],\r\n [EBoardKeyList.UpSealed]: \"1\",//封边上下左右\r\n [EBoardKeyList.DownSealed]: \"1\",\r\n [EBoardKeyList.LeftSealed]: \"1\",\r\n [EBoardKeyList.RightSealed]: \"1\",\r\n [EBoardKeyList.KnifeRad]: \"3\",\r\n remarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n [EBoardKeyList.BrMat]: \"\",\r\n [EBoardKeyList.Mat]: \"\",\r\n [EBoardKeyList.Color]: \"\",\r\n grooveAddDepth: \"0\",\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n highDrill: [],\r\n condition: {\r\n [EBoardKeyList.RoomName]: false,\r\n [EBoardKeyList.CabinetName]: false,\r\n [EBoardKeyList.Lines]: true,\r\n [EBoardKeyList.BigHole]: true,\r\n [EBoardKeyList.DrillType]: true,\r\n [EBoardKeyList.ComposingFace]: true,\r\n [EBoardKeyList.UpSealed]: true,\r\n [EBoardKeyList.DownSealed]: true,\r\n [EBoardKeyList.LeftSealed]: true,\r\n [EBoardKeyList.RightSealed]: true,\r\n useZhengFanDrill: true,\r\n remarks: true,\r\n [EBoardKeyList.KnifeRad]: true,\r\n [EBoardKeyList.Mat]: true,\r\n grooveAddDepth: true,\r\n grooveAddLength: true,\r\n grooveAddWidth: true,\r\n upDrill: true,\r\n downDrill: true,\r\n leftDrill: true,\r\n rightDrill: true,\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption = {\r\n count: 1,\r\n isHor: false,\r\n depth: 0,\r\n isDefault: true,\r\n leftDist: 0,\r\n rightDist: 0,\r\n};\r\nObject.freeze(DefaultKuGanOption);\r\n\r\nexport const DefaultR2bOption: IRec2BrOption = {\r\n version: 2,\r\n cabinetDeep: 400,\r\n cabinetBrThick: 18,\r\n cabinetCurtail: 0,\r\n backBrThick: 18,\r\n backBrBiggerThanHeight: 200,\r\n backBrBiggerThanWidth: 200,\r\n backBrFrontMove: 0,\r\n backBrLeftExtend: 0,\r\n backBrRightExtend: 0,\r\n backBrUpExtend: 0,\r\n backBrDownExtend: 0,\r\n verticalBrShrink: 0,\r\n layerBrShrink: 0,\r\n topBrShrink: 0,\r\n bottomBrShrink: 0,\r\n groundLineBrShrink: 0,\r\n farLeftVerticalBrName: \"左侧板\",\r\n farRightVerticalBrName: \"右侧板\",\r\n topMostLayerBrName: \"顶板\",\r\n bottomMostLayerBrName: \"底板\",\r\n bottomMostBackBrName: \"地脚线\",\r\n stripeBrName: \"收口条\",\r\n cabinetName: \"\",\r\n isfarLeftVerticalBrName: true,//最左侧立板名称\r\n isfarRightVerticalBrName: true,\r\n istopMostLayerBrName: true,\r\n isbottomMostLayerBrName: true,\r\n isbottomMostBackBrName: true,\r\n isstripeBrName: true,\r\n iscabinetName: false,//修改柜名\r\n isMultiBackBr: false,\r\n grooveOption: {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n },\r\n roomName: \"\",\r\n boardMatName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n drillType: \"\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n sealedUp: \"1\",\r\n backBrUseTemplate: false,\r\n backBrTemplate: null,\r\n remarks: Array.from({ length: 12 }, () => [\"\", \"\"]),\r\n maxThickness: 20,\r\n useBrName: true,\r\n configName: \"\",\r\n backBrName: \"背板\",\r\n behindIsRelative: false,\r\n footerThickness: 18,\r\n};\r\nObject.freeze(DefaultR2bOption);\r\n","export function equaln(v1: number, v2: number, fuzz = 1e-5)\r\n{\r\n return Math.abs(v1 - v2) <= fuzz;\r\n}\r\n\r\nexport function FixIndex(index: number, arr: Array | number)\r\n{\r\n let count = (arr instanceof Array) ? arr.length : arr;\r\n if (index < 0)\r\n return count + index;\r\n else if (index >= count)\r\n return index - count;\r\n else\r\n return index;\r\n}\r\n\r\n/**\r\n * @param compart 如果t2大于t1那么返回t2\r\n * @returns 索引\r\n */\r\nexport function Max(arr: T[], compart: (t1: T, t2: T) => boolean): number\r\n{\r\n let best: T = arr[0];\r\n let bestIndex = 0;\r\n for (let i = 1; i < arr.length; i++)\r\n {\r\n let t1 = arr[i];\r\n if (compart(best, t1))\r\n {\r\n best = t1;\r\n bestIndex = i;\r\n }\r\n }\r\n return bestIndex;\r\n}\r\n","import { Face3, Geometry, Line3, Matrix4, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector3, equalv3 } from \"./GeUtils\";\r\nimport { PlaneExt } from \"./Plane\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\n\r\n/**\r\n * 使用轮廓和扫描路径构建扫描几何体,实现衣柜中的顶线或者地脚线之类的实体.\r\n * 该几何体需要轮廓和路径的起始截面垂直,否则构造的实体将会错误.\r\n */\r\nexport class SweepGeometry extends Geometry\r\n{\r\n edgePts: number[] = [];\r\n constructor(contour: Polyline, path: Curve)\r\n {\r\n super();\r\n\r\n this.AddShape(contour, path);\r\n this.computeVertexNormals();\r\n this.computeFaceNormals();\r\n }\r\n\r\n AddShape(contour: Polyline, path: Curve)\r\n {\r\n //路径点表\r\n let pathPts2d = path.Shape.getPoints(8);\r\n let pathPts = pathPts2d.map(AsVector3);\r\n arrayRemoveDuplicateBySort(pathPts, equalv3);\r\n for (let p of pathPts)\r\n p.applyMatrix4(path.OCS);\r\n\r\n let shapePts2d = contour.Shape.getPoints(3);\r\n if (!ShapeUtils.isClockWise(shapePts2d)) shapePts2d.reverse();\r\n\r\n //轮廓点表\r\n let shapePts3d = shapePts2d.map(AsVector3);\r\n\r\n for (let p of shapePts3d)\r\n p.applyMatrix4(contour.OCS);\r\n\r\n let isClosePath = path.IsClose;\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[0], pathPts[pathPts.length - 2], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[0], undefined, pathPts[1]));\r\n //遍历所有的路径节点进行顶点投射\r\n for (let i = 1; i < pathPts.length; i++)\r\n {\r\n if (i === pathPts.length - 1)\r\n {\r\n if (isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n private BuildSideFaces(shapePts2d: Vector2[], pathPts2d: Vector2[], pathPts: Vector3[], verts: Vector3[][])\r\n {\r\n let addCount = 0; //补充个数\r\n shapePts2d[0][\"_mask_\"] = true;\r\n for (let p of shapePts2d) if (p[\"_mask_\"]) addCount++;\r\n let sumCount = addCount + shapePts2d.length; //实际个数\r\n const f4 = (a: number, b: number, c: number, d: number, uvs: Vector2[]) =>\r\n {\r\n let f1 = new Face3(a, b, c);\r\n let f2 = new Face3(b, d, c);\r\n this.faces.push(f1, f2);\r\n this.faceVertexUvs[0].push([uvs[0].clone(), uvs[1].clone(), uvs[2].clone()], [uvs[1].clone(), uvs[3].clone(), uvs[2].clone()]);\r\n };\r\n let vs: number[] = [0]; //vs 对应 y轴\r\n for (let i = 1; i < shapePts2d.length; i++)\r\n vs.push((vs[i - 1] + shapePts2d[i].distanceTo(shapePts2d[i - 1]) * 1e-3));\r\n\r\n let lastStartX = 0;\r\n for (let pathIndex = 0; pathIndex < verts.length; pathIndex++)\r\n {\r\n let pts = verts[pathIndex];\r\n let pts2 = verts[FixIndex(pathIndex + 1, verts)];\r\n\r\n let startIndex = this.vertices.length;\r\n let pBase = pts[0];\r\n let p1 = pathPts[pathIndex];\r\n let p2 = pathPts[FixIndex(pathIndex + 1, pathPts.length)];\r\n let p1Dir = p2.clone().sub(p1).normalize();\r\n\r\n let tempStartX = 0;\r\n\r\n for (let contourIndex = 0; contourIndex < shapePts2d.length; contourIndex++)\r\n {\r\n let p1 = pts[contourIndex];\r\n let p2 = pts2[contourIndex];\r\n let p2d = shapePts2d[contourIndex];\r\n\r\n if (pathIndex !== verts.length - 1)\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.edgePts.push(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z);\r\n\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.vertices.push(p1); //补点\r\n\r\n if (pathIndex !== verts.length - 1)\r\n {\r\n let curIndex = this.vertices.length;\r\n let nextIndex = startIndex + FixIndex(curIndex - startIndex + 1, sumCount);\r\n let curIndex2 = curIndex + sumCount;\r\n let nextIndex2 = nextIndex + sumCount;\r\n\r\n let x1 = lastStartX + p1.clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n let x2 = lastStartX + pts[FixIndex(contourIndex + 1, shapePts2d)].clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n\r\n let x3 = lastStartX + p2.clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n let x4 = lastStartX + pts2[FixIndex(contourIndex + 1, shapePts2d)].clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n\r\n if (contourIndex === 0)\r\n tempStartX = x3;\r\n\r\n let v1 = vs[contourIndex];\r\n let v2 = vs[FixIndex(contourIndex + 1, vs)];\r\n let uvs = [\r\n new Vector2(v1, x1),\r\n new Vector2(v2, x2),\r\n new Vector2(v1, x3),\r\n new Vector2(v2, x4),\r\n ];\r\n f4(curIndex, nextIndex, curIndex2, nextIndex2, uvs);\r\n }\r\n this.vertices.push(p1);\r\n }\r\n lastStartX = tempStartX;\r\n\r\n if (pathPts2d[FixIndex(pathIndex + 1, verts)][\"_mask_\"])\r\n {\r\n for (let contourIndex = 0; contourIndex < shapePts2d.length; contourIndex++)\r\n {\r\n let p1 = pts2[contourIndex];\r\n let p2d = shapePts2d[contourIndex];\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.vertices.push(p1); //补点\r\n this.vertices.push(p1);\r\n\r\n let p2 = pts2[FixIndex(contourIndex + 1, pts2)];\r\n this.edgePts.push(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private BuildLid(shapePts2d: Vector2[], verts: Vector3[][])\r\n {\r\n //轮廓三角网格索引\r\n let faces = ShapeUtils.triangulateShape(shapePts2d, []);\r\n for (let v of shapePts2d) v.multiplyScalar(1e-3);//作为uvs\r\n let lastIndex = this.vertices.length;\r\n this.vertices.push(...verts[0].map(p => p.clone()));\r\n this.vertices.push(...verts[verts.length - 1].map(p => p.clone()));\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n this.faces.push(new Face3(lastIndex + a, lastIndex + b, lastIndex + c));\r\n let uvs = faces[i].map(index => shapePts2d[index].clone());\r\n this.faceVertexUvs[0].push(uvs);\r\n this.faces.push(new Face3(lastIndex + verts[0].length + c, lastIndex + verts[0].length + b, lastIndex + verts[0].length + a));\r\n this.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n\r\n //构建线框\r\n for (let i = 0; i < shapePts2d.length; i++)\r\n {\r\n let nextIndex = FixIndex(i + 1, shapePts2d);\r\n\r\n let pts1 = verts[0];\r\n let p0 = pts1[i];\r\n let p1 = pts1[nextIndex];\r\n this.edgePts.push(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z);\r\n\r\n let pts2 = verts[verts.length - 1];\r\n p0 = pts2[i];\r\n p1 = pts2[nextIndex];\r\n this.edgePts.push(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 将轮廓变换到`路径上某个点`.\r\n *\r\n * @param {Vector3[]} contourPts 原始的轮廓点(在世界坐标系)\r\n * @param {Vector3} normal 路径法向量\r\n * @param {Vector3} curP 路径上当前点\r\n * @param {Vector3} [preP] 路径的前一个点\r\n * @param {Vector3} [nextP] 路径下一个点\r\n * @returns 变换后的轮廓点表\r\n */\r\nfunction ProjectionToPlane(contourPts: Vector3[], normal: Vector3, curP: Vector3, preP?: Vector3, nextP?: Vector3): Vector3[]\r\n{\r\n let pts: Vector3[];\r\n if (!preP && nextP)\r\n {\r\n let mat = ContourTransfromToPath(curP, normal, nextP.clone().sub(curP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n }\r\n else if (!nextP && preP)\r\n {\r\n let mat = ContourTransfromToPath(curP, normal, curP.clone().sub(preP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n }\r\n else if (nextP && preP)\r\n {\r\n let dir = curP.clone().sub(preP).normalize();\r\n let v2 = nextP.clone().sub(curP).normalize();\r\n //角平分线向量\r\n let v = dir.clone().sub(v2);\r\n //v1v2pm向量\r\n let nv1v2 = dir.clone().cross(v2);\r\n let norm = nv1v2.cross(v);\r\n\r\n //角平分线的平面\r\n let plane = new PlaneExt(norm, curP);\r\n\r\n let mat = ContourTransfromToPath(preP, normal, dir);\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n pts = pts.map(p => plane.intersectLine(new Line3(p, p.clone().add(dir)), new Vector3(), true));\r\n }\r\n return pts;\r\n}\r\n\r\n/**\r\n * 计算轮廓变换到`路径上某个点`的矩阵\r\n *\r\n * @param {Vector3} pt 路径上的点\r\n * @param {Vector3} norm 曲线法向量\r\n * @param {Vector3} dir 点前进的方向.\r\n * @returns {Matrix4}\r\n */\r\nfunction ContourTransfromToPath(pt: Vector3, norm: Vector3, dir: Vector3): Matrix4\r\n{\r\n let vy = norm;\r\n let vz = dir.normalize();\r\n let vx = vz.clone().cross(vy);\r\n\r\n let mat = new Matrix4();\r\n mat.makeBasis(vx, vy, vz);\r\n mat.setPosition(pt);\r\n return mat;\r\n}\r\n","import { BufferGeometry, CatmullRomCurve3, Line, MathUtils, Matrix3, Object3D, Shape, Vector3 } from 'three';\r\nimport { arrayLast } from '../Common/ArrayExt';\r\nimport { ColorMaterial } from '../Common/ColorPalette';\r\nimport { Pts2Polyline } from '../Common/CurveUtils';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../Geometry/BufferGeometryUtils';\r\nimport { equalv3 } from '../Geometry/GeUtils';\r\nimport { RenderType } from '../GraphicsSystem/RenderType';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Curve } from './Entity/Curve';\r\n\r\n@Factory\r\nexport class Spline extends Curve\r\n{\r\n private _PointList: Vector3[];\r\n private _ClosedMark: boolean = false;\r\n constructor(points?: Vector3[])\r\n {\r\n super();\r\n this._PointList = points || [];\r\n }\r\n\r\n get Shape()\r\n {\r\n return new Shape();\r\n }\r\n get Curve3()\r\n {\r\n return new CatmullRomCurve3(this.Points);\r\n }\r\n\r\n get Length()\r\n {\r\n return this.Curve3.getLength();\r\n }\r\n\r\n get Points()\r\n {\r\n return this._PointList;\r\n }\r\n set Points(v: Vector3[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._PointList = v.map(p => p.clone().applyMatrix4(this.OCSInv));\r\n this.Update();\r\n }\r\n //闭合标志\r\n get CloseMark(): boolean\r\n {\r\n return this._ClosedMark;\r\n }\r\n //曲线是否闭合\r\n get IsClose(): boolean\r\n {\r\n return this.CloseMark || (equalv3(this.StartPoint, this.EndPoint, 1e-4)) && this.EndParam > 1;\r\n }\r\n set CloseMark(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = v;\r\n this.Update();\r\n }\r\n get StartPoint()\r\n {\r\n return this._PointList[0];\r\n }\r\n get EndPoint()\r\n {\r\n return arrayLast(this._PointList);\r\n }\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return this._PointList.length - 1;\r\n }\r\n GetGripPoints()\r\n {\r\n return this._PointList.map(p => p.clone().applyMatrix4(this.OCS));\r\n }\r\n GetStretchPoints()\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n this._PointList[index].add(vec);\r\n }\r\n this.Update();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n this._PointList[index].add(vec);\r\n }\r\n this.Update();\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let geometry = new BufferGeometry().setFromPoints(this.Curve3.getPoints(60));\r\n return new Line(geometry, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let spl = en as Line;\r\n if (this.CloseMark && !equalv3(this._PointList[0], arrayLast(this._PointList)))\r\n this._PointList.push(this._PointList[0].clone());\r\n let curve = this.Curve3;\r\n\r\n let pts = curve.getPoints(this.Points.length * 10);\r\n if (!BufferGeometryUtils.UpdatePts(spl.geometry as BufferGeometry, pts))\r\n {\r\n spl.geometry.dispose();\r\n spl.geometry = BufferGeometryUtils.CreateFromPts(pts);\r\n }\r\n }\r\n Convert2Polyline(count = 0)\r\n {\r\n let curve3 = this.Curve3;\r\n\r\n //修正个数\r\n if (!count) count = Math.floor(curve3.getLength() / 30);\r\n count = MathUtils.clamp(count, this._PointList.length * 5, this._PointList.length * 20);\r\n\r\n if ((count & 1) === 1)\r\n count++;\r\n\r\n let pts = curve3.getPoints(count);\r\n\r\n let isClose = this.IsClose;\r\n if (isClose) pts.pop();\r\n\r\n let pl = Pts2Polyline(pts, isClose);\r\n pl.CloseMark = isClose;\r\n pl.ApplyMatrix(this.OCS);\r\n return pl;\r\n\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n let count = file.Read();\r\n this._PointList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this._PointList.push(new Vector3().fromArray(file.Read()));\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.Write(this._PointList.length);\r\n this._PointList.forEach(p => file.Write(p.toArray()));\r\n }\r\n}\r\n","import { Vector3, Matrix4 } from 'three';\r\n\r\n// Quote from:\r\n// https://github.com/Mugen87/yume/blob/master/src/javascript/engine/etc/OBB.js\r\n// 即obb.js(本项目中已存在)\r\n\r\n// Reference material:\r\n//https://stackoverflow.com/questions/28499800/oriented-box-intersection-in-threejs\r\n//http://www.cnblogs.com/iamzhanglei/archive/2012/06/07/2539751.html\r\n//https://github.com/Mugen87/yume/blob/master/src/javascript/engine/etc/OBB.js\r\n\r\nexport class OBB\r\n{\r\n _EPSILON = 1e-3;\r\n\r\n public center: Vector3;\r\n\r\n constructor(public ocs: Matrix4, public halfSizes: Vector3)\r\n {\r\n this.center = halfSizes.clone().applyMatrix4(ocs);\r\n }\r\n\r\n intersectsOBB(obb: OBB, is2D?: boolean, ucsInv?: Matrix4): boolean\r\n {\r\n let newCenter: Vector3;\r\n let newObbCenter: Vector3;\r\n let cs: Matrix4;\r\n let obbcs: Matrix4;\r\n if (is2D)\r\n {\r\n let mtx1 = new Matrix4().multiplyMatrices(ucsInv, this.ocs);\r\n let mtx2 = new Matrix4().multiplyMatrices(ucsInv, obb.ocs);\r\n cs = mtx1;\r\n obbcs = mtx2;\r\n cs.elements[14] = 0;\r\n obbcs.elements[14] = 0;\r\n newCenter = this.halfSizes.clone().applyMatrix4(cs);\r\n newObbCenter = obb.halfSizes.clone().applyMatrix4(obbcs);\r\n }\r\n let xAxisA = new Vector3();\r\n let yAxisA = new Vector3();\r\n let zAxisA = new Vector3();\r\n\r\n let xAxisB = new Vector3();\r\n let yAxisB = new Vector3();\r\n let zAxisB = new Vector3();\r\n\r\n let translation = new Vector3();\r\n\r\n let vector = new Vector3();\r\n\r\n let axisA: Vector3[] = [];\r\n let axisB: Vector3[] = [];\r\n let rotationMatrix = [[], [], []];\r\n let rotationMatrixAbs = [[], [], []];\r\n\r\n let halfSizeA: number, halfSizeB: number;\r\n let t: number, i: number;\r\n\r\n // extract each axis\r\n (cs ?? this.ocs).extractBasis(xAxisA, yAxisA, zAxisA);\r\n (obbcs ?? obb.ocs).extractBasis(xAxisB, yAxisB, zAxisB);\r\n\r\n // push basis vectors into arrays, so you can access them via indices\r\n axisA.push(xAxisA, yAxisA, zAxisA);\r\n axisB.push(xAxisB, yAxisB, zAxisB);\r\n\r\n // get displacement vector\r\n vector.subVectors(newObbCenter ?? obb.center, newCenter ?? this.center);\r\n\r\n // express the translation vector in the coordinate frame of the current\r\n // OBB (this)\r\n for (i = 0; i < 3; i++)\r\n {\r\n translation.setComponent(i, vector.dot(axisA[i]));\r\n }\r\n\r\n // generate a rotation matrix that transforms from world space to the\r\n // OBB's coordinate space\r\n for (i = 0; i < 3; i++)\r\n {\r\n for (let j = 0; j < 3; j++)\r\n {\r\n rotationMatrix[i][j] = axisA[i].dot(axisB[j]);\r\n rotationMatrixAbs[i][j] = Math.abs(rotationMatrix[i][j]) + this._EPSILON;\r\n }\r\n }\r\n\r\n // test the three major axes of this OBB\r\n for (i = 0; i < 3; i++)\r\n {\r\n vector.set(rotationMatrixAbs[i][0], rotationMatrixAbs[i][1], rotationMatrixAbs[i][2]);\r\n\r\n halfSizeA = this.halfSizes.getComponent(i);\r\n halfSizeB = obb.halfSizes.dot(vector);\r\n\r\n if (Math.abs(translation.getComponent(i)) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n // test the three major axes of other OBB\r\n for (i = 0; i < 3; i++)\r\n {\r\n vector.set(rotationMatrixAbs[0][i], rotationMatrixAbs[1][i], rotationMatrixAbs[2][i]);\r\n\r\n halfSizeA = this.halfSizes.dot(vector);\r\n halfSizeB = obb.halfSizes.getComponent(i);\r\n\r\n vector.set(rotationMatrix[0][i], rotationMatrix[1][i], rotationMatrix[2][i]);\r\n t = translation.dot(vector);\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n // test the 9 different cross-axes\r\n\r\n // A.x B.x\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][0] + this.halfSizes.z * rotationMatrixAbs[1][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[0][2] + obb.halfSizes.z * rotationMatrixAbs[0][1];\r\n\r\n t = translation.z * rotationMatrix[1][0] - translation.y * rotationMatrix[2][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.x < cross> B.y\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][1] + this.halfSizes.z * rotationMatrixAbs[1][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[0][2] + obb.halfSizes.z * rotationMatrixAbs[0][0];\r\n\r\n t = translation.z * rotationMatrix[1][1] - translation.y * rotationMatrix[2][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.x B.z\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][2] + this.halfSizes.z * rotationMatrixAbs[1][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[0][1] + obb.halfSizes.y * rotationMatrixAbs[0][0];\r\n\r\n t = translation.z * rotationMatrix[1][2] - translation.y * rotationMatrix[2][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.x\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][0] + this.halfSizes.z * rotationMatrixAbs[0][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[1][2] + obb.halfSizes.z * rotationMatrixAbs[1][1];\r\n\r\n t = translation.x * rotationMatrix[2][0] - translation.z * rotationMatrix[0][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.y\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][1] + this.halfSizes.z * rotationMatrixAbs[0][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[1][2] + obb.halfSizes.z * rotationMatrixAbs[1][0];\r\n\r\n t = translation.x * rotationMatrix[2][1] - translation.z * rotationMatrix[0][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.z\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][2] + this.halfSizes.z * rotationMatrixAbs[0][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[1][1] + obb.halfSizes.y * rotationMatrixAbs[1][0];\r\n\r\n t = translation.x * rotationMatrix[2][2] - translation.z * rotationMatrix[0][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.x\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][0] + this.halfSizes.y * rotationMatrixAbs[0][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[2][2] + obb.halfSizes.z * rotationMatrixAbs[2][1];\r\n\r\n t = translation.y * rotationMatrix[0][0] - translation.x * rotationMatrix[1][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.y\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][1] + this.halfSizes.y * rotationMatrixAbs[0][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[2][2] + obb.halfSizes.z * rotationMatrixAbs[2][0];\r\n\r\n t = translation.y * rotationMatrix[0][1] - translation.x * rotationMatrix[1][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.z\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][2] + this.halfSizes.y * rotationMatrixAbs[0][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[2][1] + obb.halfSizes.y * rotationMatrixAbs[2][0];\r\n\r\n t = translation.y * rotationMatrix[0][2] - translation.x * rotationMatrix[1][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // no separating axis exists, so the two OBB don't intersect\r\n return true;\r\n }\r\n\r\n // setFromObject(obj: THREE.Mesh): OBB;\r\n // setFromAABB(aabb: THREE.Box3): OBB;\r\n\r\n // setFromSphere(sphere: THREE.Shape): OBB;\r\n\r\n // closestPoint(point: THREE.Vector3): THREE.Vector3\r\n // isPointContained(point: THREE.Vector3): boolean\r\n // isAABBContained(aabb: THREE.Box3): boolean\r\n // isLineContained(line: THREE.Line3): boolean\r\n // isTriangleContained(tarianlg: THREE.Triangle): boolean\r\n // intersectsAABB(box: THREE.Box3): boolean\r\n // intersectsSphere(sphere: THREE.Sphere): boolean\r\n // intersectsOBB(box: OBB): boolean;\r\n // intersectsPlane(plane: Plane): boolean\r\n // intersectsRay(ray: Ray): boolean\r\n // intersectRay(ray: Ray): Vector3\r\n // intersectSphere(sphere: Sphere): Vector3\r\n // size(optionalTarget: Vector3): Vector3\r\n\r\n // translate(offset: Vector3): OBB\r\n\r\n // copy(obb: OBB): OBB\r\n // clone(obb: OBB): OBB\r\n\r\n}\r\n","import { BoxBufferGeometry, BufferGeometry, Float32BufferAttribute, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, Line3, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { Log } from \"../../Common/Log\";\r\nimport { tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equalv3, isParallelTo, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { SweepGeometry } from '../../Geometry/SweepGeometry';\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from '../Entity/Polyline';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Spline } from \"../Spline\";\r\nimport { FixIndex } from './../../Common/Utils';\r\nimport { OBB } from './../../Geometry/OBB/obb';\r\nimport { PlaneExt } from './../../Geometry/Plane';\r\n\r\n@Factory\r\nexport class SweepSolid extends Entity\r\n{\r\n static UseRectFakerContour = false;\r\n\r\n private _Contour: Polyline;\r\n private _PathCurve: Curve;\r\n constructor(contour?: Polyline, pathCurve?: Curve)\r\n {\r\n super();\r\n this._Contour = contour;\r\n this._PathCurve = pathCurve;\r\n\r\n if (this._Contour && this._Contour.Id)\r\n this._Contour = this._Contour.Clone();\r\n\r\n if (this._Contour && this._PathCurve)\r\n {\r\n this.TransfromPathToWCS();\r\n this.OCS = this._PathCurve.OCS;\r\n this._SpaceOCS.copy(this._PathCurve.OCS);\r\n this._PathCurve.ApplyMatrix(this._PathCurve.OCSInv);\r\n }\r\n }\r\n\r\n Explode()\r\n {\r\n return [this._Contour.Clone(), this._PathCurve.Clone()];\r\n }\r\n\r\n get Contour()\r\n {\r\n return this._Contour;\r\n }\r\n get Path()\r\n {\r\n return this._PathCurve;\r\n }\r\n Reverse()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._PathCurve.Reverse();\r\n this.Update();\r\n }\r\n /**保持路径左下角在0点 */\r\n private PathTo0()\r\n {\r\n let min = this._PathCurve.BoundingBox.min;\r\n this._PathCurve.Position = this._PathCurve.Position.sub(min);\r\n this.OCS = this.OCS.multiply(MoveMatrix(min));\r\n }\r\n /**\r\n * 将轮廓变换到wcs空间,当用户选定某个与扫描线起点相切的轮廓时.\r\n */\r\n private TransfromPathToWCS()\r\n {\r\n if (equalv3(this._Contour.Normal, new Vector3(0, 0, 1)))\r\n return;\r\n\r\n let fDir = this._PathCurve.GetFistDeriv(0);\r\n if (isParallelTo(fDir, this._Contour.Normal))\r\n {\r\n //构建回家的矩阵\r\n let toWcsMat4Inv = new Matrix4();\r\n let zv = fDir.normalize();\r\n let yv = this._PathCurve.Normal;\r\n let xv = zv.clone().cross(yv);\r\n\r\n toWcsMat4Inv.makeBasis(xv, yv, zv);\r\n toWcsMat4Inv.setPosition(this._PathCurve.StartPoint);\r\n\r\n let toWcsMat4 = new Matrix4().getInverse(toWcsMat4Inv);\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n\r\n let z = this._Contour.StartPoint.z;\r\n if (IsPointInPolyLine(this._Contour, new Vector3(0, 0, z)))\r\n {\r\n let z = this._Contour.StartPoint.z;\r\n this._Contour.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -z)));\r\n return;\r\n }\r\n else\r\n this._Contour.ApplyMatrix(toWcsMat4Inv);\r\n }\r\n\r\n let lDir = this._PathCurve.GetFistDeriv(this._PathCurve.EndParam);\r\n if (isParallelTo(lDir, this._Contour.Normal))\r\n {\r\n //再次构建回家的矩阵\r\n let toWcsMat4Inv = new Matrix4();\r\n let zv = lDir.negate().normalize();\r\n let yv = this._PathCurve.Normal;\r\n let xv = zv.clone().cross(yv);\r\n\r\n toWcsMat4Inv.makeBasis(xv, yv, zv);\r\n toWcsMat4Inv.setPosition(this._PathCurve.EndPoint);\r\n\r\n let toWcsMat4 = new Matrix4().getInverse(toWcsMat4Inv);\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n\r\n let z = this._Contour.StartPoint.z;\r\n if (IsPointInPolyLine(this._Contour, new Vector3(0, 0, z)))\r\n {\r\n let z = this._Contour.StartPoint.z;\r\n this._Contour.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -z)));\r\n\r\n this._PathCurve.Reverse();\r\n return;\r\n }\r\n else\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n }\r\n Log(\"错误:提供的轮廓没有和路径垂直!\");\r\n }\r\n private _MeshGeometry: SweepGeometry;\r\n private _lineGeo: LineGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n try\r\n {\r\n let contour = this._Contour;\r\n if (SweepSolid.UseRectFakerContour && contour.EndParam > 10)\r\n {\r\n let box = contour.BoundingBox;\r\n contour = new Polyline().RectangleFrom2Pt(box.min, box.max);\r\n }\r\n\r\n this._MeshGeometry = new SweepGeometry(contour, this._PathCurve);\r\n this._EdgeGeometry = new BufferGeometry().setAttribute('position', new Float32BufferAttribute(this._MeshGeometry.edgePts, 3));\r\n this.getLineGeo(this._MeshGeometry.edgePts);\r\n this._MeshGeometry.edgePts = undefined;\r\n return this._MeshGeometry;\r\n }\r\n catch (error)\r\n {\r\n return new BoxBufferGeometry(1000, 1000, 1000);\r\n }\r\n }\r\n getLineGeo(pts: number[])\r\n {\r\n this._lineGeo = new LineGeometry();\r\n let lineSegments = new Float32Array(pts);\r\n var instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n this._lineGeo.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n this._lineGeo.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n }\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n return new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n else if (renderType === RenderType.Print)\r\n {\r\n let mat2 = ColorMaterial.GetPrintConceptualMaterial();\r\n let meshGeo = this.MeshGeometry;\r\n let mesh = new Mesh(meshGeo, mat2);\r\n let line = new Line2(this._lineGeo, ColorMaterial.PrintLineMatrial);\r\n return new Object3D().add(line, mesh);\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(this._PathCurve.DrawObject);\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, this.MeshMaterial),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n Object3DRemoveAll(obj);\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n Object3DRemoveAll(obj);\r\n obj.add((this._PathCurve.DrawObject));\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n Object3DRemoveAll(obj);\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, this.MeshMaterial),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D)\r\n {\r\n if (type === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Physical2)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n if (!this.MeshGeometry.boundingBox)\r\n this.MeshGeometry.computeBoundingBox();\r\n\r\n return this.MeshGeometry.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\r\n get OBB(): OBB\r\n {\r\n let box = this.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n return new OBB(MoveMatrix(box.min), size.multiplyScalar(0.5));\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetEndPoint();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this._PathCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n if (snapMode === ObjectSnapMode.Mid)\r\n return [...pts, ...this.GetMidPoints()];\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n let pts = this._PathCurve.GetGripPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n GetStretchPoints()\r\n {\r\n let pts = this._PathCurve.GetStretchPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n private UpdateEndMtx(dir: Vector3, pos: Vector3)\r\n {\r\n let y = this.Normal;\r\n let roMat = new Matrix4().extractRotation(this.OCS);\r\n let z = dir.applyMatrix4(roMat);\r\n let x = z.clone().cross(y);\r\n tempMatrix1.makeBasis(x, y, z);\r\n tempMatrix1.setPosition(pos.applyMatrix4(this.OCS));\r\n }\r\n private GetEndPoint()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n let cus: Curve[];\r\n if (this._PathCurve instanceof Polyline)\r\n cus = this._PathCurve.Explode() as Curve[];\r\n else\r\n cus = [this._PathCurve];\r\n\r\n let roMat = new Matrix4().extractRotation(this.OCS);\r\n\r\n const pts: Vector3[] = [];\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let l1 = cus[i];\r\n let l2: Curve;\r\n if (this._PathCurve.IsClose)\r\n {\r\n l2 = cus[FixIndex(i + 1, cus.length)];\r\n }\r\n else\r\n {\r\n l2 = cus[i + 1];\r\n if (i === 0)\r\n {\r\n this.UpdateEndMtx(l1.GetFistDeriv(0).normalize(), l1.StartPoint);\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n }\r\n\r\n let p = l1.EndPoint;\r\n let d1 = l1.GetFistDeriv(1).normalize();\r\n this.UpdateEndMtx(d1.clone(), p);\r\n\r\n if (l2)\r\n {\r\n let d2 = l2.GetFistDeriv(0).normalize().applyMatrix4(roMat);\r\n d1.applyMatrix4(roMat);\r\n d2.add(d1).normalize();\r\n if (isParallelTo(d1, d2))\r\n {\r\n if (l1 instanceof Line && l2 instanceof Line)\r\n {\r\n }\r\n else\r\n {\r\n let ps = conPts.map(p => p.clone().applyMatrix4(tempMatrix1));\r\n pts.push(...ps);\r\n }\r\n continue;\r\n }\r\n p.copy(l1.EndPoint);\r\n //角平分线的平面;\r\n let plane = new PlaneExt(d2, p.applyMatrix4(this.OCS));\r\n let ps = conPts.map(p => p.clone().applyMatrix4(tempMatrix1));\r\n pts.push(...ps.map(p => plane.intersectLine(new Line3(p.clone().sub(d1.clone().multiplyScalar(-100)), p.clone().add(d1)), new Vector3(), true)));\r\n }\r\n else\r\n {\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n }\r\n return pts;\r\n }\r\n private GetMidPoints()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n const pts: Vector3[] = [];\r\n\r\n for (let i = 0.5; i < this._PathCurve.EndParam; i++)\r\n {\r\n let p = this._PathCurve.GetPointAtParam(i);\r\n let d1 = this._PathCurve.GetFistDeriv(i).normalize();\r\n this.UpdateEndMtx(d1, p);\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n return pts;\r\n\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this.IfPathIsLineThenZ0Vector(vec);\r\n\r\n this._PathCurve.MoveGripPoints(indexList,\r\n vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n this.Update();\r\n }\r\n\r\n //如果路径是直线,我们在这里避免vec传递z轴信息\r\n private IfPathIsLineThenZ0Vector(vec: Vector3)\r\n {\r\n if (this._PathCurve instanceof Line)\r\n {\r\n let ocsinv = this._PathCurve.OCSInv.setPosition(0, 0, 0);\r\n vec.applyMatrix4(ocsinv).setZ(0);\r\n vec.applyMatrix4(this._PathCurve.OCSNoClone);\r\n }\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this.IfPathIsLineThenZ0Vector(vec);\r\n\r\n this._PathCurve.MoveStretchPoints(indexList,\r\n vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._Contour = file.ReadObject() as Polyline;\r\n this._PathCurve = file.ReadObject() as Curve;\r\n\r\n if (this._Contour instanceof Spline || this._PathCurve instanceof Spline)\r\n {\r\n this._isErase = true;\r\n Log(\"放样实体是样条线生成的,自动删除它!\");\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.WriteObject(this._Contour);\r\n file.WriteObject(this._PathCurve);\r\n }\r\n}\r\n","import { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { DefaultToplineMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { Matrix4 } from \"three\";\r\nimport { SweepSolid } from '../3DSolid/SweepSolid';\r\nimport { GetPointAtCurveDir } from \"../../Common/CurveUtils\";\r\nimport { ZAxis, isPerpendicularityTo, equalv3, rotatePoint, equaln } from \"../../Geometry/GeUtils\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\n\r\n@Factory\r\nexport class HardwareTopline extends SweepSolid\r\n{\r\n @AutoRecord HardwareOption = { ...DefaultToplineMetalsOption };\r\n @AutoRecord DataList: [string, string][] = [];\r\n private _contourRotation = 0;\r\n get ContourRotation()\r\n {\r\n return this._contourRotation;\r\n }\r\n private _ContourWidth: number;\r\n private get Contours()\r\n {\r\n let c = this.Path;\r\n let conBox = this.Contour.BoundingBox;\r\n let cMin = conBox.min;\r\n let cMax = conBox.max;\r\n let y = ZAxis;\r\n let z = c.GetFistDeriv(0).normalize();\r\n let x = z.clone().cross(y);\r\n let mat = new Matrix4().makeBasis(x, y, z);\r\n mat.setPosition(c.StartPoint);\r\n [cMin, cMax].forEach(p => p.applyMatrix4(mat).setZ(0));\r\n\r\n let firstCurve: Curve;\r\n if (c instanceof Polyline)\r\n firstCurve = c.GetCurveAtParam(0);\r\n else\r\n firstCurve = c;\r\n\r\n let closePt = firstCurve.GetClosestPointTo(cMin, false);\r\n let offset = cMin.distanceTo(closePt);\r\n let dir = GetPointAtCurveDir(firstCurve, cMin);\r\n let cus = this.Path.GetOffsetCurves(offset * dir);\r\n let l1 = cus[0] ?? this.Path.Clone();\r\n\r\n closePt = firstCurve.GetClosestPointTo(cMax, false);\r\n let offset2 = cMax.distanceTo(closePt);\r\n dir = GetPointAtCurveDir(firstCurve, cMax);\r\n cus = this.Path.GetOffsetCurves(offset2 * dir);\r\n let l2 = cus[0] ?? this.Path.Clone();\r\n\r\n this._ContourWidth = offset + offset2;\r\n return [l1, l2];\r\n }\r\n /**\r\n *延伸取最大最小轮廓每段首尾到前面线段,取最长线段作为分段长\r\n *\r\n */\r\n get Segmentations()\r\n {\r\n const [l1, l2] = this.Contours;\r\n if (!(l1 instanceof Polyline))\r\n return [l1];\r\n\r\n let cus1 = l1.Explode() as Curve[];\r\n let cus2 = l2.Explode() as Curve[];\r\n\r\n [cus1, cus2] = cus1.length < cus2.length ? [cus2, cus1] : [cus1, cus2];\r\n\r\n let sgs: Curve[] = [];\r\n\r\n const AddSgs = (c1: Curve, c2: Curve) =>\r\n {\r\n sgs.push(c1.Length > c2.Length ? c1 : c2);\r\n };\r\n\r\n const ExtendCurve = (c: Curve, refC: Curve, isPre) =>\r\n {\r\n let pts = c.IntersectWith2(refC, IntersectOption.ExtendBoth).filter(r =>\r\n {\r\n if (isPre)\r\n return r.thisParam < 0;\r\n else\r\n return r.thisParam > 1;\r\n });\r\n if (isPre)\r\n {\r\n pts.sort((r1, r2) => r2.thisParam - r1.thisParam);\r\n if (pts.length > 0 && pts[0].thisParam < 0)\r\n c.Extend(pts[0].thisParam);\r\n }\r\n else\r\n {\r\n pts.sort((r1, r2) => r1.thisParam - r2.thisParam);\r\n if (pts.length > 0 && pts[0].thisParam > 1)\r\n c.Extend(pts[0].thisParam);\r\n }\r\n };\r\n const IsNoRelativeCurve = (c1: Curve, c2: Curve) =>\r\n {\r\n if ((c1 instanceof Line) !== (c2 instanceof Line))\r\n return true;\r\n\r\n let midPt = c1.GetPointAtParam(0.5);\r\n let closePt = c2.GetClosestPointTo(midPt, false);\r\n return !closePt || !equaln(midPt.distanceTo(closePt), this._ContourWidth, 1e-3);\r\n };\r\n\r\n const HasRelativeCurveAndChange = (target: Curve, cs: Curve[], isChange = false) =>\r\n {\r\n let index = cs.findIndex(c => !IsNoRelativeCurve(c, target));\r\n if (index !== -1)\r\n {\r\n if (isChange && l1.IsClose)\r\n cs.unshift(...cs.splice(index));\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n\r\n if (cus1.length !== cus2.length)\r\n arrayRemoveIf(cus2, c => !HasRelativeCurveAndChange(c, cus1));\r\n\r\n for (let i = 0; i < cus1.length; i++)\r\n {\r\n let c1 = cus1[i];\r\n let c2 = cus2[i];\r\n\r\n if (cus1.length !== cus2.length)\r\n {\r\n if (IsNoRelativeCurve(c1, c2))\r\n {\r\n sgs.push(c1);\r\n cus1.splice(i, 1);\r\n i--;\r\n continue;\r\n }\r\n }\r\n else\r\n {\r\n //第一段验证是否是关联段,不关联重置数组顺序\r\n if (i === 0)\r\n {\r\n if (IsNoRelativeCurve(c1, c2))\r\n {\r\n if (!HasRelativeCurveAndChange(c1, cus2, true))\r\n {\r\n console.error(\"错误\");\r\n return cus1;\r\n }\r\n i--;\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n let nextC1: Curve;\r\n\r\n if (l1.IsClose)\r\n {\r\n nextC1 = cus1[FixIndex(i + 1, cus1.length)];\r\n }\r\n else\r\n {\r\n if (i < cus1.length - 1)\r\n {\r\n nextC1 = cus1[i + 1];\r\n }\r\n }\r\n\r\n if (nextC1)\r\n {\r\n let derv = c1.GetFistDeriv(0).normalize();\r\n let derv2 = nextC1.GetFistDeriv(0).normalize();\r\n\r\n if (isPerpendicularityTo(derv, derv2) && isPerpendicularityTo(derv, c1.StartPoint.sub(c2.StartPoint).normalize()))\r\n {\r\n AddSgs(c1, c2);\r\n continue;\r\n }\r\n }\r\n\r\n let nextDerv1 = c1.GetFistDeriv(1).normalize();\r\n let nextDerv2 = c2.GetFistDeriv(1).normalize();\r\n let preDerv1 = c1.GetFistDeriv(0).normalize();\r\n let preDerv2 = c2.GetFistDeriv(0).normalize();\r\n [nextDerv1, nextDerv2, preDerv1, preDerv2].forEach(d => rotatePoint(d, Math.PI / 2));\r\n\r\n let preRefLine1 = new Line(c1.StartPoint, c1.StartPoint.add(preDerv1));\r\n let preRefLine2 = new Line(c2.StartPoint, c2.StartPoint.add(preDerv2));\r\n\r\n let nextRefLine1 = new Line(c1.EndPoint, c1.EndPoint.add(nextDerv1));\r\n let nextRefLine2 = new Line(c2.EndPoint, c2.EndPoint.add(nextDerv2));\r\n\r\n ExtendCurve(c1, nextRefLine2, false);\r\n ExtendCurve(c2, nextRefLine1, false);\r\n\r\n ExtendCurve(c1, preRefLine2, true);\r\n ExtendCurve(c2, preRefLine1, true);\r\n\r\n AddSgs(c1, c2);\r\n }\r\n\r\n return sgs;\r\n }\r\n get MaxLength()\r\n {\r\n return this.Segmentations.reduce((len, c) => len + c.Length, 0);\r\n }\r\n set ContourRotation(ro: number)\r\n {\r\n if (ro === this._contourRotation)\r\n return;\r\n let diffRo = ro - this._contourRotation;\r\n this._contourRotation = ro;\r\n let mat = new Matrix4().makeRotationZ(diffRo);\r\n this.Contour.ApplyMatrix(mat);\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n\r\n this._contourRotation = file.Read();\r\n\r\n this.HardwareOption.addLen = file.Read();\r\n this.HardwareOption.name = file.Read();\r\n this.HardwareOption.roomName = file.Read();\r\n this.HardwareOption.cabinetName = file.Read();\r\n this.HardwareOption.costExpr = file.Read();\r\n this.HardwareOption.actualExpr = file.Read();\r\n this.HardwareOption.model = file.Read();\r\n this.HardwareOption.factory = file.Read();\r\n this.HardwareOption.brand = file.Read();\r\n this.HardwareOption.spec = file.Read();\r\n this.HardwareOption.comments = file.Read();\r\n\r\n let count = file.Read();\r\n this.DataList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n this.DataList.push(d);\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n\r\n file.Write(this._contourRotation);\r\n\r\n file.Write(this.HardwareOption.addLen);\r\n file.Write(this.HardwareOption.name);\r\n file.Write(this.HardwareOption.roomName);\r\n file.Write(this.HardwareOption.cabinetName);\r\n file.Write(this.HardwareOption.costExpr);\r\n file.Write(this.HardwareOption.actualExpr);\r\n file.Write(this.HardwareOption.model);\r\n file.Write(this.HardwareOption.factory);\r\n file.Write(this.HardwareOption.brand);\r\n file.Write(this.HardwareOption.spec);\r\n file.Write(this.HardwareOption.comments);\r\n\r\n file.Write(this.DataList.length);\r\n for (let data of this.DataList)\r\n {\r\n file.Write(data[0]);\r\n file.Write(data[1]);\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ParseExpr, safeEval } from \"../../Common/eval\";\r\nimport { Intent, Toaster } from \"../../Common/Toaster\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Hole } from \"../../DatabaseServices/3DSolid/Hole\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { GroupRecord } from \"../../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\n\r\nexport interface ICountType\r\n{\r\n name?: string;\r\n count: number;\r\n entity?: T;\r\n count2?: number | string;\r\n unit?: string;\r\n length?: number;\r\n}\r\nexport type GetCountOption = { sealGruopKey: (block: Board) => string; };\r\nclass LookOverBoardInfosTool\r\n{\r\n private drillTypeMap: Map = new Map();\r\n private sealMap: Map = new Map();\r\n private boardMap = new Map();\r\n GetCount(brs: (Board | IHardwareType)[], options: GetCountOption = null)\r\n {\r\n let drillCount: ICountType[] = [];\r\n let sealCount: ICountType[] = [];\r\n let hardwareCount: ICountType[] = [];\r\n let areaCount: ICountType[] = [];\r\n\r\n this.drillTypeMap.clear();\r\n this.sealMap.clear();\r\n this.Update(brs, options);\r\n if (this.drillTypeMap.size > 0)\r\n for (let [k, v] of this.drillTypeMap)\r\n {\r\n if (v[0] instanceof Hole)\r\n if (k === \"木销\")\r\n drillCount.push({ name: k, count: v.length });\r\n else if (k === \"层板钉\")\r\n drillCount.push({ name: k, count: v.length });\r\n else\r\n drillCount.push({ name: k, count: v.length });\r\n else\r\n {\r\n this.ParseHardwareCount(k, v as IHardwareType[], hardwareCount);\r\n }\r\n }\r\n hardwareCount.sort((h1, h2) => h1.name.localeCompare(h2.name));\r\n //加入封边信息\r\n for (let [k, v] of this.sealMap)\r\n {\r\n sealCount.push({ name: k, count: v / 1000, unit: \"米\" });\r\n }\r\n\r\n for (let [k, bs] of this.boardMap)\r\n {\r\n areaCount.push({\r\n entity: bs[0],\r\n count: bs.length,\r\n count2: this.GetBoardsArea(bs)\r\n });\r\n }\r\n\r\n return { drillCount, hardwareCount, sealCount, areaCount };\r\n };\r\n private Update(ens: (Board | IHardwareType)[], options: GetCountOption = null)\r\n {\r\n //计算排钻个数\r\n const addDrillToMap = (spiteName: string, d: Hole | IHardwareType) =>\r\n {\r\n if (!this.drillTypeMap.has(spiteName))\r\n this.drillTypeMap.set(spiteName, [d]);\r\n else\r\n {\r\n let ds = this.drillTypeMap.get(spiteName);\r\n if (!ds.includes(d))\r\n ds.push(d);\r\n }\r\n };\r\n\r\n const brsProps: Board[] = [];\r\n const hardwares: IHardwareType[] = [];\r\n\r\n for (let e of ens)\r\n {\r\n if (e instanceof Board)\r\n brsProps.push(e);\r\n else\r\n hardwares.push(e);\r\n }\r\n for (let h of hardwares)\r\n {\r\n let { name, unit, factory, spec, model, brand } = h.HardwareOption;\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(h, spec)},${model},${brand}`, h);\r\n }\r\n\r\n this.UpdateBoardMap(brsProps);\r\n\r\n for (let b of brsProps)\r\n {\r\n let dlist = b.DrillList;\r\n if (equaln(b.ContourCurve.Area, 0))\r\n {\r\n Toaster({\r\n message: `${b.BoardProcessOption.roomName} ${b.BoardProcessOption.cabinetName} ${b.Name}轮廓有有问题,请检查`,\r\n timeout: 3000,\r\n intent: Intent.DANGER,\r\n });\r\n continue;\r\n }\r\n\r\n for (let [id, idList] of dlist)\r\n {\r\n for (let ids of idList)\r\n {\r\n for (let objId of ids)\r\n {\r\n let gd = objId.Object;\r\n if (!gd?.IsErase)\r\n {\r\n if (gd instanceof CylinderHole)\r\n switch (gd.Type)\r\n {\r\n case GangDrillType.Ljg:\r\n let spiteName = (gd.GroupId?.Object as GroupRecord)?.Name ?? \"未命名\";\r\n //读取拆单名\r\n addDrillToMap(spiteName, gd);\r\n break;\r\n case GangDrillType.Wood:\r\n addDrillToMap(\"木销\", gd);\r\n break;\r\n }\r\n else\r\n {\r\n //TODO:统计自定义排钻\r\n if (gd instanceof ExtrudeHole)\r\n {\r\n if (gd?.GroupId?.Object)\r\n {\r\n let name = (gd.GroupId.Object as GroupRecord).Name;\r\n let ents = (gd.GroupId.Object as GroupRecord).Entitys;\r\n addDrillToMap(name, ents[0].Object as Hole);\r\n }\r\n else\r\n {\r\n Toaster({ message: `柜名:${b.BoardProcessOption.cabinetName} 板名:${b.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // 被复制的层板钉暂未加入LayerNails数组 等做好关联后解除注释\r\n if (b.LayerNails.length > 0)\r\n for (let objId of b.LayerNails)\r\n {\r\n if (!objId?.IsErase)\r\n addDrillToMap(\"层板钉\", objId.Object as CylinderHole);\r\n }\r\n\r\n //分析五金\r\n for (const mId of b.RelativeHardware)\r\n {\r\n let metal = mId?.Object as IHardwareType;\r\n if (metal && !metal.IsErase && metal.HardwareOption)\r\n {\r\n let { name, unit, factory, spec, model, brand } = metal.HardwareOption;\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(metal, spec)},${model},${brand}`, metal);\r\n }\r\n }\r\n\r\n //封边\r\n let sealData = Production.GetBoardSealingData(b);\r\n let color = b.BoardProcessOption[EBoardKeyList.Color];\r\n\r\n for (let data of sealData)\r\n {\r\n if (equaln(0, data.size)) continue;\r\n let k = `${data.size}-${FixedNotZero(b.Thickness, 2)}-${color}`;\r\n if (options)\r\n {\r\n k += options.sealGruopKey(b);\r\n }\r\n let len = this.sealMap.get(k);\r\n if (!len)\r\n this.sealMap.set(k, data.length);\r\n else\r\n this.sealMap.set(k, len += data.length);\r\n }\r\n }\r\n };\r\n ParseSpec(en: IHardwareType | Vector3, spec: string, len?: number)\r\n {\r\n let size = en instanceof Vector3 ? en : en.BoundingBoxInOCS.getSize(new Vector3);\r\n return ParseExpr(spec, { L: len ?? size.x, W: size.y, H: size.z }) || \"[ 无 ]\";\r\n }\r\n ParseHardwareCount(k: string, v: IHardwareType[], hardwareCount: ICountType[])\r\n {\r\n if (v.length > 0)\r\n {\r\n if (!(v[0] instanceof HardwareTopline))\r\n {\r\n let count2 = v.reduce((v: number, d: HardwareCompositeEntity) =>\r\n {\r\n let size = d.BoundingBoxInOCS.getSize(new Vector3);\r\n let c = safeEval(d.HardwareOption.count, { L: size.x, W: size.y, H: size.z }) ?? 0;\r\n return v + c;\r\n }, 0);\r\n hardwareCount.push({ name: k.split(\",\")[0], count: v.length, entity: v[0], count2: FixedNotZero(count2, 2) });\r\n }\r\n else\r\n {\r\n let map = new Map();\r\n let name = k.split(\",\")[0];\r\n let addLen = (v[0] as HardwareTopline).HardwareOption.addLen;\r\n for (let d of v)\r\n {\r\n let e = d as HardwareTopline;\r\n let cus = e.Segmentations;\r\n for (let cu of cus)\r\n {\r\n let len = parseFloat(FixedNotZero(cu.Length, 2));\r\n if (map.has(len))\r\n {\r\n map.set(len, map.get(len) + 1);\r\n }\r\n else\r\n {\r\n map.set(len, 1);\r\n }\r\n }\r\n }\r\n\r\n for (let [len, count] of map)\r\n {\r\n let count2 = parseFloat(FixedNotZero(len + parseFloat(addLen), 2));\r\n hardwareCount.push({ name, count, entity: v[0], count2, length: count2 });\r\n }\r\n }\r\n }\r\n }\r\n private UpdateBoardMap(brs: Board[])\r\n {\r\n this.boardMap.clear();\r\n for (let b of brs)\r\n {\r\n let thickness = this.GetBoardThickness(b);\r\n let brMat = b.BoardProcessOption[EBoardKeyList.BrMat];\r\n let mat = b.BoardProcessOption[EBoardKeyList.Mat];\r\n let color = b.BoardProcessOption[EBoardKeyList.Color];\r\n let key = `${thickness}-${brMat}-${mat}-${color}`;\r\n let list = this.boardMap.get(key);\r\n if (!list)\r\n {\r\n list = [];\r\n this.boardMap.set(key, list);\r\n }\r\n list.push(b);\r\n }\r\n }\r\n GetBoardThickness(br: Board)\r\n {\r\n let size = Production.GetSpiteSize(br);\r\n if (size)\r\n return FixedNotZero(size.spliteThickness, 2);\r\n else\r\n return FixedNotZero(br.Thickness, 2);\r\n }\r\n GetBoardsArea(brs: Board[])\r\n {\r\n return brs.reduce((area, b) =>\r\n {\r\n let size = Production.GetSpiteSize(b);\r\n let ar: number;\r\n if (size)\r\n ar = size.spliteHeight * size.spliteWidth / 1e6;\r\n else\r\n ar = b.Width * b.Height / 1e6;\r\n ar = parseFloat(ar.toFixed(3));\r\n return area + ar;\r\n }, 0).toFixed(2);\r\n }\r\n}\r\n\r\nexport const lookOverBoardInfosTool = new LookOverBoardInfosTool();\r\n","import { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { safeEval } from \"../Common/eval\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { FixIndex, LINK_FUZZ } from \"../Common/Utils\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { angle, equaln, equalv3, isParallelTo, SelectNearP, XAxis } from \"../Geometry/GeUtils\";\r\nimport { Production } from \"../Production/Product\";\r\nimport { IHighSealedItem } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectOption } from \"./IntersectWith\";\r\n\r\n/**\r\n *曲线列表分段\r\n * @l-arc-l,l-arc-arc-l,l-arc-l-arc-l....\r\n */\r\nexport function ParagraphCulist(cus: Curve[])\r\n{\r\n let newCulist: Curve[][] = [];\r\n let usedCu: WeakSet = new WeakSet();\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (cu: Curve, originCu: Curve, cuList: Curve[], isBack: boolean) =>\r\n {\r\n const cuIsLine = cu instanceof Line;\r\n const originCuIsLine = originCu instanceof Line;\r\n\r\n if (usedCu.has(cu))\r\n return false;\r\n\r\n if (originCuIsLine !== cuIsLine)\r\n {\r\n if (originCuIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(1)))\r\n return false;\r\n }\r\n }\r\n\r\n if (cuIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(1), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n }\r\n }\r\n else if (cuIsLine)\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(cu.GetFistDeriv(0).normalize(), originCu.GetFistDeriv(0).normalize()))\r\n return false;\r\n let pts = [originCu.StartPoint, originCu.EndPoint];\r\n let pts2 = [cu.StartPoint, cu.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))\r\n return false;\r\n }\r\n if (isBack)\r\n cuList.push(cu);\r\n else\r\n cuList.unshift(cu);\r\n usedCu.add(cu);\r\n return true;\r\n };\r\n let caclCus = cus.slice().filter(c => !equaln(c.Length, 0));\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let originCu = caclCus.shift();\r\n if (usedCu.has(originCu))\r\n continue;\r\n\r\n let originCus = [originCu];\r\n usedCu.add(originCu);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], originCu, originCus, true))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === cus.length - 1)\r\n {\r\n originCu = originCus[0];\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], originCu, originCus, false))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n }\r\n newCulist.push(originCus);\r\n }\r\n cus.length = 0;\r\n //同组多条曲线连接为多段线\r\n for (let g of newCulist)\r\n {\r\n if (g.length === 1)\r\n cus.push(g[0]);\r\n else\r\n {\r\n let pl = new Polyline();\r\n for (let c of g)\r\n {\r\n pl.Join(c);\r\n }\r\n cus.push(pl);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n *计算封边\r\n */\r\nexport function CalcEdgeSealing(cus: Curve[])\r\n{\r\n if (cus.length <= 1)\r\n return;\r\n let oldLine: Curve;\r\n let firstLine = cus[0].Clone();\r\n let oldLen = cus.length;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let frontLine = cus[i];\r\n let laterIndex = FixIndex(i + 1, cus);\r\n let laterLine = cus[laterIndex];\r\n if (!frontLine || !laterLine || cus.length < 2)\r\n {\r\n return false;\r\n }\r\n\r\n let dist = frontLine.EndPoint.distanceToSquared(laterLine.StartPoint);\r\n if (dist < LINK_FUZZ ** 2)\r\n {\r\n if (frontLine instanceof Line && laterLine instanceof Line)\r\n {\r\n if (frontLine.PtOnCurve(laterLine.EndPoint))\r\n {\r\n cus.splice(laterIndex, 1);\r\n if (laterIndex === 0)\r\n firstLine = cus[0].Clone();\r\n i -= 2;\r\n }\r\n else if (laterLine.PtOnCurve(frontLine.StartPoint))\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n }\r\n }\r\n continue;\r\n }\r\n\r\n let refLine = oldLine ?? frontLine;\r\n let refLine2 = i === cus.length - 1 ? firstLine : laterLine;\r\n let iPts = refLine.IntersectWith(refLine2, IntersectOption.ExtendBoth);\r\n let tPts = iPts.filter(p =>\r\n refLine.PtOnCurve(p)\r\n && refLine2.PtOnCurve(p)\r\n );\r\n\r\n let iPt = SelectNearP(tPts.length > 0 ? tPts : iPts, refLine.EndPoint);\r\n if (!iPt)\r\n {\r\n //没交点,如果删过线,则尝试继续连接\r\n if (cus.length !== oldLen && cus.length > 2)\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n continue;\r\n }\r\n else\r\n return false;\r\n }\r\n let par = refLine.GetParamAtPoint(iPt);\r\n //前面线的点无效直接删除\r\n if (par < 1e-6)\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n }\r\n else\r\n frontLine.EndPoint = iPt;\r\n oldLine = null;\r\n par = laterLine.GetParamAtPoint(iPt);\r\n\r\n //后面线点无效,如果是起始线,则删除,否则缓存原始线,继续尝试连接\r\n if (par > 1 - 1e-6)\r\n {\r\n if (laterIndex === 0)\r\n {\r\n cus.shift();\r\n firstLine = cus[0].Clone();\r\n i -= 2;\r\n continue;\r\n }\r\n else\r\n oldLine = laterLine.Clone();\r\n }\r\n\r\n laterLine.StartPoint = iPt;\r\n }\r\n return true;\r\n}\r\n\r\nexport function GetBoardHighSeal(br: Board, sealcus: Curve[])\r\n{\r\n let highSeals = br.BoardProcessOption.highSealed.slice().filter(d => d.size !== null && d.size !== undefined);\r\n let sealDown = parseFloat(br.BoardProcessOption[EBoardKeyList.DownSealed]);\r\n let sealUp = parseFloat(br.BoardProcessOption[EBoardKeyList.UpSealed]);\r\n let sealLeft = parseFloat(br.BoardProcessOption[EBoardKeyList.LeftSealed]);\r\n let sealRight = parseFloat(br.BoardProcessOption[EBoardKeyList.RightSealed]);\r\n\r\n //若未设置高级封边,把上下左右封边存入高级封边\r\n if (sealcus.length !== highSeals.length || !br.IsSpecialShape)\r\n {\r\n highSeals.length = 0;\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n for (let c of sealcus)\r\n {\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n highSeals.push({ size: sealDown });\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n highSeals.push({ size: sealRight });\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n highSeals.push({ size: sealUp });\r\n else\r\n highSeals.push({ size: sealLeft });\r\n }\r\n }\r\n\r\n return highSeals;\r\n}\r\n\r\n/**偏移前后曲线起点没改变 */\r\nexport function OffsetOutlineSpNotChange(oldcu: Curve, newCu: Curve)\r\n{\r\n if (!newCu)\r\n return false;\r\n let sDerv = oldcu.GetFistDeriv(0).normalize();\r\n let eDerv = oldcu.GetFistDeriv(oldcu.EndParam).normalize().negate();\r\n sDerv.add(eDerv).normalize();\r\n let mDerv = newCu.StartPoint.sub(oldcu.StartPoint).normalize();\r\n return oldcu.EndParam === newCu?.EndParam && isParallelTo(mDerv, sDerv);\r\n}\r\n\r\n/**\r\n * 获取板件封边轮廓线段数组\r\n * 消除共线的数据,不改变轮廓方向\r\n * isOffset-是否偏移轮廓用于查看\r\n * */\r\nexport function GetBoardSealingCurves(br: Board, isOffset = false): Curve[]\r\n{\r\n let cu: ExtureContourCurve = Production.GetSpliteOutlineBySpliteSize(br);\r\n if (cu)\r\n return cu.Explode();\r\n\r\n let cus: Curve[] = [];\r\n cu = Production.GetSpliteOutline(br, false);\r\n if (!cu)\r\n {\r\n Toaster({\r\n message: \"获取封边错误\",\r\n timeout: 3000,\r\n intent: Intent.DANGER\r\n });\r\n return [];\r\n }\r\n if (isOffset)\r\n {\r\n let dir = Math.sign(cu.Area2);\r\n let newCu = cu.GetOffsetCurves(-1 * dir)[0] as ExtureContourCurve;\r\n if (OffsetOutlineSpNotChange(cu, newCu))\r\n cu = newCu;\r\n }\r\n if (cu instanceof Circle)\r\n return [cu.Clone()];\r\n else\r\n {\r\n cus = cu.Explode() as Curve[];\r\n if (br.IsSpecialShape)\r\n ParagraphCulist(cus);\r\n return cus;\r\n }\r\n}\r\n\r\n/**\r\n * 获取板件轮廓\r\n * 结果轮廓拆单用,统一逆时针数据\r\n * hasSealing 轮廓是否包含封边\r\n * 用户计算拆单侧孔面id\r\n */\r\nexport function GetSealedBoardContour(br: Board, hasSealing: boolean): Polyline | Circle | undefined\r\n{\r\n if (equaln(br.ContourCurve.Area, 0))\r\n return;\r\n\r\n let offsetCus: Curve[] = [];\r\n let cus = GetBoardSealingCurves(br);\r\n let highSeals = GetBoardHighSeal(br, cus);\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n\r\n if (hasSealing)\r\n {\r\n for (let c of cus)\r\n {\r\n if (c instanceof Polyline)\r\n offsetCus.push(...c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n else\r\n {\r\n\r\n if (cus[0] instanceof Circle)\r\n dir = 1;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cs: Curve[];\r\n if (!highSeals[i].size)\r\n cs = [cus[i].Clone()];\r\n else\r\n cs = cus[i].GetOffsetCurves(-highSeals[i].size * dir);\r\n\r\n for (let c of cs)\r\n {\r\n if (c instanceof Polyline)\r\n offsetCus.push(...c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n }\r\n if (offsetCus.length === 1 && offsetCus[0] instanceof Circle)\r\n return offsetCus[0] as Circle;\r\n\r\n if (!CalcEdgeSealing(offsetCus)) return;\r\n let pl = Polyline.FastCombine(offsetCus, LINK_FUZZ);\r\n if (pl && dir < 0)\r\n pl.Reverse();\r\n return pl;\r\n}\r\n\r\n\r\nexport function ParagraphSealinglist(hightSeal: IHighSealedItem[], cus: Curve[])\r\n{\r\n if (hightSeal.length !== cus.length) return hightSeal;\r\n\r\n let usedCu: WeakSet = new WeakSet();\r\n let newHighSeal: IHighSealedItem[] = [];\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (cu: Curve, originCu: Curve, isBack: boolean) =>\r\n {\r\n const cuIsLine = cu instanceof Line;\r\n const originCuIsLine = originCu instanceof Line;\r\n\r\n if (usedCu.has(cu))\r\n return false;\r\n\r\n if (originCuIsLine !== cuIsLine)\r\n {\r\n if (originCuIsLine &&\r\n !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0))\r\n && !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(1))\r\n )\r\n {\r\n return false;\r\n }\r\n\r\n if (cuIsLine\r\n && !isParallelTo(originCu.GetFistDeriv(1), cu.GetFistDeriv(0))\r\n && !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)\r\n ))\r\n {\r\n return false;\r\n }\r\n }\r\n else if (cuIsLine)\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(cu.GetFistDeriv(0).normalize(), originCu.GetFistDeriv(0).normalize()))\r\n return false;\r\n let pts = [originCu.StartPoint, originCu.EndPoint];\r\n let pts2 = [cu.StartPoint, cu.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))\r\n return false;\r\n }\r\n if (isBack)\r\n hightSeal.shift();\r\n else\r\n hightSeal.pop();\r\n usedCu.add(cu);\r\n return true;\r\n };\r\n let caclCus = cus.slice();\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let originCu = caclCus.shift();\r\n if (usedCu.has(originCu))\r\n continue;\r\n let oldCu = originCu;\r\n let originSeal = hightSeal.shift();\r\n newHighSeal.push(originSeal);\r\n usedCu.add(originCu);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], originCu, true))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === cus.length - 1)\r\n {\r\n originCu = oldCu;\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], originCu, false))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n }\r\n }\r\n\r\n return newHighSeal;\r\n}\r\n\r\n/**处理常规板件封边数据和上下左右封边值 */\r\nexport function HandleRectBoardSealingData(br: Board, edges: IHighSealedItem[], cus?: Curve[])\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n if (!cus)\r\n cus = br.ContourCurve.Explode() as Curve[];\r\n\r\n let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight);\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth);\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness);\r\n\r\n if ((spliteHeight && spliteWidth && spliteThickness) || !br.IsSpecialShape && cus.length == 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = cus[i].GetFistDeriv(0);\r\n if (isParallelTo(derv, XAxis))\r\n {\r\n if (derv.x * dir > 0)\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = edges[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = edges[i].size.toString();\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = edges[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = edges[i].size.toString();\r\n }\r\n }\r\n\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { GetMirrorMat } from \"../../Common/Matrix4Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\r\nimport { equaln, equalv3, ZAxis } from \"../GeUtils\";\r\nimport { Face } from \"./Face\";\r\nimport { MergeCurvelist } from \"../../Common/CurveUtils\";\r\n\r\n\r\nexport const CanDrawHoleFuzz = 1e-2;\r\n\r\nexport enum BoardFaceType\r\n{\r\n Side = 0,\r\n NoSide = 1\r\n}\r\nexport class BoardGetFace\r\n{\r\n Faces: Face[] = [];\r\n constructor(public Board: Board)\r\n {\r\n this.ParseFaces();\r\n }\r\n ParseFaces()\r\n {\r\n //正反面\r\n this.GetTopAndBottomFace();\r\n //侧面\r\n this.GetSideFaces();\r\n }\r\n GetTopAndBottomFace(isEdgeFace = false)\r\n {\r\n let curve = this.Board.ContourCurve;\r\n let reg: Region;\r\n if (this.Board.IsSpecialShape)\r\n reg = Region.CreateFromCurves([curve]);\r\n\r\n let thickness = this.Board.Thickness;\r\n let ocs = this.Board.OCS;\r\n const opt = this.Board.BoardProcessOption;\r\n //正反面\r\n if (opt.frontDrill || isEdgeFace)\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n region: reg,\r\n isRect: this.Board.IsRect,\r\n localBoard: this.Board,\r\n matrix4: ocs.clone().multiply(\r\n new Matrix4().setPosition(new Vector3(0, 0, thickness))),\r\n length: this.Board.Width,\r\n width: this.Board.Height\r\n }));\r\n\r\n if (opt.backDrill || isEdgeFace)\r\n {\r\n let mat = GetMirrorMat(ZAxis).setPosition(new Vector3());\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n localBoard: this.Board,\r\n isRect: this.Board.IsRect,\r\n region: reg ? reg.Clone() : undefined,\r\n matrix4: new Matrix4().multiplyMatrices(ocs.clone(), mat),\r\n length: this.Board.Width,\r\n width: this.Board.Height\r\n }));\r\n }\r\n }\r\n GetSideFaces()\r\n {\r\n let con = this.Board.ContourCurve.Clone();\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const highDrill = this.Board.BoardProcessOption.highDrill.slice();\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let length = cu.Length;\r\n if ((highDrill.length > 0 && highDrill[i] === DrillType.None)\r\n || equaln(length, 0)\r\n || cu instanceof Arc)\r\n continue;\r\n let mtx = GetSideFaceMtx(cu, inverseZ);\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: this.Board,\r\n matrix4: new Matrix4().multiplyMatrices(this.Board.OCS.clone(), mtx),\r\n length,\r\n width: this.Board.Thickness,\r\n drillType: highDrill.length > 0 && highDrill[i]\r\n }));\r\n }\r\n }\r\n IntersectFace(br: BoardGetFace, bInsEqual: boolean = false): Face[]\r\n {\r\n let collisionFaces: Face[] = [];\r\n\r\n for (let f1 of this.Faces)\r\n {\r\n for (let f2 of br.Faces)\r\n {\r\n //都是正面,或者不允许侧面同侧面并且2板件类型不一样就跳过\r\n if (f1.type === f2.type\r\n && (f1.type === BoardFaceType.NoSide || !bInsEqual || br.Board.BoardType !== this.Board.BoardType)\r\n )\r\n continue;\r\n //不共面\r\n if (!MatrixIsCoplane2(f1.OCS, f2.OCS, CanDrawHoleFuzz))\r\n continue;\r\n collisionFaces.push(...f1.Intersect(f2));\r\n }\r\n }\r\n return collisionFaces;\r\n }\r\n static GetAllSidesFaces(br: Board, isMergeFace = false)\r\n {\r\n let faces: Face[] = [];\r\n let con = br.ContourCurve;\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n if (isMergeFace)\r\n MergeCurvelist(cus);\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let length = cu.Length;\r\n let mtx = GetSideFaceMtx(cu, inverseZ);\r\n faces.push(new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: br,\r\n matrix4: new Matrix4().multiplyMatrices(br.OCS.clone(), mtx),\r\n length,\r\n width: br.Thickness,\r\n }));\r\n }\r\n return faces;\r\n }\r\n}\r\n\r\n//坐标系共面且法线相反\r\nexport function MatrixIsCoplane2(matrixFrom: Matrix4, matrixTo: Matrix4, fuzz = 1e-5): boolean\r\n{\r\n let nor1 = new Vector3().setFromMatrixColumn(matrixFrom, 2);\r\n let nor2 = new Vector3().setFromMatrixColumn(matrixTo, 2);\r\n\r\n //法线共面\r\n if (!equalv3(nor1, nor2.negate(), fuzz))\r\n return false;\r\n\r\n //高共面\r\n let pt = new Vector3().setFromMatrixPosition(matrixTo);\r\n //变换到自身对象坐标系.\r\n pt.applyMatrix4(new Matrix4().getInverse(matrixFrom));\r\n\r\n return equaln(pt.z, 0, fuzz);\r\n}\r\nexport function GetSideFaceMtx(cu: Curve, inverseZ = false): Matrix4\r\n{\r\n let x = cu.GetFistDeriv(0).normalize();\r\n let y = ZAxis;\r\n let z = x.clone().cross(y);\r\n if (inverseZ) z.negate();\r\n\r\n let basePt: Vector3;\r\n if ((equaln(x.x, 0) && x.y > 0) || x.x < 0)\r\n {\r\n x.negate();\r\n basePt = cu.EndPoint;\r\n }\r\n else\r\n basePt = cu.StartPoint;\r\n //构建面矩阵\r\n return new Matrix4()\r\n .makeBasis(x, y, z)\r\n .setPosition(basePt);\r\n}\r\n","export const ReportFunctionList: ((msg: string) => void)[] = [];\r\n\r\nexport function SendReport(msg: string)\r\n{\r\n for (let f of ReportFunctionList)\r\n f(msg);\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\n\r\nexport const ShowObjectsFunctionList: ((ens: (Entity[]) | Object3D[]) => void)[] = [];\r\n\r\nexport function ShowSelectObjects(ens: (Entity[]) | Object3D[])\r\n{\r\n for (let f of ShowObjectsFunctionList)\r\n f(ens);\r\n}\r\n","\r\nexport function IsDev()\r\n{\r\n return window.location.hostname === \"localhost\";\r\n}\r\n","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { lookOverBoardInfosTool } from \"../Add-on/LookOverBoardInfos/LookOverBoardInfosTool\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\r\nimport { Vector2ApplyMatrix4 } from \"../Common/Matrix4Utils\";\r\nimport { FixedNotZero, LINK_FUZZ } from \"../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Hole } from \"../DatabaseServices/3DSolid/Hole\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board, IModeling } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { HardwareCompositeEntity } from \"../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { userConfig } from \"../Editor/UserConfig\";\r\nimport { Vec2 } from \"../Geometry/CheckIntersect\";\r\nimport { angleTo, AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, XAxis, equalv2, IsBetweenA2B } from \"../Geometry/GeUtils\";\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, GetSealedBoardContour as GetSealedBoardContour } from \"../GraphicsSystem/CalcEdgeSealing\";\r\nimport { FeedingToolPath, GetModelingFromCustomDrill } from \"../GraphicsSystem/ToolPath/FeedingToolPath\";\r\nimport { EMetalsType, IHardwareOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { BoardOpenDir, FaceDirection, IHighSealedItem } from \"../UI/Store/BoardInterface\";\r\nimport { Entity } from './../DatabaseServices/Entity/Entity';\r\nimport { ICompHardwareOption } from './../UI/Components/RightPanel/RightPanelInterface';\r\nimport { CanDrawHoleFuzz } from \"../Geometry/DrillParse/BoardGetFace\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { SendReport } from \"../Common/Report\";\r\nimport { ShowSelectObjects } from \"../Common/ShowSelectObjects\";\r\nimport { IsDev } from \"../Common/Deving\";\r\n\r\n\r\n/**板件轮廓数据 */\r\nexport interface IContourData\r\n{\r\n pts: Vec2[];\r\n buls: number[];\r\n}\r\nexport type IHardwareType = HardwareTopline | HardwareCompositeEntity;\r\n\r\nexport interface ISealingData extends IHighSealedItem\r\n{\r\n length: number;\r\n type?: string;\r\n shop?: string;\r\n}\r\nexport interface IModelingData\r\n{\r\n feeding: IContourData[];\r\n thickness: number;\r\n dir: FaceDirection | number;\r\n knifeRadius: number;\r\n}\r\n\r\nexport enum DrillingFace\r\n{\r\n //正反面时,使用Front和Back\r\n Front = 0,\r\n Back = 1,\r\n}\r\n\r\nexport interface IDrillingOption\r\n{\r\n position: Vector3;\r\n radius: number;\r\n type: GangDrillType;\r\n depth: number;\r\n face: DrillingFace;\r\n endPt?: Vector3;\r\n angle?: number;\r\n}\r\n\r\nexport interface IBoardHoleInfo\r\n{\r\n frontBackHoles: IDrillingOption[];\r\n sideHoles: IDrillingOption[];\r\n}\r\n\r\ninterface IBoardProdInfo\r\n{\r\n id: number;\r\n name: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n [EBoardKeyList.Mat]: string;\r\n [EBoardKeyList.BrMat]: string;\r\n [EBoardKeyList.Color]: string;\r\n [EBoardKeyList.Lines]: number;\r\n [EBoardKeyList.DrillType]: string;\r\n spliteHeight: string;\r\n spliteThickness: string;\r\n spliteWidth: string;\r\n\r\n isRect: boolean;\r\n remarks: [string, string][];\r\n kaiLiaoWidth: number;\r\n kaiLiaoHeight: number;\r\n openDir: BoardOpenDir;\r\n}\r\n\r\n/**拆单数据 */\r\nexport interface ISpliteOrderData\r\n{\r\n info: IBoardProdInfo; //板件基本信息\r\n outline: IContourData; //拆单轮廓信息\r\n sealing: ISealingData[]; //封边信息\r\n modeling: IModelingData[]; //造型信息\r\n holes: IBoardHoleInfo; //孔信息\r\n sideModeling: IModelingData[]; //侧面造型信息\r\n offsetTanslation: Vector3;\r\n originOutlin: IContourData; //不扣封边拆单原始轮廓\r\n metalsData?: { metals: number, comp: number; }; //板件五金\r\n boardContour: IContourData; //板件轮廓\r\n originModelingData: { sideModeling: IOriginModelingData[], modeling: IOriginModelingData[]; };\r\n}\r\n\r\nexport interface IBoardMetalsData\r\n{\r\n metals: ISpliteHardwareData[];\r\n comp: ISpliteHardwareData[];\r\n}\r\n\r\nexport interface ISpliteHardwareData\r\n{\r\n metalsOption: IHardwareOption;\r\n dataList: [string, string][];\r\n children: ISpliteHardwareData[];\r\n length?: number;\r\n size: Vector3;\r\n}\r\n\r\nexport interface IOriginModelingData\r\n{\r\n outline: IContourData,\r\n holes: IContourData[];\r\n thickness: number;\r\n dir: FaceDirection | number;\r\n knifeRadius: number;\r\n}\r\n\r\n\r\nexport namespace Production\r\n{\r\n /**获取板件拆单数据 */\r\n export function GetBoardSplitOrderData(br: Board): ISpliteOrderData | undefined\r\n {\r\n let sealedContour = GetSealedBoardContour(br, true);\r\n if (!sealedContour || equaln(sealedContour.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br], br.Name + \" 轮廓错误\");\r\n return undefined;\r\n }\r\n let outline = GetSealedBoardContour(br, false);\r\n\r\n if (!outline || equaln(outline.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \"扣除封边轮廓有误,请检查后重新拆单\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br], br.Name + \"扣除封边轮廓有误\");\r\n return;\r\n }\r\n\r\n let offsetTanslation = outline.BoundingBox.min;\r\n outline.Position = outline.Position.sub(offsetTanslation);\r\n let outlinePtsBul = ConverToPolylineAndSplitArc(outline);\r\n //外轮廓去掉最后的闭合点\r\n outlinePtsBul.pts.pop();\r\n outlinePtsBul.buls.pop();\r\n let size = outline.BoundingBox.getSize(new Vector3);\r\n\r\n //不扣除封边的轮廓信息\r\n let originOutlinePtsBul = ConverToPolylineAndSplitArc(sealedContour);\r\n originOutlinePtsBul.pts.pop();\r\n originOutlinePtsBul.buls.pop();\r\n\r\n let { modeling, sideModeling } = GetBoardModelingData(br, offsetTanslation);\r\n\r\n let boardContour: IContourData;\r\n if (GetSpiteSize(br))\r\n boardContour = ConverToPolylineAndSplitArc(br.ContourCurve);\r\n\r\n return {\r\n info: GetBoardInfo(br, size),\r\n originOutlin: originOutlinePtsBul,\r\n outline: outlinePtsBul,\r\n sealing: GetBoardSealingData(br),\r\n modeling,\r\n holes: GetBoardHolesData(br, offsetTanslation, sealedContour),\r\n sideModeling,\r\n offsetTanslation,\r\n metalsData: GetBoardMetals(br),\r\n boardContour,\r\n originModelingData: GetOriginBoardModelingData(br)\r\n };\r\n }\r\n export function GetBoardInfo(br: Board, size: Vector3): IBoardProdInfo\r\n {\r\n let data = br.BoardProcessOption;\r\n let param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let spliteHeight = safeEval(data.spliteHeight, param);\r\n let spliteWidth = safeEval(data.spliteWidth, param);\r\n let spliteThickness = safeEval(data.spliteThickness, param);\r\n let isRect = (!isNaN(spliteHeight) && !isNaN(spliteWidth) && !isNaN(spliteThickness)) || !br.IsSpecialShape;\r\n\r\n return {\r\n id: br.Id.Index,\r\n name: br.Name,\r\n [EBoardKeyList.RoomName]: data[EBoardKeyList.RoomName],\r\n [EBoardKeyList.CabinetName]: data[EBoardKeyList.CabinetName],\r\n [EBoardKeyList.Mat]: data[EBoardKeyList.Mat],\r\n [EBoardKeyList.BrMat]: data[EBoardKeyList.BrMat],\r\n [EBoardKeyList.Color]: data[EBoardKeyList.Color],\r\n [EBoardKeyList.Lines]: data[EBoardKeyList.Lines],\r\n [EBoardKeyList.DrillType]: data[EBoardKeyList.DrillType],\r\n spliteHeight: spliteHeight ? spliteHeight.toString() : \"\",\r\n spliteThickness: spliteThickness ? spliteThickness.toString() : \"\",\r\n spliteWidth: spliteWidth ? spliteWidth.toString() : \"\",\r\n isRect,\r\n remarks: data.remarks.slice(),\r\n kaiLiaoWidth: size.x,\r\n kaiLiaoHeight: size.y,\r\n openDir: br.OpenDir,\r\n };\r\n }\r\n\r\n /**\r\n * 转换成多段线并且将圆弧打断(大于1/4的话)\r\n */\r\n export function ConverToPolylineAndSplitArc(cu: Polyline | Circle, isOutline = true, isSplite = true): IContourData\r\n {\r\n let ptsBuls: { pts: Vector2[]; buls: number[]; };\r\n if (cu instanceof Circle)\r\n {\r\n let pl = ConverCircleToPolyline(cu);\r\n ptsBuls = pl.PtsBuls;\r\n }\r\n else\r\n {\r\n if (isOutline && cu.IsClose && cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n if (isSplite)\r\n ptsBuls = SplitePolylineAtArc(cu);\r\n else\r\n ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.OCS;\r\n if (!equaln(ocs.elements[0], 1)\r\n || !equaln(ocs.elements[9], 0)\r\n || !equaln(ocs.elements[10], 0)\r\n )\r\n {\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n {\r\n Vector2ApplyMatrix4(ocs, ptsBuls.pts[i]);\r\n ptsBuls.buls[i] *= cu.Normal.z;\r\n }\r\n }\r\n return ptsBuls;\r\n }\r\n\r\n export function ConverCircleToPolyline(cir: Circle): Polyline\r\n {\r\n let arcs = cir.GetSplitCurves([0, 0.25, 0.5, 0.75]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCS;\r\n for (let arc of arcs)\r\n pl.Join(arc);\r\n return pl;\r\n }\r\n\r\n const SPLITBUL = Math.tan(Math.PI / 8);\r\n function GetSpliteCount(allAngle: number)\r\n {\r\n return Math.ceil(Math.abs(allAngle) / Math.PI * 2);\r\n }\r\n\r\n /** 打断多段线超过1/4圆的圆弧*/\r\n export function SplitePolylineAtArc(cu: Polyline, isSplite = true): { pts: Vector2[], buls: number[]; }\r\n {\r\n let ptsBuls = cu.PtsBuls;\r\n let ocsInv = cu.OCSInv;\r\n\r\n let result: { pts: Vector2[], buls: number[]; } = { pts: [], buls: [] };\r\n\r\n if (ptsBuls.pts.length === 0)\r\n return result;\r\n\r\n for (let i = 0; i < ptsBuls.buls.length - 1; i++)\r\n {\r\n let bul = ptsBuls.buls[i];\r\n if (Math.abs(bul) > SPLITBUL + 1e-8 && isSplite)\r\n {\r\n let allAngle = Math.atan(bul) * 4;\r\n let splitCount = GetSpliteCount(allAngle);\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let paramDiv = 1 / splitCount;\r\n let newBul = Math.tan((allAngle / splitCount) / 4);\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let param = i * paramDiv;\r\n let p = arc.GetPointAtParam(param).applyMatrix4(ocsInv);\r\n let p2 = AsVector2(p);\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(p2, arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(p2);\r\n result.buls.push(newBul);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(ptsBuls.pts[i], arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(ptsBuls.pts[i]);\r\n result.buls.push(ptsBuls.buls[i]);\r\n }\r\n }\r\n }\r\n\r\n result.pts.push(arrayLast(ptsBuls.pts));\r\n result.buls.push(arrayLast(ptsBuls.buls));\r\n\r\n //测试是否存在无效的边(0长度边)\r\n // for (let i = 1; i < result.pts.length; i++)\r\n // {\r\n // if (equalv2(result.pts[i], result.pts[i - 1], 0.01))\r\n // alert(\"存在无效的边\");\r\n // }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 获取封边数据\r\n * 封边数据未统一逆时针顺序,用于拆单\r\n * */\r\n export function GetBoardSealingData(br: Board): ISealingData[]\r\n {\r\n let sealCus = GetBoardSealingCurves(br);\r\n let highSeal = GetBoardHighSeal(br, sealCus);\r\n\r\n let sealData: ISealingData[] = [];\r\n\r\n for (let i = 0; i < sealCus.length; i++)\r\n {\r\n let sealCu = sealCus[i];\r\n let data = highSeal[i];\r\n let cus: Curve[] = [];\r\n if (sealCu instanceof Polyline)\r\n cus.push(...sealCu.Explode());\r\n else\r\n cus.push(sealCu);\r\n\r\n for (let cu of cus)\r\n {\r\n if (cu instanceof Line)\r\n {\r\n sealData.push(Object.assign({}, data, { length: cu.Length }));\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n let splitCount = GetSpliteCount(cu.AllAngle);\r\n let len = 2 * Math.PI * cu.Radius / 4;\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let arcLen = i !== splitCount - 1 ? len : cu.Length - (splitCount - 1) * len;\r\n if (!equaln(arcLen, 0))\r\n sealData.push(Object.assign({}, data, { length: arcLen }));\r\n }\r\n }\r\n else if (cu instanceof Circle)\r\n {\r\n let length = 2 * Math.PI * cu.Radius / 4;\r\n sealData.push(...Array.from({ length: 4 }, () =>\r\n {\r\n return { ...data, length };\r\n }));\r\n }\r\n }\r\n }\r\n if (br.ContourCurve instanceof Polyline && br.ContourCurve.Area2 < 0)\r\n sealData.reverse();\r\n return sealData;\r\n }\r\n\r\n export function GetMetalTotalEntitys(md: HardwareCompositeEntity, isHole = false, filter?: (e: Entity) => boolean)\r\n {\r\n let holes: Entity[] = [];\r\n if (isHole && !md.HardwareOption.isHole) return [];\r\n\r\n for (let e of md.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n if (!isHole || md.HardwareOption.isHole)\r\n holes.push(...GetMetalTotalEntitys(e, isHole, filter).map(h => h.ApplyMatrix(md.OCS)));\r\n }\r\n else\r\n {\r\n if (!filter || filter(e))\r\n {\r\n holes.push(e.Clone().ApplyMatrix(md.OCS));\r\n }\r\n }\r\n }\r\n return holes;\r\n }\r\n export function GetOriginBoardModelingData(br: Board)\r\n {\r\n const tool = FeedingToolPath.GetInstance() as FeedingToolPath;\r\n\r\n const getModelings = (ms: IModeling[]): IOriginModelingData[] =>\r\n {\r\n let data: IOriginModelingData[] = [];\r\n\r\n for (let m of ms)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n\r\n data.push({\r\n outline: ConverToPolylineAndSplitArc(cu.Clone(), false, false),\r\n holes: m.shape.Holes.map(h => ConverToPolylineAndSplitArc(h.Curve.Clone(), false, false)),\r\n thickness: m.thickness + (m.addDepth ?? 0),\r\n dir: m.dir,\r\n knifeRadius: m.knifeRadius,\r\n });\r\n\r\n }\r\n return data;\r\n };\r\n\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n\r\n let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling]);\r\n\r\n let sideModeling = getModelings(allModeling.sideModeling);\r\n\r\n return { modeling, sideModeling };\r\n }\r\n export function GetBoardModelingData(br: Board, offsetTanslation: Vector3)\r\n {\r\n const tool = FeedingToolPath.GetInstance() as FeedingToolPath;\r\n const tMtx = MoveMatrix(offsetTanslation.clone().negate());\r\n const getModelings = (ms: IModeling[], isSide: boolean): IModelingData[] =>\r\n {\r\n let data: IModelingData[] = [];\r\n\r\n for (let m of ms)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n let paths = tool.GetModelFeedPath(br, m);\r\n if (!isSide)\r\n paths.forEach(path => path.ApplyMatrix(tMtx));\r\n\r\n let feeding = paths.map((c: ExtureContourCurve) => ConverToPolylineAndSplitArc(c, false));\r\n if (feeding.length > 0)\r\n data.push({\r\n feeding,\r\n thickness: m.thickness + (m.addDepth ?? 0),\r\n dir: m.dir,\r\n knifeRadius: m.knifeRadius,\r\n });\r\n else\r\n {\r\n Toaster({\r\n message: \"板件有造型或者自定义排钻无法加工,请运行造型检测命令确认\",\r\n timeout: 5000,\r\n intent: Intent.DANGER,\r\n key: \"造型加工错误\"\r\n });\r\n }\r\n }\r\n return data;\r\n };\r\n\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n\r\n let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling], false).filter(f => f.feeding.length > 0);\r\n\r\n let sideModeling = getModelings(allModeling.sideModeling, true).filter(f => f.feeding.length > 0);\r\n\r\n return { modeling, sideModeling };\r\n }\r\n\r\n /**获取板件的轮廓\r\n *有拆单尺寸返回矩形\r\n *用于拆单的轮廓统一逆时针 */\r\n export function GetSpliteOutline(br: Board, isSplite: boolean): ExtureContourCurve | undefined\r\n {\r\n let con: ExtureContourCurve = GetSpliteOutlineBySpliteSize(br);\r\n if (con)\r\n return con;\r\n\r\n con = br.ContourCurve;\r\n if (con instanceof Circle)\r\n {\r\n return con;\r\n }\r\n let cus = con.Explode();\r\n MergeCurvelist(cus);\r\n let pl = Polyline.FastCombine(cus, LINK_FUZZ);\r\n if (pl && isSplite && pl.Area2 < 0)\r\n pl.Reverse();\r\n return pl;\r\n }\r\n export function GetSpiteSize(br: Board)\r\n {\r\n let param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight, param);\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param);\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param);\r\n if (spliteHeight && spliteWidth && spliteThickness)\r\n return {\r\n spliteHeight, spliteWidth, spliteThickness\r\n };\r\n else\r\n return;\r\n }\r\n\r\n export function GetSpliteOutlineBySpliteSize(br: Board)\r\n {\r\n let size = GetSpiteSize(br);\r\n\r\n if (size)\r\n return new Polyline().RectangleFrom2Pt(new Vector3, new Vector3(size.spliteWidth, size.spliteHeight));\r\n return null;\r\n }\r\n\r\n /**孔信息,侧孔的z 均为 从上到下距离 */\r\n export function GetBoardHolesData(br: Board, offsetTanslation: Vector3, sealedContour: ExtureContourCurve): IBoardHoleInfo\r\n {\r\n let data: IBoardHoleInfo = {\r\n frontBackHoles: [],\r\n sideHoles: []\r\n };\r\n let brNormal = br.Normal;\r\n\r\n // 性能优化的解析板件网洞类\r\n // new ParseBoardHoleData(br, offsetTanslation, sealedContour);\r\n\r\n for (let [, driss] of br.DrillList)\r\n {\r\n for (let dris of driss)\r\n {\r\n for (let dId of dris)\r\n {\r\n if (!dId || dId.IsErase)\r\n continue;\r\n let d = dId.Object as CylinderHole;\r\n if (d instanceof ExtrudeHole)\r\n ParseExtrudeHoles(d, br, offsetTanslation, data, sealedContour);\r\n else\r\n ParseCylHoles(d, br, offsetTanslation, data, sealedContour);\r\n }\r\n }\r\n }\r\n\r\n if (br.RelativeHardware)\r\n {\r\n for (let dId of br.RelativeHardware)\r\n {\r\n if (dId.IsErase) continue;\r\n let d = dId.Object;\r\n let holes: Hole[] = [];\r\n if (d instanceof HardwareCompositeEntity)\r\n {\r\n holes.push(...GetMetalTotalEntitys(d, true, (e) => e instanceof Hole) as Hole[]);\r\n }\r\n for (let h of holes)\r\n {\r\n if (h instanceof ExtrudeHole)\r\n ParseExtrudeHoles(h, br, offsetTanslation, data, sealedContour);\r\n else\r\n ParseCylHoles(h as CylinderHole, br, offsetTanslation, data, sealedContour);\r\n }\r\n }\r\n }\r\n\r\n let modelings = br.BoardModeling;\r\n for (let nid of br.LayerNails)\r\n {\r\n if (!nid || !nid.Object || nid.IsErase)\r\n continue;\r\n let nail = nid.Object as CylinderHole;\r\n if (!isParallelTo(nail.Normal, brNormal)) continue;\r\n\r\n let sp = nail.Position.applyMatrix4(br.OCSInv);\r\n let nor = nail.Normal.multiplyScalar(nail.Height);\r\n let ep = nail.Position.add(nor).applyMatrix4(br.OCSInv);\r\n let [z0, z1] = sp.z < ep.z ? [sp.z, ep.z] : [ep.z, sp.z];\r\n\r\n if (\r\n Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6\r\n && br.ContourCurve.PtInCurve(sp.setZ(0))\r\n && modelings.every(m => !m.shape.Outline.Curve.PtInCurve(sp))\r\n )\r\n {\r\n let face = !equalv3(nail.Normal, brNormal, 1e-3) ? DrillingFace.Front : DrillingFace.Back;\r\n let depth = Math.min(z1, br.Thickness) - Math.max(z0, 0);\r\n\r\n data.frontBackHoles.push({\r\n type: nail.Type,\r\n position: sp.sub(offsetTanslation),\r\n radius: nail.Radius,\r\n depth,\r\n face,\r\n });\r\n }\r\n }\r\n\r\n for (let m of modelings)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n {\r\n let center = cu.Center.setZ(0).sub(offsetTanslation);\r\n data.frontBackHoles.push(\r\n {\r\n type: GangDrillType.Pxl,\r\n position: center,\r\n radius: cu.Radius,\r\n depth: m.thickness,\r\n face: m.dir as number\r\n }\r\n );\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n /**拆单那边需要把侧孔 z 坐标转换为从上到下 */\r\n function InvertPosition(pos: Vector3, thickness: number)\r\n {\r\n pos.z = thickness - pos.z;\r\n }\r\n /**分析常规排钻 */\r\n function ParseCylHoles(d: CylinderHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtureContourCurve)\r\n {\r\n let processData = br.BoardProcessOption;\r\n let brNormal = br.Normal;\r\n let roMat = new Matrix4().extractRotation(br.OCSInv);\r\n let position = d.Position.applyMatrix4(br.OCSInv);\r\n let holes = data.frontBackHoles;\r\n let face: number;\r\n let isPush = false;\r\n let endPt: Vector3;\r\n let depth = d.Height;\r\n let diffMat = br.OCSInv.multiply(d.OCS);\r\n let x = new Vector3().setFromMatrixColumn(diffMat, 0);\r\n let angle = angleTo(XAxis, x);\r\n if (d.Type === GangDrillType.Pxl || d.Type === GangDrillType.WoodPXL)\r\n {\r\n if (isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, 1e-6)\r\n || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, 1e-6)\r\n || !IsBetweenA2B(position.z, 0, br.Thickness)\r\n || !outline.PtInCurve(position.clone().setZ(0))) return;\r\n\r\n position.sub(offsetTanslation);\r\n face = processData[EBoardKeyList.BigHole];\r\n isPush = true;\r\n }\r\n }\r\n else if (d.Type === GangDrillType.Ljg || d.Type === GangDrillType.Wood)\r\n {\r\n if (!isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n let z = position.z;\r\n if (!IsBetweenA2B(z, -d.Radius, br.Thickness + d.Radius, 1e-6)) return;\r\n let line = new Line(position.clone().setZ(0), position.clone().setZ(0).add(d.Normal.multiplyScalar(d.Height).applyMatrix4(roMat)));\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt) return;\r\n position = pt.clone().setZ(z);\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (outline.PtInCurve(p))\r\n {\r\n endPt = p.setZ(z);\r\n break;\r\n }\r\n }\r\n if (!endPt)\r\n {\r\n console.warn(\"排钻位置有问题\");\r\n return;\r\n }\r\n holes = data.sideHoles;\r\n face = Math.floor(outline.GetParamAtPoint(pt));\r\n isPush = true;\r\n depth = position.distanceTo(endPt);\r\n angle = undefined;\r\n\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n }\r\n else if (d.Type === GangDrillType.Wood)\r\n {\r\n if (!outline.PtInCurve(position.clone().setZ(0))) return;\r\n face = position.z > 0 ? FaceDirection.Front : FaceDirection.Back;\r\n holes = data.frontBackHoles;\r\n if (position.z > 0)\r\n {\r\n let z1 = position.z - d.Height;\r\n if (z1 > 0 && z1 < br.Thickness)\r\n {\r\n depth = br.Thickness - z1;\r\n isPush = true;\r\n }\r\n }\r\n else\r\n {\r\n let z1 = position.z + d.Height;\r\n if (z1 > 0 && z1 < br.Thickness)\r\n {\r\n depth = z1;\r\n isPush = true;\r\n }\r\n }\r\n position.sub(offsetTanslation);\r\n }\r\n }\r\n else\r\n {\r\n if (isParallelTo(d.Normal, br.Normal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, CanDrawHoleFuzz)\r\n || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, CanDrawHoleFuzz)\r\n || !IsBetweenA2B(position.z, 0, br.Thickness, -CanDrawHoleFuzz)\r\n || !outline.PtInCurve(position.clone().setZ(0))) return;\r\n position.sub(offsetTanslation);\r\n holes = data.frontBackHoles;\r\n face = !equalv3(d.Normal, brNormal, 1e-3) ? 0 : 1;\r\n isPush = true;\r\n }\r\n }\r\n isPush && holes.push({\r\n type: d.Type,\r\n position,\r\n radius: d.Radius,\r\n depth,\r\n face,\r\n endPt,\r\n angle\r\n });\r\n }\r\n\r\n /**分析自定义圆柱排钻 */\r\n function ParseExtrudeHoles(d: ExtrudeHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtureContourCurve)\r\n {\r\n if (!d.isHole)\r\n return;\r\n\r\n let brNormal = br.Normal;\r\n let cir = d.ContourCurve;\r\n if (cir instanceof Circle)\r\n {\r\n let diffMtx = br.OCSInv.multiply(d.OCS);\r\n let nor = d.Normal;\r\n let sp = cir.Center.applyMatrix4(diffMtx);\r\n let ep = cir.Center.add(new Vector3(0, 0, d.Height)).applyMatrix4(diffMtx);\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n if (isParallelTo(nor, brNormal))\r\n {\r\n let z0 = Math.min(sp.z, ep.z);\r\n let z1 = Math.max(sp.z, ep.z);\r\n let p = sp.clone().setZ(0).sub(offsetTanslation);\r\n\r\n if (Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6 && outline.PtInCurve(p))\r\n {\r\n let depth = z0 < 1e-2 ? z1 : br.Thickness - z0;\r\n let angle = angleTo(XAxis, x);\r\n if (equaln(angle, Math.PI))\r\n angle = 0;\r\n if (depth > 1e-2)\r\n data.frontBackHoles.push({\r\n type: d.isThrough ? GangDrillType.TK : GangDrillType.Ymj,\r\n position: z0 < 1e-6 ? p : p.setZ(br.Thickness),\r\n radius: cir.Radius,\r\n depth,\r\n face: z0 < 1e-6 ? DrillingFace.Back : DrillingFace.Front,\r\n angle: angle,\r\n });\r\n }\r\n }\r\n else\r\n {\r\n let oldZ = sp.z;\r\n let [minX, maxX] = sp.x < ep.x ? [sp.x, ep.x] : [ep.x, sp.x];\r\n let [minY, maxY] = sp.y < ep.y ? [sp.y, ep.y] : [ep.y, sp.y];\r\n\r\n\r\n if (sp.z > -cir.Radius\r\n && sp.z < br.Thickness + cir.Radius\r\n && Math.max(minX, 0) < Math.min(br.Width, maxX) + 1e-6\r\n && Math.max(minY, 0) < Math.min(br.Height, maxY) + 1e-6\r\n )\r\n {\r\n sp.setZ(0);\r\n ep.setZ(0);\r\n let line = new Line(sp, ep);\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt)\r\n {\r\n console.error(\"排钻嵌在板件内部\");\r\n return;\r\n }\r\n let position = pt.clone().setZ(oldZ);\r\n let endPt: Vector3;\r\n let face = Math.floor(outline.GetParamAtPoint(pt));\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (outline.PtInCurve(p))\r\n {\r\n endPt = p.setZ(oldZ);\r\n break;\r\n }\r\n }\r\n if (!endPt)\r\n return;\r\n let depth = position.distanceTo(endPt);\r\n\r\n if (equaln(depth, 0, 1e-2))\r\n return;\r\n\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n\r\n data.sideHoles.push({\r\n type: GangDrillType.Ljg,\r\n endPt,\r\n position,\r\n radius: cir.Radius,\r\n depth,\r\n face,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n function GetBoardMetals(br: Board)\r\n {\r\n let mids = br.RelativeHardware;\r\n let metalsData = {\r\n metals: 0,\r\n comp: 0\r\n };\r\n for (let id of mids)\r\n {\r\n if (!id || id.IsErase) continue;\r\n\r\n let metals = id.Object as HardwareCompositeEntity;\r\n if (!metals.HardwareOption)\r\n continue;\r\n if (metals.HardwareOption.type === EMetalsType.Metals)\r\n {\r\n metalsData.metals++;\r\n }\r\n else\r\n {\r\n metalsData.comp++;\r\n }\r\n }\r\n return metalsData;\r\n }\r\n\r\n export function GetHardwareCompositeData(en: HardwareCompositeEntity): ISpliteHardwareData\r\n {\r\n let size = en.BoundingBoxInOCS.getSize(new Vector3);\r\n let data = { ...en.HardwareOption } as ICompHardwareOption;\r\n const actualVal = safeEval(data.actualExpr, { L: size.x, W: size.y, H: size.z });\r\n data.actualExpr = actualVal ? actualVal.toString() : data.actualExpr;\r\n data.spec = ParseExpr(data.spec, { L: size.x, W: size.y, H: size.z });\r\n data.count = (safeEval(data.count, { L: size.x, W: size.y, H: size.z }) || 0).toString();\r\n\r\n let metalData = {\r\n metalsOption: data,\r\n dataList: en.DataList,\r\n children: [],\r\n size: size\r\n };\r\n if (en instanceof HardwareCompositeEntity && (en.HardwareOption.isSplite || en.HardwareOption.isSplitePrice))\r\n {\r\n if (en.Entitys.every(e => !(e instanceof HardwareCompositeEntity || e instanceof HardwareTopline)))\r\n return metalData;\r\n for (let e of en.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n let d = GetHardwareCompositeData(e);\r\n metalData.children.push(d);\r\n }\r\n else if (e instanceof HardwareTopline)\r\n {\r\n metalData.children.push(...GetHardwareToplineData(e));\r\n }\r\n }\r\n }\r\n\r\n return metalData;\r\n }\r\n\r\n export function GetHardwareToplineData(en: HardwareTopline)\r\n {\r\n let data = { ...en.HardwareOption } as IToplineOption;\r\n let datas: ISpliteHardwareData[] = [];\r\n let map = new Map();\r\n let addLen = en.HardwareOption.addLen;\r\n let cus = en.Segmentations;\r\n let size = en.BoundingBoxInOCS.getSize(new Vector3);\r\n for (let cu of cus)\r\n {\r\n let len = parseFloat(FixedNotZero(cu.Length, 2));\r\n if (map.has(len))\r\n {\r\n map.set(len, map.get(len) + 1);\r\n }\r\n else\r\n {\r\n map.set(len, 1);\r\n }\r\n }\r\n for (let [len, count] of map)\r\n {\r\n let totalLength = parseFloat(FixedNotZero(len + parseFloat(addLen), 2));\r\n let width = parseFloat(FixedNotZero(size.y, 2));\r\n let height = parseFloat(FixedNotZero(size.z, 2));\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d = { ...en.HardwareOption };\r\n const actualVal = safeEval(data.actualExpr, { L: totalLength, W: width, H: height });\r\n d.actualExpr = actualVal ? actualVal.toString() : d.actualExpr;\r\n d.spec = ParseExpr(data.spec, { L: totalLength, W: width, H: height });\r\n datas.push({\r\n metalsOption: d,\r\n dataList: en.DataList,\r\n length: totalLength,\r\n children: [],\r\n size\r\n });\r\n }\r\n }\r\n return datas;\r\n }\r\n\r\n /**获取排钻数量 */\r\n export function GetTotalDrillCount(brs: (Board | IHardwareType)[])\r\n {\r\n return lookOverBoardInfosTool.GetCount(brs);\r\n }\r\n\r\n export function GetCabSize(brList: Board[]): Map\r\n {\r\n let brMap: Map = new Map();\r\n //根据柜名房名分类\r\n for (let b of brList)\r\n {\r\n let k = b.BoardProcessOption[EBoardKeyList.RoomName] + '-' + b.BoardProcessOption[EBoardKeyList.CabinetName];\r\n if (brMap.has(k))\r\n brMap.get(k).push(b);\r\n else\r\n brMap.set(k, [b]);\r\n }\r\n\r\n let sizeData: Map = new Map();\r\n\r\n for (let [k, brs] of brMap)\r\n {\r\n let ocsInv = brs[0].SpaceOCSInv;\r\n let box = new Box3();\r\n let size = new Vector3();\r\n for (let b of brs)\r\n {\r\n sizeData.set(b, size);\r\n box.union(b.GetBoundingBoxInMtx(ocsInv));\r\n }\r\n box.getSize(size);\r\n }\r\n return sizeData;\r\n }\r\n export function Data2Polyline(data: IContourData, isClose = true)\r\n {\r\n let pl = new Polyline(data.pts.map((p, i) => ({ pt: new Vector2(p.x, p.y), bul: data.buls[i] })));\r\n if (isClose)\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n export function Report(ens: Entity[], msg: string)\r\n {\r\n if (IsDev()) return;\r\n ShowSelectObjects(ens);\r\n SendReport(msg);\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\n/**\r\n * 简化优化版本的曲线求交, 优化版本可以参考(算法导论33.2 确定任意一对线段是否相交 p599)\r\n */\r\nexport class CurveIntersection\r\n{\r\n //用来缓存的曲线包围盒\r\n protected boxMap: Map = new Map();\r\n\r\n /**\r\n * 交点数据集,key 为曲线 value 为和它相交的(曲线和交点的Map)\r\n */\r\n intersect: Map> = new Map();\r\n intersect2: Map = new Map();\r\n\r\n /**\r\n * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来\r\n * @memberof CurveIntersection\r\n */\r\n constructor(cus: Curve[], parseIntersectionParam = false, intType = IntersectOption.OnBothOperands, protected fuzz = 1e-6)\r\n {\r\n this.GenBox(cus);\r\n //按x排序\r\n this.SortCurve(cus);\r\n\r\n let count = cus.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let c1 = cus[i];\r\n let c1d = this.GetIntersect(c1);\r\n\r\n let c1b = this.boxMap.get(c1);\r\n for (let j = i + 1; j < count; j++)\r\n {\r\n let c2 = cus[j];\r\n\r\n //过滤掉不需要计算的曲线\r\n let c2b = this.boxMap.get(c2);\r\n\r\n if (c2b.min.x - c1b.max.x > fuzz)\r\n break;\r\n if (c2b.min.y - c1b.max.y > fuzz)\r\n continue;\r\n\r\n let ints = this.IntersectWith2(c1, c2, intType);\r\n if (ints.length > 0)\r\n {\r\n let pts = ints.map(i => i.pt);\r\n c1d.set(c2, pts);\r\n this.GetIntersect(c2).set(c1, pts);\r\n\r\n if (parseIntersectionParam)\r\n {\r\n this.AppendIntersectionParams(c1, ints.map(i => i.thisParam));\r\n this.AppendIntersectionParams(c2, ints.map(i => i.argParam));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected IntersectWith2(c1: Curve, c2: Curve, intType: IntersectOption)\r\n {\r\n return c1.IntersectWith2(c2, intType);\r\n }\r\n\r\n protected AppendIntersectionParams(curve: Curve, params: number[])\r\n {\r\n let arr = this.intersect2.get(curve);\r\n if (!arr)\r\n {\r\n arr = [];\r\n this.intersect2.set(curve, arr);\r\n }\r\n arr.push(...params);\r\n }\r\n\r\n protected GenBox(cus: Curve[])\r\n {\r\n for (let c of cus)\r\n this.boxMap.set(c, c.BoundingBox);\r\n }\r\n\r\n protected SortCurve(cus: Curve[])\r\n {\r\n cus.sort((c1, c2) =>\r\n {\r\n return this.boxMap.get(c1).min.x - this.boxMap.get(c2).min.x;\r\n });\r\n }\r\n\r\n GetIntersect(cu: Curve): Map\r\n {\r\n if (this.intersect.has(cu))\r\n return this.intersect.get(cu);\r\n\r\n let m = new Map();\r\n this.intersect.set(cu, m);\r\n return m;\r\n }\r\n}\r\n\r\nexport class CurveIntersection2 extends CurveIntersection\r\n{\r\n /**\r\n * Curve2Polyline使用这个时,为了避免多余的交点导致曲线切割过度,过滤掉无关的点\r\n */\r\n protected IntersectWith2(c1: Curve, c2: Curve, intType: IntersectOption)\r\n {\r\n let pts = c1.IntersectWith2(c2, intType);\r\n return pts.filter(p =>\r\n {\r\n let inC1 = c1.ParamOnCurve(p.thisParam) || c1.StartPoint.distanceTo(p.pt) < this.fuzz || c1.EndPoint.distanceTo(p.pt) < this.fuzz;\r\n if (!inC1) return false;\r\n let inC2 = c2.ParamOnCurve(p.argParam) || c2.StartPoint.distanceTo(p.pt) < this.fuzz || c2.EndPoint.distanceTo(p.pt) < this.fuzz;\r\n return inC2;\r\n });\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Polyline } from \"../api\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\nimport { CurveIntersection2 } from \"./CurveIntersection\";\r\nimport { RegionParse } from \"./RegionParse\";\r\n\r\n/**\r\n * 某些时候我们不能创建轮廓,此时我们使用类似c2r的方法来构建一个外部轮廓.\r\n */\r\nexport function CreateContour2(curves: Curve[], fuzz = 1e-4): Contour | undefined\r\n{\r\n let extendsMinDistSq = fuzz * fuzz;\r\n\r\n let intersect = new CurveIntersection2(curves, false, IntersectOption.ExtendBoth, fuzz);\r\n\r\n let curves2: Curve[] = [];\r\n\r\n //延伸+打断\r\n for (let [cu, pmap] of intersect.intersect)\r\n {\r\n let sp = cu.StartPoint;\r\n let ep = cu.EndPoint;\r\n\r\n let epExtend: Vector3;\r\n let epDist = Infinity;\r\n let spExtend: Vector3;\r\n let spDist = Infinity;\r\n\r\n let isClose = cu.IsClose;\r\n\r\n let ipts: Vector3[] = [];\r\n for (let [, pts] of pmap)\r\n {\r\n ipts.push(...pts);\r\n\r\n if (!isClose)\r\n for (let p of pts)\r\n {\r\n let d = p.distanceToSquared(ep);\r\n if (d < epDist)\r\n {\r\n epDist = d;\r\n epExtend = p;\r\n }\r\n d = p.distanceToSquared(sp);\r\n if (d < spDist)\r\n {\r\n spDist = d;\r\n spExtend = p;\r\n }\r\n }\r\n }\r\n\r\n if (!isClose)\r\n {\r\n //延伸\r\n if (epDist > 0 && epDist < extendsMinDistSq)\r\n {\r\n let param = cu.GetParamAtPoint(epExtend);\r\n if (param > cu.EndParam)\r\n cu.Extend(param);\r\n }\r\n if (spDist > 0 && spDist < extendsMinDistSq)\r\n {\r\n let param = cu.GetParamAtPoint(spExtend);\r\n if (param < 0)\r\n cu.Extend(param);\r\n }\r\n }\r\n\r\n //打断\r\n let curves: Curve[];\r\n if (ipts.length > 0)\r\n curves = cu.GetSplitCurvesByPts(ipts);\r\n else\r\n curves = [cu];\r\n\r\n let tempCus: Curve[] = [];\r\n for (let c of curves)\r\n {\r\n if (c instanceof Polyline)\r\n tempCus.push(...c.Explode());\r\n else\r\n tempCus.push(c);\r\n }\r\n\r\n curves2.push(...tempCus);\r\n }\r\n\r\n let parse = new RegionParse(curves2);\r\n\r\n for (let rs of parse.RegionsOutline)\r\n {\r\n let curves = rs.map(r => r.curve);\r\n return Contour.CreateContour(curves, false);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, Shape as TShape, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../Common/ArrayExt\";\r\nimport { curveLinkGroup } from \"../Common/CurveUtils\";\r\nimport { clamp, FixIndex } from \"../Common/Utils\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid, ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { IntersectOption, IntersectResult } from \"../GraphicsSystem/IntersectWith\";\r\nimport { LinesType } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectsBox } from \"./Box\";\r\nimport { CreateContour2 } from \"./CreateContour2\";\r\nimport { AsVector2, equaln, equalv2, equalv3, IdentityMtx4 } from \"./GeUtils\";\r\nimport { RegionParse } from \"./RegionParse\";\r\n\r\nexport enum DepthType\r\n{\r\n Front = 1,\r\n Back = 2,\r\n All = 3,\r\n}\r\n\r\n/**\r\n * 槽的几何数据,包括槽的墙面和槽的盖子\r\n */\r\nexport class Groove\r\n{\r\n contourWall: ExtudeWall;//槽轮廓的墙\r\n holeWalls: ExtudeWall[] = [];//槽的网洞的墙\r\n private lid: CurveTapeShape;//槽的盖子\r\n constructor(contour: Contour,\r\n holes: Contour[],\r\n public depthType: DepthType,\r\n public depth: number,\r\n public allDepth: number,\r\n private box = contour.BoundingBox\r\n )\r\n {\r\n this.contourWall = new ExtudeWall(contour.Curve, depthType, depth, allDepth, DirectionType.Inner);\r\n for (let h of holes)\r\n this.holeWalls.push(new ExtudeWall(h.Curve, depthType, depth, allDepth, DirectionType.Outer));\r\n\r\n this.lid = new CurveTapeShape(contour, holes);\r\n }\r\n\r\n /**\r\n * @param groove this - groove\r\n * @param [eachOther=true] 相互裁剪\r\n */\r\n ClipTo(groove: Groove, eachOther = true)\r\n {\r\n //相同深度和面不用操作\r\n if (groove.depthType === this.depthType && groove.depth === this.depth) return;\r\n\r\n if (!IntersectsBox(this.box, groove.box)) return;\r\n\r\n this.ClipLid(groove);\r\n groove.ClipLid(this);\r\n\r\n //一正一反,不交集\r\n if (this.depthType + groove.depthType === 3 && this.depth + groove.depth < this.allDepth)\r\n return;\r\n\r\n this.contourWall.ClipTo(groove, true);\r\n for (let wall of this.holeWalls)\r\n wall.ClipTo(groove, true);\r\n\r\n if (eachOther)\r\n {\r\n groove.contourWall.ClipTo(this, false);\r\n for (let wall of groove.holeWalls)\r\n wall.ClipTo(this, false);\r\n }\r\n }\r\n\r\n private ClipLid(groove: Groove)\r\n {\r\n if (this.depthType === DepthType.All) return;\r\n if (groove.depthType === DepthType.All) return;\r\n\r\n if (this.depthType === groove.depthType)\r\n {\r\n if (groove.depth > this.depth)\r\n this.lid.ClipTo(groove.lid, true);\r\n else\r\n this.lid.SplitTo(groove.lid);\r\n }\r\n else\r\n {\r\n if (this.depth + groove.depth >= this.allDepth)\r\n this.lid.ClipTo(groove.lid, true);\r\n else\r\n this.lid.SplitTo(groove.lid);\r\n }\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild, rotateUv: boolean)\r\n {\r\n this.contourWall.Draw(verticesArray, uvArray, edgeBuild);\r\n for (let wall of this.holeWalls)\r\n wall.Draw(verticesArray, uvArray, edgeBuild);\r\n\r\n if (this.depthType === DepthType.All) return;\r\n\r\n let isFront = this.depthType === DepthType.Front;\r\n this.lid.Draw(verticesArray, uvArray, isFront, isFront ? this.allDepth - this.depth : this.depth, rotateUv);\r\n }\r\n}\r\n\r\nfunction GetShape(cu: ExtureContourCurve): TShape\r\n{\r\n if (cu instanceof Circle)\r\n {\r\n let sp = new TShape();\r\n let cen = cu.Center;\r\n sp.ellipse(cen.x, cen.y, cu.Radius, cu.Radius, 0, 2 * Math.PI, false, 0);\r\n return sp;\r\n }\r\n else\r\n {\r\n if (cu.OCSNoClone !== IdentityMtx4)\r\n cu.UpdateMatrixTo(IdentityMtx4);\r\n return cu.Shape;\r\n }\r\n}\r\n\r\nfunction CreateTape(faceType: DepthType, startParam: number, endParam: number, depth: number, allDepth: number): Tape\r\n{\r\n if (faceType === DepthType.Front)\r\n return new Tape(startParam, endParam, allDepth - depth, allDepth);\r\n else\r\n return new Tape(startParam, endParam, 0, depth);\r\n}\r\n\r\n//朝向类型\r\nenum DirectionType\r\n{\r\n Outer = 0,//外墙\r\n Inner = 1 //内墙\r\n}\r\n\r\n//轮廓树节点,用于重新确认外墙和网洞的关系\r\nexport class ContourTreeNode\r\n{\r\n parent: ContourTreeNode;//当存在Parent时,表示它是一个洞\r\n constructor(public contour: Contour, public children: ContourTreeNode[] = []) { }\r\n\r\n SetParent(node: ContourTreeNode)\r\n {\r\n this.parent = node;\r\n node.children.push(this);\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean)//, depth = 1\r\n {\r\n // TestDraw(this.contour.Curve, depth);\r\n let pts = this.contour.Curve.GetStretchPoints();\r\n\r\n let vertices = [...pts];\r\n let holes = this.children.map(h =>\r\n {\r\n // TestDraw(h.contour.Curve, depth + 1);\r\n let pts = h.contour.Curve.GetStretchPoints();\r\n vertices.push(...pts);\r\n return pts;\r\n });\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, holes);\r\n\r\n for (let f of faces)\r\n {\r\n if (front)\r\n {\r\n AddVertice(vertices[f[0]]);\r\n AddVertice(vertices[f[1]]);\r\n AddVertice(vertices[f[2]]);\r\n }\r\n else\r\n {\r\n AddVertice(vertices[f[0]]);\r\n AddVertice(vertices[f[2]]);\r\n AddVertice(vertices[f[1]]);\r\n }\r\n }\r\n\r\n function AddVertice(v: Vector3)\r\n {\r\n verticesArray.push(v.x, v.y, z);\r\n if (rotateUv)\r\n uvArray.push(v.y * 1e-3, v.x * 1e-3);\r\n else\r\n uvArray.push(v.x * 1e-3, v.y * 1e-3);\r\n }\r\n\r\n for (let hole of this.children)\r\n {\r\n for (let h of hole.children)\r\n {\r\n h.Draw(verticesArray, uvArray, front, z, rotateUv);//, depth + 2\r\n }\r\n }\r\n }\r\n\r\n static ParseContourTree(contourNodes: ContourTreeNode[]): void\r\n {\r\n contourNodes.sort((c1, c2) => c1.contour.Curve.Area - c2.contour.Curve.Area);\r\n for (let i = 0; i < contourNodes.length; i++)\r\n {\r\n const node1 = contourNodes[i];\r\n let p = node1.contour.Curve.StartPoint;\r\n for (let j = i + 1; j < contourNodes.length; j++)\r\n {\r\n const node2 = contourNodes[j];\r\n if (node2.contour.BoundingBox.intersectsBox(node1.contour.BoundingBox)\r\n && node2.contour.Curve.PtInCurve(p))\r\n {\r\n node1.SetParent(node2);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass EdgeGeometryBuild\r\n{\r\n lineVerticesArray: number[] = [];\r\n\r\n frontLines: Line[] = [];\r\n backLines: Line[] = [];\r\n constructor(public allDepth: number) { }\r\n AddLidLine(p1: Vector3, p2: Vector3, depth: number)\r\n {\r\n if (depth === 0)\r\n {\r\n p1 = p1.clone().setZ(0);\r\n p2 = p2.clone().setZ(0);\r\n let line = new Line(p1, p2);\r\n this.backLines.push(line);\r\n }\r\n else if (depth === this.allDepth)\r\n {\r\n p1 = p1.clone().setZ(0);\r\n p2 = p2.clone().setZ(0);\r\n let line = new Line(p1, p2);\r\n this.frontLines.push(line);\r\n }\r\n }\r\n\r\n BuildLid(verticesArray: number[], uvArray: number[], rotateUv: boolean)\r\n {\r\n let arr = [this.backLines, this.frontLines];\r\n\r\n for (let index = 0; index < 2; index++)\r\n {\r\n let lines = arr[index];\r\n let parse = new RegionParse(lines, 2);\r\n let contourNodes: ContourTreeNode[] = [];\r\n for (let routes of parse.RegionsOutline)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false) ?? CreateContour2(cs);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"未能构建盖子\");\r\n }\r\n\r\n ContourTreeNode.ParseContourTree(contourNodes);\r\n\r\n for (let j = contourNodes.length; j--;)\r\n {\r\n let node = contourNodes[j];\r\n if (node.parent) continue;\r\n\r\n node.Draw(verticesArray, uvArray, index === 1, this.allDepth * index, rotateUv);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 胶带\r\n */\r\nclass Tape\r\n{\r\n constructor(\r\n public start: number,\r\n public end: number,\r\n\r\n public bottom: number,\r\n public top: number\r\n )\r\n {\r\n\r\n }\r\n\r\n //用于测试\r\n get Curve()\r\n {\r\n return new Polyline().RectangleFrom2Pt(new Vector3(this.start, this.bottom), new Vector3(this.end, this.top));\r\n }\r\n\r\n Clip(t: this): Tape[]\r\n {\r\n let yr = IntersectRange(this.bottom, this.top, t.bottom, t.top, 1e5);\r\n if (yr === undefined) return [this];\r\n\r\n let xr = IntersectRange(this.start, this.end, t.start, t.end, 1e5);\r\n if (xr === undefined) return [this];\r\n\r\n let rem = SubtractRange(this.start, this.end, t.start, t.end, 1e5).map(r =>\r\n {\r\n return new Tape(r[0], r[1], this.bottom, this.top);\r\n });\r\n\r\n let remR = SubtractRange(this.bottom, this.top, t.bottom, t.top, 1e5);\r\n for (let hr of remR)\r\n {\r\n rem.push(new Tape(xr[0], xr[1], hr[0], hr[1]));\r\n }\r\n return rem;\r\n }\r\n\r\n Split(xlst: number[]): Tape[]\r\n {\r\n let ret: Tape[] = [];\r\n let pre = this.start;\r\n for (let x of xlst)\r\n {\r\n if (x > pre)\r\n {\r\n if (x >= this.end) x = this.end;\r\n if (equaln(pre, x)) continue;\r\n ret.push(new Tape(pre, x, this.bottom, this.top));\r\n pre = x;\r\n if (x === this.end) break;\r\n }\r\n }\r\n return ret;\r\n }\r\n}\r\n\r\n/**\r\n * 二维形状,内部用曲线胶带表示(用来计算盖子差集算法)\r\n */\r\nexport class CurveTapeShape\r\n{\r\n children: CurveTapeShape[] = [];\r\n contour: CurveTape;\r\n holes: CurveTape[];\r\n constructor(contour: Contour, holes: Contour[])\r\n {\r\n this.contour = new CurveTape(contour, DirectionType.Outer);\r\n this.holes = holes.map(h => new CurveTape(h, DirectionType.Inner));\r\n }\r\n\r\n CloneNew()\r\n {\r\n let s = new CurveTapeShape(this.contour.contour, this.holes.map(h => h.contour));\r\n return s;\r\n }\r\n\r\n /**\r\n * 删除包含,同向\r\n */\r\n ClipTo(s: CurveTapeShape, append: boolean = false)\r\n {\r\n for (let c of [this.contour, ... this.holes])\r\n if (c.tapes.length > 0)\r\n c.ClipTo(s);\r\n\r\n if (append)\r\n {\r\n let sn = s.CloneNew();\r\n sn.ReverseClipTo(this);\r\n this.children.push(sn);\r\n }\r\n }\r\n\r\n //合理打断(以保证三维网格对齐(否则圆弧点将无法正确的对齐))\r\n SplitTo(s: CurveTapeShape)\r\n {\r\n for (let c of [this.contour, ...this.holes])\r\n {\r\n for (let c2 of [s.contour, ...s.holes])\r\n {\r\n let int = GetIntersection(c.contour.Curve, c2.contour.Curve);\r\n c.splitParams.push(...int.map(i => i.thisParam));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 只保留被包含部分\r\n */\r\n private ReverseClipTo(s: CurveTapeShape): this\r\n {\r\n for (let c of [this.contour, ... this.holes])\r\n if (c.tapes.length > 0)\r\n c.ReverseClipTo(s);\r\n\r\n return this;\r\n }\r\n\r\n ChildrenClip()\r\n {\r\n for (let i = 0; i < this.children.length; i++)\r\n {\r\n let s1 = this.children[i];\r\n for (let j = i + 1; j < this.children.length; j++)\r\n {\r\n let s2 = this.children[j];\r\n\r\n s1.ClipTo(s2, false);\r\n s2.ClipTo(s1, false);\r\n }\r\n }\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean)\r\n {\r\n this.ChildrenClip();\r\n\r\n let polylines: Polyline[] = this.contour.Curves;\r\n\r\n for (let h of this.holes)\r\n polylines.push(...h.Curves);\r\n\r\n for (let s of this.children)\r\n {\r\n polylines.push(...s.contour.Curves);\r\n for (let h of s.holes)\r\n polylines.push(...h.Curves);\r\n }\r\n\r\n // TestDraw(polylines, z);\r\n let groups = curveLinkGroup(polylines);\r\n let contourNodes: ContourTreeNode[] = [];\r\n for (let cus of groups)\r\n {\r\n let c = Contour.CreateContour(cus, false);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"出错\");\r\n }\r\n\r\n ContourTreeNode.ParseContourTree(contourNodes);\r\n\r\n for (let j = contourNodes.length; j--;)\r\n {\r\n let node = contourNodes[j];\r\n // TestDraw(s.contour.Curve.Clone(), z);\r\n if (node.parent) continue;\r\n\r\n node.Draw(verticesArray, uvArray, front, z, rotateUv);\r\n }\r\n }\r\n}\r\n\r\nconst SplitLength = 4;\r\nconst MinSplitCount = 12;\r\nconst MaxSplitCount = 360;\r\nfunction SplitCurveParams(cu: ExtureContourCurve): number[]\r\n{\r\n let xparams: number[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), MinSplitCount, MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n xparams.push(i / splitCount);\r\n }\r\n else\r\n //分段1\r\n for (let i = 0; i < cu.EndParam; i++)\r\n {\r\n xparams.push(i);\r\n if (cu.GetBuilgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), MinSplitCount, MaxSplitCount);\r\n if (splitCount === 0) continue;\r\n\r\n let a = Math.PI * 2 / splitCount;\r\n let params: number[] = [];\r\n for (let j = 0; j < splitCount; j++)\r\n {\r\n let param = arc.GetParamAtAngle(a * j);\r\n if (arc.ParamOnCurve(param))\r\n params.push(param);\r\n }\r\n arraySortByNumber(params);\r\n if (params.length === 0) continue;\r\n\r\n for (let p of params)\r\n {\r\n if (p > 1e-5 && p < 9.99999)\r\n xparams.push(p + i);\r\n }\r\n }\r\n }\r\n xparams.push(cu.EndParam);\r\n return xparams;\r\n}\r\n\r\n/**\r\n * 曲线胶带(一维)\r\n */\r\nclass CurveTape\r\n{\r\n tapes: Range[];\r\n splitParams: number[] = [];\r\n constructor(public contour: Contour, public wallType: DirectionType)\r\n {\r\n this.tapes = [[0, this.contour.Curve.EndParam]];\r\n }\r\n\r\n get Curves(): Polyline[]\r\n {\r\n let xparams: number[] = SplitCurveParams(this.contour.Curve);\r\n if (this.splitParams.length > 0)\r\n {\r\n xparams.push(...this.splitParams);\r\n arraySortByNumber(xparams);\r\n arrayRemoveDuplicateBySort(xparams, (p1, p2) => equaln(p1, p2));\r\n }\r\n\r\n let polylines: Polyline[] = [];\r\n\r\n function TD(p: Vector3): PolylineProps\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n }\r\n\r\n const addPolyline = (t: Range) =>\r\n {\r\n let pts = [TD(this.contour.Curve.GetPointAtParam(t[0]))];\r\n for (let x of xparams)\r\n {\r\n if (x <= t[0]) continue;\r\n if (x >= t[1]) break;\r\n\r\n pts.push(TD(this.contour.Curve.GetPointAtParam(x)));\r\n }\r\n pts.push(TD(this.contour.Curve.GetPointAtParam(t[1])));\r\n\r\n let pl = new Polyline(pts);\r\n polylines.push(pl);\r\n };\r\n\r\n for (let t of this.tapes)\r\n {\r\n if (t[0] > t[1])\r\n {\r\n addPolyline([0, t[1]]);\r\n addPolyline([t[0], this.contour.Curve.EndParam]);\r\n }\r\n else\r\n addPolyline(t);\r\n }\r\n return polylines;\r\n }\r\n\r\n /**\r\n * 分析与另一个形状的包含关系\r\n */\r\n Parse(s: CurveTapeShape): CurveParamRangeRelation\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.contour.Curve, s.contour.contour.Curve);\r\n if (this.wallType === DirectionType.Inner)\r\n [res1.syntropy, res1.reverse] = [res1.reverse, res1.syntropy];\r\n if (res1.container.length > 0)\r\n {\r\n for (let h of s.holes)\r\n {\r\n let [res2] = ParseCurveParamRangeRelation(this.contour.Curve, h.contour.Curve);\r\n if (this.wallType === DirectionType.Outer)\r\n [res2.syntropy, res2.reverse] = [res2.reverse, res2.syntropy];\r\n\r\n res1.syntropy.push(...res2.syntropy);\r\n res1.reverse.push(...res2.reverse);\r\n\r\n res1.container = SubtractRanges(res1.container, res2.container, this.contour.Curve.EndParam);\r\n res1.container = SubtractRanges(res1.container, res2.syntropy, this.contour.Curve.EndParam);\r\n res1.container = SubtractRanges(res1.container, res2.reverse, this.contour.Curve.EndParam);\r\n }\r\n }\r\n return res1;\r\n }\r\n\r\n /**\r\n * 删除包含,同向面\r\n */\r\n ClipTo(s: CurveTapeShape): this\r\n {\r\n let d = this.Parse(s);\r\n\r\n this.tapes = SubtractRanges(this.tapes, d.container, this.contour.Curve.EndParam);\r\n this.tapes = SubtractRanges(this.tapes, d.syntropy, this.contour.Curve.EndParam);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 保留被包含的部分\r\n */\r\n ReverseClipTo(s: CurveTapeShape): this\r\n {\r\n this.tapes = this.Parse(s).container;\r\n return this;\r\n }\r\n}\r\n\r\nclass ExtudeWall\r\n{\r\n //胶带(立面)\r\n private Tape: Tape[];\r\n constructor(public curve: ExtureContourCurve,\r\n public depthType: DepthType,\r\n public depth: number,\r\n public allDepth: number,\r\n public wallType: DirectionType\r\n )\r\n {\r\n //一整段\r\n this.Tape = [CreateTape(depthType, 0, this.curve.EndParam, depth, allDepth)];\r\n }\r\n\r\n /**\r\n * 减去在另一个groove内的部分\r\n * @param groove this - groove\r\n * @param [clipSyntropy=false] 删除同向的面\r\n */\r\n ClipTo(groove: Groove, clipSyntropy = false)\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.curve, groove.contourWall.curve);\r\n if (this.wallType !== groove.contourWall.wallType)\r\n [res1.syntropy, res1.reverse] = [res1.reverse, res1.syntropy];\r\n if (res1.container.length > 0)\r\n {\r\n for (let h of groove.holeWalls)\r\n {\r\n let [resh1] = ParseCurveParamRangeRelation(this.curve, h.curve);\r\n\r\n //翻转\r\n if (this.wallType !== h.wallType)\r\n [resh1.syntropy, resh1.reverse] = [resh1.reverse, resh1.syntropy];\r\n\r\n //删除在网洞内的\r\n let subParams: [number, number][];\r\n if (clipSyntropy)\r\n subParams = resh1.container;//删除共面,\r\n else\r\n subParams = [...resh1.container, ...resh1.syntropy];//保留共面部分\r\n\r\n for (let i of subParams)\r\n {\r\n let rems: [number, number][] = [];\r\n for (let r of res1.container)\r\n rems.push(...SubtractRange(r[0], r[1], i[0], i[1], this.curve.EndParam));\r\n res1.container = rems;\r\n }\r\n }\r\n }\r\n\r\n let params = [...res1.container, ...res1.reverse];\r\n if (clipSyntropy)\r\n params.push(...res1.syntropy);\r\n\r\n for (let c of params)\r\n this.ClipFromParam(c[0], c[1], groove.depthType, groove.depth);\r\n }\r\n\r\n ClipReverse(wall: this)\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.curve, wall.curve);\r\n for (let c of res1.syntropy)\r\n this.ClipFromParam(c[0], c[1], wall.depthType, wall.depth);\r\n }\r\n\r\n /**\r\n * 当起始参数大于终止参数时,裁剪的区域经过终点\r\n *\r\n * @param startParam 起始参数\r\n * @param endParam 终止参数\r\n * @param faceType 裁剪面朝向\r\n * @param depth 裁剪面的深度\r\n */\r\n ClipFromParam(startParam: number, endParam: number, faceType: DepthType, depth: number)\r\n {\r\n if (equaln(startParam, endParam)) return;\r\n if (startParam > endParam)\r\n {\r\n this.ClipFromParam(startParam, this.curve.EndParam, faceType, depth);\r\n this.ClipFromParam(0, endParam, faceType, depth);\r\n return this;\r\n }\r\n\r\n let subTape = CreateTape(faceType, startParam, endParam, depth, this.allDepth);\r\n let taps: Tape[] = [];\r\n for (let t of this.Tape)\r\n taps.push(...t.Clip(subTape));\r\n\r\n this.Tape = taps;\r\n return this;\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild)\r\n {\r\n let xparams = SplitCurveParams(this.curve);\r\n\r\n function AddVertice(v: Vector3)\r\n {\r\n verticesArray.push(v.x);\r\n verticesArray.push(v.y);\r\n verticesArray.push(v.z);\r\n }\r\n\r\n let tapes: Tape[] = [];\r\n this.Tape.sort((t1, t2) => t1.start - t2.start);\r\n for (let tape of this.Tape)\r\n tapes.push(...tape.Split(xparams));\r\n for (let i = 0; i < tapes.length; i++)\r\n {\r\n let preIndex = FixIndex(i - 1, tapes);\r\n let nextIndex = FixIndex(i + 1, tapes);\r\n\r\n let tape = tapes[i];\r\n let preTape = tapes[preIndex];\r\n let nextTape = tapes[nextIndex];\r\n\r\n let p1 = this.curve.GetPointAtParam(tape.start).setZ(tape.bottom);\r\n let p2 = this.curve.GetPointAtParam(tape.end).setZ(tape.bottom);\r\n let vs = [p1, p2, p2.clone().setZ(tape.top), p1.clone().setZ(tape.top), p1];\r\n edgeBuild.AddLidLine(p1, p2, tape.bottom);\r\n edgeBuild.AddLidLine(p1, p2, tape.top);\r\n\r\n //#region 构造线框\r\n {\r\n let leftRanges: Range[];\r\n let rightRange: Range[];\r\n\r\n const IsInteger = (n: number) => equaln(n, Math.round(n), 1e-8);\r\n\r\n if (!IsInteger(tape.start) && equaln(tape.start, preTape.end))\r\n leftRanges = SubtractRange(tape.bottom, tape.top, preTape.bottom, preTape.top, this.allDepth);\r\n else\r\n leftRanges = [[tape.bottom, tape.top]];\r\n\r\n if (equaln(tape.end, nextTape.start))\r\n rightRange = SubtractRange(tape.bottom, tape.top, nextTape.bottom, nextTape.top, this.allDepth);\r\n else\r\n rightRange = [[tape.bottom, tape.top]];\r\n\r\n //上下两条线\r\n edgeBuild.lineVerticesArray.push(\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n\r\n p1.x, p1.y, tape.top,\r\n p2.x, p2.y, tape.top,\r\n );\r\n\r\n //左右线\r\n for (let range of leftRanges)\r\n {\r\n edgeBuild.lineVerticesArray.push(\r\n p1.x, p1.y, range[0],\r\n p1.x, p1.y, range[1]);\r\n }\r\n for (let range of rightRange)\r\n {\r\n edgeBuild.lineVerticesArray.push(\r\n p2.x, p2.y, range[0],\r\n p2.x, p2.y, range[1]);\r\n }\r\n }\r\n //#endregion\r\n\r\n //和X平行平行\r\n let isXPar = (vs[0].y + vs[1].y + vs[2].y) < 0.01;\r\n\r\n function AddUv(p: Vector3)\r\n {\r\n if (isXPar)\r\n uvArray.push((p.z - 1) * 1e-3, p.y * 1e-3);\r\n else\r\n uvArray.push((p.z - 1) * 1e-3, p.x * 1e-3);\r\n }\r\n if (this.wallType === DirectionType.Outer)\r\n {\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[1]);\r\n AddUv(vs[1]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n AddVertice(vs[3]);\r\n AddUv(vs[3]);\r\n }\r\n else\r\n {\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n AddVertice(vs[1]);\r\n AddUv(vs[1]);\r\n\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[3]);\r\n AddUv(vs[3]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 曲线参数范围关系(包含,分离,同向共线,反向共线)\r\n * 用来表示某一曲线在另一个曲线内的关系\r\n */\r\ninterface CurveParamRangeRelation\r\n{\r\n outer: Range[];//外部\r\n container: Range[];//被包含\r\n syntropy: Range[];//同向\r\n reverse: Range[];//反向\r\n}\r\n\r\nfunction CloneCurveRange(r: CurveParamRangeRelation): CurveParamRangeRelation\r\n{\r\n return {\r\n outer: r.outer.slice(),\r\n container: r.container.slice(),\r\n syntropy: r.syntropy.slice(),\r\n reverse: r.reverse.slice(),\r\n };\r\n}\r\n\r\ninterface CurveSegs\r\n{\r\n outer: Curve[];//外部\r\n container: Curve[];//被包含\r\n syntropy: Curve[];//同向\r\n reverse: Curve[];//反向\r\n}\r\n\r\nfunction binarySearch(ar: number[], el: number): number\r\n{\r\n let m = 0;\r\n let n = ar.length - 1;\r\n while (m <= n)\r\n {\r\n let k = (n + m) >> 1;\r\n let cmp = (el - ar[k]);\r\n if (cmp > 1e8)\r\n m = k + 1;\r\n else if (cmp < -1e8)\r\n n = k - 1;\r\n else\r\n return k;\r\n }\r\n return -m - 1;\r\n}\r\n\r\nfunction CurveSplit(cu: Curve, range: CurveParamRangeRelation): CurveSegs\r\n{\r\n let segs = { outer: [], container: [], syntropy: [], reverse: [] };\r\n\r\n let ranges: Range[] = [...range.outer, ...range.container, ...range.syntropy, ...range.reverse];\r\n\r\n ranges.sort((r1, r2) => r1[0] - r2[0]);\r\n\r\n let params: number[] = ranges.flat();\r\n arrayRemoveDuplicateBySort(params, (p1, p2) => equaln(p1, p2));\r\n let cus = cu.GetSplitCurves(params);\r\n\r\n for (let key in range)\r\n {\r\n for (let r of range[key])\r\n {\r\n let i = binarySearch(params, r[0]);\r\n segs[key].push(cus[i]);\r\n }\r\n }\r\n\r\n return segs;\r\n}\r\n\r\n/**\r\n * 分析两个曲线关系(包含,分离,同向共线,反向共线)(用参数范围表示)\r\n */\r\nfunction ParseCurveParamRangeRelation(cu1: ExtureContourCurve, cu2: ExtureContourCurve, reverseParse = false): [CurveParamRangeRelation, CurveParamRangeRelation]\r\n{\r\n let ins = GetIntersection(cu1, cu2);\r\n\r\n let c1Res: CurveParamRangeRelation = { container: [], syntropy: [], reverse: [], outer: [] };\r\n let c2Res: CurveParamRangeRelation = { container: [], syntropy: [], reverse: [], outer: [] };\r\n if (ins.length === 0)\r\n {\r\n if (cu1 instanceof Circle && cu2 instanceof Circle && equaln(cu1.Radius, cu2.Radius, 1e-4) && equalv2(cu1.Center, cu2.Center, 1e-4))\r\n {\r\n c1Res.syntropy.push([0, 1]);\r\n c2Res.syntropy.push([0, 1]);\r\n return [c1Res, c2Res];\r\n }\r\n\r\n if (cu2.PtInCurve(cu1.StartPoint))\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (cu1.PtInCurve(cu2.StartPoint))\r\n c2Res.container.push([0, cu2.EndParam]);\r\n else\r\n c2Res.outer.push([0, cu2.EndParam]);\r\n\r\n return [c1Res, c2Res];\r\n }\r\n\r\n type CurveSeg = {\r\n startParam: number;\r\n endParam: number;\r\n startPoint: Vector3;\r\n endPoint: Vector3;\r\n used?: boolean;\r\n };\r\n\r\n //解析出线段列表\r\n let c1Curves: CurveSeg[] = [];\r\n let c2Curves: CurveSeg[] = [];\r\n\r\n ins.sort((a1, a2) => a1.thisParam - a2.thisParam);\r\n //点重复->下方ins会sort,导致交点对应不上,导致错误\r\n arrayRemoveDuplicateBySort(ins, (i1, i2) => equalv3(i1.pt, i2.pt, 1e-4));\r\n if (ins.length > 1 && equalv3(ins[0].pt, ins[ins.length - 1].pt, 1e-4)) ins.pop();\r\n for (let i = 0; i < ins.length; i++)\r\n {\r\n let n1 = ins[i];\r\n let n2 = ins[FixIndex(i + 1, ins)];\r\n c1Curves.push({ startParam: n1.thisParam, endParam: n2.thisParam, startPoint: n1.pt, endPoint: n2.pt });\r\n }\r\n ins.sort((a1, a2) => a1.argParam - a2.argParam);\r\n for (let i = 0; i < ins.length; i++)\r\n {\r\n let n1 = ins[i];\r\n let n2 = ins[FixIndex(i + 1, ins)];\r\n c2Curves.push({ startParam: n1.argParam, endParam: n2.argParam, startPoint: n1.pt, endPoint: n2.pt });\r\n }\r\n\r\n //分析共边关系和包含关系\r\n for (let c of c1Curves)\r\n {\r\n let c1MidPoint = CenterPoint(cu1, c.startParam, c.endParam);\r\n for (let c2 of c2Curves)\r\n {\r\n if (c2.used)\r\n continue;\r\n\r\n let c2MidPoint = CenterPoint(cu2, c2.startParam, c2.endParam);\r\n if (!equalv3(c1MidPoint, c2MidPoint, 1e-4))\r\n continue;\r\n\r\n c.used = true;\r\n if (c.startPoint === c2.startPoint\r\n && c.endPoint === c2.endPoint)\r\n {\r\n c1Res.syntropy.push([c.startParam, c.endParam]);\r\n c2Res.syntropy.push([c2.startParam, c2.endParam]);\r\n c2.used = true;\r\n break;\r\n }\r\n else if (c.startPoint === c2.endPoint\r\n && c.endPoint === c2.startPoint)\r\n {\r\n c1Res.reverse.push([c.startParam, c.endParam]);\r\n c2Res.reverse.push([c2.startParam, c2.endParam]);\r\n c2.used = true;\r\n break;\r\n }\r\n else\r\n c.used = false;\r\n }\r\n\r\n if (!c.used)\r\n {\r\n if (cu2.PtInCurve(c1MidPoint))\r\n c1Res.container.push([c.startParam, c.endParam]);\r\n else\r\n c1Res.outer.push([c.startParam, c.endParam]);\r\n }\r\n }\r\n\r\n //只分析包含关系\r\n if (reverseParse)\r\n for (let c of c2Curves)\r\n {\r\n if (c.used) continue;\r\n let p = CenterPoint(cu2, c.startParam, c.endParam);\r\n if (cu1.PtInCurve(p))\r\n c2Res.container.push([c.startParam, c.endParam]);\r\n else\r\n c2Res.outer.push([c.startParam, c.endParam]);\r\n }\r\n return [c1Res, c2Res];\r\n}\r\n\r\nfunction CenterPoint(cu: ExtureContourCurve, start: number, end: number)\r\n{\r\n let lenStart = cu.GetDistAtParam(start);\r\n let lenEnd = cu.GetDistAtParam(end);\r\n if (end > start)\r\n return cu.GetPointAtDistance((lenEnd + lenStart) * 0.5);\r\n\r\n let lenAll = cu.Length;\r\n let lenDiv = ((lenAll - lenStart) + lenEnd) * 0.5;\r\n\r\n if (lenStart + lenDiv >= lenAll)\r\n return cu.GetPointAtDistance(lenStart + lenDiv - lenAll);\r\n else\r\n return cu.GetPointAtDistance(lenStart + lenDiv);\r\n}\r\n\r\n//求参数并集部分,交集部分,差集部分\r\n\r\n//求 ab 和 cd 的并集部分\r\nfunction UnionRange(a: number, b: number, c: number, d: number, end: number): [number, number][]\r\n{\r\n let b1 = b < a ? b + end : b;\r\n let d1 = d < c ? d + end : d;\r\n let a1 = a;\r\n let c1 = c;\r\n\r\n if (c < a)\r\n [a1, b1, c1, d1] = [c1, d1, a1, b1];\r\n\r\n if (c1 > b1)\r\n return [[a, b], [c, d]];\r\n\r\n let e = Math.max(b1, d1);\r\n if (e >= end)\r\n {\r\n e -= end;\r\n if (e > a1)\r\n return [[0, end]];\r\n }\r\n\r\n return [[a1, e]];\r\n}\r\n\r\n// //0-1\r\n// UnionRange(0.5, 0.3, 0.3, 0.5, 1);//?\r\n\r\n// //0-1\r\n// UnionRange(0.4, 0.3, 0.3, 0.5, 1);//?\r\n\r\n// //[ [ 0.8, 0.1 ], [ 0.3, 0.5 ] ]\r\n// UnionRange(0.8, 0.1, 0.3, 0.5, 1);//?\r\n\r\n// //[ 0.3, 0.10000000000000009 ] ] \r\n// UnionRange(0.8, 0.1, 0.3, 0.9, 1);//?\r\n\r\nfunction SubtractRange(a: number, b: number, c: number, d: number, end: number): Range[]\r\n{\r\n if (a < 0 || b < 0) return [];\r\n\r\n if (a > b)\r\n return [...SubtractRange(a, end, c, d, end), ...SubtractRange(0, b, c, d, end)];\r\n if (c > d)\r\n {\r\n let arr = SubtractRange(a, b, c, end, end);\r\n let rem: [number, number][] = [];\r\n for (let s of arr)\r\n rem.push(...SubtractRange(s[0], s[1], 0, d, end));\r\n return rem;\r\n }\r\n\r\n if (c >= b || d <= a)\r\n return [[a, b]];\r\n\r\n if (c <= a)// c1 a1 b1\r\n {\r\n if (d >= b) return [];\r\n return [[d, b]];\r\n }\r\n\r\n if (d < b)\r\n return [[a, c], [d, b]];\r\n return [[a, c]];\r\n}\r\n\r\nfunction SubtractRange2(r: Range, sr: Range, end: number): Range[]\r\n{\r\n return SubtractRange(r[0], r[1], sr[0], sr[1], end);\r\n}\r\n\r\ntype Range = [number, number];\r\nfunction SubtractRanges(ranges: Range[], subRanges: Range[], end: number): Range[]\r\n{\r\n let rets: Range[] = ranges;\r\n for (let sr of subRanges)\r\n {\r\n let temps: Range[] = [];\r\n for (let r of rets)\r\n temps.push(...SubtractRange2(r, sr, end));\r\n\r\n rets = temps;\r\n }\r\n return rets;\r\n}\r\n\r\nfunction IntersectRange(a: number, b: number, c: number, d: number, end: number): Range\r\n{\r\n let b1 = b < a ? b + end : b;\r\n let d1 = d < c ? d + end : d;\r\n let a1 = a;\r\n let c1 = c;\r\n\r\n if (c < a)\r\n [a1, b1, c1, d1] = [c1, d1, a1, b1];\r\n\r\n if (c1 > b1)\r\n return;\r\n\r\n return [c1, Math.min(b1, d1)];\r\n}\r\n\r\nconst alMatrix4 = new Matrix4;\r\n\r\nexport class ExtrudeGeometryBuilder\r\n{\r\n verticesArray: number[] = [];//用于构建三维网格\r\n uvArray: number[] = [];//uv\r\n\r\n edgeAndLidBuilder: EdgeGeometryBuild;\r\n\r\n constructor(private br: ExtrudeSolid)\r\n {\r\n this.edgeAndLidBuilder = new EdgeGeometryBuild(this.br.Thickness);\r\n let rotateUv = (br instanceof Board && br.BoardProcessOption.lines === LinesType.Reverse);\r\n //计算墙(创建轮廓取出,为了得到正确的轮廓曲线(逆时针之类的))\r\n let outerWall = new ExtudeWall(Contour.CreateContour(br.ContourCurve.Clone()).Curve, DepthType.All, br.Thickness, br.Thickness, DirectionType.Outer);\r\n let grooves = this.ParseGrooves();\r\n for (let i = 0; i < grooves.length; i++)\r\n {\r\n let s1 = grooves[i];\r\n outerWall.ClipTo(s1, false);\r\n s1.contourWall.ClipReverse(outerWall);\r\n for (let j = i + 1; j < grooves.length; j++)\r\n {\r\n let s2 = grooves[j];\r\n s1.ClipTo(s2, true);\r\n }\r\n\r\n s1.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder, rotateUv);\r\n }\r\n outerWall.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder);\r\n\r\n //这里构建盖子\r\n this.edgeAndLidBuilder.BuildLid(this.verticesArray, this.uvArray, rotateUv);\r\n\r\n intCache.clear();\r\n }\r\n\r\n get MeshGeometry()\r\n {\r\n let geo = new BufferGeometry();\r\n geo.setAttribute('position', new Float32BufferAttribute(this.verticesArray, 3));\r\n geo.setAttribute('uv', new Float32BufferAttribute(this.uvArray, 2));\r\n geo.computeVertexNormals();\r\n return geo;\r\n }\r\n\r\n get EdgeGeometry()\r\n {\r\n let geo = new BufferGeometry();\r\n geo.setAttribute('position', new Float32BufferAttribute(this.edgeAndLidBuilder.lineVerticesArray, 3));\r\n return geo;\r\n }\r\n\r\n private ParseGrooves()\r\n {\r\n let br = this.br;\r\n const brOcsInv = br.OCSInv;\r\n let grooves: Groove[] = [];\r\n for (let groove of br.Grooves)\r\n {\r\n //判断槽正反面\r\n let type: DepthType;\r\n if (equaln(groove.Thickness, br.Thickness))\r\n type = DepthType.All;\r\n else\r\n {\r\n if (equaln(groove.Position.applyMatrix4(brOcsInv).z, 0))\r\n type = DepthType.Back;\r\n else\r\n type = DepthType.Front;\r\n }\r\n alMatrix4.multiplyMatrices(brOcsInv, groove.OCSNoClone);\r\n //槽轮廓\r\n let grooveContourCurve = groove.ContourCurve.Clone();\r\n grooveContourCurve.ApplyMatrix(alMatrix4);\r\n grooveContourCurve.Z0();\r\n if (grooveContourCurve instanceof Polyline) grooveContourCurve.UpdateMatrixTo(IdentityMtx4);//不可能改变这个\r\n let grooveContour = Contour.CreateContour(grooveContourCurve);\r\n\r\n let grooveHoleContours: Contour[] = [];\r\n //孤岛\r\n for (let grooveChild of groove.Grooves)\r\n {\r\n let grooveChildContourCurve = grooveChild.ContourCurve.Clone();\r\n alMatrix4.multiplyMatrices(brOcsInv, grooveChild.OCSNoClone);\r\n grooveChildContourCurve.ApplyMatrix(alMatrix4).Z0();\r\n if (grooveChildContourCurve instanceof Polyline) grooveChildContourCurve.UpdateMatrixTo(IdentityMtx4);\r\n let grooveChildContour = Contour.CreateContour(grooveChildContourCurve);\r\n grooveHoleContours.push(grooveChildContour);\r\n }\r\n\r\n grooves.push(new Groove(grooveContour, grooveHoleContours, type, groove.Thickness, br.Thickness));\r\n }\r\n\r\n return grooves;\r\n }\r\n}\r\n\r\nlet intCache = new Map>();\r\nfunction GetIntersection(cu1: Curve, cu2: Curve): IntersectResult[]\r\n{\r\n let m = intCache.get(cu1);\r\n if (m)\r\n {\r\n let r = m.get(cu2);\r\n if (r) return r;\r\n }\r\n else\r\n m = new Map();\r\n\r\n intCache.set(cu1, m);\r\n let r = cu1.IntersectWith2(cu2, IntersectOption.OnBothOperands);\r\n\r\n let cu1EndParam = cu1.EndParam;\r\n let cu2EndParam = cu2.EndParam;\r\n for (let d of r)\r\n {\r\n d.thisParam = MathUtils.clamp(d.thisParam, 0, cu1EndParam);\r\n d.argParam = MathUtils.clamp(d.argParam, 0, cu2EndParam);\r\n }\r\n\r\n m.set(cu2, r);\r\n\r\n let r2: IntersectResult[] = r.map(r =>\r\n {\r\n return { thisParam: r.argParam, argParam: r.thisParam, pt: r.pt };\r\n });\r\n\r\n let m2 = intCache.get(cu2);\r\n if (!m2)\r\n {\r\n m2 = new Map();\r\n intCache.set(cu2, m2);\r\n }\r\n m2.set(cu1, r2);\r\n\r\n return r;\r\n}\r\n","import { BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Path, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayClone, arrayLast, arrayRemoveIf, arrayRemoveOnce, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { equalCurve, PolylineSpliteRect } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { matrixSetVector, Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { CSG } from \"../../csg/core/CSG\";\r\nimport { Geometry2CSG } from \"../../csg/core/Geometry2CSG\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { boardUVGenerator } from \"../../Geometry/BoardUVGenerator\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { BSPGroupParse } from \"../../Geometry/BSPGroupParse\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/ExtrudeEdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, IdentityMtx4, isIntersect, isParallelTo, isPerpendicularityTo, MoveMatrix, XAxis, YAxis, ZAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { OBB } from \"../../Geometry/OBB/obb\";\r\nimport { ScaleUV, ScaleUV2 } from \"../../Geometry/UVUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { BlockTableRecord } from \"../BlockTableRecord\";\r\nimport { CADFactory, Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Contour } from \"../Contour\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\r\nimport { Shape } from \"../Shape\";\r\nimport { ShapeManager } from \"../ShapeManager\";\r\nimport { Spline } from \"../Spline\";\r\nimport { Board } from \"./Board\";\r\nimport { Circle } from \"./Circle\";\r\nimport { DragPointType } from \"./DragPointType\";\r\nimport { Ellipse } from \"./Ellipse\";\r\nimport { Entity } from \"./Entity\";\r\nimport { ExtrudeConfig } from \"./ExtrudeConfig\";\r\nimport { Line } from \"./Line\";\r\nimport { Polyline } from \"./Polyline\";\r\nimport { Region } from \"./Region\";\r\n\r\nexport type ExtureContourCurve = Polyline | Circle;\r\nexport type ExtureContour = Polyline | Circle | ExtrudeSolid | Region;\r\n\r\n@Factory\r\nexport class ExtrudeSolid extends Entity\r\n{\r\n /*\r\n ------------\r\n | |\r\n | |\r\n | | height\r\n | |\r\n | |\r\n ----width---\r\n */\r\n\r\n protected height: number = 1;//y\r\n protected width: number = 1;//x\r\n\r\n /**\r\n * 拉伸实体的厚度\r\n * 我们允许它是一个负数,但是这个时候这个实体已经是一个无效的拉伸实体了.\r\n * 允许负数,用来校验凹槽的合理性.\r\n */\r\n protected thickness: number = 1;\r\n\r\n protected isRect = true;\r\n\r\n IsKnife = false;\r\n\r\n RelevanceMeats: ObjectId[];\r\n RelevanceKnifs: ObjectId[];\r\n __OriginalId__: ObjectId;\r\n __OriginalEnt__: this;\r\n /**\r\n * 拉伸形状\r\n * 出于优化考虑,可能未初始化\r\n * 形状位于WCS 0点位置,不随OCS变化而变化\r\n */\r\n protected contourCurve: ExtureContourCurve;\r\n\r\n /**\r\n * 正面和反面的凹槽造型\r\n */\r\n protected grooves: ExtrudeSolid[] = [];\r\n\r\n protected knifeRadius: number = 3;\r\n protected groovesAddLength: number = 0;\r\n protected groovesAddWidth: number = 0;\r\n protected groovesAddDepth: number = 0;\r\n __TempIndexVersion__: { Index: number, Version: number; };\r\n constructor()\r\n {\r\n super();\r\n this.RelevanceKnifs = this.CreateProxyArray((v) =>\r\n {\r\n //可以更新自己,但是不建议,建议手动更新\r\n });\r\n this.RelevanceMeats = this.CreateProxyArray((v) =>\r\n {\r\n //可以更新肉,简单是不建议,建议手动更新\r\n });\r\n }\r\n\r\n get KnifeRadius()\r\n {\r\n return this.knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this.knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.knifeRadius = v;\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCS);\r\n }\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(), new Vector3(this.width, this.height, this.thickness));\r\n }\r\n\r\n get OBB(): OBB\r\n {\r\n return new OBB(this.OCS, new Vector3(this.width, this.height, this.thickness).multiplyScalar(0.5));\r\n }\r\n\r\n get GroovesAddLength()\r\n {\r\n return this.groovesAddLength;\r\n }\r\n\r\n set GroovesAddLength(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddLength))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddLength = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get GroovesAddWidth()\r\n {\r\n return this.groovesAddWidth;\r\n }\r\n\r\n set GroovesAddWidth(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddWidth))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddWidth = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get GroovesAddDepth()\r\n {\r\n return this.groovesAddDepth;\r\n }\r\n\r\n set GroovesAddDepth(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddDepth))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddDepth = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n\r\n Clone()\r\n {\r\n let en = super.Clone();\r\n return en;\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n //暂时关闭更新,避免内部实体还没有更新位置时,先更新了实体的Geometry,导致后续没有进行更新\r\n let updateBak = this.AutoUpdate;\r\n this.AutoUpdate = false;\r\n super.ApplyMatrix(m);\r\n for (let g of this.grooves)\r\n g.ApplyMatrix(m);\r\n\r\n //由于修改矩阵会导致矩阵错误\r\n this.csg = undefined;\r\n this.AutoUpdate = updateBak;\r\n if (!equaln(m.getMaxScaleOnAxis(), 1))\r\n this.Update(UpdateDraw.Geometry);\r\n else if (this.AutoUpdate)\r\n this.DeferUpdate();\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let cu = this.ContourCurve;\r\n cu.ApplyMatrix(this.OCS);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n return this;\r\n }\r\n get Position(): Vector3\r\n {\r\n return super.Position;\r\n }\r\n set Position(p: Vector3)\r\n {\r\n let v = p.clone().sub(this.Position);\r\n if (equalv3(v, ZeroVec)) return;\r\n super.Position = p;\r\n\r\n let m = MoveMatrix(v);\r\n for (let g of this.grooves)\r\n g.ApplyMatrix(m);\r\n\r\n //由于修改矩阵会导致bsp错误\r\n this.csg = undefined;\r\n }\r\n\r\n get Width()\r\n {\r\n return this.width;\r\n }\r\n get Height()\r\n {\r\n return this.height;\r\n }\r\n\r\n get Thickness()\r\n {\r\n return this.thickness;\r\n }\r\n set Thickness(thickness: number)\r\n {\r\n if (!equaln(thickness, this.thickness, 1e-3))\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (this.grooves.length > 0)\r\n {\r\n let inv = this.OCSInv;\r\n let v = this.Normal.multiplyScalar(thickness - this.thickness);\r\n let m = new Matrix4().setPosition(v);\r\n\r\n for (let g of this.grooves)\r\n {\r\n let p = g.Position.applyMatrix4(inv);\r\n\r\n if (equaln(g.thickness, this.thickness))\r\n g.Thickness = thickness;\r\n else if (!equaln(p.z, 0))\r\n g.ApplyMatrix(m);\r\n }\r\n }\r\n\r\n this.thickness = thickness;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n\r\n get Grooves()\r\n {\r\n return this.grooves;\r\n }\r\n\r\n /**\r\n * 返回未拷贝的轮廓曲线\r\n */\r\n get ContourCurve()\r\n {\r\n if (!this.contourCurve)\r\n this.GeneralRectContour();\r\n return this.contourCurve;\r\n }\r\n\r\n set ContourCurve(cu: ExtureContourCurve)\r\n {\r\n this.SetContourCurve(cu);\r\n }\r\n\r\n /**\r\n * 生成矩形轮廓(强制)\r\n */\r\n GeneralRectContour()\r\n {\r\n if (!this.contourCurve || !(this.contourCurve instanceof Polyline))\r\n this.contourCurve = new Polyline();\r\n\r\n this.contourCurve.Rectangle(this.width, this.height);\r\n this.contourCurve.OCS = IdentityMtx4;\r\n this.ContourCurve = this.contourCurve;\r\n }\r\n\r\n /**\r\n * 转换成矩形拉伸实体\r\n */\r\n ConverToRectSolid(width = this.width, height = this.height, thickness = this.thickness)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.height = height;\r\n this.width = width;\r\n this.thickness = thickness;\r\n\r\n this.isRect = true;\r\n\r\n this.GeneralRectContour();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 更新拉伸实体的轮廓\r\n * @param curve 曲线已经存在WCS坐标系\r\n */\r\n SetContourCurve(curve: ExtureContourCurve)\r\n {\r\n if (!curve.IsClose) return;\r\n\r\n let area = curve.Area;\r\n if (!area || equaln(area, 0)) return;\r\n\r\n if (curve instanceof Spline || curve instanceof Ellipse)\r\n curve = curve.Convert2Polyline();\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n curve.CloseMark = true;\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n\r\n //如果曲线被旋转了,那么修正它的旋转矩阵,避免纹路错误\r\n let ocs = curve.OCS;\r\n let isMirror = equaln(ocs.elements[10], -1, 1e-4);\r\n let isRotate = !equaln(ocs.elements[0], 1);\r\n if (isMirror || isRotate)// || ocs.elements[9] || ocs.elements[10]\r\n {\r\n for (let p of pts)\r\n {\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n if (isMirror)\r\n p.bul *= -1;\r\n }\r\n curve.OCS = IdentityMtx4;\r\n }\r\n }\r\n else\r\n {\r\n curve.OCS = new Matrix4().setPosition(curve.Position);\r\n }\r\n curve.ClearDraw();\r\n\r\n this.WriteAllObjectRecord();\r\n this.contourCurve = curve;\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 在不改变Normal和实体显示的情况下,修改X轴的指向\r\n * @param xAxis\r\n */\r\n SetXAxis(xAxis: Vector3): this\r\n {\r\n let m = this.OCSInv.setPosition(ZeroVec);\r\n let x = xAxis.applyMatrix4(m).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n m.copy(this._Matrix).setPosition(ZeroVec);\r\n x.applyMatrix4(m);\r\n let z = this.Normal;\r\n let y = z.cross(x);\r\n\r\n this._Matrix.elements[0] = x.x;\r\n this._Matrix.elements[1] = x.y;\r\n this._Matrix.elements[2] = x.z;\r\n\r\n this._Matrix.elements[4] = y.x;\r\n this._Matrix.elements[5] = y.y;\r\n this._Matrix.elements[6] = y.z;\r\n\r\n m.makeRotationZ(-a);\r\n this.contourCurve.ApplyMatrix(m);\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateMatrixTo(m.identity());\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 检验轮廓曲线,通常当轮廓曲线被修改时,都需要检验轮廓曲线,并更新实体大小和轮廓位置.\r\n * >计算轮廓大小\r\n * >判断是否矩形\r\n * >修正轮廓基点\r\n */\r\n CheckContourCurve()\r\n {\r\n let box = this.ContourCurve.BoundingBox;\r\n let size = box.getSize(new Vector3());\r\n this.width = size.x;\r\n this.height = size.y;\r\n if (equaln(size.x, 0) || equaln(size.y, 0))\r\n Log(`注意!!该板件尺寸为0!`);\r\n this.isRect = equaln(this.width * this.height, this.ContourCurve.Area, 0.1);\r\n\r\n //修正轮廓基点\r\n if (!equalv3(box.min, ZeroVec))\r\n {\r\n this.contourCurve.Position =\r\n this.contourCurve.Position.sub(box.min);\r\n\r\n let v = box.min.applyMatrix4(this.OCS.setPosition(ZeroVec));\r\n this._Matrix.setPosition(this.Position.add(v));\r\n }\r\n }\r\n get IsRect()\r\n {\r\n return this.isRect;\r\n }\r\n\r\n /**\r\n * 这个拉伸实体的面域形状\r\n */\r\n get Shape()\r\n {\r\n let contour = Contour.CreateContour(this.ContourCurve.Clone(), false);\r\n\r\n let holes: Contour[] = [];\r\n\r\n for (let g of this.grooves)\r\n {\r\n if (equaln(g.thickness, this.thickness))\r\n holes.push(Contour.CreateContour(g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCS)), false));\r\n }\r\n return new Shape(contour, holes);\r\n }\r\n\r\n /**\r\n * 实体合并(不会删除target)\r\n */\r\n Join(target: this): Status\r\n {\r\n let [n, tn] = [this.Normal, target.Normal];\r\n\r\n if (!isParallelTo(n, tn))\r\n return Status.False;\r\n\r\n let isEqualNorm = equalv3(n, tn);\r\n\r\n let targetZMin = target.Position.applyMatrix4(this.OCSInv).z;\r\n let targetZMax = targetZMin + target.Thickness * (isEqualNorm ? 1 : -1);\r\n [targetZMin, targetZMax] = arraySortByNumber([targetZMin, targetZMax]);\r\n\r\n const MergeRelevance = () =>\r\n {\r\n if (!this.Id || !target.Id) return;\r\n for (let kf of target.RelevanceKnifs)\r\n {\r\n let kfBr = kf.Object as ExtrudeSolid;\r\n if (!kfBr) continue;\r\n if (!kfBr.RelevanceMeats.includes(this.Id))\r\n kfBr.RelevanceMeats.push(this.Id);\r\n\r\n if (!this.RelevanceKnifs.includes(kf))\r\n this.RelevanceKnifs.push(kf);\r\n }\r\n for (let meat of target.RelevanceMeats)\r\n {\r\n let meatBr = meat.Object as ExtrudeSolid;\r\n if (!meatBr) continue;\r\n if (!meatBr.RelevanceKnifs.includes(this.Id))\r\n meatBr.RelevanceKnifs.push(this.Id);\r\n\r\n if (!this.RelevanceMeats.includes(meat))\r\n this.RelevanceMeats.push(meat);\r\n }\r\n };\r\n\r\n if (equaln(this.thickness, target.thickness)\r\n && equaln(0, targetZMin))\r\n {\r\n let matrixToLocal = this.OCSInv.multiply(target.OCS);\r\n\r\n let thisShape = this.Shape;\r\n let targetShape = target.Shape.ApplyMatrix(matrixToLocal).Z0();\r\n let unionShapes = thisShape.UnionBoolOperation(targetShape, true);\r\n if (unionShapes.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n // [ + ] 产生网洞.\r\n for (let hole of unionShapes[0].Holes)\r\n {\r\n let g = new ExtrudeSolid();\r\n g.thickness = this.thickness;\r\n g.ContourCurve = hole.Curve;\r\n g.ApplyMatrix(this.OCS);\r\n\r\n this.AppendGroove(g);\r\n }\r\n\r\n this.ContourCurve = unionShapes[0].Outline.Curve;\r\n\r\n this.grooves.push(...target.grooves.map(g => g.Clone()));\r\n MergeRelevance();\r\n this.GrooveCheckMerge();\r\n this.Update();\r\n\r\n return Status.True;\r\n }\r\n }\r\n else\r\n {\r\n if (!isIntersect(0, this.thickness, targetZMin, targetZMax, 1e-5))\r\n return Status.False;\r\n\r\n let matrixToLocal = this.OCSInv.multiply(target.OCS);\r\n\r\n let thisCurve = this.ContourCurve;\r\n let targetCurve = target.ContourCurve.Clone().ApplyMatrix(matrixToLocal);\r\n targetCurve.Position = targetCurve.Position.setZ(0);\r\n if (equalCurve(thisCurve, targetCurve))\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (targetZMin < 0)\r\n this.Position = this.Position.add(n.multiplyScalar(targetZMin));\r\n\r\n this.Thickness = Math.max(this.Thickness, targetZMax) - Math.min(0, targetZMin);\r\n\r\n this.grooves.push(...target.grooves.map(g => g.Clone()));\r\n\r\n MergeRelevance();\r\n\r\n this.GrooveCheckMerge();\r\n this.Update();\r\n\r\n return Status.True;\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n get Volume()\r\n {\r\n let sum = this.ContourCurve.Area * this.thickness;\r\n for (let g of this.grooves)\r\n sum -= g.Volume;\r\n return sum;\r\n }\r\n\r\n /**\r\n * 被切割\r\n * @param extrudes 切割刀\r\n * @param [output=undefined] 如果实体被分裂,那么输出分裂的其他实体(如果为空,则尝试入当前实体的容器中)\r\n * @param [checkIntersect=true] 检查相交,性能优化\r\n * @returns 切割是否成功\r\n */\r\n Subtract(extrudes: ExtrudeSolid[], output: ExtrudeSolid[] = undefined, checkIntersect = true): boolean\r\n {\r\n if (checkIntersect)\r\n {\r\n let box = this.BoundingBox;\r\n extrudes = extrudes.filter(e => box.intersectsBox(e.BoundingBox));\r\n }\r\n\r\n //清除原先的关联关系\r\n if (this.Id)\r\n {\r\n let ids = new Set();\r\n for (let e of extrudes)\r\n {\r\n if (!e.Id) continue;\r\n arrayRemoveOnce(e.RelevanceMeats, this.Id);\r\n ids.add(e.Id.Index);\r\n }\r\n arrayRemoveIf(this.RelevanceKnifs, id => ids.has(id.Index));\r\n }\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let br of extrudes)\r\n {\r\n let gs = this.ConverToLocalGroove(br);\r\n grooves.push(...gs);\r\n }\r\n\r\n let area1 = this.ContourCurve.Area;\r\n let sum1 = this.Volume;\r\n this.AppendGrooves(grooves, output);\r\n let sum2 = this.Volume;\r\n let area2 = this.ContourCurve.Area;\r\n if (!equaln(sum1, sum2) || !equaln(area1, area2))\r\n {\r\n if (!this.ReadFileIng && this instanceof Board)\r\n {\r\n if (this.Id)\r\n Log(`${this.Name}(${this.Id.Index})被切割成功!`);\r\n else if (this.__OriginalId__)\r\n Log(`${this.Name}(${this.__OriginalId__.Index})关联切割成功更新槽!`);\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n RelevanceSubtract(knif: ExtrudeSolid, check = false)\r\n {\r\n if (!this.Id || !knif.Id) return;\r\n\r\n //判断是否已经存在\r\n if (check)\r\n {\r\n let index = this.RelevanceKnifs.findIndex(id => id.Index === knif.Id.Index);\r\n if (index !== -1) return;\r\n }\r\n\r\n this.RelevanceKnifs.push(knif.Id);\r\n knif.RelevanceMeats.push(this.Id);\r\n }\r\n\r\n /**\r\n * 当实体被分裂后,加入新图纸时,需要修复关联拉槽\r\n */\r\n RepairRelevance()\r\n {\r\n if (!this.Id)\r\n {\r\n console.error(\"不能修复未加入到图纸的板件!\");\r\n return;\r\n }\r\n\r\n for (let id of this.RelevanceKnifs)\r\n {\r\n if (id && !id.IsErase)\r\n {\r\n let br = id.Object as ExtrudeSolid;\r\n br.RelevanceMeats.push(this.Id);\r\n }\r\n }\r\n for (let id of this.RelevanceMeats)\r\n {\r\n if (id && !id.IsErase)\r\n {\r\n let br = id.Object as ExtrudeSolid;\r\n br.RelevanceKnifs.push(this.Id);\r\n }\r\n }\r\n }\r\n\r\n AppendGroove(groove: ExtrudeSolid)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.push(groove);\r\n }\r\n\r\n /** 添加槽进板件,并且自动分裂.\r\n * 通常槽已经校验过准确性,所以不在校验\r\n */\r\n AppendGrooves(grooves: ExtrudeSolid[], output: ExtrudeSolid[] = undefined)\r\n {\r\n if (grooves.length === 0) return;\r\n this.WriteAllObjectRecord();\r\n this.grooves.push(...grooves);\r\n this.GrooveCheckAllAutoSplit(output);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n\r\n contour.Position = contour.Position.add(this.Normal.multiplyScalar(this.thickness));\r\n pts.push(\r\n ...contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n let ps = this.contourCurve.GetStretchPoints();\r\n for (let p of ps)\r\n {\r\n let l = new Line(p, p.clone().setZ(this.thickness));\r\n l.ApplyMatrix(this.OCS);\r\n pts.push(\r\n ...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n }\r\n for (let g of this.grooves)\r\n pts.push(...g.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n //#region Stretch\r\n\r\n private GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts: number[] = [this.ContourCurve.GetDragPointCount(dragType) * 2];\r\n for (let g of this.grooves)\r\n {\r\n let c = g.ContourCurve.GetDragPointCount(dragType) * 2;\r\n for (let g1 of g.grooves)\r\n c += g1.contourCurve.GetDragPointCount(dragType) * 2;\r\n\r\n counts.push(c);\r\n }\r\n return counts;\r\n }\r\n GetGripOrStretchPoints(dragType: DragPointType)\r\n {\r\n let isGrip = dragType === DragPointType.Grip;\r\n\r\n let pts = isGrip ? this.ContourCurve.GetGripPoints() : this.ContourCurve.GetStretchPoints();\r\n let v = new Vector3(0, 0, this.thickness);\r\n pts.push(...pts.map(p => p.clone().add(v)));\r\n pts.forEach(p => { p.applyMatrix4(this.OCS); });\r\n\r\n for (let g of this.grooves)\r\n {\r\n let gpts = g.GetGripOrStretchPoints(dragType);\r\n pts.push(...gpts);\r\n }\r\n return pts;\r\n }\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let counts = this.GetStrectchPointCountList(dragType);\r\n if (dragType === DragPointType.Stretch && indexList.length === arraySum(counts))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n arraySortByNumber(indexList);\r\n\r\n let updateBak = this.AutoUpdate;\r\n this.AutoUpdate = false;\r\n\r\n if (this.grooves.length === 0)\r\n {\r\n this.MoveGripOrStretchPointsOnly(indexList, vec, dragType);\r\n }\r\n else\r\n {\r\n let i = 0;\r\n let icount = indexList.length;\r\n let offset = 0;\r\n\r\n let grooveIndex = -1;\r\n for (let count of counts)\r\n {\r\n offset += count;\r\n let ilist = [];\r\n for (; i < icount; i++)\r\n {\r\n if (indexList[i] < offset)\r\n ilist.push(indexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n\r\n if (ilist.length > 0)\r\n {\r\n if (grooveIndex === -1)\r\n this.MoveGripOrStretchPointsOnly(ilist, vec, dragType);\r\n else\r\n this.grooves[grooveIndex].MoveGripOrStretchPoints(ilist, vec, dragType);\r\n }\r\n grooveIndex++;\r\n }\r\n }\r\n\r\n if (this.objectId)\r\n {\r\n this.CheckContourCurve();\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (splitEntitys.length > 0 && this.Owner)\r\n {\r\n let ms = this.Owner.Object as BlockTableRecord;\r\n for (let e of splitEntitys)\r\n ms.Append(e);\r\n }\r\n }\r\n this.AutoUpdate = updateBak;\r\n this.Update();\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n\r\n\r\n GetStretchPoints()\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n\r\n /**\r\n * 只对自身的轮廓和厚度进行拉伸,忽略子实体\r\n */\r\n MoveGripOrStretchPointsOnly(indexList: Array, vec: Vector3, dragType: DragPointType)\r\n {\r\n let stretchCount = this.ContourCurve.GetDragPointCount(dragType);\r\n\r\n if (dragType === DragPointType.Stretch)\r\n {\r\n //Move\r\n if (indexList.length === stretchCount * 2)\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n //判断是否拉伸厚度\r\n if (this.IsStretchThickness(indexList))\r\n {\r\n let isFront = indexList[0] < stretchCount;\r\n\r\n if (indexList.every(v => v < stretchCount === isFront))\r\n {\r\n //Change thickness\r\n let lvec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n if (isFront)\r\n {\r\n // if (lvec.z >= this.thickness) return;\r\n this.thickness -= lvec.z;\r\n //移动位置而不改变内部拉槽\r\n let v = this.Normal.multiplyScalar(lvec.z);\r\n this._Matrix.elements[12] += v.x;\r\n this._Matrix.elements[13] += v.y;\r\n this._Matrix.elements[14] += v.z;\r\n }\r\n else\r\n {\r\n // if (-lvec.z > this.thickness) return;\r\n this.thickness += lvec.z;\r\n }\r\n return;\r\n }\r\n }\r\n\r\n indexList = arrayClone(indexList);\r\n }\r\n\r\n //修正点的索引\r\n for (let i = 0; i < indexList.length; i++)\r\n {\r\n let index = indexList[i];\r\n if (index >= stretchCount)\r\n {\r\n index -= stretchCount;\r\n indexList[i] = index;\r\n }\r\n }\r\n\r\n indexList = [...new Set(indexList)];\r\n\r\n let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n\r\n if (dragType === DragPointType.Grip)\r\n {\r\n if (this.ContourCurve instanceof Polyline\r\n && indexList.length === 1\r\n && indexList[0] % 2 === 1)\r\n {\r\n let param = indexList[0] / 2;\r\n if (this.ContourCurve.GetBuilgeAt(Math.floor(param)) === 0)\r\n {\r\n let der = this.ContourCurve.GetFistDeriv(param).normalize();\r\n [der.x, der.y] = [der.y, -der.x];\r\n let d = localVec.dot(der);\r\n localVec.copy(der).multiplyScalar(d);\r\n }\r\n }\r\n this.ContourCurve.MoveGripPoints(indexList, localVec);\r\n }\r\n else\r\n this.ContourCurve.MoveStretchPoints(indexList, localVec);\r\n }\r\n\r\n IsStretchThickness(indexs: number[])\r\n {\r\n let count = this.ContourCurve.GetStretchPoints().length;\r\n if (indexs.length === count)\r\n {\r\n let isF = indexs[0] < count;\r\n return indexs.every(i => isF === (i < count));\r\n }\r\n return false;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region groove(凹槽(造型))操作\r\n\r\n /*\r\n\r\n 添加凹槽一般会经过以下几个步骤\r\n\r\n 1.凹槽转换成和本实体法线平行的凹槽实体\r\n ->调用第二步\r\n\r\n 2.校验凹槽的Z轴位置是否存在交集\r\n ->{不存在Z轴交集} 或 {交集异常(凹槽被本实体包含不见光)} 的凹槽被移除\r\n ->凹槽的Z轴位置和厚度被更新\r\n\r\n 3.凹槽合并\r\n\r\n 4.修正轮廓.\r\n ->{本实体}轮廓被修正(当实体被凹槽破坏形状时)\r\n -->修正成功后,凹槽被移除\r\n -->本实体可能分裂\r\n\r\n ->{凹槽}轮廓被修正({凹槽的轮廓}被约束在{实体轮廓}内部)\r\n -->凹槽可能分裂\r\n\r\n */\r\n\r\n\r\n /**\r\n * 当调用Draw时,可以生成bsp信息\r\n */\r\n private csg: CSG;\r\n get CSG()\r\n {\r\n if (this.csg)\r\n return this.csg;\r\n\r\n this.csg = Geometry2CSG(this.MeshGeometry);\r\n return this.csg;\r\n }\r\n\r\n /**\r\n * (步骤1.2.)\r\n * 将目标拉伸实体转换成在板件内部可用的凹槽实体\r\n * @param target 该对象可能被修改(内部不拷贝该实体)\r\n * @param useClone 转换后的实体是目标实体拷贝后修改的\r\n */\r\n ConverToLocalGroove(target: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n if (!this.OBB.intersectsOBB(target.OBB)) return [];\r\n\r\n let n1 = this.Normal;\r\n let n2 = target.Normal;\r\n if (isParallelTo(n1, n2))\r\n {\r\n target = target.Clone().ClearDraw();\r\n if (!equalv3(n1, n2, 1e-6))\r\n {\r\n let mtx = target._Matrix;\r\n matrixSetVector(mtx, 2, n1);\r\n let p = n1.setFromMatrixColumn(mtx, 3);\r\n p.add(n2.multiplyScalar(target.thickness));\r\n matrixSetVector(mtx, 3, p);\r\n }\r\n if (this.GrooveCheckPosition(target) !== Status.True)\r\n return [];\r\n\r\n return [target];\r\n }\r\n else\r\n {\r\n //当切割刀是矩形板,并且没有槽的时候,如果轴对齐,我们可以直接用aabb进行求交\r\n if (target.isRect && target.grooves.length === 0)\r\n {\r\n let diffMtx = target.OCS.premultiply(this.OCSInv);\r\n let box = target.BoundingBoxInOCS.applyMatrix4(diffMtx);\r\n let size = box.getSize(new Vector3);\r\n\r\n //轴对齐\r\n if (equaln(size.x * size.y * size.z, target.Width * target.Height * target.Thickness, 1))\r\n {\r\n let ibox = this.BoundingBoxInOCS.intersect(box);\r\n if (!(ibox.getSize(size).toArray().every(x => x > 1))) return [];\r\n\r\n //构造新槽(因为我们当前的槽加长是根据槽的长短边进行加长的,所以我们可以这么构建)\r\n let g2 = new ExtrudeSolid().ConverToRectSolid(size.x, size.y, size.z);\r\n g2.Position = ibox.min;\r\n g2.ApplyMatrix(this._Matrix);\r\n g2.groovesAddDepth = target.groovesAddDepth;\r\n g2.groovesAddLength = target.groovesAddLength;\r\n g2.groovesAddWidth = target.groovesAddWidth;\r\n g2.knifeRadius = target.knifeRadius;\r\n return [g2];\r\n }\r\n }\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n let project = ProjectBoard(target, this);\r\n if (!project)\r\n {\r\n let yv = n2;\r\n let zv = n1;\r\n let xv = yv.clone().cross(zv);\r\n yv.copy(zv).cross(xv);\r\n let m = new Matrix4().makeBasis(xv, yv, zv).copyPosition(this.OCS);\r\n let mi = new Matrix4().getInverse(m).multiply(this.OCS);\r\n\r\n let interBSP = this.CSG.intersect(target.CSG.transform1(this.OCSInv.multiply(target.OCS)));\r\n let topology = new BSPGroupParse(interBSP);\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let pts of topology.Parse())\r\n {\r\n for (let p of pts)\r\n p.applyMatrix4(mi);\r\n let box = new Box3Ext().setFromPoints(pts);\r\n if (!box.isSolid(0.1))\r\n continue;\r\n let size = box.getSize(new Vector3());\r\n\r\n let ext = new ExtrudeSolid();\r\n ext.groovesAddDepth = target.groovesAddDepth;\r\n ext.groovesAddLength = target.groovesAddLength;\r\n ext.groovesAddWidth = target.groovesAddWidth;\r\n ext.knifeRadius = target.knifeRadius;\r\n ext.ConverToRectSolid(size.x, size.y, size.z);\r\n ext.OCS = m.clone().setPosition(box.min.applyMatrix4(m));\r\n\r\n grooves.push(ext);\r\n }\r\n return grooves;\r\n }\r\n // project.ApplyMatrix(target.OCSInv);\r\n project.Z0();\r\n let c1 = Contour.CreateContour(project);\r\n let c2 = Contour.CreateContour(target.ContourCurve);\r\n //投影轮廓列表\r\n let contours = c1.IntersectionBoolOperation(c2);\r\n let outlines: ExtureContourCurve[] = [];\r\n for (let c of contours)\r\n {\r\n if (c.Curve instanceof Polyline)\r\n outlines.push(...PolylineSpliteRect(c.Curve));\r\n else\r\n outlines.push(c.Curve);\r\n }\r\n let xv = n1;\r\n let zv = n2;\r\n let yv = zv.clone().cross(xv);\r\n\r\n //把<投影轮廓>对齐到肉的侧面坐标系上\r\n let projection2SideMatrix4 = new Matrix4().makeBasis(xv, yv, zv);\r\n for (let c of outlines)\r\n {\r\n let g = target.Clone().ClearDraw();\r\n let gs = [g];\r\n g.ContourCurve = c;\r\n g.GrooveCheckAll(gs);\r\n\r\n for (let g1 of gs)\r\n {\r\n //按g1的位置设置\r\n projection2SideMatrix4.setPosition(g1.Position);\r\n\r\n //投影到肉的侧面坐标系,求槽在肉里面的长度(x)和厚度(z)\r\n let alm = new Matrix4().getInverse(projection2SideMatrix4).multiply(g1.OCS);\r\n g1.ContourCurve.ApplyMatrix(alm);//破坏它\r\n let box = g1.ContourCurve.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x, 0, 1e-2) || equaln(size.y, 0, 1e-2)) continue;\r\n\r\n //构造新槽\r\n let g2 = new ExtrudeSolid().ConverToRectSolid(size.y, g1.Thickness, size.x);\r\n g2.groovesAddDepth = target.groovesAddDepth;\r\n g2.groovesAddLength = target.groovesAddLength;\r\n g2.groovesAddWidth = target.groovesAddWidth;\r\n g2.knifeRadius = target.knifeRadius;\r\n g2.ApplyMatrix(OverturnMatrix);//翻转到和原先的投影曲线(肉侧面)一样的状态\r\n g2.ApplyMatrix(MoveMatrix(box.min));//和投影曲线重叠\r\n g2.ApplyMatrix(projection2SideMatrix4);//按照矩形还原回去\r\n\r\n grooves.push(g2);\r\n }\r\n }\r\n return grooves;\r\n }\r\n }\r\n\r\n /**\r\n * (步骤2)\r\n * 更新凹槽位置和厚度(校验凹槽的Z轴位置是否存在交集)\r\n */\r\n GrooveCheckPosition(target: ExtrudeSolid): Status\r\n {\r\n if (target.Width < 1e-2 || target.Height < 1e-2 || target.Thickness < 1e-2)\r\n return Status.False;\r\n\r\n let tp = target.Position.applyMatrix4(this.OCSInv);\r\n\r\n let minZ = tp.z;\r\n let maxZ = tp.z + target.thickness;\r\n if (minZ <= 1e-2)//背面\r\n {\r\n target.Thickness = Math.min(maxZ, this.thickness);\r\n if (!(equaln(minZ, 0)))\r\n target.ApplyMatrix(\r\n MoveMatrix(this.Normal.multiplyScalar(-minZ))\r\n );\r\n }\r\n else if (maxZ >= (this.thickness - 1e-3) && minZ > 0)//正面\r\n target.Thickness = this.thickness - minZ;\r\n else\r\n return Status.False;\r\n\r\n if (equaln(target.thickness, this.thickness, 1e-3))\r\n target.thickness = this.thickness;\r\n\r\n return target.thickness > 1e-3 ? Status.True : Status.False;\r\n }\r\n\r\n /**\r\n * (步骤3)\r\n * 计算凹槽合并\r\n */\r\n GrooveCheckMerge()\r\n {\r\n let gs: ExtrudeSolid[] = [];\r\n while (this.grooves.length > 0)\r\n {\r\n let g = this.grooves.pop();\r\n while (this.grooves.length > 0)\r\n {\r\n //剩余的 无法合并的板件\r\n let remGs = this.grooves.filter(gn =>\r\n {\r\n if (equaln(g.knifeRadius, gn.knifeRadius))\r\n return g.Join(gn) === Status.False;\r\n else\r\n return true;\r\n });\r\n if (remGs.length === this.grooves.length)\r\n break;\r\n this.grooves = remGs;\r\n }\r\n gs.push(g);\r\n }\r\n\r\n if (gs.length !== this.grooves.length)\r\n {\r\n this.grooves = gs;\r\n for (let g of this.grooves)\r\n g.CheckContourCurve();\r\n }\r\n }\r\n\r\n /**\r\n * (步骤4.1)\r\n * 计算凹槽轮廓(可能分裂)\r\n * @param target 不拷贝修改\r\n * @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个)\r\n */\r\n GrooveCheckContour(target: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n let matrixToTarget = target.OCSInv.multiply(this.OCS);\r\n matrixToTarget.elements[14] = 0;//z->0\r\n\r\n let thisShape = this.Shape.ApplyMatrix(matrixToTarget);\r\n let targetShape = new Shape(Contour.CreateContour([target.ContourCurve.Clone()], false));\r\n\r\n let inters = thisShape.IntersectionBoolOperation(targetShape);\r\n\r\n if (inters.length === 1)\r\n {\r\n target.ContourCurve = inters[0].Outline.Curve;\r\n let grooves = [target];\r\n target.GrooveCheckAll(grooves);\r\n return grooves;\r\n }\r\n else\r\n {\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let contour of inters)\r\n {\r\n let ext = target.Clone().ClearDraw();\r\n ext.ContourCurve = contour.Outline.Curve;\r\n ext.GrooveCheckAll(grooves);\r\n grooves.push(ext);\r\n }\r\n return grooves;\r\n }\r\n }\r\n /**\r\n * (步骤4.2)\r\n * 计算本实体被全身度的凹槽差集后正确的实体轮廓,和有可能的分裂实体\r\n * @param splitEntitys 分裂出来的实体\r\n * @returns [Status] Status : 消失不见\r\n */\r\n ContourCheckSubtract(splitEntitys: this[]): boolean\r\n {\r\n let shapeManager = new ShapeManager();\r\n shapeManager.AppendShapeList(\r\n new Shape(Contour.CreateContour(this.ContourCurve.Clone(), false))\r\n );\r\n let subtractShape = new ShapeManager();\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n arrayRemoveIf(this.grooves, groove =>\r\n {\r\n if (equaln(groove.thickness, this.thickness))\r\n {\r\n let grooveCurve = groove.ContourCurve.Clone();\r\n let matrixToLocal = this.OCSInv.multiply(groove.OCS);\r\n grooveCurve.ApplyMatrix(matrixToLocal);\r\n\r\n subtractShape.AppendShapeList(\r\n new Shape(Contour.CreateContour([grooveCurve], false))\r\n );\r\n\r\n grooves.push(groove);\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n shapeManager.SubstactBoolOperation(subtractShape);\r\n let shapes = shapeManager.ShapeList;\r\n\r\n //不做任何改变\r\n if (shapeManager.ShapeCount === 1 && shapes[0].Holes.length === grooves.length)\r\n {\r\n this.grooves.push(...grooves);\r\n return true;\r\n }\r\n\r\n //分裂\r\n for (let i = 1; i < shapeManager.ShapeCount; i++)\r\n {\r\n let ext = this.Clone();\r\n let shape = shapes[i];\r\n for (let hole of shape.Holes)\r\n {\r\n let groove = new ExtrudeSolid();\r\n groove.OCS = this.OCS;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n ext.grooves.push(groove);\r\n }\r\n ext.ContourCurve = shape.Outline.Curve;\r\n ext.GrooveCheckAll(splitEntitys);\r\n ext.Update();\r\n splitEntitys.push(ext);\r\n }\r\n\r\n if (shapes.length > 0)\r\n {\r\n let shape = shapes[0];\r\n for (let hole of shape.Holes)\r\n {\r\n let groove = new ExtrudeSolid();\r\n groove.OCS = this.OCS;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n this.grooves.push(groove);\r\n }\r\n\r\n if (!equaln(this.contourCurve.Area, shape.Outline.Area))\r\n this.ContourCurve = shape.Outline.Curve;\r\n\r\n return true;\r\n }\r\n else\r\n return false;\r\n }\r\n\r\n IsLazyGrooveCheck: boolean;\r\n IsNeedGrooveCheck: boolean;\r\n /**\r\n * 无法知道修改了轮廓是否为更新到内部凹槽.\r\n * 无法知道修改了内部凹槽之后是否会更新到轮廓.\r\n * 所以默认全部校验内部的凹槽\r\n */\r\n GrooveCheckAll(splitEntitys: this[])\r\n {\r\n if (ExtrudeConfig.DisableCheckGroove) return;\r\n\r\n if (this.IsLazyGrooveCheck)\r\n {\r\n this.IsNeedGrooveCheck = true;\r\n return;\r\n }\r\n this.IsNeedGrooveCheck = false;\r\n this.WriteAllObjectRecord();\r\n\r\n //校验Z轴位置\r\n arrayRemoveIf(this.grooves, g =>\r\n {\r\n return this.GrooveCheckPosition(g) === Status.False;\r\n });\r\n\r\n //清除全深洞的子槽\r\n for (let g of this.grooves)\r\n {\r\n if (equaln(g.thickness, this.thickness, 1e-3))\r\n {\r\n /*\r\n 此刻我们直接将它的子槽清空,虽然子槽可能将这个槽分裂成2个,\r\n 但是这样的情况只能在造型应用中才会产生\r\n */\r\n g.grooves.length = 0;\r\n }\r\n else\r\n arrayRemoveIf(g.grooves, subg => !equaln(g.thickness, subg.thickness, 1e-3));\r\n }\r\n\r\n //合并\r\n this.GrooveCheckMerge();\r\n //修改本实体轮廓\r\n if (this.grooves.some(g => equaln(g.thickness, this.thickness, 1e-3)))\r\n {\r\n if (!this.ContourCheckSubtract(splitEntitys))\r\n {\r\n this.Erase();\r\n return;\r\n }\r\n }\r\n\r\n //修正凹槽轮廓\r\n let splitGrooves: ExtrudeSolid[] = [];\r\n let thisArea = this.contourCurve.Area;\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let g = this.grooves[i];\r\n if (equaln(g.thickness, this.thickness, 1e-3))\r\n splitGrooves.push(g);\r\n else\r\n {\r\n let gs = this.GrooveCheckContour(g);\r\n if (gs.length === 1)\r\n {\r\n let gg = gs[0];\r\n if (gg.grooves.length === 0 && equaln(gg.contourCurve.Area, thisArea))\r\n {\r\n //判断正反面\r\n let p = gg.Position.applyMatrix4(this.OCSInv);\r\n if (equaln(p.z, 0))\r\n {\r\n this.thickness -= gg.thickness;\r\n let n = this.Normal;\r\n n.multiplyScalar(gg.thickness);\r\n this._Matrix.elements[12] += n.x;\r\n this._Matrix.elements[13] += n.y;\r\n this._Matrix.elements[14] += n.z;\r\n }\r\n else\r\n {\r\n this.thickness -= gg.thickness;\r\n }\r\n this.grooves.splice(i, 1);\r\n this.GrooveCheckAll(splitEntitys);\r\n return;\r\n }\r\n }\r\n splitGrooves.push(...gs);\r\n }\r\n }\r\n\r\n this.grooves = splitGrooves;\r\n\r\n this.Update();\r\n }\r\n\r\n /** 校验内部槽并且自动分裂 */\r\n GrooveCheckAllAutoSplit(output: ExtrudeSolid[] = undefined)\r\n {\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (output)\r\n output.push(...splitEntitys);\r\n else if (this._Owner)\r\n {\r\n let record = this._Owner.Object as BlockTableRecord;\r\n for (let e of splitEntitys)\r\n {\r\n record.Add(e);\r\n e.RepairRelevance();\r\n }\r\n this.HandleSpliteEntitys(splitEntitys);\r\n }\r\n }\r\n HandleSpliteEntitys(splitEntitys: this[]) { }\r\n LazyGrooveCheckAll()\r\n {\r\n if (this.IsNeedGrooveCheck)\r\n this.GrooveCheckAllAutoSplit();\r\n this.IsLazyGrooveCheck = false;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Draw\r\n GetPrintObject3D()\r\n {\r\n let geometry = new LineGeometry();\r\n let lineSegments = new Float32Array(this.EdgeGeometry.attributes.position.array);\r\n let instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n geometry.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n geometry.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n let line = new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetPrintConceptualMaterial());\r\n return [line, mesh];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(...FastWireframe(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new Object3D().add(...this.GetPrintObject3D());\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n get UCGenerator()\r\n {\r\n return boardUVGenerator;\r\n }\r\n\r\n __CacheKnifVersion__: { [key: number]: number; };\r\n get NeedUpdateRelevanceGroove()\r\n {\r\n if (!this.__CacheKnifVersion__) return true;\r\n\r\n for (let k of this.RelevanceKnifs)\r\n {\r\n if (!k || !k.Object) continue;\r\n\r\n if (this.__CacheKnifVersion__[k.Index] !== ((k.Object)).__UpdateVersion__)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //缓存当前被关联切割后的体积,如果体积有变化,证明多了拉槽或者少了拉槽\r\n __CacheVolume__: number;\r\n //每当我们去计算关联拉槽的时候,总会有这个分裂的图形数组,如果我们需要,我们也可以复用它去拆单,或者去排钻\r\n __CacheSplitExtrudes: this[];\r\n\r\n /**\r\n * 计算关联拉槽,更新绘制对象(MeshGeometry和EdgeGeometry)\r\n */\r\n private CalcRelevanceGroove()\r\n {\r\n //避免Jig实体更新,导致性能暴跌.\r\n if (!this.Id) return;\r\n\r\n this.__CacheKnifVersion__ = {};\r\n\r\n let knifs: ExtrudeSolid[] = [];\r\n this.GetRelevanceKnifes(knifs);\r\n\r\n if (knifs.length > 0)\r\n {\r\n for (let k of knifs) //复合实体(五金)的子实体没有id\r\n this.__CacheKnifVersion__[k.Id?.Index ?? k.__TempIndexVersion__?.Index] = k.__TempIndexVersion__?.Version ?? k.__UpdateVersion__;\r\n\r\n let tempExtrude = this.Clone();\r\n tempExtrude.RelevanceKnifs.length = 0;//避免递归\r\n if (!this.ReadFileIng)\r\n tempExtrude.__OriginalId__ = this.Id;//在读取文件时不打印日志\r\n let output: ExtrudeSolid[] = [tempExtrude];\r\n let ok = tempExtrude.Subtract(knifs, output);\r\n this.__CacheSplitExtrudes = output as this[];\r\n if (ok)\r\n {\r\n this.__CacheVolume__ = tempExtrude.Volume;\r\n let meshs: BufferGeometry[] = [];\r\n let edges: BufferGeometry[] = [];\r\n let inv = this.OCSInv;\r\n let diff = new Matrix4;\r\n for (let e2 of output)\r\n {\r\n diff.multiplyMatrices(inv, e2._Matrix);\r\n meshs.push(e2.MeshGeometry.applyMatrix4(diff));\r\n edges.push(e2.EdgeGeometry.applyMatrix4(diff));\r\n this.__CacheVolume__ += e2.Volume;\r\n\r\n }\r\n if (output.length === 1)\r\n {\r\n this._MeshGeometry = tempExtrude.MeshGeometry;\r\n this._EdgeGeometry = tempExtrude.EdgeGeometry;\r\n }\r\n else\r\n {\r\n this._MeshGeometry = BufferGeometryUtils.MergeBufferGeometries(meshs);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n this._EdgeGeometry = BufferGeometryUtils.MergeBufferGeometries(edges);\r\n }\r\n\r\n //我们加入一些拓展信息,以便排钻能够使用(或者其他的,比如发送到效果图?,BBS)(布局视口会直接添加实体到场景,所以我们只在这里设置OriginEntity)\r\n for (let i = 0; i < this.__CacheSplitExtrudes.length; i++)\r\n {\r\n this.__CacheSplitExtrudes[i].objectId = new ObjectId(this.Id.Index * -100 - i);\r\n this.__CacheSplitExtrudes[i].__OriginalEnt__ = this;\r\n }\r\n }\r\n else\r\n {\r\n let id = this.Id ?? this.__OriginalId__;\r\n if (\r\n !this.ReadFileIng &&\r\n id &&\r\n this instanceof Board &&\r\n this.__CacheVolume__ !== undefined &&\r\n !equaln(this.__CacheVolume__, this.Volume)\r\n )\r\n Log(`${this.Name}(${id.Index})关联槽已逃离!`);\r\n this.__CacheVolume__ = undefined;\r\n\r\n this.__CacheSplitExtrudes = [this];\r\n }\r\n }\r\n else\r\n {\r\n if (\r\n !this.ReadFileIng &&\r\n this.Id &&\r\n this instanceof Board &&\r\n this.__CacheVolume__ !== undefined &&\r\n !equaln(this.__CacheVolume__, this.Volume)\r\n )\r\n Log(`${this.Name}(${this.Id.Index})关联槽已逃离或者被清除!`);\r\n\r\n this.__CacheSplitExtrudes = [this];\r\n this.__CacheVolume__ = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * 如果实体被切割,那么将返回分裂的实体数组,否则返回自身\r\n */\r\n get SplitExtrudes(): this[]\r\n {\r\n if (this.NeedUpdateRelevanceGroove)\r\n this.Update(UpdateDraw.Geometry);//我们先直接更新绘制\r\n if (this.NeedUpdateRelevanceGroove)//如果更新失败,那么我们更新这个槽(似乎也证明了我们没有绘制实体)\r\n this.CalcRelevanceGroove();//注意,这也将更新绘制的实体(EdgeGeo,MeshGeo)(如果拆单也用这个,可能会带来性能损耗)\r\n\r\n return this.__CacheSplitExtrudes;\r\n }\r\n\r\n protected GetRelevanceKnifes(knifs: ExtrudeSolid[])\r\n {\r\n for (let e of this.RelevanceKnifs)\r\n {\r\n if (!e.IsErase)\r\n knifs.push(e.Object as ExtrudeSolid);\r\n else if (this.__CacheKnifVersion__)\r\n this.__CacheKnifVersion__[e.Index] = (e?.Object)?.__UpdateVersion__;\r\n }\r\n }\r\n\r\n ClearRelevance(en?: ExtrudeSolid)\r\n {\r\n if (en)\r\n {\r\n let oldLen = this.RelevanceKnifs.length;\r\n arrayRemoveIf(this.RelevanceKnifs, id => !id?.Object || id.Index === en.Id.Index);\r\n if (this.RelevanceKnifs.length !== oldLen)\r\n arrayRemoveIf(en.RelevanceMeats, id => !id?.Object || id.Index === this.Id.Index);\r\n\r\n oldLen = this.RelevanceMeats.length;\r\n arrayRemoveIf(this.RelevanceMeats, id => !id?.Object || id.Index === en.Id.Index);\r\n if (oldLen !== this.RelevanceMeats.length)\r\n arrayRemoveIf(en.RelevanceKnifs, id => !id?.Object || id.Index === this.Id.Index);\r\n }\r\n else\r\n {\r\n for (let id of this.RelevanceKnifs)\r\n {\r\n let en = id.Object as ExtrudeSolid;\r\n if (en)\r\n arrayRemoveIf(en.RelevanceMeats, i => !i?.Object || i.Index === this.Id.Index);\r\n }\r\n\r\n for (let id of this.RelevanceMeats)\r\n {\r\n let en = id.Object as ExtrudeSolid;\r\n if (en)\r\n {\r\n arrayRemoveIf(en.RelevanceKnifs, i => !i?.Object || i.Index === this.Id.Index);\r\n en.Update();\r\n }\r\n }\r\n this.RelevanceMeats.length = 0;\r\n this.RelevanceKnifs.length = 0;\r\n }\r\n this.Update();\r\n }\r\n\r\n private _MeshGeometry: BufferGeometry;\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n if (this.thickness <= 0)\r\n return new BufferGeometry();\r\n\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n let grooves = this.Grooves;\r\n if (grooves.every(g => equaln(g.thickness, this.thickness)) || grooves.length === 0)\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n let holes: Contour[] = [];\r\n\r\n let ocsInv = this.OCSInv;\r\n let alMatrix4 = new Matrix4();\r\n for (let g of grooves)\r\n {\r\n alMatrix4.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let gContour = g.ContourCurve.Clone();\r\n gContour.ApplyMatrix(alMatrix4);\r\n holes.push(Contour.CreateContour(gContour));\r\n }\r\n\r\n let shape = new Shape(Contour.CreateContour(contour), holes);\r\n\r\n let extrudeSettings: ExtrudeGeometryOptions = {\r\n steps: 1,\r\n bevelEnabled: false,\r\n depth: this.Thickness,\r\n UVGenerator: this.UCGenerator,\r\n };\r\n let geo = new ExtrudeGeometry(shape.Shape, extrudeSettings);\r\n geo.applyMatrix4(contour.OCSNoClone);\r\n this.UpdateUV(geo, contour.OCSNoClone);\r\n let bgeo = new BufferGeometry().fromGeometry(geo);\r\n bgeo[\"IsMesh\"] = true;\r\n this._MeshGeometry = bgeo;\r\n return bgeo;\r\n }\r\n\r\n let builder = new ExtrudeGeometryBuilder(this);\r\n\r\n this._MeshGeometry = builder.MeshGeometry;\r\n this._EdgeGeometry = builder.EdgeGeometry;\r\n this.UpdateUV(null, null);\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: EdgesGeometry | BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n if (this.grooves.every(g => equaln(g.thickness, this.thickness)) || this.grooves.length === 0)\r\n {\r\n let pts = [this.ContourCurve.Shape.getPoints(6).map(AsVector3)];\r\n let ocsInv = this.OCSInv;\r\n let alMatrix4 = new Matrix4();\r\n for (let g of this.grooves)\r\n {\r\n alMatrix4.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let gContour = g.ContourCurve.Clone();\r\n gContour.ApplyMatrix(alMatrix4);\r\n\r\n if (gContour instanceof Polyline)\r\n gContour.UpdateMatrixTo(this.contourCurve.OCS);\r\n\r\n if (gContour instanceof Circle)\r\n {\r\n let sp = new Path();\r\n let cen = gContour.Center.applyMatrix4(this.contourCurve.OCSInv);\r\n sp.ellipse(cen.x, cen.y, gContour.Radius, gContour.Radius, 0, 2 * Math.PI, false, 0);\r\n pts.push(sp.getPoints(6).map(AsVector3));\r\n }\r\n else\r\n pts.push(gContour.Shape.getPoints(6).map(AsVector3));\r\n }\r\n let geo = GenerateExtrudeEdgeGeometry(pts, this.thickness).applyMatrix4(this.contourCurve.OCSNoClone);\r\n this._EdgeGeometry = geo;\r\n return geo;\r\n }\r\n\r\n if (this._MeshGeometry)\r\n {\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n UpdateUV(geo: Geometry, ocs: Matrix4, isRev = false)\r\n {\r\n let mat: PhysicalMaterialRecord;\r\n if (this.Material && this.Material.Object)\r\n mat = this.Material.Object as PhysicalMaterialRecord;\r\n else\r\n mat = this.Db?.DefaultMaterial;\r\n\r\n if (mat && mat.IsFull)\r\n {\r\n if (geo)\r\n ScaleUV2(geo, ocs, this.width, this.height, isRev);\r\n else\r\n this.UpdateBufferGeometryUvs(isRev);\r\n }\r\n else\r\n {\r\n if (geo)\r\n ScaleUV(geo);\r\n }\r\n }\r\n UpdateBufferGeometryUvs(isRev: boolean)\r\n {\r\n let uvs = this._MeshGeometry.attributes.uv;\r\n for (let i = 0; i < uvs.count; i++)\r\n {\r\n let x = uvs.getX(i) * 1e3;\r\n let y = uvs.getY(i) * 1e3;\r\n if (isRev)\r\n uvs.setXY(i, x / this.height, y / this.width);\r\n else\r\n uvs.setXY(i, x / this.width, y / this.height);\r\n }\r\n }\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n //如果是Jig实体,那么就算它有关联切割,我们也不更新实体(因为似乎没必要?)\r\n if (this.Id && this.RelevanceKnifs.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this.csg = undefined;\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry.dispose();\r\n this._EdgeGeometry = undefined;\r\n if (this._MeshGeometry)\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n obj.add(...FastWireframe(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return obj.add(\r\n ...this.GetPrintObject3D()\r\n );\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return obj.add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n\r\n UpdateJigMaterial(color = 8)\r\n {\r\n\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n /**\r\n * 简化的文件读取和写入,只写入必要的数据,没有id,没有其他版本号\r\n */\r\n ReadFileLite(file: CADFiler)\r\n {\r\n this.ReadFileOnly(file);\r\n this._Matrix.fromArray(file.Read());\r\n }\r\n WriteFileLite(file: CADFiler)\r\n {\r\n this.WriteFileOnly(file);\r\n file.Write(this._Matrix.toArray());\r\n }\r\n\r\n private ReadFileOnly(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.height = Number(file.Read());\r\n this.width = Number(file.Read());\r\n this.thickness = Number(file.Read());\r\n this.isRect = file.Read();\r\n this.contourCurve = file.ReadObject() as ExtureContourCurve;\r\n\r\n let grooveCount = file.Read();\r\n this.grooves.length = 0;\r\n for (let i = 0; i < grooveCount; i++)\r\n {\r\n if (this.grooves[i] === undefined)\r\n this.grooves[i] = new ExtrudeSolid();\r\n\r\n this.grooves[i].ReadFileLite(file);\r\n }\r\n\r\n this.knifeRadius = file.Read();\r\n this.groovesAddLength = file.Read();\r\n if (ver > 1)\r\n {\r\n this.groovesAddWidth = file.Read();\r\n this.groovesAddDepth = file.Read();\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this.RelevanceMeats.length = 0;\r\n this.RelevanceKnifs.length = 0;\r\n\r\n let count = file.Read() as number;\r\n for (let index = 0; index < count; index++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this.RelevanceMeats.push(id);\r\n }\r\n\r\n count = file.Read() as number;\r\n for (let index = 0; index < count; index++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this.RelevanceKnifs.push(id);\r\n }\r\n }\r\n }\r\n private WriteFileOnly(file: CADFiler)\r\n {\r\n file.Write(3);\r\n file.Write(this.height);\r\n file.Write(this.width);\r\n file.Write(this.thickness);\r\n file.Write(this.isRect);\r\n file.WriteObject(this.ContourCurve);\r\n\r\n file.Write(this.grooves.length);\r\n for (let groove of this.grooves)\r\n groove.WriteFileLite(file);\r\n\r\n file.Write(this.knifeRadius);\r\n file.Write(this.groovesAddLength);\r\n file.Write(this.groovesAddWidth);\r\n file.Write(this.groovesAddDepth);\r\n\r\n //3\r\n file.Write(this.RelevanceMeats.length);\r\n for (let id of this.RelevanceMeats)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this.RelevanceKnifs.length);\r\n for (let id of this.RelevanceKnifs)\r\n file.WriteSoftObjectId(id);\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n this.ReadFileOnly(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n this.WriteFileOnly(file);\r\n }\r\n //#endregion\r\n}\r\n\r\nexport function FastMeshGeometry(width: number, height: number, thickness: number)\r\n{\r\n let geo = new BoxGeometry(width, height, thickness);\r\n geo.translate(width * 0.5, height * 0.5, thickness * 0.5);\r\n return geo;\r\n}\r\n\r\n\r\nCADFactory.RegisterObjectAlias(ExtrudeSolid, \"ExtureSolid\");\r\n\r\nfunction ProjectBoard(knifBoard: ExtrudeSolid, projectBoard: ExtrudeSolid)\r\n{\r\n let n1 = knifBoard.Normal;\r\n let n2 = projectBoard.Normal;\r\n if (!isPerpendicularityTo(n1, n2)) return;\r\n\r\n let p1 = projectBoard.Position;\r\n let p2 = n2.clone().multiplyScalar(projectBoard.Thickness).add(p1);\r\n\r\n let ocsInv = knifBoard.OCSInv;\r\n p1.applyMatrix4(ocsInv).setZ(0);\r\n p2.applyMatrix4(ocsInv).setZ(0);\r\n\r\n let dir = new Vector3().crossVectors(n1, n2).applyMatrix4(ocsInv.clone().setPosition(ZeroVec));\r\n\r\n let lineLength = projectBoard.Width + projectBoard.Height;//两边之和大于第三边\r\n let pts = [\r\n dir.clone().multiplyScalar(lineLength).add(p1),\r\n dir.clone().multiplyScalar(-lineLength).add(p1),\r\n dir.clone().multiplyScalar(-lineLength).add(p2),\r\n dir.clone().multiplyScalar(lineLength).add(p2),\r\n ];\r\n\r\n let pl = new Polyline(pts.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n }));\r\n pl.CloseMark = true;\r\n\r\n // pl.ApplyMatrix(knifBoard.OCS);\r\n return pl;\r\n}\r\n\r\n//用于翻转绘制出来的槽\r\nconst OverturnMatrix = new Matrix4().makeBasis(YAxis, ZAxis, XAxis);\r\n","import { Matrix3, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DragPointType } from \"./DragPointType\";\r\nimport { Entity } from \"./Entity\";\r\nimport { ExtrudeSolid } from \"./Extrude\";\r\n\r\n\r\n@Factory\r\nexport class CompositeEntity extends Entity\r\n{\r\n constructor()\r\n {\r\n super();\r\n }\r\n //如果你需要修改内部实体,则需要写入记录\r\n @AutoRecord Entitys: Entity[] = [];\r\n\r\n //#region 绘制\r\n // OnlyRenderType = true; //我们现在不需要这样,因为我们每个绘制类型的Object的子实体都有子实体的渲染类型(唯一的缺点可能是渲染速度变慢了?)\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n Explode()\r\n {\r\n return this.Entitys.map(e =>\r\n {\r\n let cloneE = e.Clone();\r\n cloneE.Material = e.Material;\r\n return cloneE.ApplyMatrix(this.OCS);\r\n });\r\n }\r\n Traverse(callback: (arg0: Entity) => void)\r\n {\r\n callback(this);\r\n for (let en of this.Entitys)\r\n {\r\n if (en instanceof CompositeEntity)\r\n en.Traverse(callback);\r\n else\r\n callback(en);\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3Ext();\r\n for (let e of this.Entitys)\r\n box.union(e.BoundingBox);\r\n return box.applyMatrix4(this.OCS);\r\n }\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n /**\r\n * 如果复合实体里面有圆,并且使用了拉伸夹点功能,在UpdateDrawObject时,会因为无法得到Jig对象而导致的错误.\r\n * 索性我们去掉Jig实体的功能.\r\n */\r\n if (renderType === RenderType.Jig) return;\r\n\r\n let object = new Object3D();\r\n this.UpdateDrawObject(renderType, object);\r\n return object;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n Object3DRemoveAll(obj);\r\n for (let e of this.Entitys)\r\n {\r\n e.IsEmbedEntity = true;\r\n\r\n // //内嵌实体在某些时候可能被清理,修复它\r\n // if (e.DrawObject.children.length === 0)\r\n // e.ClearDraw();\r\n let o = e.GetDrawObjectFromRenderType(renderType);\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, e, renderType);\r\n }\r\n }\r\n\r\n get ColorIndex(): number\r\n {\r\n return super.ColorIndex;\r\n }\r\n\r\n set ColorIndex(color: number)\r\n {\r\n if (color !== this._Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Color = color;\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n // if (e instanceof CompositeEntity) //有点奇怪\r\n // e._Color = color;\r\n // else\r\n e.ColorIndex = color;\r\n });\r\n }\r\n }\r\n get Material()\r\n {\r\n return super.Material;\r\n }\r\n set Material(id)\r\n {\r\n super.Material = id;\r\n for (let e of this.Entitys)\r\n e.Material = id;\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n this.UpdateDrawObject(renderType, obj);\r\n }\r\n\r\n RestoreJigMaterial()\r\n {\r\n //我们不做任何事情,避免更新材质引起的重绘,因为我们没有实现Jig材质,所以我们也不需要还原它\r\n }\r\n\r\n //#endregion\r\n\r\n //#region 交互操作\r\n\r\n /**\r\n *\r\n * @param snapMode 捕捉模式(单一)\r\n * @param pickPoint const\r\n * @param lastPoint const\r\n * @param viewXform const 最近点捕捉需要这个变量\r\n * @returns object snap points\r\n */\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n for (let e of this.Entitys)\r\n {\r\n pts.push(...e.Clone().ApplyMatrix(this.OCS).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n *\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\r\n * @memberof Entity\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n\r\n private GetGripOrStretchPoints(type: DragPointType)\r\n {\r\n let pts: Vector3[] = [];\r\n for (let e of this.Entitys)\r\n pts.push(... (type === DragPointType.Grip ? e.GetGripPoints() : e.GetStretchPoints()));\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n\r\n private GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts: number[] = this.Entitys.map(e =>\r\n {\r\n return (dragType === DragPointType.Grip ? e.GetGripPoints() : e.GetStretchPoints()).length;\r\n });\r\n return counts;\r\n }\r\n\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let counts = this.GetStrectchPointCountList(dragType);\r\n if (dragType === DragPointType.Stretch && indexList.length === arraySum(counts))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n arraySortByNumber(indexList);\r\n let i = 0;\r\n let j = 0;\r\n let icount = indexList.length;\r\n let offset = 0;\r\n for (let count of counts)\r\n {\r\n offset += count;\r\n let ilist = [];\r\n for (; i < icount; i++)\r\n {\r\n if (indexList[i] < offset)\r\n ilist.push(indexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n\r\n let ent = this.Entitys[j];\r\n dragType === DragPointType.Grip ? ent.MoveGripPoints(ilist, vec) : ent.MoveStretchPoints(ilist, vec);\r\n if (ent instanceof ExtrudeSolid)//取消优化判断this.Objectid,因为这个实体可能被复合在另一个实体中,导致这个id是不存在的,所以我们无法判断它在拽拖.\r\n ent.CheckContourCurve();\r\n ent.Update();\r\n j++;\r\n }\r\n this.__UpdateVersion__++;\r\n\r\n //如何绘制对象是克隆的,那么我们将重绘它(避免无法更新)\r\n //我们也不大需要下面的判断,我们如果持续的更新它,其实并不会有多大的问题,因为我们总是从缓存里面拿绘制对象\r\n // if (this._drawObject && this._drawObject.children[0]?.userData.IsClone)\r\n this.Update();\r\n }\r\n CloneDrawObject(from: this)\r\n {\r\n for (let [type, obj] of from._CacheDrawObject)\r\n {\r\n let oldUserDaata = obj.userData;\r\n obj.userData = {};\r\n let newObj = obj.clone(true);\r\n obj.userData = oldUserDaata;\r\n obj.userData.IsClone = true;\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n newObj.userData.IsClone = true;\r\n\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n //#endregion\r\n\r\n //#region 文件序列化\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let v = file.Read();\r\n super._ReadFile(file);\r\n let count = file.Read();\r\n this.Entitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let ent = file.ReadObject() as Entity;\r\n if (ent)\r\n this.Entitys.push(ent);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.Entitys.length);\r\n for (let e of this.Entitys)\r\n file.WriteObject(e);\r\n }\r\n //#endregion\r\n}\r\n","import { CompositeEntity } from \"../Entity/CompositeEntity\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { ICompHardwareOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DefaultCompositeMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\n\r\n@Factory\r\nexport class HardwareCompositeEntity extends CompositeEntity\r\n{\r\n @AutoRecord HardwareOption: ICompHardwareOption = { ...DefaultCompositeMetalsOption };\r\n @AutoRecord DataList: [string, string][] = [];\r\n @AutoRecord RelevanceBoards: ObjectId[] = [];\r\n constructor()\r\n {\r\n super();\r\n }\r\n GetAllEntity(isHole: boolean = false, filter?: (e: Entity) => boolean)\r\n {\r\n let holes: Entity[] = [];\r\n for (let e of this.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n if (!isHole || e.HardwareOption.isHole)\r\n holes.push(...e.GetAllEntity(isHole, filter).map(h => h.ApplyMatrix(this.OCS)));\r\n }\r\n else\r\n {\r\n if (!filter || filter(e))\r\n {\r\n holes.push(e.Clone().ApplyMatrix(this.OCS));\r\n }\r\n }\r\n }\r\n return holes;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let v = file.Read();\r\n\r\n this.HardwareOption.type = file.Read();\r\n this.HardwareOption.isSplite = file.Read();\r\n this.HardwareOption.isSplitePrice = file.Read();\r\n this.HardwareOption.color = file.Read();\r\n this.HardwareOption.material = file.Read();\r\n this.HardwareOption.name = file.Read();\r\n this.HardwareOption.roomName = file.Read();\r\n this.HardwareOption.cabinetName = file.Read();\r\n this.HardwareOption.costExpr = file.Read();\r\n this.HardwareOption.actualExpr = file.Read();\r\n this.HardwareOption.model = file.Read();\r\n this.HardwareOption.factory = file.Read();\r\n this.HardwareOption.brand = file.Read();\r\n this.HardwareOption.spec = file.Read();\r\n this.HardwareOption.count = file.Read();\r\n this.HardwareOption.comments = file.Read();\r\n this.HardwareOption.unit = file.Read();\r\n\r\n let count = file.Read();\r\n this.DataList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n this.DataList.push(d);\r\n }\r\n\r\n if (v > 1)\r\n this.HardwareOption.isHole = file.Read();\r\n\r\n if (v >= 3)\r\n {\r\n let count = file.Read();\r\n this.RelevanceBoards.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n this.RelevanceBoards.push(file.ReadSoftObjectId());\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n\r\n file.Write(this.HardwareOption.type);\r\n file.Write(this.HardwareOption.isSplite);\r\n file.Write(this.HardwareOption.isSplitePrice);\r\n file.Write(this.HardwareOption.color);\r\n file.Write(this.HardwareOption.material);\r\n file.Write(this.HardwareOption.name);\r\n file.Write(this.HardwareOption.roomName);\r\n file.Write(this.HardwareOption.cabinetName);\r\n file.Write(this.HardwareOption.costExpr);\r\n file.Write(this.HardwareOption.actualExpr);\r\n file.Write(this.HardwareOption.model);\r\n file.Write(this.HardwareOption.factory);\r\n file.Write(this.HardwareOption.brand);\r\n file.Write(this.HardwareOption.spec);\r\n file.Write(this.HardwareOption.count);\r\n file.Write(this.HardwareOption.comments);\r\n file.Write(this.HardwareOption.unit);\r\n\r\n file.Write(this.DataList.length);\r\n for (let data of this.DataList)\r\n {\r\n file.Write(data[0]);\r\n file.Write(data[1]);\r\n }\r\n\r\n file.Write(this.HardwareOption.isHole);\r\n file.Write(this.RelevanceBoards.length);\r\n for (let id of this.RelevanceBoards)\r\n file.WriteSoftObjectId(id);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { LinesType } from \"../UI/Store/BoardInterface\";\r\n\r\nexport class PointShapeUtils\r\n{\r\n //方形点表\r\n static SquarePts(size: number)\r\n {\r\n return [\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n new Vector3(size, size),\r\n new Vector3(-size, size),\r\n new Vector3(-size, -size),\r\n ];\r\n }\r\n //方形外圈十字直线点表\r\n static OutsideLinePts(squareSize: number, lineLength: number)\r\n {\r\n return [\r\n //-X\r\n new Vector3(-squareSize, 0),\r\n new Vector3(-lineLength, 0),\r\n //X\r\n new Vector3(squareSize, 0),\r\n new Vector3(lineLength, 0),\r\n //Y\r\n new Vector3(0, squareSize),\r\n new Vector3(0, lineLength),\r\n\r\n //-Y\r\n new Vector3(0, -squareSize),\r\n new Vector3(0, -lineLength),\r\n ];\r\n }\r\n //十字直线点表\r\n static CrossLinePts(lineLength: number)\r\n {\r\n return [\r\n new Vector3(0, -lineLength),\r\n new Vector3(0, lineLength),\r\n\r\n new Vector3(lineLength, 0),\r\n new Vector3(-lineLength, 0),\r\n ];\r\n }\r\n static CrossLine3DPts(lineLength: number)\r\n {\r\n return [\r\n [new Vector3(lineLength, 0),\r\n new Vector3(-lineLength / 2, 0)],\r\n [new Vector3(0, -lineLength / 2),\r\n new Vector3(0, lineLength)],\r\n [new Vector3(0, 0, -lineLength / 2),\r\n new Vector3(0, 0, lineLength)],\r\n ];\r\n }\r\n\r\n static TrianglePts(size: number)\r\n {\r\n return [\r\n new Vector3(size, -size),\r\n new Vector3(0, size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n ];\r\n }\r\n\r\n static CirclePts(size: number)\r\n {\r\n let pts = [];\r\n let a = Math.PI * 2 / 8;\r\n for (let i = 0; i < 9; i++)\r\n pts.push(new Vector3(Math.sin(a * i) * size, Math.cos(a * i) * size));\r\n return pts;\r\n }\r\n\r\n static ObliqueCrossPts(size: number)\r\n {\r\n return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(-size, -size), new Vector3(size, size)];\r\n }\r\n static ObliqueCrossLinePts(size: number)\r\n {\r\n return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(), new Vector3(-size, -size), new Vector3(size, size)];\r\n }\r\n\r\n static SandClockPts(size: number)\r\n {\r\n return [\r\n new Vector3(size, size),\r\n new Vector3(-size, size),\r\n new Vector3(size, -size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, size),\r\n ];\r\n }\r\n\r\n static TangentPts(size: number)\r\n {\r\n let pts = [\r\n new Vector3(-size, size),\r\n new Vector3(size, size),\r\n new Vector3(size / 2, size),\r\n ];\r\n let a = Math.PI * 2 / 8;\r\n for (let i = 0; i < 9; i++)\r\n pts.push(new Vector3(Math.sin(a * i + Math.PI / 2) * size, Math.cos(a * i + Math.PI / 2) * size));\r\n return pts;\r\n }\r\n\r\n static PerPts(size: number)\r\n {\r\n return [\r\n new Vector3(-size, size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n new Vector3(0, -size),\r\n new Vector3(0, 0),\r\n new Vector3(-size, 0),\r\n ];\r\n }\r\n\r\n static LinesDirPts(len: number, width: number, lineType: LinesType)\r\n {\r\n if (lineType === LinesType.Reverse)\r\n {\r\n return [\r\n new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, width / 2),\r\n new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, -width / 2),\r\n new Vector3(-len / 2), new Vector3(len / 2),\r\n new Vector3(len / 2), new Vector3(len / 2 - width / 2, width / 2),\r\n new Vector3(len / 2), new Vector3(len / 2 - width / 2, -width / 2),\r\n ];\r\n }\r\n else if (lineType === LinesType.Positive)\r\n return [\r\n new Vector3(0, -len / 2), new Vector3(-width / 2, -len / 2 + width / 2),\r\n new Vector3(0, -len / 2), new Vector3(width / 2, -len / 2 + width / 2),\r\n new Vector3(0, -len / 2), new Vector3(0, len / 2),\r\n new Vector3(0, len / 2), new Vector3(-width / 2, len / 2 - width / 2),\r\n new Vector3(0, len / 2), new Vector3(width / 2, len / 2 - width / 2),\r\n\r\n ];\r\n else\r\n {\r\n let w1 = Math.min(len, width) / 5;\r\n\r\n return [\r\n new Vector3(0, len / 2), new Vector3(0, -len / 2),\r\n new Vector3(-width / 2), new Vector3(width / 2),\r\n\r\n new Vector3(-width / 2), new Vector3(-width / 2 + w1, w1),\r\n new Vector3(-width / 2), new Vector3(-width / 2 + w1, -w1),\r\n new Vector3(width / 2), new Vector3(width / 2 - w1, w1),\r\n new Vector3(width / 2), new Vector3(width / 2 - w1, -w1),\r\n\r\n new Vector3(0, len / 2), new Vector3(-w1, len / 2 - w1),\r\n new Vector3(0, len / 2), new Vector3(w1, len / 2 - w1),\r\n new Vector3(0, -len / 2), new Vector3(-w1, -len / 2 + w1),\r\n new Vector3(0, -len / 2), new Vector3(w1, -len / 2 + w1),\r\n ];\r\n }\r\n }\r\n}\r\n","import { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { angle, equaln, isParallelTo, rotatePoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Hole } from \"../../DatabaseServices/3DSolid/Hole\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { userConfig } from \"../../Editor/UserConfig\";\r\n\r\nconst SCALAR = 0.1;\r\n\r\nexport function CyHoleInBoard(cys: CylinderHole[], br: Board, ocs: Matrix4)\r\n{\r\n if (cys.length === 1 && cys[0].Type === GangDrillType.Ymj)\r\n return true;\r\n\r\n const outline = br.ContourCurve;\r\n let box = new Box3();\r\n let pxl: CylinderHole;\r\n let ljg: CylinderHole;\r\n let ymj: CylinderHole;\r\n let wood: CylinderHole;\r\n let woodPXL: CylinderHole;\r\n let pxl2: CylinderHole;\r\n for (let cy of cys)\r\n {\r\n box.union(cy.BoundingBox);\r\n if (cy.Type === GangDrillType.Pxl)\r\n {\r\n if (pxl)\r\n pxl2 = cy;\r\n else\r\n pxl = cy;\r\n }\r\n else if (cy.Type === GangDrillType.Ljg)\r\n ljg = cy;\r\n else if (cy.Type === GangDrillType.Wood)\r\n wood = cy;\r\n else if (cy.Type === GangDrillType.WoodPXL)\r\n woodPXL = cy;\r\n else\r\n ymj = cy;\r\n }\r\n box.applyMatrix4(ocs);\r\n\r\n let outlineBox = outline.BoundingBox;\r\n outlineBox.max.setZ(br.Thickness);\r\n\r\n if (!box.intersectsBox(outlineBox))\r\n return false;\r\n\r\n let nor = new Vector3();\r\n\r\n if (ljg)\r\n nor.copy(ljg.Normal);\r\n else if (ymj)\r\n nor.copy(ymj.Normal);\r\n else\r\n if (wood)\r\n nor.copy(wood.Normal);\r\n\r\n nor.applyMatrix4(ocs.clone().setPosition(new Vector3));\r\n\r\n if (isParallelTo(nor, ZAxis))\r\n {\r\n if (ymj)\r\n {\r\n let center = ymj.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, ymj.Radius - SCALAR);\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n }\r\n }\r\n else\r\n {\r\n if (pxl)\r\n {\r\n let plxs = [pxl];\r\n if (pxl2)\r\n plxs.push(pxl2);\r\n if (plxs.every(cy =>\r\n {\r\n let center = cy.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, pxl.Radius - SCALAR);\r\n if (userConfig.forceFilterPxl)\r\n return outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center);\r\n }))\r\n return false;\r\n }\r\n if (woodPXL)\r\n {\r\n let center = woodPXL.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, woodPXL.Radius - SCALAR);\r\n if (outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center))\r\n return false;\r\n }\r\n\r\n if (ljg)\r\n {\r\n let c1 = ljg.Position.applyMatrix4(ocs).setZ(0);\r\n let minPt = c1.clone().add(nor.clone().multiplyScalar(ljg.Height / 2));\r\n let c2 = c1.clone().add(nor.clone().multiplyScalar(ljg.Height - SCALAR));\r\n c1.add(nor.clone().multiplyScalar(SCALAR));\r\n\r\n rotatePoint(nor, Math.PI / 2);\r\n c1.add(nor.multiplyScalar(ljg.Radius));\r\n c2.add(nor.negate());\r\n\r\n let rect = new Polyline().RectangleFrom2Pt(c1, c2);\r\n\r\n let intPtsLen = outline.IntersectWith(rect, 0).length;\r\n if (intPtsLen > 2 || (intPtsLen === 0 && !outline.PtInCurve(minPt)))\r\n return false;\r\n }\r\n\r\n if (wood)\r\n {\r\n let c1 = wood.Position.applyMatrix4(ocs).setZ(0);\r\n let c2 = c1.clone().add(nor.clone().multiplyScalar(wood.Height));\r\n\r\n rotatePoint(nor, Math.PI / 2);\r\n let dir = nor.multiplyScalar(wood.Radius);\r\n let p1 = c1.clone().add(dir);\r\n let p2 = c2.clone().add(dir);\r\n let p3 = c1.clone().add(dir.negate());\r\n let p4 = c2.clone().add(dir);\r\n let l1 = new Line(p1, p2);\r\n let l2 = new Line(p3, p4);\r\n if (l1.IntersectWith(outline, 0).length !== 1 || l2.IntersectWith(outline, 0).length !== 1)\r\n return false;\r\n }\r\n\r\n }\r\n return true;\r\n}\r\n\r\nexport interface IRectHoleOption\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\n\r\nexport const TempRectHoleOption: IRectHoleOption = {\r\n up: \"\",\r\n down: \"\",\r\n left: \"\",\r\n right: \"\",\r\n};\r\n\r\n/**分析上下左右排钻 */\r\nexport function InitRectBoardHoleOption(br: Board, option: IRectHoleOption)\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n let hightDrill = br.BoardProcessOption.highDrill;\r\n let cus = br.ContourCurve.Explode() as Curve[];\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n option.down = hightDrill[i];\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n option.right = hightDrill[i];\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n option.up = hightDrill[i];\r\n else\r\n option.left = hightDrill[i];\r\n }\r\n}\r\nexport function ExtureHoleInBoard(holes: ExtrudeHole[], board: Board, ocs: Matrix4)\r\n{\r\n //TODO:自定义排钻判断\r\n return true;\r\n}\r\nexport function HoleInBoard(holes: Hole[], br: Board, ocs?: Matrix4)\r\n{\r\n if (holes.length === 0) return false;\r\n\r\n if (holes[0] instanceof CylinderHole)\r\n {\r\n return CyHoleInBoard(holes as CylinderHole[], br, ocs ?? br.OCSInv);\r\n }\r\n else\r\n {\r\n return ExtureHoleInBoard(holes as ExtrudeHole[], br, ocs ?? br.OCSInv);\r\n }\r\n}\r\n\r\n/**上下左右排钻写入板件 */\r\nexport function SetRectHighHole(br: Board, option: IRectHoleOption)\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n let highDrill = br.BoardProcessOption.highDrill;\r\n let cus = br.ContourCurve.Explode() as Curve[];\r\n highDrill.length = 0;\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n highDrill.push(option.down);\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n highDrill.push(option.right);\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n highDrill.push(option.up);\r\n else\r\n highDrill.push(option.left);\r\n }\r\n let types = new Set(highDrill);\r\n if (types.size === 1 && highDrill[0] !== DrillType.None)\r\n br.BoardProcessOption[EBoardKeyList.DrillType] = highDrill[0];\r\n};\r\n","import { Matrix4, Vector3, LineSegments, Object3D, Mesh, Geometry } from 'three';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { deserializationBoardData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { arrayRemoveIf } from '../../Common/ArrayExt';\r\nimport { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { userConfig } from '../../Editor/UserConfig';\r\nimport { boardUVGenerator, boardUVGenerator2 } from '../../Geometry/BoardUVGenerator';\r\nimport { equaln, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { BoardOpenDir, BoardProcessOption, BoardType, ComposingType, FaceDirection, LinesType } from '../../UI/Store/BoardInterface';\r\nimport { ExtrudeHole } from '../3DSolid/ExtrudeHole';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { HardwareCompositeEntity } from '../Hardware/HardwareCompositeEntity';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { Shape } from '../Shape';\r\nimport { Circle } from './Circle';\r\nimport { Entity } from './Entity';\r\nimport { ExtrudeSolid, ExtureContourCurve } from './Extrude';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { CylinderHole } from '../3DSolid/CylinderHole';\r\nimport { BlockTableRecord } from '../BlockTableRecord';\r\nimport { InitRectBoardHoleOption, SetRectHighHole, TempRectHoleOption, CyHoleInBoard } from '../../Add-on/DrawDrilling/HoleUtils';\r\n\r\n//转换板件类型成为空间类型. 0x 1y 2z\r\nexport function ConverBoardTypeToSpaceType(type: BoardType): number\r\n{\r\n switch (type)\r\n {\r\n case BoardType.Layer:\r\n return 2;\r\n case BoardType.Vertical:\r\n return 0;\r\n case BoardType.Behind:\r\n return 1;\r\n }\r\n}\r\n\r\nexport interface IModeling\r\n{\r\n shape: Shape;\r\n thickness: number;\r\n dir: FaceDirection;\r\n knifeRadius: number;\r\n addLen: number;\r\n addWidth?: number;\r\n addDepth?: number;\r\n}\r\n\r\n/**\r\n * 板件实体\r\n */\r\n@Factory\r\nexport class Board extends ExtrudeSolid\r\n{\r\n private _Rotation = {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n };\r\n private _BoardType: BoardType;\r\n private _Name = \"\";\r\n private _BoardProcessOption: BoardProcessOption;\r\n //板件排钻表,与之碰撞板件为key\r\n private _DrillList: Map = new Map();\r\n private _LayerNails: ObjectId[] = [];\r\n @AutoRecord RelativeHardware: ObjectId[] = [];\r\n @AutoRecord OpenDir: BoardOpenDir = BoardOpenDir.None;\r\n private _IsChaiDan: boolean = true;\r\n constructor()\r\n {\r\n super();\r\n this.InitBoardData();\r\n }\r\n\r\n /**\r\n * 创建一个代理数组,数组改变时被监听\r\n */\r\n private CreateArray(): T[]\r\n {\r\n return new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n this.WriteAllObjectRecord();\r\n return Reflect.set(target, key, value, receiver);\r\n }\r\n });\r\n }\r\n\r\n private InitBoardData()\r\n {\r\n let defaultData: BoardProcessOption =\r\n {\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n boardName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n composingFace: ComposingType.Arbitrary,\r\n highSealed: this.CreateArray(),\r\n sealedUp: \"1\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n spliteHeight: \"\",\r\n spliteWidth: \"\",\r\n spliteThickness: \"\",\r\n highDrill: this.CreateArray(),\r\n frontDrill: true,\r\n backDrill: true,\r\n drillType: \"\",\r\n remarks: this.CreateArray(),\r\n };\r\n\r\n this._BoardProcessOption = new Proxy(defaultData, {\r\n get: function (target, key, receiver)\r\n {\r\n return Reflect.get(target, key, receiver);\r\n },\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (key === \"highDrill\" || key === \"highSealed\")\r\n {\r\n let arr = this.CreateArray() as any[];\r\n arr.push(...value);\r\n target[key] = arr;\r\n return true;\r\n }\r\n let result = Reflect.set(target, key, value, receiver);\r\n if (key === EBoardKeyList.Lines)\r\n this.Update(UpdateDraw.Geometry);\r\n return result;\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n //初始化板件 来自长宽高\r\n InitBoard(length: number, width: number, thickness: number, boardType: BoardType = BoardType.Layer)\r\n {\r\n this._BoardType = boardType;\r\n if (boardType === BoardType.Layer)\r\n {\r\n this.ColorIndex = 2;\r\n this._Name = \"层板\";\r\n }\r\n else if (boardType === BoardType.Vertical)\r\n {\r\n this.ColorIndex = 11;\r\n this._Name = \"立板\";\r\n }\r\n else\r\n {\r\n this.ColorIndex = 3;\r\n this._Name = \"背板\";\r\n }\r\n\r\n let types = [...userConfig.DrillConfigs.keys(), \"不排\"];\r\n let type = types.includes(this.BoardProcessOption.drillType) ? this.BoardProcessOption.drillType : types[0];\r\n this._BoardProcessOption.drillType = type;\r\n this._BoardProcessOption.highDrill = Array(4).fill(type);\r\n\r\n this.ConverToRectSolid(width, length, thickness);\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n static CreateBoard(length: number, width: number, thickness: number, boardType: BoardType = BoardType.Layer)\r\n {\r\n let board = new Board();\r\n board.InitBoard(length, width, thickness, boardType);\r\n board.ApplyMatrix(board.RotateMat);\r\n board._SpaceOCS.identity();\r\n return board;\r\n }\r\n get DrillList()\r\n {\r\n return this._DrillList;\r\n }\r\n\r\n get LayerNails()\r\n {\r\n return this._LayerNails;\r\n }\r\n\r\n AppendNails(ids: ObjectId[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LayerNails.push(...ids);\r\n }\r\n ClearLayerNails()\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let nail of this._LayerNails)\r\n {\r\n if (nail.Object && !nail.IsErase)\r\n nail.Object.Erase();\r\n }\r\n this._LayerNails.length = 0;\r\n }\r\n\r\n /**\r\n * 你可以安心的修改它,这样会直接影响到板件,因为板件对这个对象添加了代理.\r\n */\r\n get BoardProcessOption()\r\n {\r\n return this._BoardProcessOption;\r\n }\r\n\r\n set BoardProcessOption(obj: BoardProcessOption)\r\n {\r\n Object.assign(this._BoardProcessOption, obj, { [EBoardKeyList.HighSealed]: obj[EBoardKeyList.HighSealed].slice() });\r\n }\r\n get NeedUpdateRelevanceGroove()\r\n {\r\n if (super.NeedUpdateRelevanceGroove)\r\n return true;\r\n\r\n for (let k of this.RelativeHardware)\r\n {\r\n if (!k || !k.Object) continue;\r\n if (this.__CacheKnifVersion__[k.Index] !== ((k.Object)).__UpdateVersion__)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n protected GetRelevanceKnifes(knifs: ExtrudeSolid[])\r\n {\r\n super.GetRelevanceKnifes(knifs);\r\n for (let e of this.RelativeHardware)\r\n {\r\n if (e.IsErase) continue;\r\n let hardware = e.Object;\r\n if (hardware instanceof HardwareCompositeEntity)\r\n {\r\n if (hardware.HardwareOption.isHole)\r\n {\r\n let holes = hardware.GetAllEntity(true, e => e instanceof ExtrudeHole || e instanceof ExtrudeSolid) as (ExtrudeHole | ExtrudeSolid)[];\r\n\r\n for (let i = 0; i < holes.length; i++)\r\n {\r\n let h = holes[i];\r\n let g = h instanceof ExtrudeHole ? h.Convert2ExtrudeSolid() : h;\r\n g.__TempIndexVersion__ = { Index: hardware.Id.Index, Version: hardware.__UpdateVersion__ };\r\n knifs.push(g);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n ClearRelevance(en?: ExtrudeSolid)\r\n {\r\n for (let id of this.RelativeHardware)\r\n {\r\n let e = id.Object;\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n arrayRemoveIf(e.RelevanceBoards, i => !i || i.Index === this.Id.Index);\r\n }\r\n }\r\n this.RelativeHardware.length = 0;\r\n super.ClearRelevance(en);\r\n }\r\n\r\n get SplitBoards()\r\n {\r\n let brs = this.SplitExtrudes;\r\n //拆单或者bbs的时候会重新加入最新的原板件的排钻和层板钉数据\r\n for (let br of brs)\r\n {\r\n if (br.__OriginalEnt__)\r\n {\r\n br._DrillList = new Map(this._DrillList.entries());\r\n br._LayerNails = [...this._LayerNails];\r\n br.ProcessingGroupList = [...this.ProcessingGroupList];\r\n br._BoardProcessOption = { ...this._BoardProcessOption };\r\n }\r\n }\r\n return brs;\r\n }\r\n\r\n get BoardModeling()\r\n {\r\n let models: IModeling[] = [];\r\n for (let g of this.grooves)\r\n {\r\n let cu = g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCS));\r\n\r\n let outline = Contour.CreateContour(cu, false);\r\n let holes: Contour[] = [];\r\n for (let subG of g.Grooves)\r\n {\r\n let holeCu = subG.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(subG.OCS));\r\n holes.push(Contour.CreateContour(holeCu, false));\r\n }\r\n\r\n let s = new Shape(outline, holes);\r\n\r\n models.push({\r\n shape: s,\r\n thickness: g.Thickness,\r\n dir: equaln(g.Position.applyMatrix4(this.OCSInv).z, 0) && g.Thickness < this.thickness - 1e-6 ? FaceDirection.Back : FaceDirection.Front,\r\n knifeRadius: g.KnifeRadius,\r\n addLen: g.GroovesAddLength,\r\n addWidth: g.GroovesAddWidth,\r\n addDepth: g.GroovesAddDepth,\r\n });\r\n }\r\n return models;\r\n }\r\n set BoardModeling(models: IModeling[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.length = 0;\r\n\r\n for (let model of models)\r\n {\r\n let g = new ExtrudeSolid();\r\n g.OCS = this.OCS;\r\n g.ContourCurve = model.shape.Outline.Curve;\r\n g.Thickness = model.thickness;\r\n g.GroovesAddLength = model.addLen;\r\n g.KnifeRadius = model.knifeRadius;\r\n\r\n for (let hole of model.shape.Holes)\r\n {\r\n let subG = new ExtrudeSolid();\r\n subG.OCS = this.OCS;\r\n subG.ContourCurve = hole.Curve;\r\n subG.Thickness = model.thickness;\r\n\r\n g.AppendGroove(subG);\r\n }\r\n\r\n if (model.dir === FaceDirection.Front)\r\n g.ApplyMatrix(MoveMatrix(new Vector3(0, 0, this.thickness - g.Thickness)));\r\n\r\n this.grooves.push(g);\r\n }\r\n this.Update();\r\n }\r\n get IsChaiDan()\r\n {\r\n return this._IsChaiDan;\r\n }\r\n set IsChaiDan(v: boolean)\r\n {\r\n if (this._IsChaiDan !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._IsChaiDan = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n ClearBoardModeling()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.length = 0;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n /**\r\n * 注意传入的排钻列表,避免指针被引用\r\n */\r\n AppendDrillList(k: ObjectId, drs: ObjectId[][])\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldDrs = this._DrillList.get(k);\r\n if (oldDrs)\r\n oldDrs.push(...drs);//同类型板件时,会触发这里.\r\n else\r\n this._DrillList.set(k, drs);\r\n }\r\n ClearDrillList(k: ObjectId)\r\n {\r\n let drids = this._DrillList.get(k);\r\n if (drids)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let drillents of drids)\r\n {\r\n for (let objId of drillents)\r\n {\r\n if (!objId.IsErase)\r\n objId.Object.Erase();\r\n }\r\n }\r\n this._DrillList.delete(k);\r\n\r\n if (k && k.Object)\r\n {\r\n //必须在这里删除\r\n let br = k.Object as Board;\r\n br.ClearDrillList(this.Id);\r\n }\r\n }\r\n }\r\n\r\n ClearAllDrillList()\r\n {\r\n for (const [id] of this._DrillList)\r\n {\r\n this.ClearDrillList(id);\r\n }\r\n }\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n\r\n if (!isErase) return;\r\n\r\n //记录数据,避免下面记录的时候,排钻已经被删除,导致排钻数据被优化掉.\r\n this.WriteAllObjectRecord();\r\n\r\n for (const [, driss] of this._DrillList)\r\n {\r\n for (let dris of driss)\r\n for (let d of dris)\r\n if (d && d.Object)\r\n d.Object.Erase();\r\n }\r\n this.ClearLayerNails();\r\n }\r\n get RotateMat()\r\n {\r\n let roMat = new Matrix4();\r\n\r\n switch (this._BoardType)\r\n {\r\n case BoardType.Layer:\r\n roMat.makeBasis(\r\n new Vector3(0, 1, 0),\r\n new Vector3(-1, 0, 0),\r\n new Vector3(0, 0, 1)\r\n );\r\n break;\r\n case BoardType.Vertical:\r\n roMat.makeBasis(\r\n new Vector3(0, 1, 0),\r\n new Vector3(0, 0, 1),\r\n new Vector3(1, 0, 0)\r\n );\r\n break;\r\n case BoardType.Behind:\r\n roMat.makeBasis(\r\n new Vector3(1, 0, 0),\r\n new Vector3(0, 0, 1),\r\n new Vector3(0, -1, 0)\r\n );\r\n }\r\n return roMat;\r\n }\r\n get Height()\r\n {\r\n return this.height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this.ContourCurve instanceof Circle)\r\n return;\r\n\r\n if (!equaln(v, this.height, 1e-2))\r\n {\r\n this.WriteAllObjectRecord();\r\n let refHeight = this.height / 2;\r\n let dist = v - this.height;\r\n\r\n let contour = Contour.CreateContour(this.ContourCurve, false);\r\n let isSuccess = contour.UnEqualProportionScale(refHeight, dist, \"y\");\r\n\r\n if (isSuccess)\r\n {\r\n this.height = v;\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n }\r\n }\r\n get Width()\r\n {\r\n return this.width;\r\n }\r\n set Width(v: number)\r\n {\r\n if (this.ContourCurve instanceof Circle)\r\n return;\r\n\r\n if (!equaln(v, this.width, 1e-2))\r\n {\r\n this.WriteAllObjectRecord();\r\n let refDist = this.width / 2;\r\n let dist = v - this.width;\r\n let contour = Contour.CreateContour(this.ContourCurve, false);\r\n let isSuccess = contour.UnEqualProportionScale(refDist, dist, \"x\");\r\n if (isSuccess)\r\n {\r\n this.width = v;\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n }\r\n }\r\n get BoardType(): BoardType\r\n {\r\n return this._BoardType;\r\n }\r\n set BoardType(type: BoardType)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (type !== this._BoardType)\r\n {\r\n let spaceCS = this._SpaceOCS.clone();\r\n this._BoardType = type;\r\n this.ApplyMatrix(this.OCSInv);\r\n\r\n this.ApplyMatrix(this.RotateMat);\r\n\r\n this._SpaceOCS.identity();\r\n\r\n this.ApplyMatrix(spaceCS);\r\n\r\n this.Update();\r\n }\r\n }\r\n\r\n //设置板件类型并且不做任何的事情\r\n SetBoardType(type: BoardType)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._BoardType = type;\r\n }\r\n\r\n //最左下角的点\r\n get MinPoint(): Vector3\r\n {\r\n switch (this._BoardType)\r\n {\r\n case BoardType.Layer:\r\n return new Vector3(0, this.height).applyMatrix4(this.OCS);\r\n case BoardType.Vertical:\r\n return this.Position;\r\n case BoardType.Behind:\r\n return new Vector3(0, 0, this.thickness).applyMatrix4(this.OCS);\r\n }\r\n }\r\n get MaxPoint(): Vector3\r\n {\r\n let pt = new Vector3(this.width, this.height, -this.thickness);\r\n pt.applyMatrix4(this.OCS);\r\n return pt;\r\n }\r\n\r\n get IsRect()\r\n {\r\n return this.isRect;\r\n }\r\n\r\n get IsSpecialShape()\r\n {\r\n return !this.isRect;\r\n }\r\n\r\n get HasGroove()\r\n {\r\n return this.grooves.length > 0;\r\n }\r\n\r\n get Name()\r\n {\r\n return this._Name;\r\n }\r\n set Name(n: string)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Name = n;\r\n }\r\n\r\n /**\r\n * 板件的轮廓,在板件坐标系中的表现方式.\r\n */\r\n get ContourCurve()\r\n {\r\n return super.ContourCurve;\r\n }\r\n set ContourCurve(cu: ExtureContourCurve)\r\n {\r\n //标识是否被初始化\r\n TempRectHoleOption.up = \"\";\r\n\r\n if (!this.contourCurve || cu.EndParam !== this.contourCurve.EndParam || !this.BoardProcessOption.drillType)\r\n {\r\n let drillTypes = [...userConfig.DrillConfigs.keys(), \"不排\"];\r\n let defaultType = this._BoardProcessOption.drillType;\r\n if (!defaultType || !drillTypes.includes(defaultType))\r\n {\r\n defaultType = drillTypes[0];\r\n this._BoardProcessOption.drillType = defaultType;\r\n }\r\n this._BoardProcessOption.highDrill = Array(cu.EndParam).fill(defaultType);\r\n }\r\n else\r\n {\r\n if (this.isRect)\r\n InitRectBoardHoleOption(this, TempRectHoleOption);\r\n }\r\n super.ContourCurve = cu;\r\n\r\n if (this.isRect && TempRectHoleOption.up)\r\n SetRectHighHole(this, TempRectHoleOption);\r\n }\r\n\r\n Explode()\r\n {\r\n return Board2Regions(this);\r\n // return this.m_Shape.Explode().map(cu => cu.ApplyMatrix(this.OCS));\r\n }\r\n RotateBoard(rox: number, roy: number, roz: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this._Rotation.x = rox;\r\n this._Rotation.y = roy;\r\n this._Rotation.z = roz;\r\n\r\n let spcocs = this.SpaceOCS;\r\n let roMatX = new Matrix4().makeRotationX(rox);\r\n let roMatY = new Matrix4().makeRotationY(roy);\r\n let roMatZ = new Matrix4().makeRotationZ(roz);\r\n\r\n this.ApplyMatrix(this.OCSInv)\r\n .ApplyMatrix(this.RotateMat)\r\n .ApplyMatrix(roMatX)\r\n .ApplyMatrix(roMatY)\r\n .ApplyMatrix(roMatZ)\r\n .ApplyMatrix(spcocs);\r\n\r\n this._SpaceOCS.copy(spcocs);\r\n this.Update();\r\n }\r\n get Rotation()\r\n {\r\n return this._Rotation;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n\r\n get UCGenerator()\r\n {\r\n if (this.BoardProcessOption.lines === LinesType.Positive)\r\n return boardUVGenerator;\r\n else\r\n return boardUVGenerator2;\r\n }\r\n UpdateUV(geo: Geometry, ocs: Matrix4, isRev = false)\r\n {\r\n super.UpdateUV(geo, ocs, this.BoardProcessOption.lines === LinesType.Reverse);\r\n }\r\n\r\n //从一个实体拷贝数据,实体类型必须相同.\r\n CopyFrom(obj: Board)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let drillBak = this._DrillList;\r\n this._DrillList = new Map();\r\n let layerNailsBak = this._LayerNails;\r\n this._LayerNails = [];\r\n\r\n super.CopyFrom(obj);\r\n\r\n this._DrillList = drillBak;\r\n this._LayerNails = layerNailsBak;\r\n }\r\n\r\n Clone(): this\r\n {\r\n let br = super.Clone();\r\n br._DrillList.clear();\r\n br._LayerNails.length = 0;\r\n br.RelativeHardware.length = 0;\r\n return br;\r\n }\r\n Join(target: this)\r\n {\r\n let res = super.Join(target);\r\n if (res && target.RelativeHardware)\r\n {\r\n for (let hw of target.RelativeHardware)\r\n {\r\n if (!this.RelativeHardware.includes(hw))\r\n this.RelativeHardware.push(hw);\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n private GetLinesDir()\r\n {\r\n let l: LineSegments;\r\n let len: number;\r\n let width: number;\r\n\r\n switch (this.BoardProcessOption.lines)\r\n {\r\n case LinesType.Positive:\r\n len = this.height / 3;\r\n width = Math.min(this.width, this.height) / 8;\r\n break;\r\n case LinesType.Reverse:\r\n len = this.width / 2;\r\n width = Math.min(this.width, this.height) / 8;\r\n break;\r\n case LinesType.CanReversal:\r\n len = this.height / 3;\r\n width = this.width / 2;\r\n default:\r\n break;\r\n }\r\n\r\n l = new LineSegments(\r\n BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesDirPts(len, width, this.BoardProcessOption.lines)),\r\n ColorMaterial.GetLineMaterial(8)\r\n );\r\n let l1 = l.clone();\r\n l1.material = ColorMaterial.GetLineMaterial(7);\r\n l.position.set(this.width / 2, this.height / 2, 0);\r\n l1.position.set(this.width / 2, this.height / 2, this.thickness);\r\n\r\n l.updateMatrix();\r\n l1.updateMatrix();\r\n\r\n return [l, l1];\r\n }\r\n HandleSpliteEntitys(splitEntitys: this[])\r\n {\r\n let nails: ObjectId[] = [];\r\n for (let nail of this.LayerNails)\r\n {\r\n if (nail?.Object && !nail.IsErase)\r\n nails.push(nail);\r\n }\r\n let record = this._Owner.Object as BlockTableRecord;\r\n for (let en of splitEntitys)\r\n {\r\n let ocsInv = en.OCSInv;\r\n let nids: ObjectId[] = [];\r\n let needAddNailEnts: Board[] = [];\r\n nails = nails.filter(id =>\r\n {\r\n let n = id.Object as CylinderHole;\r\n let position = n.Position.applyMatrix4(ocsInv).setZ(0);\r\n if (en.contourCurve.PtInCurve(position))\r\n {\r\n let n1 = n.Clone();\r\n n1.MId = n.MId;\r\n n1.FId = n.FId;\r\n\r\n if (n.MId === this.Id)\r\n {\r\n n1.MId = en.Id;\r\n needAddNailEnts.push(n1.FId.Object as Board);\r\n }\r\n\r\n if (n.FId === this.Id)\r\n {\r\n n1.FId = en.Id;\r\n needAddNailEnts.push(n1.MId.Object as Board);\r\n }\r\n\r\n n.Erase();\r\n record.Add(n1);\r\n nids.push(n1.Id);\r\n\r\n return false;\r\n }\r\n return true;\r\n });\r\n en.AppendNails(nids);\r\n needAddNailEnts.forEach(e => e.AppendNails(nids));\r\n\r\n if (!userConfig.openDrillingReactor)\r\n {\r\n for (let [bid, idss] of this._DrillList)\r\n {\r\n if (!bid) continue;\r\n let board = bid.Object as Board;\r\n for (let ids of idss)\r\n {\r\n if (!ids[0]?.Object || ids[0].IsErase) continue;\r\n let holes = ids.map(i => i.Object) as CylinderHole[];\r\n if (holes[0] instanceof CylinderHole)\r\n {\r\n let isInBoard = CyHoleInBoard(holes, en, en.OCSInv);\r\n if (isInBoard)\r\n {\r\n let cloneHoles = holes.map(h => h.Clone());\r\n\r\n for (let h of cloneHoles)\r\n {\r\n if (h.FId === this.Id)\r\n {\r\n h.FId = en.Id;\r\n }\r\n if (h.MId === this.Id)\r\n {\r\n h.MId = en.Id;\r\n }\r\n record.Add(h);\r\n }\r\n for (let h of holes)\r\n h.Erase();\r\n en.AppendDrillList(bid, [cloneHoles.map(c => c.Id)]);\r\n board.AppendDrillList(en.Id, [cloneHoles.map(c => c.Id)]);\r\n }\r\n }\r\n else\r\n {\r\n //TODO:处理自定义排钻\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n InitDrawObject(renderType = RenderType.Wireframe)\r\n {\r\n let obj = super.InitDrawObject(renderType);\r\n this.HandleBoardMaterial(renderType, obj);\r\n return obj;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let o = super.UpdateDrawObject(renderType, obj);\r\n\r\n this.HandleBoardMaterial(renderType, obj);\r\n\r\n return o;\r\n }\r\n private HandleBoardMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (!this.IsChaiDan)\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2)\r\n {\r\n obj.children.length = 1;\r\n (obj.children[0] as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n else if (renderType !== RenderType.Wireframe)\r\n {\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n }\r\n if ((renderType === RenderType.Wireframe || renderType === RenderType.Conceptual) && userConfig.showLines && this.IsChaiDan)\r\n obj.add(...this.GetLinesDir());\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n super.UpdateDrawObjectMaterial(renderType, obj);\r\n if (!this.IsChaiDan)\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2)\r\n {\r\n (obj.children[0] as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n else if (renderType !== RenderType.Wireframe)\r\n {\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n }\r\n }\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n if (this.RelativeHardware.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n if (ver < 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n this._BoardType = file.Read();\r\n this._Name = file.Read();\r\n //兼容旧版本\r\n if (ver > 2)\r\n {\r\n deserializationBoardData(file, this._BoardProcessOption, ver);\r\n }\r\n else\r\n {\r\n let opt = file.Read();\r\n this._BoardProcessOption = Object.assign(this._BoardProcessOption,\r\n typeof opt === \"string\" ? JSON.parse(opt) : opt);\r\n }\r\n\r\n //读取排钻列表\r\n this._DrillList.clear();\r\n let size = file.Read();\r\n\r\n //没有与任何板件关联的排钻\r\n let noRelevancyDrillings: ObjectId[][] = [];\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let drIdList: ObjectId[][] = [];\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let drIDs: ObjectId[] = [];\r\n let count1 = file.Read();\r\n for (let j = 0; j < count1; j++)\r\n {\r\n let fileId = file.ReadObjectId();\r\n fileId && drIDs.push(fileId);\r\n }\r\n if (drIDs.length > 0)\r\n drIdList.push(drIDs);\r\n }\r\n\r\n if (drIdList.length === 0)\r\n continue;\r\n\r\n if (!id)\r\n noRelevancyDrillings.push(...drIdList);\r\n else\r\n this._DrillList.set(id, drIdList);\r\n }\r\n\r\n if (noRelevancyDrillings.length > 0)\r\n this._DrillList.set(undefined, noRelevancyDrillings);\r\n\r\n if (ver > 1)\r\n {\r\n this._LayerNails.length = 0;\r\n let nailsCount = file.Read();\r\n for (let i = 0; i < nailsCount; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this._LayerNails.push(objId);\r\n }\r\n }\r\n if (ver > 4)\r\n this._Rotation = { x: file.Read(), y: file.Read(), z: file.Read() };\r\n if (ver >= 7)\r\n {\r\n let count = file.Read();\r\n this.RelativeHardware.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this.RelativeHardware.push(objId);\r\n }\r\n }\r\n if (ver >= 8)\r\n this.OpenDir = file.Read();\r\n\r\n if (ver >= 9)\r\n this._IsChaiDan = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(9);\r\n // file.Write(this._SpaceOCS.toArray()); ver < 6\r\n file.Write(this._BoardType);\r\n file.Write(this._Name);\r\n serializeBoardData(file, this._BoardProcessOption);\r\n\r\n file.Write(this._DrillList.size);\r\n for (let [id, idList] of this._DrillList)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(idList.length);\r\n for (let ids of idList)\r\n {\r\n file.Write(ids.length);\r\n for (let id of ids)\r\n file.WriteObjectId(id);\r\n }\r\n }\r\n file.Write(this._LayerNails.length);\r\n for (let nail of this._LayerNails)\r\n {\r\n file.WriteObjectId(nail);\r\n }\r\n file.Write(this._Rotation.x);\r\n file.Write(this._Rotation.y);\r\n file.Write(this._Rotation.z);\r\n\r\n file.Write(this.RelativeHardware.length);\r\n for (let id of this.RelativeHardware)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(this.OpenDir);\r\n file.Write(this._IsChaiDan);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Object3D, Shape as TShape, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Shape } from \"../DatabaseServices/Shape\";\r\nimport { FaceDirection } from \"../UI/Store/BoardInterface\";\r\nimport { MoveMatrix } from \"./GeUtils\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\n\r\n//FIXME: #IWBPB 性能缺陷和BUG. 等待废弃或者改进\r\nexport function CreateWireframe(en3D: Board | ExtrudeSolid)\r\n{\r\n let mat = ColorMaterial.GetLineMaterial(1);\r\n let lines: Object3D[] = [];\r\n\r\n let upShape = new Shape(Contour.CreateContour(en3D.ContourCurve));\r\n let downShape = new Shape(Contour.CreateContour(en3D.ContourCurve));\r\n\r\n if (en3D instanceof Board)\r\n {\r\n for (let m of en3D.BoardModeling)\r\n {\r\n let geo = new BufferGeometry().setFromPoints(m.shape.Shape.getPoints(10));\r\n let ocs = m.shape.Outline.Curve.OCS;\r\n let cloneShape = m.shape.Clone();\r\n cloneShape.Outline.Curve.Position = cloneShape.Outline.Curve.Position.setZ(0);\r\n\r\n let isCut = false;\r\n appendLines(m.shape.Outline.Curve, en3D.Thickness, lines, mat);\r\n\r\n if (m.thickness < en3D.Thickness)\r\n {\r\n appendLines(m.shape.Outline.Curve, m.thickness, lines, mat);\r\n //正面\r\n if (m.dir === FaceDirection.Front)\r\n {\r\n let ss = upShape.SubstactBoolOperation([cloneShape]);\r\n if (ss.length > 0 && ss[0].Holes.length === 0)\r\n {\r\n upShape = ss[0];\r\n isCut = true;\r\n }\r\n }\r\n else\r\n {\r\n let ss = downShape.SubstactBoolOperation([cloneShape]);\r\n if (ss.length > 0 && ss[0].Holes.length === 0)\r\n {\r\n downShape = ss[0];\r\n isCut = true;\r\n }\r\n }\r\n }\r\n if (!isCut || m.dir === FaceDirection.Back)\r\n {\r\n let geoClone = geo.clone();\r\n geoClone.applyMatrix4(MoveMatrix(new Vector3(0, 0, m.thickness))).applyMatrix4(ocs);\r\n lines.push(new Line(geoClone, mat));\r\n }\r\n\r\n if (!isCut || m.dir === FaceDirection.Front)\r\n {\r\n lines.push(new Line(geo.applyMatrix4(ocs), mat));\r\n }\r\n }\r\n }\r\n\r\n let downGeo = new BufferGeometry().setFromPoints(downShape.Shape.getPoints(10))\r\n .applyMatrix4(en3D.ContourCurve.OCS);\r\n let upGeo = new BufferGeometry().setFromPoints(upShape.Shape.getPoints(10))\r\n .applyMatrix4(MoveMatrix(new Vector3(0, 0, en3D.Thickness)))\r\n .applyMatrix4(en3D.ContourCurve.OCS);\r\n\r\n lines.push(\r\n new Line(downGeo, mat),\r\n new Line(upGeo, mat));\r\n\r\n appendLines(en3D.ContourCurve, en3D.Thickness, lines, mat);\r\n\r\n return lines;\r\n}\r\n\r\nfunction appendLines(cu: Curve, thick: number, lines: Object3D[], mat: LineBasicMaterial)\r\n{\r\n let pts = cu.GetStretchPoints();\r\n for (let p of pts)\r\n {\r\n let geo = new Geometry().setFromPoints([p, p.clone().add(new Vector3(0, 0, thick))]);\r\n lines.push(new Line(geo, mat));\r\n }\r\n}\r\n\r\nexport function FastWireframe(br: ExtrudeSolid, color = 0)\r\n{\r\n color = color || br.ColorIndex;\r\n let material = ColorMaterial.GetLineMaterial(color);\r\n\r\n let thickness = br.Thickness;\r\n\r\n let cu = br.ContourCurve;\r\n let pts = cu.Shape.getPoints(6);\r\n\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n let edgeCoords: number[] = [];\r\n\r\n for (let p of pts)\r\n {\r\n coords.push(p.x, p.y, 0);\r\n if (p[\"_mask_\"])\r\n edgeCoords.push(p.x, p.y, 0, p.x, p.y, thickness);\r\n }\r\n for (let p of pts)\r\n coords.push(p.x, p.y, thickness);\r\n\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(edgeCoords, 3));\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n\r\n let line = new Line(geo, material);\r\n line.applyMatrix4(cu.OCS);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCS);\r\n\r\n let result = [line, edge];\r\n\r\n let ocsInv = br.OCSInv;\r\n for (let g of br.Grooves)\r\n {\r\n let m = ocsInv.clone().multiply(g.OCS);\r\n let lines = FastWireframe(g, color);\r\n for (let l of lines)\r\n {\r\n l.applyMatrix4(m);\r\n result.push(l);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\nexport function FastWireframe2(dr: ExtrudeHole, color = 0)\r\n{\r\n color = color || dr.ColorIndex;\r\n let material = ColorMaterial.GetLineMaterial(color);\r\n\r\n let height = dr.Height;\r\n\r\n let cu = dr.ContourCurve;\r\n let pts = cu.Shape.getPoints(6);\r\n\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n let edgeCoords: number[] = [];\r\n\r\n for (let p of pts)\r\n {\r\n coords.push(p.x, p.y, 0);\r\n if (p[\"_mask_\"])\r\n edgeCoords.push(p.x, p.y, 0, p.x, p.y, height);\r\n }\r\n for (let p of pts)\r\n coords.push(p.x, p.y, height);\r\n\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(edgeCoords, 3));\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n\r\n let line = new Line(geo, material);\r\n line.applyMatrix4(cu.OCS);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCS);\r\n\r\n let result = [line, edge];\r\n\r\n return result;\r\n}\r\n","import { BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayClone, arrayLast, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { FastWireframe2 } from \"../../Geometry/CreateWireframe\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/ExtrudeEdgeGeometry\";\r\nimport { AsVector3, equaln, equalv2, equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Contour } from \"../Contour\";\r\nimport { DragPointType } from \"../Entity/DragPointType\";\r\nimport { ExtrudeSolid, ExtureContourCurve } from \"../Entity/Extrude\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { Shape } from \"../Shape\";\r\nimport { OBB } from './../../Geometry/OBB/obb';\r\nimport { Hole } from \"./Hole\";\r\n\r\n@Factory\r\nexport class ExtrudeHole extends Hole\r\n{\r\n private _contourCurve: ExtureContourCurve = new Polyline();\r\n private _EdgeGeometry: BufferGeometry;\r\n protected _knifeRadius: number = 3;\r\n @AutoRecord isHole = true;\r\n @AutoRecord isThrough = false;\r\n get KnifeRadius()\r\n {\r\n return this._knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this._knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._knifeRadius = v;\r\n }\r\n }\r\n Explode()\r\n {\r\n return [this.ContourCurve.Clone().ApplyMatrix(this.OCS)];\r\n }\r\n get ContourCurve()\r\n {\r\n return this._contourCurve;\r\n }\r\n\r\n set ContourCurve(curve: ExtureContourCurve)\r\n {\r\n if (!curve.IsClose) return;\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n curve.CloseMark = true;\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n\r\n //如果曲线被旋转了,那么修正它的旋转矩阵,避免纹路错误\r\n let ocs = curve.OCS;\r\n if (!equaln(ocs.elements[0], 1))// || ocs.elements[9] || ocs.elements[10]\r\n {\r\n for (let p of pts)\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n curve.OCS = new Matrix4();\r\n }\r\n curve.ClearDraw();\r\n }\r\n\r\n this.WriteAllObjectRecord();\r\n this._contourCurve = curve;\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n CheckContourCurve()\r\n {\r\n let box = this._contourCurve.BoundingBox;\r\n\r\n //修正轮廓基点\r\n if (!equalv3(box.min, ZeroVec))\r\n {\r\n this._contourCurve.Position =\r\n this._contourCurve.Position.sub(box.min);\r\n\r\n let v = box.min.applyMatrix4(this.OCS.setPosition(ZeroVec));\r\n this._Matrix.setPosition(this.Position.add(v));\r\n }\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let cu = this.ContourCurve;\r\n cu.ApplyMatrix(this.OCS);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n this.Update();\r\n return this;\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n\r\n contour.Position = contour.Position.add(this.Normal.multiplyScalar(this.Height));\r\n pts.push(\r\n ...contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n if (snapMode === ObjectSnapMode.Mid)\r\n pts.push(...contour.GetStretchPoints().map(p => p.add(this.Normal.multiplyScalar(-this.Height / 2))));\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n get Shape()\r\n {\r\n let contour = Contour.CreateContour(this.ContourCurve.Clone(), false);\r\n\r\n return new Shape(contour);\r\n }\r\n get BoundingBoxInOCS()\r\n {\r\n let box = new Box3Ext().copy(this.ContourCurve.BoundingBox);\r\n box.max.add(new Vector3(0, 0, this.Height));\r\n return box;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = this.ContourCurve.BoundingBox;\r\n box.max.add(new Vector3(0, 0, this.Height));\r\n box.applyMatrix4(this.OCS);\r\n return box;\r\n }\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let pts = [this.ContourCurve.Shape.getPoints(6).map(AsVector3)];\r\n this._EdgeGeometry = GenerateExtrudeEdgeGeometry(pts, this.Height).applyMatrix4(this._contourCurve.OCSNoClone);\r\n return this._EdgeGeometry;\r\n }\r\n private _MeshGeometry: BufferGeometry | Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n this._MeshGeometry = this.GeneralMeshGeometry();\r\n return this._MeshGeometry;\r\n }\r\n private GeneralMeshGeometry()\r\n {\r\n let extrudeSettings: ExtrudeGeometryOptions = {\r\n curveSegments: 12,\r\n steps: 1,\r\n bevelEnabled: false,\r\n depth: this.Height,\r\n };\r\n let geo = new ExtrudeGeometry(this.ContourCurve.Shape, extrudeSettings);\r\n geo.applyMatrix4(this._contourCurve.OCS);\r\n return geo;\r\n }\r\n GetGripOrStretchPoints(dragType: DragPointType)\r\n {\r\n let isGrip = dragType === DragPointType.Grip;\r\n\r\n let pts = isGrip ? this.ContourCurve.GetGripPoints() : this.ContourCurve.GetStretchPoints();\r\n let v = new Vector3(0, 0, this.Height);\r\n pts.push(...pts.map(p => p.clone().add(v)));\r\n pts.forEach(p => { p.applyMatrix4(this.OCS); });\r\n\r\n return pts;\r\n }\r\n private GetStrectchPointCountList(dragType: DragPointType): number\r\n {\r\n return this.ContourCurve.GetDragPointCount(dragType) * 2;\r\n }\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (dragType === DragPointType.Stretch && indexList.length === this.GetStrectchPointCountList(dragType))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n arraySortByNumber(indexList);\r\n this.MoveGripOrStretchPointsOnly(indexList, vec, dragType);\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n IsStretchHeight(indexs: number[])\r\n {\r\n let count = this.ContourCurve.GetStretchPoints().length;\r\n if (indexs.length === count)\r\n {\r\n let isF = indexs[0] < count;\r\n return indexs.every(i => isF === (i < count));\r\n }\r\n return false;\r\n }\r\n MoveGripOrStretchPointsOnly(indexList: Array, vec: Vector3, dragType: DragPointType)\r\n {\r\n let stretchCount = this.ContourCurve.GetDragPointCount(dragType);\r\n\r\n if (dragType === DragPointType.Stretch)\r\n {\r\n //Move\r\n if (indexList.length === stretchCount * 2)\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n //判断是否拉伸厚度\r\n if (this.IsStretchHeight(indexList))\r\n {\r\n let isFront = indexList[0] < stretchCount;\r\n\r\n if (indexList.every(v => v < stretchCount === isFront))\r\n {\r\n //Change thickness\r\n let lvec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n if (isFront)\r\n {\r\n this.Height -= lvec.z;\r\n //移动位置而不改变内部拉槽\r\n let v = this.Normal.multiplyScalar(lvec.z);\r\n this._Matrix.elements[12] += v.x;\r\n this._Matrix.elements[13] += v.y;\r\n this._Matrix.elements[14] += v.z;\r\n }\r\n else\r\n {\r\n this.Height += lvec.z;\r\n }\r\n return;\r\n }\r\n }\r\n\r\n indexList = arrayClone(indexList);\r\n }\r\n\r\n //修正点的索引\r\n for (let i = 0; i < indexList.length; i++)\r\n {\r\n let index = indexList[i];\r\n if (index >= stretchCount)\r\n {\r\n index -= stretchCount;\r\n indexList[i] = index;\r\n }\r\n }\r\n\r\n indexList = [...new Set(indexList)];\r\n\r\n let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n\r\n if (dragType === DragPointType.Grip)\r\n {\r\n if (this.ContourCurve instanceof Polyline\r\n && indexList.length === 1\r\n && indexList[0] % 2 === 1)\r\n {\r\n let param = indexList[0] / 2;\r\n if (this.ContourCurve.GetBuilgeAt(Math.floor(param)) === 0)\r\n {\r\n let der = this.ContourCurve.GetFistDeriv(param).normalize();\r\n [der.x, der.y] = [der.y, -der.x];\r\n let d = localVec.dot(der);\r\n localVec.copy(der).multiplyScalar(d);\r\n }\r\n }\r\n this.ContourCurve.MoveGripPoints(indexList, localVec);\r\n }\r\n else\r\n this.ContourCurve.MoveStretchPoints(indexList, localVec);\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n GetStretchPoints()\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n Convert2ExtrudeSolid()\r\n {\r\n let g = new ExtrudeSolid();\r\n g.KnifeRadius = this.KnifeRadius;\r\n g.SetContourCurve(this.ContourCurve);\r\n g.Thickness = this.Height;\r\n g.ApplyMatrix(this.OCS);\r\n return g;\r\n }\r\n GetPrintObject3D()\r\n {\r\n let geometry = new LineGeometry();\r\n let lineSegments = new Float32Array(this.EdgeGeometry.attributes.position.array);\r\n let instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n geometry.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n geometry.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n let line = new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetPrintConceptualMaterial());\r\n return [line, mesh];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical || renderType === RenderType.Physical2)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(...FastWireframe2(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new Object3D().add(...this.GetPrintObject3D());\r\n }\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n\r\n if (renderType !== RenderType.Wireframe)\r\n Object3DRemoveAll(obj);\r\n\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n this.MeshGeometry;\r\n\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n obj.add(...this.GetPrintObject3D());\r\n }\r\n else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical || renderType === RenderType.Physical2)\r\n {\r\n obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Jig)\r\n obj.add(...FastWireframe2(this));\r\n\r\n return obj;\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType !== RenderType.Jig && renderType !== RenderType.Print)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n get OBB(): OBB\r\n {\r\n let size = this.ContourCurve.BoundingBox.getSize(new Vector3).setZ(this.Height);\r\n return new OBB(this.OCS, size.multiplyScalar(0.5));\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n this._contourCurve = file.ReadObject() as ExtureContourCurve;\r\n this._knifeRadius = file.Read();\r\n if (ver > 1)\r\n {\r\n this.isHole = file.Read();\r\n }\r\n if (ver > 2)\r\n this.isThrough = file.Read();\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.WriteObject(this._contourCurve);\r\n file.Write(this._knifeRadius);\r\n file.Write(this.isHole);\r\n file.Write(this.isThrough);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, curveLinkGroup, equalCurve, IRectInfo, IsRect } from \"../../Common/CurveUtils\";\r\nimport { matrixAlignCoordSys } from \"../../Common/Matrix4Utils\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { AsVector2, AsVector3, comparePoint, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\n\r\n/**\r\n * 优化走刀路径,连接偏移后的曲线数组\r\n * @param offsetCus 偏移后的曲线组\r\n * @param originShape 原始走刀形状\r\n * @param rad 刀半径\r\n * @returns tool path\r\n */\r\nexport function OptimizeToolPath(offsetCus: Curve[], originShape: Shape, rad: number): Curve[]\r\n{\r\n // 去掉最外轮廓\r\n let outline = offsetCus.shift();\r\n\r\n let plList: Polyline[] = [];\r\n let noCloseCus: Curve[] = [];\r\n for (let cu of offsetCus)\r\n {\r\n if (!cu.IsClose)\r\n {\r\n noCloseCus.push(cu);\r\n continue;\r\n }\r\n if (cu instanceof Polyline)\r\n {\r\n //轮廓朝下的逆时针轮廓需要翻转\r\n //如果走刀不止一条,第一刀为顺时针,其余为逆时针\r\n if (cu.IsClose)\r\n {\r\n if (offsetCus.length === 1)\r\n {\r\n if (cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n }\r\n else\r\n if ((cu.Normal.z * cu.Area2 < 0) === (cu !== offsetCus[0]))\r\n cu.Reverse();\r\n }\r\n plList.push(cu);\r\n }\r\n else if (cu instanceof Circle)\r\n {\r\n let c = ConverCircleToPolyline(cu);\r\n if (offsetCus.length > 1 && cu === offsetCus[0])\r\n c.Reverse();\r\n c.ColorIndex = cu.ColorIndex;\r\n plList.push(c);\r\n }\r\n else\r\n console.warn(\"错误形状\");\r\n }\r\n\r\n if (noCloseCus.length > 0)\r\n {\r\n let culist: Curve[] = [];\r\n noCloseCus.forEach(c =>\r\n {\r\n if (c instanceof Polyline)\r\n culist.push(...c.Explode() as Curve[]);\r\n else\r\n culist.push(c);\r\n });\r\n //移除相等的曲线避免重复走刀\r\n RempveEqualCurves(culist);\r\n let groups = curveLinkGroup(culist);\r\n for (let g of groups)\r\n {\r\n let pl = Polyline.Combine(g);;\r\n pl.ColorIndex = noCloseCus[0].ColorIndex;\r\n plList.push(pl);\r\n }\r\n }\r\n let dir = GetCurveToInDir(outline);\r\n let cantIntCur: Curve[] = [outline];\r\n cantIntCur.push(...GetOffsetCurves(outline, rad * dir));\r\n if (originShape.Holes.length > 0)\r\n {\r\n for (let h of originShape.Holes)\r\n {\r\n let dir = Math.sign(h.Curve.Area2);\r\n if (h.Curve instanceof Circle)\r\n dir = 1;\r\n cantIntCur.push(h.Curve, ...GetOffsetCurves(h.Curve, rad * dir));\r\n }\r\n }\r\n\r\n //曲线统一起点\r\n ChangePlListStartPt(plList);\r\n //对多段线进行排序,按最起始点远近排序\r\n SortPlByStartPt(plList);\r\n\r\n let result: Curve[] = [];\r\n let firstPl = plList[0];\r\n firstPl.CloseMark = false;\r\n\r\n for (let i = 1; i < plList.length; i++)\r\n {\r\n let ePt = firstPl.EndPoint;\r\n let isDisVail: boolean;\r\n if (plList[i].TempData?.isOut && !equalv3(ePt, plList[i].StartPoint))\r\n isDisVail = true;\r\n else\r\n {\r\n let refLine = new Line(ePt, plList[i].StartPoint);\r\n isDisVail = cantIntCur.some(c => c.IntersectWith(refLine, 0).length > 1);\r\n }\r\n\r\n if (isDisVail)\r\n {\r\n result.push(firstPl);\r\n firstPl = plList[i];\r\n firstPl.CloseMark = false;\r\n }\r\n else\r\n {\r\n let alMat = matrixAlignCoordSys(plList[i].OCS, firstPl.OCS);\r\n let cuPtsBul = plList[i].PtsBuls;\r\n\r\n for (let i = 0; i < cuPtsBul.pts.length; i++)\r\n {\r\n //坐标系对齐\r\n let p = cuPtsBul.pts[i];\r\n p.copy(AsVector2(AsVector3(p).applyMatrix4(alMat)));\r\n firstPl.LineData.push({ pt: p, bul: cuPtsBul.buls[i] });\r\n }\r\n }\r\n }\r\n result.push(firstPl);\r\n return result;\r\n}\r\n\r\n/**\r\n* 设定走刀路径起始点\r\n* 为了统一刀路起点,最外轮廓左左点为起始点,其余轮廓以最接近最外轮廓起始点的点左起始点\r\n* @param plList\r\n*/\r\nfunction ChangePlListStartPt(plList: Polyline[])\r\n{\r\n let firstPl = plList[0];\r\n if (firstPl.IsClose)\r\n {\r\n let minP = undefined;\r\n let compare = comparePoint(\"xy\");\r\n for (let p of firstPl.GetStretchPoints())\r\n {\r\n if (!minP)\r\n minP = p;\r\n else\r\n if (compare(minP, p) === 1)\r\n minP = p;\r\n }\r\n let par = firstPl.GetParamAtPoint(minP);\r\n firstPl.ResetStartPoint(par);\r\n }\r\n\r\n let firstSpt = firstPl.StartPoint;\r\n\r\n for (let i = 1; i < plList.length; i++)\r\n {\r\n let pl = plList[i];\r\n\r\n if (pl.IsClose)\r\n {\r\n let pts = pl.GetStretchPoints().sort((p1, p2) =>\r\n {\r\n let dist1 = p1.distanceToSquared(firstSpt);\r\n let dist2 = p2.distanceToSquared(firstSpt);\r\n\r\n return dist1 - dist2;\r\n });\r\n let par = pl.GetParamAtPoint(pts[0]);\r\n pl.ResetStartPoint(par);\r\n }\r\n else\r\n {\r\n let sPt = pl.StartPoint;\r\n let ePt = pl.EndPoint;\r\n let dist1 = sPt.distanceToSquared(firstSpt);\r\n let dist2 = ePt.distanceToSquared(firstSpt);\r\n if (dist1 > dist2)\r\n pl.Reverse();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 排序多段线数组,按照起点之间的距离\r\n */\r\nfunction SortPlByStartPt(pls: Polyline[]): Polyline[]\r\n{\r\n if (pls.length <= 1) return pls;\r\n\r\n let result = [pls[0]];\r\n let usedPl = new WeakSet([pls[0]]);\r\n\r\n let p = pls[0].StartPoint;\r\n while (true)\r\n {\r\n if (pls.length === result.length)\r\n break;\r\n\r\n let vaildPl: Polyline;\r\n let minDist: number = Infinity;\r\n for (let pl of pls)\r\n {\r\n if (usedPl.has(pl))\r\n continue;\r\n let dist = pl.StartPoint.distanceToSquared(p);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n vaildPl = pl;\r\n }\r\n }\r\n p = vaildPl.StartPoint;\r\n result.push(vaildPl);\r\n usedPl.add(vaildPl);\r\n }\r\n pls.length = 0;\r\n pls.push(...result);\r\n}\r\n\r\nfunction RempveEqualCurves(cus: Curve[])\r\n{\r\n let needRemoveCurve: Set = new Set();\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu1 = cus[i];\r\n if (needRemoveCurve.has(cu1)) continue;\r\n for (let j = i + 1; j < cus.length; j++)\r\n {\r\n let cu2 = cus[j];\r\n if (needRemoveCurve.has(cu2)) continue;\r\n if (equalCurve(cu1, cu2))\r\n {\r\n needRemoveCurve.add(cu2);\r\n }\r\n }\r\n }\r\n arrayRemoveIf(cus, (c) => needRemoveCurve.has(c));\r\n}\r\n\r\n/**获取内偏移的轮廓 */\r\nexport function GetOffsetCurves(cu: Curve, dist: number, rectInfo?: IRectInfo): Curve[]\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (rectInfo?.isRect)\r\n {\r\n let r = RectOffset(cu, rectInfo, Math.abs(dist));\r\n return r ? [r] : [];\r\n }\r\n return cu.GetFeedingToolPath(dist).filter(c => !equaln(c.Length, 0, 1e-5));\r\n }\r\n else\r\n return cu.GetOffsetCurves(dist);\r\n}\r\n\r\n/** 获得曲线内偏移方向*/\r\nexport function GetCurveToInDir(cu: Curve): number\r\n{\r\n return cu.IsClockWise ? 1 : -1;\r\n}\r\n\r\n/**矩形偏移,正为内偏移 */\r\nexport function RectOffset(rect: Polyline, res: IRectInfo, dist: number)\r\n{\r\n if (!res.isRect || equaln(dist, 0)) return;\r\n\r\n let box = res.box;\r\n let size = res.size;\r\n let min = box.min.clone();\r\n let max = box.max.clone();\r\n\r\n if (dist > Math.min(size.x, size.y) / 2 + 1e-2) return;\r\n\r\n if (equaln(size.x / 2, dist, 1e-5))\r\n {\r\n let x = (box.min.x + box.max.x) * 0.5;\r\n let sPt = new Vector3(x, box.min.y + dist);\r\n let ePt = new Vector3(x, box.max.y - dist);\r\n return new Polyline([{ pt: AsVector2(sPt), bul: 0 }, { pt: AsVector2(ePt), bul: 0 }]).ApplyMatrix(res.OCS);\r\n }\r\n else if (equaln(size.y / 2, dist, 1e-5))\r\n {\r\n let y = (box.min.y + box.max.y) * 0.5;\r\n let sPt = new Vector3(box.min.x + dist, y);\r\n let ePt = new Vector3(box.max.x - dist, y);\r\n return new Polyline([{ pt: AsVector2(sPt), bul: 0 }, { pt: AsVector2(ePt), bul: 0 }]).ApplyMatrix(res.OCS);\r\n }\r\n else\r\n {\r\n min.add(new Vector3(dist, dist));\r\n max.add(new Vector3(-dist, -dist));\r\n return new Polyline().RectangleFrom2Pt(min, max).ApplyMatrix(res.OCS);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, equalCurve, IsRect, MergeCurvelist } from \"../../Common/CurveUtils\";\r\nimport { LogEnable } from \"../../Common/Log\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board, IModeling } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { ShapeManager } from \"../../DatabaseServices/ShapeManager\";\r\nimport { userConfig } from \"../../Editor/UserConfig\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { Route } from \"../../Geometry/CurveMap\";\r\nimport { GetSideFaceMtx } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { angleTo, AsVector2, equaln, isParallelTo, MoveMatrix, XAxis } from \"../../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../../Geometry/RegionParse\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { FaceDirection } from \"../../UI/Store/BoardInterface\";\r\nimport { BoolOpeartionType, isTargetCurInOrOnSourceCur } from \"../BoolOperateUtils\";\r\nimport { GetSealedBoardContour } from \"../CalcEdgeSealing\";\r\nimport { GetCurveToInDir, GetOffsetCurves, OptimizeToolPath } from \"./OptimizeToolPath\";\r\n\r\n/**\r\n *计算走刀工具类\r\n */\r\nexport class FeedingToolPath extends Singleton\r\n{\r\n /**\r\n * 处理形状,内偏移\r\n * @param shape 造型Shape\r\n * @param knifRadius 刀半径/偏移距离\r\n * @param [isOut=true] 是否是最外轮廓,如果是,洞需要外偏移一个刀半径,多段线偏移保留不闭合轮廓\r\n */\r\n private HandleShape(shape: Shape, knifRadius: number, isOut = true): Curve[]\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (isOut)\r\n outline = outline.Clone();\r\n\r\n\r\n let dir = GetCurveToInDir(outline);\r\n\r\n let offsetCus: Curve[] = [outline];\r\n //获得形状外孔轮廓\r\n let holes: Contour[] = [];\r\n /**用于判断孤岛是否与外轮廓相交 */\r\n let holeOffsetCus: Curve[] = [];\r\n\r\n for (let h of shape.Holes)\r\n {\r\n if (!isOut)\r\n holes.push(h.Clone());\r\n else\r\n {\r\n let dir = -GetCurveToInDir(h.Curve);\r\n let cus: Curve[];\r\n if (h.Curve instanceof Circle)\r\n cus = h.Curve.GetOffsetCurves(knifRadius * dir);\r\n else\r\n cus = h.Curve.GetFeedingToolPath(knifRadius * dir);\r\n\r\n holeOffsetCus.push(...h.Curve.GetOffsetCurves(knifRadius * dir).filter(c => c.IsClose));\r\n\r\n holes.push(...this.GetContours(cus as Polyline[], offsetCus));\r\n }\r\n }\r\n\r\n let offsetDist = 0;\r\n\r\n let rectInfo = IsRect(outline);\r\n\r\n while (true)\r\n {\r\n if ((!isOut || offsetDist >= knifRadius) && rectInfo.isRect)\r\n offsetDist += knifRadius * 2;\r\n else\r\n offsetDist += knifRadius;\r\n\r\n let retCus: Curve[] = [];\r\n\r\n let tempOffsetCus = GetOffsetCurves(outline, offsetDist * dir, rectInfo);\r\n retCus.push(...tempOffsetCus);\r\n\r\n //最后一次内偏移如果是矩形,需在偏移一个刀半径避免没切到中心\r\n if (retCus.length === 0 && rectInfo.isRect && offsetDist > knifRadius)\r\n {\r\n offsetDist -= knifRadius;\r\n retCus.push(...GetOffsetCurves(outline, offsetDist * dir, rectInfo));\r\n }\r\n\r\n if (retCus.length === 0) break;\r\n //是否和孤岛相交\r\n let isInt = false;\r\n for (let c of retCus)\r\n {\r\n if (holes.length > 0)\r\n {\r\n isInt = holes.some(h => h.Curve.IntersectWith(c, 0).length > 0 || h.CuInOutline(c));\r\n if (isInt) break;\r\n }\r\n if (isOut && offsetDist === knifRadius)\r\n c.TempData = { isOut: true };\r\n offsetCus.push(c);\r\n }\r\n if (isInt)\r\n {\r\n //洞形状管理器\r\n let holesMg = new ShapeManager();\r\n if (isOut)\r\n holes = Shape.mergeContours(holes, false); //#I1MUQD 正好擦边的孔不合并\r\n holesMg.AppendShapeList(holes.map(h => new Shape(h)));\r\n let shapeMg = new ShapeManager();\r\n let cons = this.GetContours(retCus as Polyline[], offsetCus);\r\n shapeMg.AppendShapeList(cons.map(c => new Shape(c)));\r\n shapeMg.BoolOper(holesMg, BoolOpeartionType.Subtract);\r\n for (let s of shapeMg.ShapeList)\r\n {\r\n if (isOut && tempOffsetCus.length > 1)\r\n s.Outline.Curve.TempData = { isOut: true };\r\n offsetCus.push(...this.HandleShape(s, knifRadius, false));\r\n }\r\n break;\r\n }\r\n }\r\n let vailHoles: Contour[] = [];\r\n\r\n for (let i = 0; i < holes.length; i++)\r\n {\r\n let h = holes[i];\r\n //如果加工洞外圈和最外轮廓相交,则去掉\r\n if (h.Curve.IntersectWith(outline, 0).length > 0)\r\n continue;\r\n let isVail = true;\r\n //若最外轮廓内偏移一个刀半径的曲线 和最内轮廓相交或者被包含,则去掉.且不与洞曲线相等\r\n if (isOut)\r\n {\r\n let outlineOffsetCus = outline.GetOffsetCurves(dir * knifRadius).filter(c => c.IsClose) as Curve[];\r\n let outlineCus = GetOffsetCurves(outline, dir * knifRadius).filter(c => c.IsClose) as Curve[];;\r\n let ho = holeOffsetCus[i];\r\n let maxArea = Math.max(...(outlineOffsetCus.map(c => c.Area)));\r\n for (let j = 0; j < outlineOffsetCus.length; j++)\r\n {\r\n let c = outlineOffsetCus[j];\r\n if (h.Curve.IntersectWith(outlineCus[j], 0).length > 0)\r\n {\r\n if (!(equalCurve(ho, c) || isTargetCurInOrOnSourceCur(c as Polyline, h.Curve)))\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n else if (isTargetCurInOrOnSourceCur(h.Curve, c as Polyline))\r\n {\r\n offsetCus.push(c);\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n else if (ho.Area > maxArea)\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n }\r\n if (isVail)\r\n vailHoles.push(h);\r\n }\r\n\r\n offsetCus.push(...vailHoles.map(h => h.Curve));\r\n return offsetCus;\r\n }\r\n /**用于测试走刀路径 */\r\n TestCalcPath(br: Board, isCd = false)\r\n {\r\n let modelings = br.BoardModeling;\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n modelings.push(...allModeling.modeling);\r\n if (isCd && userConfig.chaidanOption.useDefaultRad)\r\n modelings.forEach(m => m.knifeRadius = userConfig.chaidanOption.radius);\r\n if (isCd)\r\n arrayRemoveIf(modelings, m =>\r\n {\r\n let c = m.shape.Outline.Curve;\r\n if (c instanceof Circle && c.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n return true;\r\n return false;\r\n });\r\n\r\n let cus = this.CalcPath(modelings, br);\r\n //不同走刀路径区分颜色\r\n cus.forEach((c, i) => c.ColorIndex = (i + 1 === 8 || i + 1 === 18 || i + 1 === 19) ? i + 2 : i + 1);\r\n let outline = br.ContourCurve as Polyline;\r\n let dir = Math.sign(outline.Area2);\r\n let sideOutlines: Polyline[] = [];\r\n //优化侧面造型模拟走刀位置\r\n for (let m of allModeling.sideModeling)\r\n {\r\n let c = outline.GetCurveAtIndex(m.dir);\r\n let derv = c.GetFistDeriv(0);\r\n if (dir < 0)\r\n derv.negate();\r\n let mat = MoveMatrix(dir > 0 ? c.StartPoint : c.EndPoint)\r\n .multiply(new Matrix4().makeRotationZ(angleTo(XAxis, derv)))\r\n .multiply(MoveMatrix(new Vector3(0, -br.Thickness)));\r\n m.shape.ApplyMatrix(mat);\r\n let pl = new Polyline().RectangleFrom2Pt(new Vector3(), new Vector3(c.Length, br.Thickness));\r\n pl.ColorIndex = 6;\r\n pl.ApplyMatrix(mat);\r\n sideOutlines.push(pl);\r\n }\r\n\r\n cus.push(...this.CalcPath(allModeling.sideModeling, br));\r\n //加入板件轮廓\r\n cus.unshift(br.ContourCurve.Clone());\r\n if (cus.length === 1)\r\n return cus;\r\n //加入造型外轮廓和洞\r\n for (let { shape, thickness } of modelings)\r\n {\r\n let outline = shape.Outline.Curve.Clone();\r\n outline.Position = outline.Position.setZ(0);\r\n outline.ColorIndex = 8;\r\n cus.push(outline);\r\n if (thickness < br.Thickness)\r\n {\r\n cus.push(...shape.Holes.map(h =>\r\n {\r\n let c = h.Curve.Clone();\r\n c.Position = c.Position.setZ(0);\r\n c.ColorIndex = 8;\r\n return c;\r\n }));\r\n }\r\n }\r\n cus.push(...sideOutlines);\r\n return cus;\r\n }\r\n /**\r\n * 计算走刀路径\r\n */\r\n CalcPath(modelings: IModeling[], br: Board): Curve[]\r\n {\r\n let cus: Curve[] = [];\r\n for (let m of modelings)\r\n {\r\n cus.push(...this.GetModelFeedPath(br, m));\r\n }\r\n return cus;\r\n }\r\n GetModelFeedPath(br: Board, m: IModeling): Curve[]\r\n {\r\n const brThickness = br.Thickness;\r\n let cus: Curve[] = [];\r\n let { shape, thickness, knifeRadius, addLen, addWidth, addDepth } = m;\r\n if (!knifeRadius) knifeRadius = 3;\r\n if (addDepth)\r\n thickness += addDepth;\r\n shape = shape.Clone();\r\n shape.Z0();\r\n this.GrooveAddSize(shape, addLen, addWidth);\r\n this.HandleThoughGroove(br, shape, knifeRadius);\r\n\r\n //造型半径和刀半径相等,返回重合点的线\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle && equaln(outline.Radius, m.knifeRadius))\r\n return [new Polyline([{ pt: AsVector2(outline.Center), bul: 0 }, { pt: AsVector2(outline.Center), bul: 0 }])];\r\n\r\n if (thickness >= brThickness)\r\n {\r\n //通孔只切一刀\r\n let dir = GetCurveToInDir(outline);\r\n let paths: Curve[];\r\n if (outline instanceof Circle)\r\n outline = ConverCircleToPolyline(outline);\r\n\r\n paths = outline.GetFeedingToolPath(dir * knifeRadius);\r\n for (let path of paths)\r\n {\r\n if (dir < 0)\r\n path.Reverse();\r\n\r\n // 有些走刀会变成一条线,或者某些地方退化成线,这个时候这个判断是错误的\r\n // if (!path.IsClockWise)\r\n // throw \"程序错误:全深网洞加工数据并不为逆时针!\";\r\n }\r\n cus.push(...paths);\r\n }\r\n else\r\n {\r\n let offsetCus = this.HandleShape(shape, knifeRadius);\r\n if (offsetCus.length > 1)\r\n cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius));\r\n }\r\n return cus;\r\n }\r\n private GrooveAddSize(shape: Shape, addLen: number, addWidth: number)\r\n {\r\n shape.Outline.Curve.Position = shape.Outline.Curve.Position.setZ(0);\r\n //若是矩形,应用槽加长\r\n if (addLen > 0 || addWidth > 0)\r\n {\r\n let curveData = IsRect(shape.Outline.Curve);\r\n if (curveData.isRect)\r\n {\r\n let box = curveData.box;\r\n let size = curveData.size;\r\n if (size.x > size.y)\r\n {\r\n box.max.add(new Vector3(addLen / 2, addWidth / 2));\r\n box.min.add(new Vector3(-addLen / 2, -addWidth / 2));\r\n }\r\n else\r\n {\r\n box.max.add(new Vector3(addWidth / 2, addLen / 2));\r\n box.min.add(new Vector3(-addWidth / 2, -addLen / 2));\r\n }\r\n let pl = new Polyline().RectangleFrom2Pt(box.min, box.max).ApplyMatrix(curveData.OCS);\r\n shape.Outline = Contour.CreateContour(pl);\r\n }\r\n }\r\n }\r\n private GetContours(cus: (Polyline | Circle)[], retCus: Curve[])\r\n {\r\n let cons: Contour[] = [];\r\n for (let c of cus)\r\n {\r\n if (c.IsClose)\r\n {\r\n cons.push(Contour.CreateContour(c));\r\n }\r\n else\r\n {\r\n let expCus = c.Explode() as Curve[];\r\n let regParse = new RegionParse(expCus);\r\n\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c && c.Area > 1e-3)\r\n cons.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n for (let c of expCus)\r\n {\r\n if (!regParse.GetCueveUsed(c))\r\n {\r\n retCus.push(c);\r\n }\r\n }\r\n\r\n }\r\n }\r\n return cons;\r\n }\r\n CheckModeling(br: Board)\r\n {\r\n let errorIndexs: number[] = [];\r\n let modelings = br.BoardModeling;\r\n for (let i = 0; i < modelings.length; i++)\r\n {\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n modelings[i].knifeRadius = userConfig.chaidanOption.radius;\r\n let cus = this.GetModelFeedPath(br, modelings[i]);\r\n if (cus.length === 0)\r\n errorIndexs.push(i);\r\n }\r\n return errorIndexs;\r\n }\r\n CheckCustomHole(br: Board)\r\n {\r\n let { modeling, sideModeling } = GetModelingFromCustomDrill(br);\r\n\r\n let errHoles: ExtrudeHole[] = [];\r\n\r\n for (let m of [...modeling, ...sideModeling])\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n let cus = this.GetModelFeedPath(br, m);\r\n if (cus.length === 0)\r\n errHoles.push(m.originEn);\r\n }\r\n\r\n return errHoles;\r\n }\r\n HandleThoughGroove(br: Board, shape: Shape, knifeRadius: number)\r\n {\r\n let brCon = br.ContourCurve;\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle) return;\r\n\r\n let cus = outline.Explode();\r\n MergeCurvelist(cus);\r\n let hasChange = false;\r\n let curveBak: Curve;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n if (c instanceof Line)\r\n {\r\n let mp = (curveBak ?? c).Midpoint;\r\n curveBak = undefined;\r\n if (brCon.PtOnCurve(mp))\r\n {\r\n hasChange = true;\r\n let cs = c.GetOffsetCurves(knifeRadius);\r\n cus[i] = cs[0];\r\n let fline = cus[FixIndex(i - 1, cus.length)];\r\n\r\n let isAddLine = false;\r\n\r\n if (fline instanceof Line)\r\n {\r\n let intPts = fline.IntersectWith2(cs[0], 3);\r\n if (intPts.length === 0)\r\n {\r\n console.error(\"未知错误情况\");\r\n return;\r\n }\r\n\r\n if (intPts[0].thisParam >= 0 && intPts[0].argParam <= 1)\r\n {\r\n fline.EndPoint = intPts[0].pt;\r\n cs[0].StartPoint = intPts[0].pt;\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n\r\n if (isAddLine)\r\n {\r\n let newLine = new Line(fline.EndPoint, cs[0].StartPoint);\r\n if (i === 0)\r\n {\r\n cus.push(newLine);\r\n }\r\n else\r\n {\r\n cus.splice(i, 0, newLine);\r\n i++;\r\n }\r\n }\r\n\r\n let backLine = cus[FixIndex(i + 1, cus.length)];\r\n\r\n isAddLine = false;\r\n\r\n if (backLine instanceof Line)\r\n {\r\n let intPts = backLine.IntersectWith2(cs[0], 3);\r\n if (intPts.length === 0)\r\n {\r\n if (LogEnable.Display)\r\n console.error(\"未知错误情况\");\r\n return;\r\n }\r\n\r\n if (intPts[0].thisParam <= 1 && intPts[0].argParam >= 0)\r\n {\r\n curveBak = backLine.Clone();\r\n backLine.StartPoint = intPts[0].pt;\r\n cs[0].EndPoint = intPts[0].pt;\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n if (isAddLine)\r\n {\r\n let newLine = new Line(cs[0].EndPoint, backLine.StartPoint);\r\n if (i + 1 === cus.length)\r\n {\r\n cus.unshift(newLine);\r\n }\r\n else\r\n {\r\n cus.splice(i + 1, 0, newLine);\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (hasChange)\r\n {\r\n let con = Contour.CreateContour(Polyline.Combine(cus));\r\n if (con)\r\n shape.Outline = con;\r\n else\r\n console.error(\"错误\");\r\n }\r\n }\r\n}\r\nexport function GetModelingFromCustomDrill(br: Board)\r\n{\r\n let normal = br.Normal;\r\n let outline = GetSealedBoardContour(br, true) as Polyline;\r\n\r\n let modeling: (IModeling & { originEn: ExtrudeHole; })[] = [];\r\n let sideModeling: (IModeling & { originEn: ExtrudeHole; })[] = [];\r\n\r\n const holes: ExtrudeHole[] = [];\r\n let bbox = br.BoundingBoxInOCS;\r\n\r\n let holeBoxMap = new WeakMap();\r\n\r\n for (let [, idss] of br.DrillList)\r\n {\r\n for (let ids of idss)\r\n {\r\n for (let id of ids)\r\n {\r\n if (id?.Object && !id.Object.IsErase && id.Object instanceof ExtrudeHole && id.Object.isHole)\r\n {\r\n if (!(id.Object.ContourCurve instanceof Circle))\r\n {\r\n let en = id.Object as ExtrudeHole;\r\n let enBox = en.GetBoundingBoxInMtx(br.OCSInv);\r\n holeBoxMap.set(en, enBox);\r\n if (enBox.clone().intersect(bbox).isSolid(0.1))\r\n holes.push(id.Object);\r\n }\r\n }\r\n else break;\r\n }\r\n }\r\n }\r\n\r\n\r\n for (let en of holes)\r\n {\r\n let box = holeBoxMap.get(en);\r\n let max = box.max;\r\n let min = box.min;\r\n let dir: FaceDirection;\r\n let shape = en.Shape;\r\n let diff = br.OCSInv.multiply(en.OCS);\r\n shape.ApplyMatrix(diff);\r\n let thickness: number;\r\n if (isParallelTo(normal, en.Normal))\r\n {\r\n if (min.z > br.Thickness - 1e-6) continue;\r\n\r\n //在板件的世界,0.01的误差应该不能被看出来,所以我们允许0.01的容差(这样应该是没问题的)\r\n //也避免了一些二维转三维出现的缝隙排钻不能被拆解的问题\r\n if (max.z >= br.Thickness - 1e-2)//较大的容差(0.01)\r\n {\r\n dir = FaceDirection.Front;\r\n shape.Position = shape.Position.setZ(min.z);\r\n thickness = br.Thickness - min.z;\r\n }\r\n else if (min.z < 1e-2)//较大的容差\r\n {\r\n dir = FaceDirection.Back;\r\n thickness = max.z;\r\n }\r\n else\r\n continue;\r\n\r\n if (thickness > +1e-6 && isTargetCurInOrOnSourceCur(outline, shape.Outline.Curve.Clone().Z0()))\r\n {\r\n modeling.push({\r\n shape,\r\n thickness,\r\n dir,\r\n knifeRadius: en.KnifeRadius,\r\n addLen: 0,\r\n originEn: en,\r\n });\r\n }\r\n }\r\n else\r\n {\r\n if (min.z <= 0 || max.z >= br.Thickness) continue;\r\n let spt = en.Position.applyMatrix4(br.OCSInv).setZ(0);\r\n\r\n if (outline.PtOnCurve(spt)) continue;\r\n let line = new Line(spt, en.Position.add(en.Normal.multiplyScalar(en.Height)).applyMatrix4(br.OCSInv).setZ(0));\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt) continue;\r\n\r\n let index = Math.floor(outline.GetParamAtPoint(pt));\r\n let thickness = line.StartPoint.distanceTo(pt);\r\n\r\n let shape = en.Shape.ApplyMatrix(en.OCS).ApplyMatrix(br.OCSInv);\r\n let vec = line.GetFistDeriv(0).normalize().multiplyScalar(thickness);\r\n shape.Position = shape.Position.add(vec);\r\n\r\n let cu = outline.GetCurveAtIndex(index);\r\n\r\n shape.ApplyMatrix(new Matrix4().getInverse(GetSideFaceMtx(cu)));\r\n sideModeling.push({\r\n shape,\r\n thickness,\r\n dir: index,\r\n knifeRadius: en.KnifeRadius,\r\n addLen: 0,\r\n originEn: en,\r\n });\r\n }\r\n }\r\n\r\n return { modeling, sideModeling };\r\n}\r\n"],"names":["iaop","Vector3","Matrix4","Vector2","observable","toJS","Box3","Object3D","LineBasicMaterial","MeshBasicMaterial","DoubleSide","ShaderMaterial","Color","LineDashedMaterial","LineMaterial","BufferGeometry","Shape","ShapeGeometry","BufferAttribute","EllipseCurve","ExtrudeGeometry","Mesh","Arc","Polyline","BoolOpeartionType","Circle","Plane","Line3","Line","TLine","MathUtils","LineGeometry","Line2","TShape","Path","BufferGeometryUtils2","LineSegments","Geometry","Face3","cache","CylinderBufferGeometry","Float32BufferAttribute","FixIndex","ShapeUtils","CatmullRomCurve3","BoxBufferGeometry","InstancedInterleavedBuffer","InterleavedBufferAttribute","Production","DrillingFace"],"mappings":"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AAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAA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"} \ No newline at end of file +{"version":3,"file":"api.cjs.js","sources":["../src/DatabaseServices/CADFactory.ts","../src/DatabaseServices/AllObjectData.ts","../src/DatabaseServices/AutoRecord.ts","../src/DatabaseServices/EraseEntityData.ts","../src/DatabaseServices/CADObject.ts","../src/DatabaseServices/ObjectId.ts","../src/ApplicationServices/HostApplicationServices.ts","../src/Common/Dispose.ts","../src/Geometry/CoordinateSystem.ts","../src/Common/eval.ts","../src/Common/StoreageKeys.ts","../src/Common/Utils.ts","../src/Geometry/GeUtils.ts","../src/Common/Matrix4Utils.ts","../src/Common/Status.ts","../src/GraphicsSystem/RenderType.ts","../src/Common/SystemEnum.ts","../src/Editor/UserConfig.ts","../src/Geometry/Box.ts","../src/DatabaseServices/Entity/Entity.ts","../src/DatabaseServices/CADFiler.ts","../src/GLSL/GoochShader.ts","../src/Common/ColorPalette.ts","../src/Common/ArrayExt.ts","../src/Editor/ObjectSnapMode.ts","../src/Editor/BufferGeometry2GeometryCacheMap.ts","../src/Geometry/BufferGeometryUtils.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/Matrix2.ts","../src/Geometry/RotateUV.ts","../src/ApplicationServices/mesh/createBoard.ts","../src/Geometry/CurveMap.ts","../src/Geometry/RegionParse.ts","../src/GraphicsSystem/BoolOperateUtils.ts","../src/DatabaseServices/Entity/Curve.ts","../src/DatabaseServices/Contour.ts","../src/Geometry/Plane.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Line.ts","../src/GraphicsSystem/OffsetPolyline.ts","../src/DatabaseServices/PointInPolyline.ts","../src/DatabaseServices/Entity/DragPointType.ts","../src/DatabaseServices/Entity/Polyline.ts","../src/GraphicsSystem/IntersectWith.ts","../src/DatabaseServices/Entity/Circle.ts","../src/Geometry/Count.ts","../src/Geometry/Orbit.ts","../src/Common/CurveUtils.ts","../src/DatabaseServices/Entity/Arc.ts","../src/Common/Log.ts","../src/Common/Singleton.ts","../src/Geometry/UVUtils.ts","../src/DatabaseServices/Shape.ts","../src/DatabaseServices/ShapeManager.ts","../src/DatabaseServices/Entity/Region.ts","../src/Add-on/BoardEditor/Board2Regions.ts","../src/Common/BoardKeyList.ts","../src/Add-on/BoardEditor/SerializeBoardData.ts","../src/Geometry/BoardUVGenerator.ts","../src/UI/Store/BoardInterface.ts","../src/Common/AddEntityDrawObject.ts","../src/csg/core/math/IsMirrot.ts","../src/csg/core/constants.ts","../src/csg/core/math/Vector3.ts","../src/csg/core/math/Vector2.ts","../src/csg/core/math/Vertex3.ts","../src/csg/core/math/Plane.ts","../src/csg/core/math/Polygon3.ts","../src/csg/core/trees.ts","../src/csg/core/FuzzyFactory.ts","../src/csg/core/FuzzyFactory3d.ts","../src/csg/core/utils/canonicalize.ts","../src/csg/core/utils/csgMeasurements.ts","../src/csg/core/utils.ts","../src/csg/core/math/Line2.ts","../src/csg/core/math/OrthoNormalBasis.ts","../src/csg/core/math/reTesselateCoplanarPolygons.ts","../src/csg/core/utils/retesellate.ts","../src/csg/core/CSG.ts","../src/csg/core/Geometry2CSG.ts","../src/Geometry/BSPGroupParse.ts","../src/Geometry/ExtrudeEdgeGeometry.ts","../src/Add-on/testEntity/SimplifyPolyline.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/Common/Toaster.ts","../src/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/UI/Store/WineRackInterface.ts","../src/UI/Store/BoardFindInterface.ts","../src/UI/Store/LatticeInterface.ts","../src/UI/Store/DoorInterface.ts","../src/UI/Components/RightPanel/RightPanelInterface.ts","../src/Editor/DefaultConfig.ts","../src/Nest/Common/Util.ts","../src/Geometry/SweepGeometry.ts","../src/DatabaseServices/Spline.ts","../src/Geometry/OBB/obb.ts","../src/DatabaseServices/3DSolid/SweepSolid.ts","../src/DatabaseServices/Hardware/HardwareTopline.ts","../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Common/Report.ts","../src/Common/ShowSelectObjects.ts","../src/Common/Deving.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/Production/Product.ts","../src/Geometry/CurveIntersection.ts","../src/Geometry/CreateContour2.ts","../src/Geometry/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Geometry/PointShapeUtils.ts","../src/DatabaseServices/Entity/Board.ts","../src/Geometry/CreateWireframe.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts"],"sourcesContent":["\r\n/**\r\n * CAD对象工厂,通过注册 和暴露的创建方法,动态创建对象\r\n */\r\nexport class CADFactory\r\n{\r\n private constructor() { }\r\n private objectNameMap = new Map();\r\n private static factory = new CADFactory();\r\n static RegisterObject(C: any)\r\n {\r\n this.factory.objectNameMap.set(C.name, C);\r\n }\r\n static RegisterObjectAlias(C: any, name: string)\r\n {\r\n this.factory.objectNameMap.set(name, C);\r\n }\r\n static CreateObject(name: string): any\r\n {\r\n let C = this.factory.objectNameMap.get(name);\r\n if (C) return new C();\r\n }\r\n}\r\n\r\n//可以通过添加装饰器 在类前面(@Factory),自动注册工厂的序列化\r\nexport function Factory(target: Object)\r\n{\r\n CADFactory.RegisterObject(target);\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\nimport { CADObject } from './CADObject';\r\n\r\n/**\r\n * 保存对象创建或者修改时的所有数据记录\r\n */\r\n@Factory\r\nexport class AllObjectData implements ISerialize\r\n{\r\n file: CADFiler;\r\n constructor(obj?: CADObject)\r\n {\r\n this.file = new CADFiler();\r\n if (obj)\r\n obj.WriteFile(this.file);\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n let data = file.Read();\r\n this.file.Data = data;\r\n return this;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.file.Data);\r\n return this;\r\n }\r\n}\r\n","\r\n\r\nexport const ISPROXYKEY = \"_isProxy\";\r\n\r\n/**\r\n * 自动对CADObject的属性添加属性记录器,自动调用 `WriteAllObjectRecord`\r\n * 如果属性是数组,那么自动添加`Proxy`.\r\n * 可以使用`ISPROXYKEY`覆盖这个函数的代理行为(使用CADObject.CreateProxyArray快速覆盖)\r\n *\r\n * @param target\r\n * @param property\r\n * @param [descriptor]\r\n */\r\nexport function AutoRecord(\r\n target: { WriteAllObjectRecord: () => void; },\r\n property: string,\r\n descriptor?: PropertyDecorator)\r\n{\r\n let privateKey = '__' + property;\r\n Object.defineProperty(target, property,\r\n {\r\n set: function (value)\r\n {\r\n if (value instanceof Array)\r\n {\r\n if (!this[privateKey])\r\n {\r\n if (value[ISPROXYKEY])\r\n this[privateKey] = value;\r\n else\r\n this[privateKey] = new Proxy(value, {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n this.WriteAllObjectRecord();\r\n return Reflect.set(target, key, value, receiver);\r\n },\r\n get: (target, key, receiver) =>\r\n {\r\n if (key === ISPROXYKEY)\r\n return true;\r\n //实体先被删除后在触发length = xxx\r\n if (key === \"splice\" || key === \"pop\" || key === \"shift\")\r\n this.WriteAllObjectRecord();\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n else\r\n {\r\n let arr = this[privateKey] as Array;\r\n arr.length = 0;\r\n arr.push(...value);\r\n }\r\n }\r\n else\r\n {\r\n let oldv = this[privateKey];\r\n if (oldv !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this[privateKey] = value;\r\n }\r\n }\r\n },\r\n get: function ()\r\n {\r\n return this[privateKey];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n }\r\n );\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\n@Factory\r\nexport class EraseEntityData implements ISerialize\r\n{\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.isErase = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.isErase);\r\n return this;\r\n }\r\n constructor(public isErase = true)\r\n {\r\n }\r\n}\r\n","import { iaop } from 'xaop';\r\nimport { AllObjectData } from './AllObjectData';\r\nimport { ISPROXYKEY } from './AutoRecord';\r\nimport { CADFactory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CommandHistoryRecord } from './CommandHistoryRecord';\r\nimport { Database } from './Database';\r\nimport { EraseEntityData } from './EraseEntityData';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\r\n\r\nexport abstract class CADObject\r\n{\r\n protected _Owner: ObjectId;\r\n /**\r\n * 用于储存临时数据\r\n */\r\n public TempData: any;\r\n\r\n //下面的三个数据由Rect2Board使用\r\n __CacheBox__: any;\r\n __CacheBoard__: any;\r\n __CacheSize__: any;\r\n __CachePolyline__: any;\r\n\r\n set Owner(owner: ObjectId)\r\n {\r\n this._Owner = owner;\r\n }\r\n get Owner()\r\n {\r\n return this._Owner;\r\n }\r\n\r\n Destroy()\r\n {\r\n //在效果图同步反应器中,需要知道被删除的实体的id,所以不删除这个属性\r\n // this.objectId = undefined;\r\n this._db = undefined;\r\n }\r\n\r\n //对象被彻底遗弃\r\n GoodBye(): any\r\n {\r\n this.Destroy();\r\n this.Erase(true);\r\n }\r\n\r\n /**\r\n * 当实体异步更新绘制实体完成后触发这个函数.\r\n * Application通过注入的方式得知这个事件,刷新视图显示.\r\n */\r\n @iaop\r\n AsyncUpdated()\r\n {\r\n }\r\n\r\n //-------------------------DB-------------------------\r\n protected _db: Database;\r\n get Db(): Database\r\n {\r\n return this._db;\r\n }\r\n\r\n //对象在加入数据库时,必须指定一个源数据库,否则无法读取引用id.\r\n SetDefaultDb(db: Database)\r\n {\r\n if (!this._db)\r\n this._db = db;\r\n else\r\n console.warn(\"重复设置默认Database!\");\r\n\r\n return this;\r\n }\r\n\r\n //private 私有的方法,暴露给Db的添加对象,方法使用.\r\n //只用对象加入到db中,我们才初始化ObjectId.\r\n //从db池中分配id给自身使用. 除非你创建对象往db里面加,否则不要调用该方法\r\n SetOwnerDatabase(db: Database)\r\n {\r\n if (!this._db)\r\n {\r\n this._db = db;\r\n this.objectId = db.AllocateId();\r\n this.objectId.Object = this;\r\n }\r\n else\r\n console.warn(\"重复设置源Database!\");\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * WblockClone 的时候,id是db分配的,此刻我们只需要设置它的db\r\n */\r\n SetDatabase(db: Database)\r\n {\r\n this._db = db;\r\n }\r\n\r\n //-------------------------DB End-------------------------\r\n\r\n // -------------------------isErase-------------------------\r\n protected _isErase: boolean = false;\r\n get IsErase(): boolean\r\n {\r\n return this._isErase;\r\n }\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this._isErase)\r\n return;\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n undoData.CreateEraseHistory(this, isErase);\r\n this._isErase = isErase;\r\n }\r\n //-------------------------isErase End-------------------------\r\n\r\n // -------------------------id-------------------------\r\n\r\n //操作这个需要谨慎!\r\n objectId: ObjectId;\r\n\r\n get Id(): ObjectId\r\n {\r\n return this.objectId;\r\n }\r\n\r\n // -------------------------id End-------------------------\r\n\r\n // -------------------------File-------------------------\r\n\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n //write Id;\r\n let id = file.ReadObjectId();\r\n if (!this.objectId && id)//避免CopyFrom时错误的修改自身Id\r\n {\r\n this.objectId = id;\r\n id.Object = this;\r\n }\r\n this._isErase = file.Read();\r\n if (ver > 1)\r\n this.Owner = file.ReadObjectId();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.WriteObjectId(this.objectId);\r\n file.Write(this._isErase);\r\n file.WriteObjectId(this.Owner);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: ISerialize)\r\n {\r\n if (undoData instanceof AllObjectData)\r\n {\r\n undoData.file.database = this._db;\r\n undoData.file.Reset();\r\n this.ReadFile(undoData.file);\r\n }\r\n else if (undoData instanceof EraseEntityData)\r\n {\r\n this.Erase(undoData.isErase);\r\n }\r\n }\r\n\r\n //撤销所保存的位置\r\n UndoRecord(): CommandHistoryRecord\r\n {\r\n if (this._db && this.objectId)\r\n return this._db.hm.UndoData;\r\n }\r\n //写入所有的对象数据 以便还原对象\r\n WriteAllObjectRecord(): boolean\r\n {\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n {\r\n undoData.WriteObjectSnapshoot(this);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //复制出一个实体,如果存在关联,则指向原关联实体\r\n Clone(): this\r\n {\r\n let newObject = CADFactory.CreateObject(this.constructor.name) as this;\r\n\r\n //备份\r\n let bakId = this.objectId;\r\n this.objectId = undefined;\r\n\r\n let file = new CADFiler();\r\n file.database = this._db;\r\n this.WriteFile(file);\r\n file.Reset();\r\n newObject.ReadFile(file);\r\n\r\n newObject.objectId = undefined;\r\n newObject._db = undefined;\r\n\r\n this.objectId = bakId;\r\n return newObject;\r\n }\r\n\r\n DeepClone(\r\n ownerObject: CADObject,\r\n cloneObejct: CADObject,\r\n idMaping: Map = undefined,\r\n isPrimary = true\r\n ): this\r\n {\r\n return this;\r\n }\r\n\r\n //从一个实体拷贝数据,实体类型必须相同.\r\n CopyFrom(obj: CADObject)\r\n {\r\n let idBak = this.objectId;\r\n let ownerBak = this._Owner;\r\n this.WriteAllObjectRecord();\r\n let f = new CADFiler();\r\n obj.WriteFile(f);\r\n this.ReadFile(f);\r\n this.objectId = idBak;\r\n this._Owner = ownerBak;\r\n }\r\n\r\n //-------------------------File End-------------------------\r\n\r\n //Utils\r\n /**\r\n * 配合 `@AutoRecord` 使用\r\n * 使用这个方法来覆盖AutoRecord的监听行为.\r\n * 这个行为只能用来监听实体添加和实体修改.\r\n * 实体删除行为暂时无法监听\r\n * @param setCallback 设置新的实体到数组时的回调函数\r\n */\r\n protected CreateProxyArray(setCallback: (v: any) => void)\r\n {\r\n return new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n setCallback(value);\r\n }\r\n return Reflect.set(target, key, value, receiver);\r\n },\r\n get: (target, key, receiver) =>\r\n {\r\n if (key === ISPROXYKEY)\r\n return true;\r\n //实体先被删除后在触发length = xxx\r\n if (key === \"splice\" || key === \"pop\" || key === \"shift\")\r\n {\r\n this.WriteAllObjectRecord();\r\n setCallback(undefined);\r\n }\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n}\r\n","import { CADObject } from './CADObject';\r\n\r\nexport enum RelevancyType\r\n{\r\n General = 0,\r\n Soft = 1,\r\n Hard = 2,\r\n}\r\n\r\n/*\r\nCADObject对象拥有Id属性,用来记录引用关系.\r\n通过id可以得到对应的关联实体,或者记录实体的关联关系.\r\n\r\nObjectId必须使用 Database分配(db里面会存id的列表,以便同时更新id指向实体)\r\n\r\n*/\r\nexport class ObjectId\r\n{\r\n _RelevancyType = RelevancyType.General;\r\n constructor(private index = 0, private obj?: CADObject)\r\n {\r\n }\r\n\r\n get IsErase(): boolean\r\n {\r\n return !this.obj || this.obj.IsErase;\r\n }\r\n set Object(obj: CADObject)\r\n {\r\n this.obj = obj;\r\n }\r\n get Object(): CADObject\r\n {\r\n return this.obj;\r\n }\r\n get Index(): number\r\n {\r\n return this.index;\r\n }\r\n set Index(index: number)\r\n {\r\n this.index = index;\r\n }\r\n}\r\n","import { ApplicationService } from './Application';\r\nimport { MeshBasicMaterial, MeshStandardMaterial } from 'three';\r\n\r\ninterface IHostApplicationServices\r\n{\r\n Application?: ApplicationService;\r\n DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n UseShadow?: boolean;\r\n ShowHistoryLog?: boolean;\r\n}\r\n\r\nexport let HostApplicationServices: IHostApplicationServices = { ShowHistoryLog: true };\r\n","import { Object3D } from \"three\";\r\n\r\n/**\r\n * 销毁Object对象的Geometry,并不会销毁材质(新版本销毁材质,好像问题不大?)\r\n */\r\nexport function DisposeThreeObj(obj: Object3D)\r\n{\r\n for (let o of obj.children)\r\n {\r\n let oany = o as any;\r\n //文字的geometry缓存保留下来\r\n if (oany.geometry && oany.geometry.name !== \"Text\")\r\n oany.geometry.dispose();\r\n\r\n if (oany.material)\r\n if (Array.isArray(oany.material))\r\n {\r\n for (let m of oany.material)\r\n m.dispose();\r\n }\r\n else\r\n {\r\n oany.material.dispose();\r\n }\r\n\r\n DisposeThreeObj(o);\r\n\r\n // 下面这个代码可能导致Object3d无法复用,删除它应该问题不大\r\n // o.parent = null;\r\n // o.dispatchEvent({ type: \"removed\" });\r\n }\r\n // 下面这个代码可能导致Object3d无法复用,删除它应该问题不大\r\n // obj.children.length = 0;\r\n return obj;\r\n}\r\n\r\nexport function Object3DRemoveAll(obj: Object3D)\r\n{\r\n for (let o of obj.children)\r\n {\r\n o.parent = null;\r\n o.dispatchEvent({ type: \"removed\" });\r\n }\r\n obj.children.length = 0;\r\n return obj;\r\n}\r\n","import { Matrix4, Vector3 } from 'three';\r\n\r\n/**\r\n * 坐标系运算.\r\n */\r\nexport class CoordinateSystem\r\n{\r\n Postion: Vector3;\r\n XAxis: Vector3;\r\n YAxis: Vector3;\r\n ZAxis: Vector3;\r\n\r\n constructor(postion?: Vector3, xAxis?: Vector3, yAxis?: Vector3, zAxis?: Vector3)\r\n {\r\n this.Postion = postion || new Vector3(0, 0, 0);\r\n this.XAxis = xAxis || new Vector3(1, 0, 0);\r\n this.YAxis = yAxis || new Vector3(0, 1, 0);\r\n this.ZAxis = zAxis || new Vector3(0, 0, 1);\r\n }\r\n\r\n applyMatrix4(mat4: Matrix4)\r\n {\r\n this.Postion.applyMatrix4(mat4);\r\n let roMat = mat4.clone().setPosition(new Vector3());\r\n this.XAxis.applyMatrix4(roMat);\r\n this.YAxis.applyMatrix4(roMat);\r\n this.ZAxis.applyMatrix4(roMat);\r\n return this;\r\n }\r\n\r\n getMatrix4(): Matrix4\r\n {\r\n let m = new Matrix4();\r\n m.makeBasis(this.XAxis, this.YAxis, this.ZAxis);\r\n m.setPosition(this.Postion);\r\n return m;\r\n }\r\n CopyForm(mat4: Matrix4)\r\n {\r\n this.Postion.setFromMatrixPosition(mat4);\r\n mat4.extractBasis(this.XAxis, this.YAxis, this.ZAxis);\r\n return this;\r\n }\r\n\r\n extractBasis(xAxisA: Vector3, yAxisA: Vector3, zAxisA: Vector3)\r\n {\r\n xAxisA.copy(this.XAxis);\r\n yAxisA.copy(this.YAxis);\r\n zAxisA.copy(this.ZAxis);\r\n }\r\n copy(cs: CoordinateSystem): CoordinateSystem\r\n {\r\n this.Postion.copy(cs.Postion);\r\n this.XAxis.copy(cs.XAxis);\r\n this.YAxis.copy(cs.YAxis);\r\n this.ZAxis.copy(cs.ZAxis);\r\n return this;\r\n }\r\n clone()\r\n {\r\n let r = new CoordinateSystem();\r\n r.Postion = this.Postion.clone();\r\n r.XAxis = this.XAxis.clone();\r\n r.YAxis = this.YAxis.clone();\r\n r.ZAxis = this.ZAxis.clone();\r\n return r;\r\n }\r\n}\r\n","import { equaln } from \"../Geometry/GeUtils\";\r\nimport { clamp as CLAMP, FixedNotZero } from \"./Utils\";\r\n\r\nlet abs = Math.abs;\r\nlet acos = Math.acos;\r\nlet acosh = Math.acosh;\r\nlet asin = Math.asin;\r\nlet asinh = Math.asinh;\r\nlet atan = Math.atan;\r\nlet atanh = Math.atanh;\r\nlet atan2 = Math.atan2;\r\nlet ceil = Math.ceil;\r\nlet cbrt = Math.cbrt;\r\nlet expm1 = Math.expm1;\r\nlet clz32 = Math.clz32;\r\nlet cos = Math.cos;\r\nlet cosh = Math.cosh;\r\nlet exp = Math.exp;\r\nlet floor = Math.floor;\r\nlet fround = Math.fround;\r\nlet hypot = Math.hypot;\r\nlet imul = Math.imul;\r\nlet log = Math.log;\r\nlet log1p = Math.log1p;\r\nlet log2 = Math.log2;\r\nlet log10 = Math.log10;\r\nlet max = Math.max;\r\nlet min = Math.min;\r\nlet pow = Math.pow;\r\nlet random = Math.random;\r\nlet round = Math.round;\r\nlet sign = Math.sign;\r\nlet sin = Math.sin;\r\nlet sinh = Math.sinh;\r\nlet sqrt = Math.sqrt;\r\nlet tan = Math.tan;\r\nlet tanh = Math.tanh;\r\nlet trunc = Math.trunc;\r\nlet E = Math.E;\r\nlet LN10 = Math.LN10;\r\nlet LN2 = Math.LN2;\r\nlet LOG10E = Math.LOG10E;\r\nlet LOG2E = Math.LOG2E;\r\nlet PI = Math.PI;\r\nlet SQRT1_2 = Math.SQRT1_2;\r\nlet SQRT2 = Math.SQRT2;\r\nlet clamp = CLAMP;\r\nlet eq = equaln;\r\n\r\nlet OPERATORS = new Set([\"+\", \"-\", \"*\", \"/\"]);\r\n\r\n/**\r\n * eval2(\"+10\", { L: 100 }, \"L\")\r\n * @param expr\r\n * @param [params]\r\n * @param [defaultParam] 当输入 +10 这样的表达式时,设置默认的操作变量\r\n * @returns 计算结果\r\n */\r\nexport function eval2(expr: string, params?: {}, defaultParam?: string): number\r\n{\r\n let code = \"\";\r\n if (params)\r\n for (let name in params)\r\n code += `let ${name} = ${params[name]};`;\r\n\r\n if (defaultParam)\r\n {\r\n expr = expr.trimLeft();\r\n if (expr[0] && OPERATORS.has(expr[0]))\r\n expr = defaultParam + expr;\r\n }\r\n\r\n code += expr;\r\n\r\n let result = eval(code);\r\n\r\n if (typeof result === \"function\")\r\n return result();\r\n\r\n return Number(result);//防止bigint乱入\r\n}\r\n\r\nexport function safeEval(expr: string, params?: {}, defaultParam?: string): number\r\n{\r\n try\r\n {\r\n return eval2(expr, params);\r\n }\r\n catch (error)\r\n {\r\n return NaN;\r\n }\r\n}\r\n\r\nexport function CheckExpr(expr: string, params: any)\r\n{\r\n let resultObj = { res: undefined, error: undefined };\r\n try\r\n {\r\n resultObj.res = eval2(expr, params);\r\n }\r\n catch (error)\r\n {\r\n resultObj.error = error;\r\n }\r\n return resultObj;\r\n}\r\n\r\nconst Reg_Expr = /\\{[^\\}]+\\}/g;\r\n/**解析大括号内的 */\r\nexport function ParseExpr(expr: string, params?: {})\r\n{\r\n let strs = expr.match(Reg_Expr);\r\n if (!strs) return expr;\r\n for (let str of strs)\r\n expr = expr.replace(str, FixedNotZero(safeEval(str.slice(1, -1), params), 2));\r\n return expr;\r\n}\r\n","export enum StoreageKeys\r\n{\r\n IsLogin = \"isLogin\",\r\n PlatSession = \"platSession\",\r\n PlatToken = \"platToken\",\r\n UserName = \"userName\",\r\n UserPhone = \"userPhone\",\r\n RenderType = \"renderType\",\r\n ExactDrill = \"openExactDrill\",\r\n ConfigName = \"configName_\",\r\n IsNewErp = \"isNewErp\",\r\n RoomName = \"roomName\",\r\n LastOpenFileId = \"lastfid\",\r\n Uid = \"uid\",\r\n Goods = \"Goods_\",\r\n DrillTemp = \"drilltemp_\",\r\n DrillReactor = \"drillRreactor\",\r\n kjlConfig = \"kjl\",\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { safeEval } from \"./eval\";\r\nimport { StoreageKeys } from \"./StoreageKeys\";\r\nimport { ObjectId } from \"../DatabaseServices/ObjectId\";\r\n\r\n//仅数字构成的3位字符串(不以0开头)\r\nexport const digitStrReg = /^[^0\\D]\\d{0,2}$/;\r\nexport const commandReg = /[^A-Za-z0-9]/g;\r\n//仅可输入英文\r\nexport const onlyEnExpReg = /[^A-Za-z]/g;\r\n/**替换收口条柜名后缀 */\r\nexport const ClosingStripReg = /[左|右|上]{1}收口$/;\r\nexport const FileFormatReg = /^\\[(\\d+,){5}[(true)|(false)].+\\]$/;\r\n\r\n/**扣除封边是否相连和连接共用精度 */\r\nexport const LINK_FUZZ = 1e-3;\r\n\r\nexport function IsNumber(keyCode: number)\r\n{\r\n return (keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105);\r\n}\r\nexport function IsChar(keyCode: number)\r\n{\r\n return keyCode >= 65 && keyCode <= 90;\r\n}\r\nexport function isLetter(s: string)\r\n{\r\n let code = s.charCodeAt(0);\r\n return (code >= 97 && code <= 122) || (code >= 65 && code <= 90);\r\n}\r\nexport function isNum(s: string)\r\n{\r\n return !isNaN(safeEval(s));\r\n}\r\n\r\nexport function clamp(value: number, min: number, max: number)\r\n{\r\n return Math.max(min, Math.min(max, value));\r\n}\r\n\r\nexport function FixIndex(index: number, arr: Array | number)\r\n{\r\n let count = (arr instanceof Array) ? arr.length : arr;\r\n if (index < 0)\r\n return count + index;\r\n else if (index >= count)\r\n return index - count;\r\n else\r\n return index;\r\n}\r\n//格式化日期\r\nexport function formateDate(date: Date, fmt: string)\r\n{\r\n let o = {\r\n \"M+\": date.getMonth() + 1, //月份\r\n \"d+\": date.getDate(), //日\r\n \"h+\": date.getHours(), //小时\r\n \"m+\": date.getMinutes(), //分\r\n \"s+\": date.getSeconds(), //秒\r\n \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度\r\n \"S\": date.getMilliseconds() //毫秒\r\n };\r\n //如:yyyy\r\n if (/(y+)/.test(fmt))\r\n {\r\n fmt = fmt.replace(RegExp.$1, (date.getFullYear().toString()).substr(4 - RegExp.$1.length));\r\n }\r\n //yyyy-MM-dd hh:mm:ss\r\n for (let k in o)\r\n {\r\n if (new RegExp(\"(\" + k + \")\").test(fmt))\r\n {\r\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((\"00\" + o[k]).substr((\"\" + o[k]).length)));\r\n }\r\n }\r\n return fmt;\r\n}\r\n\r\n//判断v在v1和v2之间.(v1>v2 or v2>v1)\r\nexport function isBetweenNums(v1: number, v2: number, v: number, fuzz = 1e-8)\r\n{\r\n if (v1 > v2) [v1, v2] = [v2, v1];\r\n return equaln(v, clamp(v, v1, v2), fuzz);\r\n}\r\n\r\n//深复制对象数组\r\nexport function sliceDeep(arr: object[], start?: number, end?: number): object[]\r\n{\r\n return arr.slice(start, end).map((obj) => Object.assign({}, obj));\r\n}\r\n\r\nfunction fallbackCopyTextToClipboard(text)\r\n{\r\n let textArea = document.createElement(\"textarea\");\r\n textArea.value = text;\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n try\r\n {\r\n let successful = document.execCommand('copy');\r\n } catch (err)\r\n {\r\n }\r\n document.body.removeChild(textArea);\r\n}\r\nexport async function copyTextToClipboard(text: string)\r\n{\r\n if (!navigator[\"clipboard\"])\r\n {\r\n fallbackCopyTextToClipboard(text);\r\n return;\r\n }\r\n return await navigator[\"clipboard\"].writeText(text);\r\n}\r\n\r\n//ref: https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript\r\n\r\n/**\r\n * 读取剪切板的字符串\r\n */\r\nexport async function readClipboardText()\r\n{\r\n if (navigator[\"clipboard\"])\r\n return await navigator[\"clipboard\"].readText();\r\n return \"\";\r\n}\r\n\r\n//使用定点表示法来格式化一个数,小数点后面不尾随0. 如 FixedNotZero(1.1 , 3) => 1.1\r\nexport function FixedNotZero(v: number | string, fractionDigits: number = 0)\r\n{\r\n if (typeof v === \"string\")\r\n v = parseFloat(v);\r\n if (isNaN(v)) return \"\";\r\n if (equaln(v, 0)) return \"0\";\r\n let str = v.toFixed(fractionDigits);\r\n let commonIndex = str.indexOf(\".\");\r\n if (commonIndex !== -1)\r\n {\r\n let zeroCount = 0;\r\n let strCount = str.length;\r\n for (let l = strCount; l--;)\r\n {\r\n if (str[l] === \"0\")\r\n zeroCount++;\r\n else\r\n break;\r\n }\r\n if (zeroCount > 0)\r\n {\r\n if (zeroCount === (strCount - commonIndex - 1))\r\n zeroCount++;\r\n return str.slice(0, strCount - zeroCount);\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n/**\r\n * To fixed\r\n * @param v\r\n * @param [fractionDigits]\r\n * @returns\r\n */\r\nexport function ToFixed(v: number, fractionDigits: number = 5)\r\n{\r\n if (equaln(v, 0, Math.pow(0.1, fractionDigits))) return \"0\";\r\n return v.toFixed(fractionDigits);\r\n}\r\n\r\nexport function GetEntity(obj: Object3D): Entity | undefined\r\n{\r\n while (obj)\r\n {\r\n if (obj.userData.Entity)\r\n return obj.userData.Entity;\r\n\r\n obj = obj.parent;\r\n }\r\n}\r\n\r\nexport function IsEntity(obj: Object3D): boolean\r\n{\r\n return GetEntity(obj) instanceof Entity;\r\n}\r\n\r\nexport function IsNoErase(id: ObjectId): boolean\r\n{\r\n return id && !id.IsErase;\r\n}\r\n\r\n/**\r\n * 原图地址转换为对应缩略图地址\r\n */\r\nexport function getThumbsUrl(url: string)\r\n{\r\n return url ? url.replace(/\\/\\w*\\.\\w*$/, mat => \"/thumbs\" + mat.replace(\".\", \"_100.\")) : \"\";\r\n}\r\n\r\n/**\r\n * 快速判断a是不是被修改了\r\n */\r\nexport function equalObject(a: Object, b: Object)\r\n{\r\n for (let key in a)\r\n {\r\n if (a[key] !== b[key])\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function cloneObject(a: T): T\r\n{\r\n return Object.assign({}, a);\r\n}\r\n\r\nexport function Uint8ArrayToBase64(bytes: Uint8Array)\r\n{\r\n let binary = \"\";\r\n let len = bytes.byteLength;\r\n for (let i = 0; i < len; i++)\r\n binary += String.fromCharCode(bytes[i]);\r\n return window.btoa(binary);\r\n}\r\n\r\n/**转换服务端获取的文件大小 */\r\nexport function getFileSize(size: number)\r\n{\r\n let units = [\"B\", \"KB\", \"MB\", \"GB\"];\r\n for (let u of units)\r\n {\r\n if (size > 1 && size < 1024)\r\n return FixedNotZero(size, 2) + u;\r\n else\r\n size /= 1024;\r\n }\r\n}\r\n\r\nexport function GetIndexDBID(id: string)\r\n{\r\n return localStorage.getItem(StoreageKeys.Uid) + \":\" + id;\r\n}\r\n\r\nexport function FixDigits(v: number, fractionDigits = 2)\r\n{\r\n return parseFloat(v.toFixed(fractionDigits));\r\n}\r\n","import { Box3, BufferGeometry, Geometry, Line, Matrix4, Mesh, Object3D, Vector, Vector2, Vector3 } from 'three';\r\nimport { ToFixed } from '../Common/Utils';\r\n\r\nexport const IdentityMtx4 = new Matrix4();\r\nexport const ZeroVec = new Vector3();\r\nexport const XAxis = new Vector3(1, 0, 0);\r\nexport const XAxisN = new Vector3(-1, 0, 0);\r\nexport const YAxis = new Vector3(0, 1, 0);\r\nexport const YAxisN = new Vector3(0, -1, 0);\r\nexport const ZAxis = new Vector3(0, 0, 1);\r\n\r\nexport function AsVector2(p: { x: number, y: number; })\r\n{\r\n return new Vector2(p.x, p.y);\r\n}\r\nexport function AsVector3(p: { x: number, y: number, z?: number; })\r\n{\r\n return new Vector3(p.x, p.y, p.z);\r\n}\r\n\r\n/**\r\n * 判断一维线段a和b是否存在交集\r\n */\r\nexport function isIntersect(amin: number, amax: number, bmin: number, bmax: number, eps = 0)\r\n{\r\n return Math.max(amin, bmin) < Math.min(amax, bmax) + eps;\r\n}\r\n\r\nexport function isIntersect2(a1: number, a2: number, b1: number, b2: number, eps = 0)\r\n{\r\n if (a1 > a2) [a1, a2] = [a2, a1];\r\n if (b1 > b2) [b1, b2] = [b2, b1];\r\n return Math.max(a1, b1) < Math.min(a2, b2) + eps;\r\n}\r\n\r\n/**\r\n * 旋转一个点,旋转中心在原点\r\n * @param {Vector3} p 点\r\n * @param {number} a 角度.\r\n * @returns {Vector3} 返回pt不拷贝.\r\n */\r\nexport function rotatePoint(p: Vector3, a: number): Vector3\r\n{\r\n let s = Math.sin(a);\r\n let c = Math.cos(a);\r\n\r\n let x = p.x * c - p.y * s;\r\n let y = p.x * s + p.y * c;\r\n\r\n p.x = x;\r\n p.y = y;\r\n return p;\r\n}\r\n\r\nexport function equaln(v1: number, v2: number, fuzz = 1e-5)\r\n{\r\n return Math.abs(v1 - v2) <= fuzz;\r\n}\r\n\r\nexport function equalnn(dis = 5)\r\n{\r\n let fuzz = 0.1 ** dis;\r\n return function (v1: number, v2: number)\r\n {\r\n return Math.abs(v1 - v2) <= fuzz;\r\n };\r\n}\r\n\r\ninterface P2\r\n{\r\n x: number; y: number;\r\n}\r\n\r\nexport function equalv3(v1: Vector3, v2: Vector3, fuzz = 1e-8)\r\n{\r\n return equaln(v1.x, v2.x, fuzz) && equaln(v1.y, v2.y, fuzz) && equaln(v1.z, v2.z, fuzz);\r\n}\r\nexport function equalv2(v1: P2, v2: P2, fuzz = 1e-8)\r\n{\r\n return equaln(v1.x, v2.x, fuzz) && equaln(v1.y, v2.y, fuzz);\r\n}\r\n\r\n/**\r\n * 按照极坐标的方式移动一个点\r\n *\r\n * @export\r\n * @template\r\n * @param {T} v 向量(2d,3d)\r\n * @param {number} an 角度\r\n * @param {number} dis 距离\r\n * @returns {T}\r\n */\r\nexport function polar(v: T, an: number, dis: number): T\r\n{\r\n v.x += Math.cos(an) * dis;\r\n v.y += Math.sin(an) * dis;\r\n return v;\r\n}\r\n\r\nexport function angle(v: Vector3 | Vector2): number\r\n{\r\n let angle = Math.atan2(v.y, v.x);\r\n if (equaln(angle, 0, 1e-8)) return 0;\r\n if (angle < 0) angle += Math.PI * 2;\r\n return angle;\r\n}\r\n\r\n/**\r\n * 求两个向量的夹角,顺时针为负,逆时针为正\r\n *\r\n * @param {Vector3} v1\r\n * @param {Vector3} v2\r\n * @param {Vector3} [ref] 参考向量,如果为世界坐标系则为0,0,1\r\n * @returns\r\n */\r\nexport function angleTo(v1: Vector3, v2: Vector3, ref: Vector3 = ZAxis): number\r\n{\r\n if (v1.equals(ZeroVec) || v2.equals(ZeroVec))\r\n return 0;\r\n\r\n v1 = v1.clone();\r\n v2 = v2.clone();\r\n\r\n if (ref !== ZAxis && !ref.equals(ZAxis))\r\n {\r\n ref = ref.clone();\r\n //任意轴坐标系. 使用相机的构造矩阵.\r\n ref.multiplyScalar(-1);\r\n let up = getLoocAtUpVec(ref);\r\n let refOcs = new Matrix4();\r\n refOcs.lookAt(ZeroVec, ref, up);\r\n let refOcsInv = new Matrix4().getInverse(refOcs);\r\n v1.applyMatrix4(refOcsInv);\r\n v2.applyMatrix4(refOcsInv);\r\n v1.z = 0;\r\n v2.z = 0;\r\n }\r\n\r\n if (v1.equals(ZeroVec) || v2.equals(ZeroVec))//修复,这里有可能被更改为0\r\n return 0;\r\n\r\n //平行的向量返回0向量,不需要归一化\r\n let cv = new Vector3().crossVectors(v1, v2);\r\n if (equalv3(cv, ZeroVec))\r\n return 0;\r\n\r\n cv.normalize();\r\n return equaln(cv.z, 0) ? v1.angleTo(v2) : v1.angleTo(v2) * cv.z;\r\n}\r\n\r\nexport function getLoocAtUpVec(dir: Vector3): Vector3\r\n{\r\n if (dir.equals(ZeroVec))\r\n {\r\n throw (\"zero vector\");\r\n }\r\n let norm = dir.clone().normalize();\r\n if (norm.equals(ZAxis))\r\n {\r\n return new Vector3(0, 1, 0);\r\n }\r\n else if (norm.equals(ZAxis.clone().negate()))\r\n {\r\n return new Vector3(0, -1, 0);\r\n }\r\n else\r\n {\r\n let xv: Vector3 = new Vector3();\r\n xv.crossVectors(ZAxis, norm);\r\n\r\n let up = new Vector3();\r\n up.crossVectors(norm, xv);\r\n return up;\r\n }\r\n}\r\n\r\nexport function createLookAtMat4(dir: Vector3): Matrix4\r\n{\r\n let up = getLoocAtUpVec(dir);\r\n let mat = new Matrix4();\r\n mat.lookAt(ZeroVec, dir, up);\r\n return mat;\r\n}\r\n\r\n/**\r\n * 判断2个向量是不是平行,尽量传入单位向量,才能保证计算精度\r\n */\r\nexport function isParallelTo(v1: Vector3, v2: Vector3, fuzz = 1e-8): boolean\r\n{\r\n return v1.clone().cross(v2).lengthSq() < fuzz;\r\n}\r\n\r\n/**\r\n * 垂直向量\r\n */\r\nexport function isPerpendicularityTo(v1: Vector3, v2: Vector3, fuzz = 1e-8)\r\n{\r\n return equaln(v1.dot(v2), 0, fuzz);\r\n}\r\n\r\nexport function ptToString(v: Vector3, fractionDigits: number = 3): string\r\n{\r\n return v.toArray().map(o => ToFixed(o, fractionDigits)).join(\",\");\r\n}\r\n\r\nexport function midPoint(v1: Vector3, v2: Vector3): Vector3\r\n{\r\n return v1.clone().add(v2).multiplyScalar(0.5);\r\n}\r\nexport function midPoint2(v1: Vector2, v2: Vector2): Vector2\r\n{\r\n return v1.clone().add(v2).multiplyScalar(0.5);\r\n}\r\n\r\n/**\r\n * 获得Three对象的包围盒.\r\n * @param obj\r\n * @param [updateMatrix] 是否应该更新对象矩阵\r\n * @returns box\r\n */\r\nexport function GetBox(obj: Object3D, updateMatrix?: boolean): Box3\r\n{\r\n let box = new Box3();\r\n if (updateMatrix) obj.updateMatrixWorld(false);\r\n if (!obj.visible) return box;\r\n\r\n obj.traverseVisible(o =>\r\n {\r\n if (!o.visible) return;\r\n //@ts-ignore\r\n let geo = o.geometry as BufferGeometry;\r\n if (geo)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n let geoBox = geo.boundingBox.clone().applyMatrix4(o.matrixWorld);\r\n if (geoBox.max.z > 1e5)\r\n console.log();\r\n box.union(geoBox);\r\n }\r\n });\r\n return box;\r\n}\r\n\r\nexport function GetBoxArr(arr: Array): Box3\r\n{\r\n let box = new Box3();\r\n for (let o of arr)\r\n {\r\n let b = GetBox(o);\r\n if (!b.isEmpty())\r\n box.union(b);\r\n }\r\n return box;\r\n}\r\n\r\nexport function MoveMatrix(v: Vector3): Matrix4\r\n{\r\n return new Matrix4().setPosition(v);\r\n}\r\n\r\n//获得输入点在2线组成的4个区间的位置\r\nexport function getPtPostion(sp: Vector3, ep: Vector3, c: Vector3, inPt: Vector3)\r\n{\r\n let l1 = sp.clone().sub(c);\r\n let l2 = ep.clone().sub(c);\r\n let l3 = l1.clone().negate();\r\n let l4 = l2.clone().negate();\r\n let inputLine = inPt.clone().sub(c);\r\n let ang1 = angleTo(l1, l2);\r\n let ang2 = Math.PI;\r\n let ang3 = ang2 + Math.abs(ang1);\r\n let inputAng = angleTo(l1, inputLine);\r\n if (ang1 * inputAng < 0)\r\n inputAng = (Math.PI * 2 - Math.abs(inputAng));\r\n ang1 = Math.abs(ang1);\r\n inputAng = Math.abs(inputAng);\r\n if (inputAng <= ang1)\r\n return { sp, ep };\r\n else if (inputAng > ang1 && inputAng <= ang2)\r\n return { sp: c.clone().add(l3), ep };\r\n else if (inputAng > ang2 && inputAng <= ang3)\r\n return { sp: c.clone().add(l3), ep: c.clone().add(l4) };\r\n else\r\n return { sp, ep: c.clone().add(l4) };\r\n}\r\nexport function angleAndX(v: Vector3 | Vector2)\r\n{\r\n return v.x ? Math.atan(v.y / v.x) : Math.PI / 2;\r\n}\r\n\r\n/**\r\n * 将角度调整为0-2pi之间\r\n */\r\nexport function clampRad(an: number)\r\n{\r\n an = an % (Math.PI * 2);\r\n if (an < 0) an += Math.PI * 2;\r\n return an;\r\n}\r\n\r\nexport function updateGeometry(l: Line | Mesh, geometry: Geometry | BufferGeometry)\r\n{\r\n let geo = l.geometry as Geometry;\r\n geo.dispose();\r\n l.geometry = geometry;\r\n geometry.computeBoundingSphere();\r\n}\r\n\r\nexport function UpdateBoundingSphere(obj: Object3D)\r\n{\r\n //@ts-ignore\r\n let geo = obj.geometry as Geometry;\r\n if (geo)\r\n geo.computeBoundingSphere();\r\n}\r\n\r\n\r\nexport type compareVectorFn = (v1: Vector, v2: Vector3) => number;\r\n\r\nconst comparePointCache: Map = new Map();\r\n\r\n/**\r\n * 构建返回一个用来排序的函数.根据key创建排序规则.\r\n *\r\n * 当key = \"xyz\" 时,点集按 x从小到大,y从小到大 z从小到大\r\n * key = \"X\" 时,点集按 x从大到小\r\n * 以此类推.\r\n *\r\n * 例子:\r\n * let pts:Vector3[] =...;\r\n * pts.sort(comparePoint(\"x\")); //x从小到大排序\r\n * pts.sort(comparePoint(\"zX\")); //z从小到大 x从大到小\r\n *\r\n * @export\r\n * @param {string} sortKey\r\n * @returns {compareVectorFn}\r\n */\r\nexport function comparePoint(sortKey: string): compareVectorFn\r\n{\r\n if (comparePointCache.has(sortKey))\r\n return comparePointCache.get(sortKey);\r\n\r\n let sortIndex = [];\r\n\r\n const keys = ['x', 'X', 'y', 'Y', 'z', 'Z'];\r\n for (let char of sortKey)\r\n {\r\n let index = keys.indexOf(char);\r\n\r\n let i2 = index / 2;\r\n let ci = Math.floor(i2);\r\n sortIndex.push([ci, i2 > ci ? 1 : -1]);\r\n }\r\n\r\n let compareFunction = (v1: Vector, v2: Vector3): number =>\r\n {\r\n if (!v1) return -1;\r\n if (!v2) return 1;\r\n for (let s of sortIndex)\r\n {\r\n let vv1 = v1.getComponent(s[0]);\r\n let vv2 = v2.getComponent(s[0]);\r\n if (equaln(vv1, vv2)) continue;\r\n if (vv2 > vv1) return s[1];\r\n else return -s[1];\r\n }\r\n return 0;\r\n };\r\n\r\n comparePointCache.set(sortKey, compareFunction);\r\n return compareFunction;\r\n}\r\n\r\n/**\r\n *计算各轴旋转角度\r\n */\r\nexport function GetEulerAngle(x: Vector3, y: Vector3, z: Vector3)\r\n{\r\n let roY = Math.atan2(x.z, Math.sqrt(x.x ** 2 + x.y ** 2)) * -180 / Math.PI;\r\n let roZ = Math.atan2(x.y, x.x);\r\n let vec = YAxis.clone();\r\n let roMat = new Matrix4().makeRotationZ(roZ);\r\n roZ *= 180 / Math.PI;\r\n vec.applyMatrix4(roMat);\r\n let roX = Math.atan2(z.dot(vec), y.dot(vec)) * -180 / Math.PI;\r\n return { roX, roY, roZ };\r\n}\r\n\r\n/**\r\n * 方形框捕捉\r\n * @param sqCenter 正方形点\r\n * @param snapPt 被捕捉的点\r\n * @param size 捕捉框大小\r\n */\r\nexport function SnapPoint(sqCenter: Vector3, snapPt: Vector3, size: number): boolean\r\n{\r\n return Math.abs(sqCenter.x - snapPt.x) < size\r\n && Math.abs(sqCenter.y - snapPt.y) < size;\r\n}\r\n\r\nexport function SelectNearP(pts: Vector3[], refPt: Vector3): Vector3\r\n{\r\n if (pts.length > 1)\r\n {\r\n let dist1 = refPt.distanceToSquared(pts[0]);\r\n let dist2 = refPt.distanceToSquared(pts[1]);\r\n return dist1 <= dist2 ? pts[0] : pts[1];\r\n }\r\n return pts[0];\r\n}\r\n\r\n/**n是否在AB之间,fuzz 若为负的,允许相等 */\r\nexport function IsBetweenA2B(n: number, A: number, B: number, fuzz = -1e-8)\r\n{\r\n return n > A + fuzz && n < B - fuzz;\r\n}\r\n\r\n/** 矩阵是世界坐标系 */\r\nexport function MatrixIsIdentityCS(mtx: Matrix4): boolean\r\n{\r\n return mtx.elements[0] === 1 && mtx.elements[5] === 1 && mtx.elements[10] === 1 && mtx.elements[12] === 0 && mtx.elements[13] === 0 && mtx.elements[14] === 0;\r\n}\r\n","import { Matrix4, Vector2, Vector3 } from 'three';\r\nimport { CoordinateSystem } from '../Geometry/CoordinateSystem';\r\nimport { equaln, isParallelTo } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 设置矩阵的某列的向量\r\n * @param {Matrix4} mat 矩阵\r\n * @param {number} col 列索引,0x 1y 2z 3org\r\n * @param {Vector3} v 向量或点\r\n */\r\nexport function matrixSetVector(mat: Matrix4, col: number, v: Vector3)\r\n{\r\n let index = col * 4;\r\n mat.elements[index] = v.x;\r\n mat.elements[index + 1] = v.y;\r\n mat.elements[index + 2] = v.z;\r\n}\r\n\r\n/**\r\n * 返回矩阵,该坐标系将坐标系与原点的坐标系映射为坐标系,\r\n * 并将坐标系与X轴坐标系,\r\n * Y轴坐标轴以及Z轴坐标系统之间的坐标系统坐标系统的原点坐标系和原点坐标系统坐标轴的坐标系分别设置为XAxis,YAxis和ZAxis\r\n * @returns {Matrix4} 返回新的矩阵\r\n */\r\nexport function matrixAlignCoordSys(matrixFrom: Matrix4, matrixTo: Matrix4): Matrix4\r\n{\r\n return new Matrix4().getInverse(matrixTo).multiply(matrixFrom);\r\n}\r\n\r\n/**\r\n * 判断2个矩形共面\r\n * @param {Matrix4} matrixFrom\r\n * @param {Matrix4} matrixTo\r\n * @returns {boolean} 2个矩阵共面\r\n */\r\nexport function matrixIsCoplane(matrixFrom: Matrix4, matrixTo: Matrix4, fuzz = 1e-5): boolean\r\n{\r\n let nor1 = new Vector3().setFromMatrixColumn(matrixFrom, 2);\r\n let nor2 = new Vector3().setFromMatrixColumn(matrixTo, 2);\r\n\r\n //法线共面\r\n if (!isParallelTo(nor1, nor2))\r\n return false;\r\n\r\n //高共面\r\n let pt = new Vector3().setFromMatrixPosition(matrixTo);\r\n //变换到自身对象坐标系.\r\n pt.applyMatrix4(new Matrix4().getInverse(matrixFrom));\r\n\r\n return equaln(pt.z, 0, fuzz);\r\n}\r\n\r\n//构造缩放矩阵\r\nexport function matrixScale(scale: number, center?: Vector3)\r\n{\r\n let scaleMat = new Matrix4().makeScale(scale, scale, scale);\r\n if (center)\r\n scaleMat.setPosition(center.clone().multiplyScalar(1 - scale));\r\n return scaleMat;\r\n}\r\n\r\n/**\r\n * 设置旋转矩阵,不改变矩阵的基点\r\n */\r\nexport function setRotationOnAxis(mtx: Matrix4, axis: Vector3, ro: number)\r\n{\r\n let pos = new Vector3().setFromMatrixPosition(mtx);\r\n mtx.makeRotationAxis(axis, ro);\r\n mtx.setPosition(pos);\r\n return mtx;\r\n}\r\n\r\n/**\r\n * 修正镜像后矩阵\r\n */\r\nexport function reviseMirrorMatrix(mtx: Matrix4): Matrix4\r\n{\r\n let cs = new CoordinateSystem().applyMatrix4(mtx);\r\n cs.YAxis.negate();\r\n mtx.copy(cs.getMatrix4());\r\n return mtx;\r\n}\r\n\r\nlet cacheVec: Vector3;\r\nexport function Vector2ApplyMatrix4(mtx: Matrix4, vec: Vector2)\r\n{\r\n if (!cacheVec) cacheVec = new Vector3();\r\n\r\n cacheVec.x = vec.x;\r\n cacheVec.y = vec.y;\r\n\r\n cacheVec.applyMatrix4(mtx);\r\n\r\n vec.x = cacheVec.x;\r\n vec.y = cacheVec.y;\r\n}\r\nexport function GetMirrorMat(v: Vector3)\r\n{\r\n let mirrorMat = new Matrix4();\r\n let xAxis = new Vector3(1 - 2 * v.x ** 2, -2 * v.x * v.y, -2 * v.x * v.z);\r\n let yAxis = new Vector3(-2 * v.x * v.y, 1 - 2 * v.y ** 2, -2 * v.y * v.z);\r\n let zAxis = new Vector3(-2 * v.x * v.z, -2 * v.y * v.z, 1 - 2 * v.z ** 2);\r\n mirrorMat.makeBasis(xAxis, yAxis, zAxis);\r\n return mirrorMat;\r\n}\r\n\r\nexport function ApplyMatrix4IgnorePosition(vec: { x: number, y: number, z: number; }, m: Matrix4)\r\n{\r\n let { x, y, z } = vec;\r\n let e = m.elements;\r\n vec.x = e[0] * x + e[4] * y + e[8] * z;\r\n vec.y = e[1] * x + e[5] * y + e[9] * z;\r\n vec.z = e[2] * x + e[6] * y + e[10] * z;\r\n return vec;\r\n}\r\n\r\n/**\r\n * 把变换矩阵展平成2d矩阵,避免出现三维坐标.\r\n */\r\nexport function MatrixPlanarizere(mtx: Matrix4, z0 = true)\r\n{\r\n mtx.elements[2] = 0;\r\n mtx.elements[6] = 0;\r\n mtx.elements[8] = 0;\r\n mtx.elements[9] = 0;\r\n mtx.elements[10] = Math.sign(mtx.elements[10]);\r\n\r\n if (z0)\r\n mtx.elements[14] = 0;\r\n\r\n return mtx;\r\n}\r\n\r\nexport const tempMatrix1 = new Matrix4;\r\n\r\nexport const ZMirrorMatrix = GetMirrorMat(new Vector3(0, 0, 1));\r\n","\r\n\r\n\r\nexport enum Status\r\n{\r\n False = 0,\r\n True = 1,\r\n Canel = -1,\r\n\r\n ConverToCircle = 101,\r\n\r\n DuplicateRecordName = 102,\r\n}\r\n\r\nexport enum UpdateDraw\r\n{\r\n None = 0,\r\n Matrix = 1,\r\n Geometry = 2,\r\n Material = 4,\r\n All = ~(~0 << 6)\r\n}\r\n\r\n/**\r\n * WblockClne时,遇到重复记录的操作方式\r\n */\r\nexport enum DuplicateRecordCloning\r\n{\r\n Ignore = 1,\r\n Replace = 2,\r\n Rename = 3,\r\n}\r\n","\r\n/**\r\n * 场景的渲染类型.\r\n */\r\nexport enum RenderType\r\n{\r\n /**\r\n * 线框模式\r\n */\r\n Wireframe = 1,\r\n\r\n /**\r\n * 概念\r\n */\r\n Conceptual = 2,\r\n\r\n\r\n /**\r\n * 物理着色PBR\r\n */\r\n Physical = 3,\r\n\r\n Jig = 4,\r\n Print = 5,\r\n /**物理带线框 */\r\n Physical2 = 6,\r\n Edge = 7,\r\n\r\n /******************************************** 在视口时的渲染模式 */\r\n /**\r\n * 线框模式\r\n */\r\n WireframePrint = 101,\r\n\r\n /**\r\n * 概念\r\n */\r\n ConceptualPrint = 102,\r\n\r\n\r\n /**\r\n * 物理着色PBR\r\n */\r\n PhysicalPrint = 103,\r\n\r\n JigPrint = 104,\r\n PrintPrint = 105,\r\n /**物理带线框 */\r\n Physical2Print = 106,\r\n}\r\n","export enum AAType\r\n{\r\n FXAA = 0,//快速近似抗锯齿(性能更好)\r\n SMAA = 1,//多重采样抗锯齿(质量更好)\r\n}\r\n\r\nexport enum ViewDirType\r\n{\r\n FS = 0,\r\n YAS = 1,\r\n ZS = 2,\r\n YS = 3,\r\n QS = 4,\r\n HS = 5,\r\n XN = 6,\r\n}\r\n","import { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { DrillingOption } from \"../UI/Store/drillInterface\";\r\nimport { observable, reaction, toJS } from \"mobx\";\r\nimport { StoreageKeys } from \"../Common/StoreageKeys\";\r\nimport { IWineRackOption } from \"../UI/Store/WineRackInterface\";\r\nimport { IBaseOption, IGrooveOption } from \"../UI/Store/BoardInterface\";\r\nimport { IConfigStore } from \"../UI/Store/BoardStore\";\r\nimport { IConfigOption } from \"../UI/Components/Board/UserConfig\";\r\nimport { AAType, ViewDirType } from \"../Common/SystemEnum\";\r\n\r\nexport interface IMaxSizeProps extends IBaseOption\r\n{\r\n height: number;\r\n width: number;\r\n isShow: boolean;\r\n}\r\n\r\nexport interface ISystemConfig extends IBaseOption\r\n{\r\n aaType: AAType;\r\n maxHightightCount: number;\r\n snapSize: number;\r\n background: string;\r\n layoutBackground: string;\r\n}\r\n\r\nexport interface ICursorConfig extends IBaseOption\r\n{\r\n D2: number;\r\n D3: number;\r\n SquareSize: number;\r\n}\r\n\r\nexport class UserConfig implements IConfigStore\r\n{\r\n private readonly _version = 13;\r\n _renderType: RenderType = RenderType.Wireframe;\r\n @observable maxSize: IMaxSizeProps = {\r\n isShow: false,\r\n height: 2440,\r\n width: 1220,\r\n };\r\n @observable private _drillConfigs: Map = new Map();\r\n @observable openDrillingReactor = true;\r\n @observable openAutoCuttingReactor = true;\r\n /**打开将检测排钻是否在板件内*/\r\n @observable openExactDrill = true;\r\n winerackConfig: IWineRackOption;\r\n userConfigName: { [key: string]: string; } = {};\r\n private modeling2HoleRad = 20; //圆造型小于等于该值拆成孔数据\r\n @observable isAdmin = false;\r\n isMaster = false;\r\n rights = [];\r\n @observable kjlConfig: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"1\",\r\n };\r\n @observable SystemConfig: ISystemConfig = {\r\n maxHightightCount: 15000,\r\n snapSize: 15,\r\n aaType: AAType.FXAA,\r\n background: \"#000000\",\r\n layoutBackground: \"#cccccc\",\r\n };\r\n @observable viewDirType: ViewDirType = ViewDirType.XN;\r\n @observable useCtrlRotate = true;\r\n @observable cursorSize: ICursorConfig = {\r\n D2: 1000,\r\n D3: 100,\r\n SquareSize: 10,\r\n };\r\n @observable autoSaveConfig = {\r\n enable: true,\r\n time: 1,\r\n };\r\n @observable showLines = false;\r\n @observable keepConfig = false;\r\n @observable autoClearHistory = true;\r\n @observable chaidanOption = {\r\n changXiuBian: 6,\r\n duanXiuBian: 6,\r\n useDefaultRad: false,\r\n radius: 2.5,\r\n modeling2HoleRad: 20, //圆造型小于等于该值拆成孔数据\r\n isCheckInterfere: false,\r\n noModeingData: \"\", //非造型遭数据\r\n };\r\n @observable autoLines = false;\r\n dimTextHeight = 60;\r\n\r\n @observable performanceConfig = {\r\n fakersweep: false,\r\n disablerefcut: false,\r\n disablecheckgroove: false,\r\n };\r\n lineWidth = 2; //打印线框\r\n @observable forceFilterPxl = true;\r\n checkSealing = false;\r\n sealingColorMap: [string, string][] = [];\r\n constructor()\r\n {\r\n this.Init();\r\n }\r\n Init()\r\n {\r\n let type = Number(localStorage.getItem(StoreageKeys.RenderType));\r\n if (type && type !== RenderType.Edge)\r\n this._renderType = type;\r\n }\r\n set RenderType(t: RenderType)\r\n {\r\n if (t !== this._renderType)\r\n {\r\n this._renderType = t;\r\n this.checkSealing = t === RenderType.Edge;\r\n this.SetRenderTypeEvent();\r\n\r\n localStorage.setItem(StoreageKeys.RenderType, t.toString());\r\n }\r\n }\r\n\r\n get RenderType() { return this._renderType; }\r\n\r\n SetRenderTypeEvent() { }\r\n get DrillConfigs()\r\n {\r\n return this._drillConfigs || new Map();\r\n }\r\n set DrillConfigs(config: Map)\r\n {\r\n observable(this._drillConfigs).replace(config);\r\n this.SetDrillConfigsEvent();\r\n }\r\n SetDrillConfigsEvent() { }\r\n configName = \"default\";\r\n configsNames: string[] = [];\r\n InitOption()\r\n {\r\n this.openDrillingReactor = true;\r\n this.openAutoCuttingReactor = true;\r\n Object.assign(this.maxSize, {\r\n height: 2440,\r\n width: 1220\r\n });\r\n Object.assign(this.kjlConfig, {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"1\"\r\n });\r\n Object.assign(this.chaidanOption, {\r\n changXiuBian: 6,\r\n duanXiuBian: 6,\r\n useDefaultRad: false,\r\n radius: 2.5,\r\n modeling2HoleRad: 20,\r\n noModeingData: \"\",\r\n });\r\n this.dimTextHeight = 60;\r\n }\r\n SaveConfig()\r\n {\r\n return {\r\n option: {\r\n version: this._version,\r\n openDrillingReactor: this.openDrillingReactor,\r\n openAutoCuttingReactor: this.openAutoCuttingReactor,\r\n maxSize: toJS(this.maxSize),\r\n kjlConfig: toJS(this.kjlConfig),\r\n systemConfig: toJS(this.SystemConfig),\r\n viewDirType: this.viewDirType,\r\n useCtrlRotate: this.useCtrlRotate,\r\n cursorSize: toJS(this.cursorSize),\r\n autoSaveConfig: toJS(this.autoSaveConfig),\r\n showLines: this.showLines,\r\n keepConfig: this.keepConfig,\r\n autoClearHistory: this.autoClearHistory,\r\n chaidanOption: toJS(this.chaidanOption),\r\n autoLines: this.autoLines,\r\n dimTextHeight: this.dimTextHeight,\r\n lineWidth: this.lineWidth,\r\n forceFilterPxl: this.forceFilterPxl,\r\n checkSealing: this.checkSealing,\r\n sealingColorMap: this.sealingColorMap\r\n }\r\n };\r\n }\r\n UpdateOption(config: IConfigOption)\r\n {\r\n this.openDrillingReactor = config.option.openDrillingReactor;\r\n this.openAutoCuttingReactor = config.option.openAutoCuttingReactor;\r\n Object.assign(this.maxSize, config.option.maxSize);\r\n Object.assign(this.kjlConfig, config.option.kjlConfig);\r\n this.modeling2HoleRad = config.option.modeling2HoleRad;\r\n\r\n if (config.option.version > 1)\r\n {\r\n Object.assign(this.SystemConfig, config.option.systemConfig);\r\n }\r\n if (config.option.version > 2)\r\n {\r\n this.viewDirType = config.option.viewDirType;\r\n this.useCtrlRotate = config.option.useCtrlRotate;\r\n }\r\n\r\n if (config.option.version > 3)\r\n {\r\n Object.assign(this.cursorSize, config.option.cursorSize);\r\n }\r\n if (config.option.version > 4)\r\n {\r\n Object.assign(this.autoSaveConfig, config.option.autoSaveConfig);\r\n }\r\n if (config.option.version > 5)\r\n {\r\n this.showLines = config.option.showLines;\r\n }\r\n if (config.option.version > 6)\r\n {\r\n this.keepConfig = config.option.keepConfig;\r\n }\r\n if (config.option.version > 7)\r\n {\r\n this.autoClearHistory = config.option.autoClearHistory;\r\n }\r\n if (config.option.version > 8)\r\n {\r\n config.option.chaidanOption.modeling2HoleRad = Number(config.option.chaidanOption.modeling2HoleRad);\r\n Object.assign(this.chaidanOption, config.option.chaidanOption);\r\n this.autoLines = config.option.autoLines;\r\n }\r\n else\r\n this.chaidanOption.modeling2HoleRad = this.modeling2HoleRad;\r\n\r\n if (config.option.version > 9)\r\n this.dimTextHeight = config.option.dimTextHeight;\r\n if (config.option.version > 10)\r\n this.lineWidth = config.option.lineWidth;\r\n\r\n if (config.option.version > 11)\r\n this.forceFilterPxl = config.option.forceFilterPxl;\r\n\r\n if (config.option.version > 12)\r\n {\r\n this.checkSealing = config.option.checkSealing;\r\n this.sealingColorMap = config.option.sealingColorMap;\r\n }\r\n }\r\n}\r\n\r\nexport const userConfig = new UserConfig();\r\n","import { Vector3, Box3 } from 'three';\r\n\r\n/**\r\n * 盒子的切割类型\r\n */\r\nexport enum SplitType\r\n{\r\n X = 0,\r\n Y = 1,\r\n Z = 2,\r\n}\r\n\r\n/**\r\n * 扩展Box3,添加切割方法,体积等\r\n */\r\nexport class Box3Ext extends Box3\r\n{\r\n TempData: any;\r\n get Volume()\r\n {\r\n let size = this.getSize(new Vector3());\r\n return size.x * size.y * size.z;\r\n }\r\n\r\n //每个轴的大小必须大于最小的size\r\n isSolid(minSize = 1)\r\n {\r\n return this.getSize(new Vector3()).toArray().every(x => x > minSize);\r\n }\r\n substract(b: Box3Ext, spaceType: SplitType)\r\n {\r\n let interBox = this.clone().intersect(b) as this;\r\n if (interBox.isEmpty() || !interBox.isSolid())\r\n return [this];\r\n\r\n let p1 = interBox.min.clone().setComponent(spaceType, this.min.getComponent(spaceType));\r\n let p2 = interBox.max.clone().setComponent(spaceType, interBox.min.getComponent(spaceType));\r\n\r\n let p3 = interBox.min.clone().setComponent(spaceType, interBox.max.getComponent(spaceType));\r\n let p4 = interBox.max.clone().setComponent(spaceType, this.max.getComponent(spaceType));\r\n\r\n return [\r\n new Box3Ext(p1, p2),\r\n new Box3Ext(p3, p4)\r\n ].filter(b => b.isSolid());\r\n }\r\n clampSpace(b2: Box3Ext, splitType: SplitType)\r\n {\r\n let interBox = this.clone();\r\n interBox.min.max(b2.min);\r\n interBox.max.min(b2.max);\r\n interBox.min.setComponent(splitType, Math.min(this.max.getComponent(splitType), b2.max.getComponent(splitType)));\r\n interBox.max.setComponent(splitType, Math.max(this.min.getComponent(splitType), b2.min.getComponent(splitType)));\r\n return interBox;\r\n }\r\n intersectsBox(box: Box3, fuzz = 1e-8): boolean\r\n {\r\n return IntersectsBox(this, box, fuzz);\r\n }\r\n}\r\n\r\nexport function IntersectsBox(box1: Box3, box2: Box3, fuzz = 1e-6): boolean\r\n{\r\n return box2.max.x < box1.min.x - fuzz || box2.min.x > box1.max.x + fuzz ||\r\n box2.max.y < box1.min.y - fuzz || box2.min.y > box1.max.y + fuzz ||\r\n box2.max.z < box1.min.z - fuzz || box2.min.z > box1.max.z + fuzz ? false : true;\r\n}\r\n\r\n/**盒子二维面是否相交 */\r\nexport function IntersectBox2(box1: Box3, box2: Box3, fuzz = 1e-3)\r\n{\r\n return box2.max.x < box1.min.x - fuzz || box2.min.x > box1.max.x + fuzz ||\r\n box2.max.y < box1.min.y - fuzz || box2.min.y > box1.max.y + fuzz ? false : true;\r\n}\r\n","import { Box3, Material, Matrix3, Matrix4, MeshStandardMaterial, Object3D, Vector3 } from 'three';\r\nimport { iaop } from 'xaop';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { matrixIsCoplane, MatrixPlanarizere } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { userConfig } from '../../Editor/UserConfig';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { equaln, equalv3, UpdateBoundingSphere, IdentityMtx4 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { CADObject } from '../CADObject';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { PhysicalMaterialRecord } from '../PhysicalMaterialRecord';\r\n\r\n/**\r\n * Entity 是所有图元的基类,绘制的实体都集成该类.\r\n */\r\n@Factory\r\nexport class Entity extends CADObject\r\n{\r\n\r\n IsEmbedEntity = false;\r\n\r\n /**\r\n * 该实体的只有一个渲染类型,任何渲染类型都一个样\r\n */\r\n protected OnlyRenderType = false;\r\n protected _CacheDrawObject = new Map();\r\n //材质id\r\n protected materialId: ObjectId;\r\n protected _Color: number = 7;\r\n\r\n //自身坐标系\r\n protected _Matrix = new Matrix4();\r\n\r\n //模块空间的标系\r\n protected _SpaceOCS: Matrix4 = new Matrix4();\r\n get SpaceOCS()\r\n {\r\n return this._SpaceOCS.clone();\r\n }\r\n get SpaceOCSInv()\r\n {\r\n return new Matrix4().getInverse(this._SpaceOCS);\r\n }\r\n set SpaceOCS(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SpaceOCS.copy(m);\r\n }\r\n\r\n protected _Visible = true;\r\n\r\n @AutoRecord GroupId: ObjectId;\r\n @AutoRecord Template: ObjectId;\r\n //加工组\r\n @AutoRecord ProcessingGroupList: ObjectId[] = [];\r\n\r\n /**\r\n * 当AutoUpdate为false时,记录需要更新的标志.\r\n * 以便延迟更新时找到相应的更新标志.\r\n */\r\n NeedUpdateFlag: UpdateDraw = UpdateDraw.None;\r\n AutoUpdate = true;\r\n\r\n set Material(materialId: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.materialId = materialId;\r\n this.Update();\r\n }\r\n\r\n get Material()\r\n {\r\n return this.materialId;\r\n }\r\n\r\n set ColorIndex(color: number)\r\n {\r\n if (color !== this._Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Color = color;\r\n this.Update(UpdateDraw.Material);\r\n }\r\n }\r\n get ColorIndex(): number\r\n {\r\n return this._Color;\r\n }\r\n /**\r\n * 炸开实体\r\n */\r\n Explode(): Entity[] { return []; }\r\n\r\n /**\r\n * 返回对象的包围框.\r\n */\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3();\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let mtxBak = this._Matrix;\r\n this._Matrix = IdentityMtx4;\r\n let box = this.BoundingBox;\r\n this._Matrix = mtxBak;\r\n return new Box3Ext().copy(box);\r\n }\r\n\r\n GetBoundingBoxInMtx(mtx: Matrix4): Box3Ext\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCS.premultiply(mtx));\r\n }\r\n\r\n get BoundingBoxInSpaceCS(): Box3Ext\r\n {\r\n return this.GetBoundingBoxInMtx(this.SpaceOCSInv);\r\n }\r\n\r\n get OCS(): Matrix4\r\n {\r\n return this._Matrix.clone();\r\n }\r\n\r\n get OCSNoClone()\r\n {\r\n return this._Matrix;\r\n }\r\n\r\n //直接设置实体的矩阵,谨慎使用该函数,没有更新实体.\r\n set OCS(mat4: Matrix4)\r\n {\r\n this._Matrix.copy(mat4);\r\n }\r\n get Normal(): Vector3\r\n {\r\n return new Vector3().setFromMatrixColumn(this._Matrix, 2);\r\n }\r\n get Position(): Vector3\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n\r\n set Position(pt: Vector3)\r\n {\r\n let moveX = pt.x - this._Matrix.elements[12];\r\n let moveY = pt.y - this._Matrix.elements[13];\r\n let moveZ = pt.z - this._Matrix.elements[14];\r\n\r\n if (moveX === 0 && moveY === 0 && moveZ === 0) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(pt);\r\n this._SpaceOCS.elements[12] += moveX;\r\n this._SpaceOCS.elements[13] += moveY;\r\n this._SpaceOCS.elements[14] += moveZ;\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n\r\n //Z轴归0\r\n Z0()\r\n {\r\n if (this._Matrix.elements[14] === 0) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Matrix.elements[14] = 0;\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\r\n }\r\n\r\n //坐标系二维化\r\n MatrixPlanarizere()\r\n {\r\n let z = this._Matrix.elements[10];\r\n if (equaln(Math.abs(z), 1, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n MatrixPlanarizere(this._Matrix, false);\r\n }\r\n return this;\r\n }\r\n\r\n get OCSInv(): Matrix4\r\n {\r\n return new Matrix4().getInverse(this._Matrix);\r\n }\r\n\r\n /**\r\n * 与指定实体是否共面.\r\n */\r\n IsCoplaneTo(e: Entity): boolean\r\n {\r\n return matrixIsCoplane(this._Matrix, e.OCS, 1e-4);\r\n }\r\n\r\n /**\r\n * 测试两个实体的包围盒是否相交.\r\n */\r\n BoundingBoxIntersectWith(en: Entity): boolean\r\n {\r\n let box = this.BoundingBox;\r\n let box2 = en.BoundingBox;\r\n return box && box2 && box.intersectsBox(box2);\r\n }\r\n\r\n //#region Draw\r\n\r\n ClearDraw()\r\n {\r\n if (this._drawObject)\r\n {\r\n DisposeThreeObj(this._drawObject);\r\n this._drawObject = undefined;\r\n }\r\n\r\n for (let [, obj] of this._CacheDrawObject)\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.clear();\r\n return this;\r\n }\r\n ClearDrawOfJig()\r\n {\r\n let jig = this._CacheDrawObject.get(RenderType.Jig);\r\n if (jig)\r\n this._CacheDrawObject.delete(RenderType.Jig);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.clear();\r\n if (jig)\r\n this._CacheDrawObject.set(RenderType.Jig, jig);\r\n }\r\n\r\n get IsOnlyRender()\r\n {\r\n return this.OnlyRenderType;\r\n }\r\n _drawObject: Object3D;\r\n\r\n get DrawObject()\r\n {\r\n if (this._drawObject)\r\n return this._drawObject;\r\n\r\n this._drawObject = new Object3D();\r\n if (!this.IsEmbedEntity)\r\n this._drawObject.userData.Entity = this;\r\n if (this.IsVisible)\r\n {\r\n this._CurRenderType = userConfig.RenderType;\r\n let obj = this.GetDrawObjectFromRenderType(userConfig.RenderType);\r\n if (obj) this._drawObject.add(obj);\r\n }\r\n else\r\n this._drawObject.visible = false;\r\n return this._drawObject;\r\n }\r\n\r\n get JigObject()\r\n {\r\n let obj = this.GetDrawObjectFromRenderType(RenderType.Jig);\r\n if (obj && !this.IsEmbedEntity)\r\n obj.userData.Entity = this;\r\n return obj;\r\n }\r\n\r\n DestroyJigObject()\r\n {\r\n let obj = this._CacheDrawObject.get(RenderType.Jig);\r\n if (obj)\r\n {\r\n this._CacheDrawObject.delete(RenderType.Jig);\r\n DisposeThreeObj(obj);\r\n if (obj.parent)\r\n obj.parent.remove(obj);\r\n }\r\n }\r\n\r\n //当前绘制类型,在.DrawObject 和 UpdateRenderType中初始化和更新\r\n protected _CurRenderType: RenderType;\r\n UpdateRenderType(type: RenderType)\r\n {\r\n if (this._CurRenderType !== type || this.DrawObject.children.length === 0)\r\n {\r\n this._CurRenderType = type;\r\n if ((this.OnlyRenderType && this.DrawObject.children.length > 0) || !this.Visible) return;\r\n Object3DRemoveAll(this.DrawObject);\r\n let obj = this.GetDrawObjectFromRenderType(type);\r\n if (obj) this.DrawObject.add(obj);\r\n }\r\n }\r\n\r\n GetDrawObjectFromRenderType(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (this.OnlyRenderType)\r\n {\r\n if (renderType === RenderType.Jig)\r\n return;\r\n if (renderType < 100)\r\n renderType = RenderType.Wireframe;\r\n else\r\n renderType = RenderType.WireframePrint;\r\n }\r\n\r\n if (this._CacheDrawObject.has(renderType))\r\n {\r\n return this._CacheDrawObject.get(renderType);\r\n }\r\n else\r\n {\r\n let drawObj = this.InitDrawObject(renderType);\r\n if (drawObj === undefined)\r\n {\r\n if (renderType > 100)//如果实体没有实现打印类型,那么就使用原先的实体的渲染类型\r\n return this.GetDrawObjectFromRenderType(renderType - 100);\r\n return;\r\n };\r\n\r\n //矩阵直接使用指针,因为已经关闭自动更新,所以矩阵不会被Object3D修改.\r\n drawObj.matrixAutoUpdate = false;\r\n drawObj.matrix = this._Matrix;\r\n drawObj.updateMatrixWorld(true);\r\n drawObj.traverse(UpdateBoundingSphere);\r\n\r\n if (!this.IsEmbedEntity)\r\n drawObj.userData.Entity = this;\r\n\r\n this._CacheDrawObject.set(renderType, drawObj);\r\n return drawObj;\r\n }\r\n }\r\n\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n return undefined;\r\n }\r\n\r\n //实体绘制更新版本号\r\n __UpdateVersion__ = 0;\r\n\r\n /**\r\n * 当实体数据改变时,绘制的实体必须做出改变.供框架调用\r\n */\r\n @iaop\r\n Update(mode = UpdateDraw.All)\r\n {\r\n this.__UpdateVersion__++;\r\n this.NeedUpdateFlag |= mode;\r\n if (this.AutoUpdate)\r\n this.DeferUpdate();\r\n }\r\n\r\n //三维实体总是一起生成线框实体和网格实体,这个通知更新,然后统一更新就好了\r\n //避免重复更新\r\n UpdateDrawGeometry() { }\r\n\r\n DeferUpdate()\r\n {\r\n let mode = this.NeedUpdateFlag;\r\n if (mode === 0) return;\r\n\r\n if (mode & UpdateDraw.Geometry && this._CacheDrawObject.size > 0)\r\n this.UpdateDrawGeometry();\r\n\r\n this.UpdateVisible();\r\n\r\n let isJigIng = this._CacheDrawObject.has(RenderType.Jig);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (isJigIng && type !== RenderType.Jig)\r\n continue;\r\n\r\n if (mode & UpdateDraw.Geometry)\r\n {\r\n if (obj.userData.IsClone)\r\n {\r\n let parent = obj.parent;\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.delete(type);\r\n let newObj = this.GetDrawObjectFromRenderType(type);\r\n if (parent)\r\n {\r\n parent.remove(obj);\r\n parent.add(newObj);\r\n }\r\n obj = newObj;\r\n }\r\n else\r\n this.UpdateDrawObject(type, obj);\r\n }\r\n\r\n if (mode & UpdateDraw.Material)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n\r\n if (mode & UpdateDraw.Matrix || mode & UpdateDraw.Geometry)\r\n {\r\n obj.updateMatrixWorld(true);\r\n // if (this.Id)//如果这个是Jig实体,那么我们更新这个盒子球似乎也没有意义 (虽然这在某些情况能改进性能,但是在绘制圆弧的时候,因为没有更新圆弧的盒子,导致绘制出来的圆弧无法被选中)\r\n obj.traverse(UpdateBoundingSphere);\r\n }\r\n\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n /**\r\n * 当实体需要更新时,需要重载该方法,实现实体更新\r\n */\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n\r\n }\r\n\r\n protected get MeshMaterial()\r\n {\r\n if (this.materialId && this.materialId.Object)\r\n return (this.materialId.Object).Material as MeshStandardMaterial;\r\n return HostApplicationServices.DefaultMeshMaterial;\r\n }\r\n\r\n /**\r\n * 更新实体Jig状态时的材质\r\n */\r\n UpdateJigMaterial(color = 8)\r\n {\r\n }\r\n RestoreJigMaterial()\r\n {\r\n for (let [type, en] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, en);\r\n }\r\n get Visible()\r\n {\r\n return this._Visible;\r\n }\r\n set Visible(v: boolean)\r\n {\r\n if (v !== this._Visible)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Visible = v;\r\n this.UpdateVisible();\r\n }\r\n }\r\n\r\n private get IsVisible()\r\n {\r\n return !this._isErase && this._Visible;\r\n }\r\n\r\n UpdateVisible()\r\n {\r\n if (this._drawObject)\r\n {\r\n this._drawObject.visible = this.IsVisible;\r\n if (this.IsVisible)\r\n this.UpdateRenderType(userConfig.RenderType);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n GoodBye()\r\n {\r\n super.GoodBye();\r\n if (this._drawObject && this._drawObject.parent)\r\n this._drawObject.parent.remove(this._drawObject);\r\n this.ClearDraw();\r\n }\r\n\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this._isErase)\r\n return;\r\n this.__UpdateVersion__++;\r\n super.Erase(isErase);\r\n this.UpdateVisible();\r\n this.EraseEvent(isErase);\r\n }\r\n\r\n @iaop\r\n EraseEvent(isErase: boolean)\r\n {\r\n\r\n }\r\n /**\r\n * 使用统一的方法设置对象的矩阵.\r\n * 需要对缩放矩形进行重载.避免对象矩阵不是单位矩阵\r\n */\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (equaln(m.getMaxScaleOnAxis(), 1))\r\n {\r\n let xA = new Vector3();\r\n let yA = new Vector3();\r\n let zA = new Vector3();\r\n m.extractBasis(xA, yA, zA);\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n if (!equalv3(xA.clone().cross(yA).normalize(), zA))\r\n this.ApplyMirrorMatrix(m);\r\n else\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n else\r\n {\r\n this.ApplyScaleMatrix(m);\r\n }\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n\r\n }\r\n\r\n /**\r\n *\r\n * @param snapMode 捕捉模式(单一)\r\n * @param pickPoint const\r\n * @param lastPoint const\r\n * @param viewXform const 最近点捕捉需要这个变量\r\n * @returns object snap points\r\n */\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n return [];\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n *\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\r\n * @memberof Entity\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n\r\n }\r\n IntersectWith(curve: Entity, intType: IntersectOption): Vector3[] { return; }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._CurRenderType = this._CurRenderType;\r\n ent.Template = undefined;\r\n ent.CloneDrawObject(this);\r\n return ent;\r\n }\r\n\r\n CloneDrawObject(from: this)\r\n {\r\n for (let [type, obj] of from._CacheDrawObject)\r\n {\r\n let oldUserDaata = obj.userData;\r\n obj.traverse(o => o.userData = {});\r\n let newObj = obj.clone();\r\n obj.userData = oldUserDaata;\r\n obj.userData.IsClone = true;\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n newObj.userData.IsClone = true;\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n static __ReadFileIng__: boolean;\r\n __ReadFileIng__: boolean;\r\n\r\n get ReadFileIng()\r\n {\r\n return this.__ReadFileIng__ || Entity.__ReadFileIng__;\r\n }\r\n\r\n /**\r\n * 从文件读取,序列化自身,如果需要,重载_ReadFile\r\n */\r\n ReadFile(file: CADFiler)\r\n {\r\n this.__ReadFileIng__ = true;\r\n this._ReadFile(file);\r\n this.Update();\r\n this.__ReadFileIng__ = false;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._Color = file.Read();\r\n this.materialId = file.ReadHardObjectId();\r\n this._Matrix.fromArray(file.Read());\r\n\r\n if (ver === 2)\r\n this.Owner = file.ReadObjectId();\r\n\r\n if (ver > 3)\r\n this.Template = file.ReadObjectId();\r\n\r\n if (ver > 4)\r\n this.GroupId = file.ReadHardObjectId();\r\n\r\n if (ver > 5)\r\n this._Visible = file.Read();\r\n if (ver > 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n if (ver > 7)\r\n {\r\n let count = file.Read();\r\n this.ProcessingGroupList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.ProcessingGroupList.push(file.ReadHardObjectId());\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(8);\r\n super.WriteFile(file);\r\n file.Write(this._Color);\r\n file.WriteHardObjectId(this.materialId);\r\n file.Write(this._Matrix.toArray());\r\n file.WriteObjectId(this.Template);\r\n file.WriteHardObjectId(this.GroupId);\r\n file.Write(this._Visible);\r\n file.Write(this._SpaceOCS.toArray());\r\n\r\n file.Write(this.ProcessingGroupList.length);\r\n for (let id of this.ProcessingGroupList)\r\n file.WriteHardObjectId(id);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n\r\n CopyFrom(obj: CADObject)\r\n {\r\n let templateIdBak = this.Template;\r\n super.CopyFrom(obj);\r\n this.Update();\r\n this.Template = templateIdBak;\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { CADFactory } from './CADFactory';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\r\nimport { Entity } from './Entity/Entity';\r\n\r\n/**\r\n * CAD文件数据\r\n */\r\nexport class CADFiler\r\n{\r\n database: Database;\r\n private readIndex: number = 0;\r\n constructor(protected _datas: any[] = [])\r\n {\r\n }\r\n\r\n Destroy()\r\n {\r\n delete this._datas;\r\n delete this.readIndex;\r\n }\r\n\r\n get Data(): any[]\r\n {\r\n return this._datas;\r\n }\r\n\r\n set Data(data: any[])\r\n {\r\n this._datas = data;\r\n this.Reset();\r\n }\r\n\r\n Clear()\r\n {\r\n this._datas.length = 0;\r\n return this.Reset();\r\n }\r\n Reset()\r\n {\r\n this.readIndex = 0;\r\n return this;\r\n }\r\n\r\n WriteString(str: string)\r\n {\r\n this._datas.push(str);\r\n return this;\r\n }\r\n\r\n ReadString(): string\r\n {\r\n return this._datas[this.readIndex++] as string;\r\n }\r\n\r\n WriteObject(obj: ISerialize)\r\n {\r\n if (!obj)\r\n {\r\n this.Write(\"\");\r\n return;\r\n }\r\n this.WriteString(obj.constructor.name);\r\n obj.WriteFile(this);\r\n\r\n return this;\r\n }\r\n\r\n ReadObject(obj?: T): T\r\n {\r\n let className = this.ReadString();\r\n if (className)\r\n {\r\n if (obj === undefined)\r\n {\r\n obj = CADFactory.CreateObject(className);\r\n if (this.database !== undefined && obj instanceof CADObject)\r\n obj.SetDefaultDb(this.database);\r\n }\r\n obj.ReadFile(this);\r\n return obj;\r\n }\r\n }\r\n\r\n CloneObjects(objects: CADObject[], clonedObjects: CADObject[] = [])\r\n {\r\n for (let o of objects)\r\n this.WriteObject(o);\r\n let count = objects.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let obj = this.ReadObject();\r\n if (obj instanceof Entity)\r\n obj.CloneDrawObject(objects[i] as Entity);\r\n clonedObjects.push(obj);\r\n }\r\n\r\n return clonedObjects;\r\n }\r\n\r\n Write(data: any)\r\n {\r\n if (data instanceof ObjectId)\r\n this._datas.push(data.Index);\r\n else\r\n this._datas.push(data);\r\n\r\n return this;\r\n }\r\n\r\n Read(): any\r\n {\r\n return this._datas[this.readIndex++];\r\n }\r\n\r\n ReadArray(count: number): any[]\r\n {\r\n let arr = this._datas.slice(this.readIndex, this.readIndex + count);\r\n this.readIndex += count;\r\n return arr;\r\n }\r\n\r\n //------------------------ID序列化------------------------\r\n /*\r\n Id关联分为三种情况:\r\n 1.普通关联:关联对象未被拷贝时,关联到空对象.\r\n 2.软关联 :关联对象未被拷贝时,关联到原先的对象.\r\n 3.硬关联 :对象被拷贝时,被关联的对象必须也被拷贝.\r\n */\r\n\r\n //-------1.普通关联\r\n WriteObjectId(id: ObjectId): this\r\n {\r\n if (id)\r\n this.Write(id.Index);\r\n else\r\n this.Write(0);\r\n return this;\r\n }\r\n\r\n ReadObjectId(): ObjectId\r\n {\r\n let index = this.Read();\r\n if (this.database)\r\n return this.database.GetObjectId(index, true);\r\n }\r\n\r\n //-------2.软关联\r\n WriteSoftObjectId(id: ObjectId): this\r\n {\r\n return this.WriteObjectId(id);\r\n }\r\n ReadSoftObjectId(): ObjectId\r\n {\r\n return this.ReadObjectId();\r\n }\r\n\r\n //-------3.硬关联\r\n WriteHardObjectId(id: ObjectId): this\r\n {\r\n return this.WriteObjectId(id);\r\n }\r\n ReadHardObjectId()\r\n {\r\n return this.ReadObjectId();\r\n }\r\n\r\n //序列化\r\n ToString()\r\n {\r\n return JSON.stringify(this._datas);\r\n }\r\n FromString(str: string)\r\n {\r\n this._datas = JSON.parse(str);\r\n }\r\n}\r\n","import { ShaderMaterialParameters, Vector3 } from \"three\";\r\n\r\n//https://github.com/arefin86/arefin86.github.io/blob/master/js/shaders/GoochShader.js\r\nexport function GetGoochShader()\r\n{\r\n return {\r\n uniforms: {\r\n \"LightPosition\": { type: \"v3\", value: new Vector3(-200, 0, 200) },\r\n \"SurfaceColor\": { type: \"v3\", value: new Vector3(1.0, 1.0, 0.) },\r\n \"WarmColor\": { type: \"v3\", value: new Vector3(1.0, 0.5, 0.0) },\r\n \"CoolColor\": { type: \"v3\", value: new Vector3(0, 0, 0.7) },\r\n \"DiffuseWarm\": { type: \"f\", value: 0.45 },\r\n \"DiffuseCool\": { type: \"f\", value: 0.1 }\r\n },\r\n\r\n vertexShader: require(\"./Goodch2.vs\"),\r\n fragmentShader: require(\"./Goodch2.fs\")\r\n };\r\n}\r\n\r\nexport function GetGoodShaderSimple(color: Vector3 = new Vector3): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color }\r\n },\r\n vertexShader: require(\"./GoodchSimple.vs\"),\r\n fragmentShader: require(\"./GoodchSimple.fs\"),\r\n\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: 1\r\n };\r\n}\r\n","import { Color, DoubleSide, LineBasicMaterial, LineDashedMaterial, MeshBasicMaterial, ShaderMaterial, Vector3, Vector2 } from 'three';\r\nimport { GetGoodShaderSimple } from '../GLSL/GoochShader';\r\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\r\n\r\nconst ColorPalette = [\r\n [0, 0, 0, 0], //----- 0 - lets make it red for an example\r\n //[255, 255, 255, 255],//----- 0 - ByBlock - White\r\n [255, 0, 0, 255], //----- 1 - Red\r\n // [255, 0, 0, 255], //----- 1 - Red\r\n [255, 255, 0, 255], //----- 2 - Yellow\r\n [0, 255, 0, 255], //----- 3 - Green\r\n [0, 255, 255, 255], //----- 4 - Cyan\r\n [0, 0, 255, 255], //----- 5 - Blue\r\n [255, 0, 255, 255], //----- 6 - Magenta\r\n // [255, 0, 0, 255], //----- 7 - More red Red\r\n // [255, 0, 0, 255], //----- 8 - More red Red\r\n // [255, 0, 0, 255], //----- 9 - More red Red\r\n [255, 255, 255, 255],//----- 7 - White\r\n [128, 128, 128, 255],//----- 8\r\n [192, 192, 192, 255],//----- 9\r\n [255, 0, 0, 255], //----- 10\r\n [255, 127, 127, 255],//----- 11\r\n [165, 0, 0, 255], //----- 12\r\n [165, 82, 82, 255], //----- 13\r\n [127, 0, 0, 255], //----- 14\r\n [127, 63, 63, 255], //----- 15\r\n [76, 0, 0, 255], //----- 16\r\n [76, 38, 38, 255], //----- 17\r\n [38, 0, 0, 255], //----- 18\r\n [38, 19, 19, 255], //----- 19\r\n [255, 63, 0, 255], //----- 20\r\n [255, 159, 127, 255],//----- 21\r\n [165, 41, 0, 255], //----- 22\r\n [165, 103, 82, 255], //----- 23\r\n [127, 31, 0, 255], //----- 24\r\n [127, 79, 63, 255], //----- 25\r\n [76, 19, 0, 255], //----- 26\r\n [76, 47, 38, 255], //----- 27\r\n [38, 9, 0, 255], //----- 28\r\n [38, 23, 19, 255], //----- 29\r\n [255, 127, 0, 255], //----- 30\r\n [255, 191, 127, 255],//----- 31\r\n [165, 82, 0, 255], //----- 32\r\n [165, 124, 82, 255], //----- 33\r\n [127, 63, 0, 255], //----- 34\r\n [127, 95, 63, 255], //----- 35\r\n [76, 38, 0, 255], //----- 36\r\n [76, 57, 38, 255], //----- 37\r\n [38, 19, 0, 255], //----- 38\r\n [38, 28, 19, 255], //----- 39\r\n [255, 191, 0, 255], //----- 40\r\n [255, 223, 127, 255],//----- 41\r\n [165, 124, 0, 255], //----- 42\r\n [165, 145, 82, 255], //----- 43\r\n [127, 95, 0, 255], //----- 44\r\n [127, 111, 63, 255], //----- 45\r\n [76, 57, 0, 255], //----- 46\r\n [76, 66, 38, 255], //----- 47\r\n [38, 28, 0, 255], //----- 48\r\n [38, 33, 19, 255], //----- 49\r\n [255, 255, 0, 255], //----- 50\r\n [255, 255, 127, 255],//----- 51\r\n [165, 165, 0, 255], //----- 52\r\n [165, 165, 82, 255], //----- 53\r\n [127, 127, 0, 255], //----- 54\r\n [127, 127, 63, 255], //----- 55\r\n [76, 76, 0, 255], //----- 56\r\n [76, 76, 38, 255], //----- 57\r\n [38, 38, 0, 255], //----- 58\r\n [38, 38, 19, 255], //----- 59\r\n [191, 255, 0, 255], //----- 60\r\n [223, 255, 127, 255],//----- 61\r\n [124, 165, 0, 255], //----- 62\r\n [145, 165, 82, 255], //----- 63\r\n [95, 127, 0, 255], //----- 64\r\n [111, 127, 63, 255], //----- 65\r\n [57, 76, 0, 255], //----- 66\r\n [66, 76, 38, 255], //----- 67\r\n [28, 38, 0, 255], //----- 68\r\n [33, 38, 19, 255], //----- 69\r\n [127, 255, 0, 255], //----- 70\r\n [191, 255, 127, 255],//----- 71\r\n [82, 165, 0, 255], //----- 72\r\n [124, 165, 82, 255], //----- 73\r\n [63, 127, 0, 255], //----- 74\r\n [95, 127, 63, 255], //----- 75\r\n [38, 76, 0, 255], //----- 76\r\n [57, 76, 38, 255], //----- 77\r\n [19, 38, 0, 255], //----- 78\r\n [28, 38, 19, 255], //----- 79\r\n [63, 255, 0, 255], //----- 80\r\n [159, 255, 127, 255],//----- 81\r\n [41, 165, 0, 255], //----- 82\r\n [103, 165, 82, 255], //----- 83\r\n [31, 127, 0, 255], //----- 84\r\n [79, 127, 63, 255], //----- 85\r\n [19, 76, 0, 255], //----- 86\r\n [47, 76, 38, 255], //----- 87\r\n [9, 38, 0, 255], //----- 88\r\n [23, 38, 19, 255], //----- 89\r\n [0, 255, 0, 255], //----- 90\r\n [127, 255, 127, 255],//----- 91\r\n [0, 165, 0, 255], //----- 92\r\n [82, 165, 82, 255], //----- 93\r\n [0, 127, 0, 255], //----- 94\r\n [63, 127, 63, 255], //----- 95\r\n [0, 76, 0, 255], //----- 96\r\n [38, 76, 38, 255], //----- 97\r\n [0, 38, 0, 255], //----- 98\r\n [19, 38, 19, 255], //----- 99\r\n [0, 255, 63, 255], //----- 100\r\n [127, 255, 159, 255],//----- 101\r\n [0, 165, 41, 255], //----- 102\r\n [82, 165, 103, 255], //----- 103\r\n [0, 127, 31, 255], //----- 104\r\n [63, 127, 79, 255], //----- 105\r\n [0, 76, 19, 255], //----- 106\r\n [38, 76, 47, 255], //----- 107\r\n [0, 38, 9, 255], //----- 108\r\n [19, 38, 23, 255], //----- 109\r\n [0, 255, 127, 255], //----- 110\r\n [127, 255, 191, 255],//----- 111\r\n [0, 165, 82, 255], //----- 112\r\n [82, 165, 124, 255], //----- 113\r\n [0, 127, 63, 255], //----- 114\r\n [63, 127, 95, 255], //----- 115\r\n [0, 76, 38, 255], //----- 116\r\n [38, 76, 57, 255], //----- 117\r\n [0, 38, 19, 255], //----- 118\r\n [19, 38, 28, 255], //----- 119\r\n [0, 255, 191, 255], //----- 120\r\n [127, 255, 223, 255],//----- 121\r\n [0, 165, 124, 255], //----- 122\r\n [82, 165, 145, 255], //----- 123\r\n [0, 127, 95, 255], //----- 124\r\n [63, 127, 111, 255], //----- 125\r\n [0, 76, 57, 255], //----- 126\r\n [38, 76, 66, 255], //----- 127\r\n [0, 38, 28, 255], //----- 128\r\n [19, 38, 33, 255], //----- 129\r\n [0, 255, 255, 255], //----- 130\r\n [127, 255, 255, 255],//----- 131\r\n [0, 165, 165, 255], //----- 132\r\n [82, 165, 165, 255], //----- 133\r\n [0, 127, 127, 255], //----- 134\r\n [63, 127, 127, 255], //----- 135\r\n [0, 76, 76, 255], //----- 136\r\n [38, 76, 76, 255], //----- 137\r\n [0, 38, 38, 255], //----- 138\r\n [19, 38, 38, 255], //----- 139\r\n [0, 191, 255, 255], //----- 140\r\n [127, 223, 255, 255],//----- 141\r\n [0, 124, 165, 255], //----- 142\r\n [82, 145, 165, 255], //----- 143\r\n [0, 95, 127, 255], //----- 144\r\n [63, 111, 127, 255], //----- 145\r\n [0, 57, 76, 255], //----- 146\r\n [38, 66, 76, 255], //----- 147\r\n [0, 28, 38, 255], //----- 148\r\n [19, 33, 38, 255], //----- 149\r\n [0, 127, 255, 255], //----- 150\r\n [127, 191, 255, 255],//----- 151\r\n [0, 82, 165, 255], //----- 152\r\n [82, 124, 165, 255], //----- 153\r\n [0, 63, 127, 255], //----- 154\r\n [63, 95, 127, 255], //----- 155\r\n [0, 38, 76, 255], //----- 156\r\n [38, 57, 76, 255], //----- 157\r\n [0, 19, 38, 255], //----- 158\r\n [19, 28, 38, 255], //----- 159\r\n [0, 63, 255, 255], //----- 160\r\n [127, 159, 255, 255],//----- 161\r\n [0, 41, 165, 255], //----- 162\r\n [82, 103, 165, 255], //----- 163\r\n [0, 31, 127, 255], //----- 164\r\n [63, 79, 127, 255], //----- 165\r\n [0, 19, 76, 255], //----- 166\r\n [38, 47, 76, 255], //----- 167\r\n [0, 9, 38, 255], //----- 168\r\n [19, 23, 38, 255], //----- 169\r\n [0, 0, 255, 255], //----- 170\r\n [127, 127, 255, 255],//----- 171\r\n [0, 0, 165, 255], //----- 172\r\n [82, 82, 165, 255], //----- 173\r\n [0, 0, 127, 255], //----- 174\r\n [63, 63, 127, 255], //----- 175\r\n [0, 0, 76, 255], //----- 176\r\n [38, 38, 76, 255], //----- 177\r\n [0, 0, 38, 255], //----- 178\r\n [19, 19, 38, 255], //----- 179\r\n [63, 0, 255, 255], //----- 180\r\n [159, 127, 255, 255],//----- 181\r\n [41, 0, 165, 255], //----- 182\r\n [103, 82, 165, 255], //----- 183\r\n [31, 0, 127, 255], //----- 184\r\n [79, 63, 127, 255], //----- 185\r\n [19, 0, 76, 255], //----- 186\r\n [47, 38, 76, 255], //----- 187\r\n [9, 0, 38, 255], //----- 188\r\n [23, 19, 38, 255], //----- 189\r\n [127, 0, 255, 255], //----- 190\r\n [191, 127, 255, 255],//----- 191\r\n [82, 0, 165, 255], //----- 192\r\n [124, 82, 165, 255], //----- 193\r\n [63, 0, 127, 255], //----- 194\r\n [95, 63, 127, 255], //----- 195\r\n [38, 0, 76, 255], //----- 196\r\n [57, 38, 76, 255], //----- 197\r\n [19, 0, 38, 255], //----- 198\r\n [28, 19, 38, 255], //----- 199\r\n [191, 0, 255, 255], //----- 200\r\n [223, 127, 255, 255],//----- 201\r\n [124, 0, 165, 255], //----- 202\r\n [145, 82, 165, 255], //----- 203\r\n [95, 0, 127, 255], //----- 204\r\n [111, 63, 127, 255], //----- 205\r\n [57, 0, 76, 255], //----- 206\r\n [66, 38, 76, 255], //----- 207\r\n [28, 0, 38, 255], //----- 208\r\n [33, 19, 38, 255], //----- 209\r\n [255, 0, 255, 255], //----- 210\r\n [255, 127, 255, 255],//----- 211\r\n [165, 0, 165, 255], //----- 212\r\n [165, 82, 165, 255], //----- 213\r\n [127, 0, 127, 255], //----- 214\r\n [127, 63, 127, 255], //----- 215\r\n [76, 0, 76, 255], //----- 216\r\n [76, 38, 76, 255], //----- 217\r\n [38, 0, 38, 255], //----- 218\r\n [38, 19, 38, 255], //----- 219\r\n [255, 0, 191, 255], //----- 220\r\n [255, 127, 223, 255],//----- 221\r\n [165, 0, 124, 255], //----- 222\r\n [165, 82, 145, 255], //----- 223\r\n [127, 0, 95, 255], //----- 224\r\n [127, 63, 111, 255], //----- 225\r\n [76, 0, 57, 255], //----- 226\r\n [76, 38, 66, 255], //----- 227\r\n [38, 0, 28, 255], //----- 228\r\n [38, 19, 33, 255], //----- 229\r\n [255, 0, 127, 255], //----- 230\r\n [255, 127, 191, 255],//----- 231\r\n [165, 0, 82, 255], //----- 232\r\n [165, 82, 124, 255], //----- 233\r\n [127, 0, 63, 255], //----- 234\r\n [127, 63, 95, 255], //----- 235\r\n [76, 0, 38, 255], //----- 236\r\n [76, 38, 57, 255], //----- 237\r\n [38, 0, 19, 255], //----- 238\r\n [38, 19, 28, 255], //----- 239\r\n [255, 0, 63, 255], //----- 240\r\n [255, 127, 159, 255],//----- 241\r\n [165, 0, 41, 255], //----- 242\r\n [165, 82, 103, 255], //----- 243\r\n [127, 0, 31, 255], //----- 244\r\n [127, 63, 79, 255], //----- 245\r\n [76, 0, 19, 255], //----- 246\r\n [76, 38, 47, 255], //----- 247\r\n [38, 0, 9, 255], //----- 248\r\n [38, 19, 23, 255], //----- 249\r\n [84, 84, 84, 255], //----- 250\r\n [118, 118, 118, 255],//----- 251\r\n [152, 152, 152, 255],//----- 252\r\n [186, 186, 186, 255],//----- 253\r\n [220, 220, 220, 255],//----- 254\r\n [255, 255, 255, 255],//----- 255\r\n [0, 0, 0, 0] //----- ByLayer - White\r\n];\r\n\r\nexport const LINE_WIDTH = 2;\r\n\r\n//颜色材质,对于二维图像来说可能有用,应该不对三维对象使用该材质\r\nexport class ColorMaterial\r\n{\r\n private constructor() { }\r\n private static _LineMaterialMap = new Map();\r\n private static _BasicMaterialMap = new Map();\r\n static GetLineMaterial(color: number): LineBasicMaterial\r\n {\r\n if (this._LineMaterialMap.has(color))\r\n return this._LineMaterialMap.get(color);\r\n let mat = new LineBasicMaterial({ color: this.GetColor(color), side: DoubleSide });\r\n this._LineMaterialMap.set(color, mat);\r\n return mat;\r\n }\r\n\r\n static GetBasicMaterial(color: number): MeshBasicMaterial\r\n {\r\n if (this._BasicMaterialMap.has(color))\r\n return this._BasicMaterialMap.get(color);\r\n let mtl = new MeshBasicMaterial({ color: this.GetColor(color) });\r\n this._BasicMaterialMap.set(color, mtl);\r\n return mtl;\r\n }\r\n\r\n private static _BasicDoubleSideMaterialMap = new Map();\r\n static GetBasicMaterialDoubleSide(color: number): MeshBasicMaterial\r\n {\r\n if (this._BasicDoubleSideMaterialMap.has(color))\r\n return this._BasicDoubleSideMaterialMap.get(color);\r\n let mtl = new MeshBasicMaterial({ color: this.GetColor(color), side: DoubleSide });\r\n this._BasicDoubleSideMaterialMap.set(color, mtl);\r\n return mtl;\r\n }\r\n\r\n private static _ConceptualMaterial: Map = new Map();\r\n static GetConceptualMaterial(color: number)\r\n {\r\n if (this._ConceptualMaterial.has(color))\r\n return this._ConceptualMaterial.get(color);\r\n\r\n let shaderParams = GetGoodShaderSimple(\r\n new Vector3().fromArray(this.GetColor(color).toArray())\r\n );\r\n let mtl = new ShaderMaterial(shaderParams);\r\n this._ConceptualMaterial.set(color, mtl);\r\n return mtl;\r\n }\r\n private static _printConceptualMaterial: ShaderMaterial;\r\n static GetPrintConceptualMaterial()\r\n {\r\n if (!this._printConceptualMaterial)\r\n {\r\n this._printConceptualMaterial = new ShaderMaterial({\r\n uniforms: {\r\n \"SurfaceColor\": { value: [1.0, 1.0, 1.0] }\r\n },\r\n vertexShader: require(\"../GLSL/GoodchSimple.vs\"),\r\n fragmentShader: require(\"../GLSL/GoodchSimple2.fs\"),\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: LINE_WIDTH\r\n });\r\n }\r\n return this._printConceptualMaterial;\r\n }\r\n\r\n private static _BasicTransparentMaterialMap: Map = new Map();\r\n static GetBasicMaterialTransparent(color: number, opacity: number)\r\n {\r\n let key = `${color},${opacity}`;\r\n let mat = this._BasicTransparentMaterialMap.get(key);\r\n if (mat) return mat;\r\n mat = new MeshBasicMaterial({ transparent: true, opacity: opacity, side: DoubleSide });\r\n this._BasicTransparentMaterialMap.set(key, mat);\r\n return mat;\r\n }\r\n\r\n private static _BasicTransparentMaterialMap2: Map = new Map();\r\n static GetBasicMaterialTransparent2(color: number, opacity: number)\r\n {\r\n let key = `${color},${opacity}`;\r\n let mat = this._BasicTransparentMaterialMap2.get(key);\r\n if (mat) return mat;\r\n mat = new MeshBasicMaterial({ transparent: true, opacity: opacity });\r\n this._BasicTransparentMaterialMap2.set(key, mat);\r\n return mat;\r\n }\r\n\r\n static GetColor(color: number)\r\n {\r\n let rgb = ColorPalette[color];\r\n if (rgb)\r\n return new Color(rgb[0] / 255, rgb[1] / 255, rgb[2] / 255);\r\n\r\n //避免无法获得到颜色而产生的错误\r\n return new Color();\r\n }\r\n\r\n //橡皮筋材质: 黄色 点划线\r\n static RubberBandMaterial = new LineDashedMaterial({\r\n color: 0xF0B41E,\r\n dashSize: 20,\r\n gapSize: 8,\r\n });\r\n\r\n //极轴材质: 绿色 点划线\r\n static SnapAxisMaterial = new LineDashedMaterial({\r\n color: 0x008B00,\r\n dashSize: 5,\r\n gapSize: 5\r\n });\r\n static PrintLineMatrial = new LineMaterial({\r\n color: 0x000000,\r\n linewidth: LINE_WIDTH,\r\n dashed: false,\r\n resolution: new Vector2(1000, 1000),\r\n side: DoubleSide,\r\n });\r\n static GrayTransparentMeshMaterial = new MeshBasicMaterial({\r\n color: 0xcccccc,\r\n transparent: true,\r\n opacity: 0.3,\r\n });\r\n static TransparentMeshMaterial = new MeshBasicMaterial({\r\n transparent: true,\r\n opacity: 0,\r\n });\r\n static TransparentLineMaterial = new MeshBasicMaterial({\r\n transparent: true,\r\n opacity: 0,\r\n });\r\n}\r\n","/**\r\n * 删除数组中指定的元素,返回数组本身\r\n * @param {Array} arr 需要操作的数组\r\n * @param {*} el 需要移除的元素\r\n */\r\nexport function arrayRemove(arr: Array, el: T): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (arr[i] !== el)\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\n\r\nexport function arrayRemoveOnce(arr: Array, el: T): Array\r\n{\r\n let index = arr.indexOf(el);\r\n if (index !== -1)\r\n arr.splice(index, 1);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 删除通过函数校验的元素\r\n * @param {(e: T) => boolean} checkFuntion 校验函数\r\n */\r\nexport function arrayRemoveIf(arr: Array, checkFuntion: (e: T) => boolean): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (!checkFuntion(arr[i]))\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\nexport function arrayFirst(arr: Array): T\r\n{\r\n return arr[0];\r\n}\r\n\r\nexport function arrayLast(arr: { [key: number]: T, length: number; }): T\r\n{\r\n return arr[arr.length - 1];\r\n}\r\n\r\n/**\r\n * 根据数值从小到大排序数组\r\n * @param {Array} arr\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arraySortByNumber(arr: Array): Array\r\n{\r\n arr.sort(sortNumberCompart);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 对排序好的数组进行去重操作\r\n * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arrayRemoveDuplicateBySort(arr: Array, checkFuction: (e1: T, e2: T) => boolean = checkEqual): Array\r\n{\r\n if (arr.length < 2) return arr;\r\n let j = 1;\r\n for (let i = 1, l = arr.length; i < l; i++)\r\n if (!checkFuction(arr[j - 1], arr[i]))\r\n arr[j++] = arr[i];\r\n arr.length = j;\r\n return arr;\r\n}\r\n\r\n//原地更新数组,注意这个函数并不会比map快.\r\nexport function arrayMap(arr: Array, mapFunc: (v: T) => T): Array\r\n{\r\n for (let i = 0, count = arr.length; i < count; i++)\r\n arr[i] = mapFunc(arr[i]);\r\n return arr;\r\n}\r\n\r\nfunction sortNumberCompart(e1: any, e2: any)\r\n{\r\n return e1 - e2;\r\n}\r\n\r\nfunction checkEqual(e1: any, e2: any): boolean\r\n{\r\n return e1 === e2;\r\n}\r\n\r\n/**\r\n * 改变数组的值顺序\r\n * @param arr 需要改变初始值位置的数组\r\n * @param index //将index位置以后的值放到起始位置\r\n */\r\nexport function changeArrayStartIndex(arr: T[], index: number): T[]\r\n{\r\n arr.unshift(...arr.splice(index));\r\n return arr;\r\n}\r\n\r\nexport function equalArray(a: T[], b: T[], checkF = checkEqual)\r\n{\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (var i = 0; i < a.length; ++i)\r\n if (!checkF(a[i], b[i])) return false;\r\n return true;\r\n}\r\n\r\nexport function arrayClone(arr: T[]): T[]\r\n{\r\n return arr.slice();\r\n}\r\n\r\n//https://jsperf.com/merge-array-implementations/30\r\nexport function arrayPushArray(arr1: T[], arr2: T[]): T[]\r\n{\r\n let arr1Length = arr1.length;\r\n let arr2Length = arr2.length;\r\n arr1.length = arr1Length + arr2Length;\r\n for (let i = 0; i < arr2Length; i++)\r\n arr1[arr1Length + i] = arr2[i];\r\n\r\n return arr1;\r\n}\r\n\r\nexport function arraySum(arr: number[])\r\n{\r\n let sum = 0;\r\n for (let n of arr) sum += n;\r\n return sum;\r\n}\r\n\r\nexport function FilterSet(s: Set, fn: (el: T) => boolean): Set\r\n{\r\n let ns = new Set();\r\n for (let el of s)\r\n {\r\n if (fn(el))\r\n ns.add(el);\r\n }\r\n return ns;\r\n}\r\n","\r\n/**\r\n * OSMODE\r\n */\r\nexport enum ObjectSnapMode\r\n{\r\n None = 0, //无\r\n End = 1, //端点\r\n Mid = 2, //中点\r\n Cen = 4, //圆心\r\n Node = 8,//节点\r\n Qua = 16,//象限点\r\n Int = 32,//交点\r\n Ins = 64,//插入点\r\n Per = 128,//垂足\r\n Tan = 256,//切点\r\n Nea = 512,//最近点\r\n NotEntitySnap = 1024,//清除所有对象捕捉\r\n App = 2048,//外观交点\r\n Ext = 4096,//延伸\r\n Par = 8192,//平行\r\n Axis = 16384,//极轴\r\n All = ~(~0 << 15) - 1024,\r\n}\r\n","import { BufferGeometry, Geometry } from \"three\";\r\n\r\nexport const BufferGeometry2GeometryCacheMap = new WeakMap();\r\nglobalThis.fuck = BufferGeometry2GeometryCacheMap;\r\n","import { BufferGeometry, Vector3, BufferAttribute, ShapeGeometry, Shape } from \"three\";\r\nimport { BufferGeometry2GeometryCacheMap } from \"../Editor/BufferGeometry2GeometryCacheMap\";\r\n\r\nexport namespace BufferGeometryUtils\r\n{\r\n export function CreateFromPts(pts: Vector3[]): BufferGeometry\r\n {\r\n return new BufferGeometry().setFromPoints(pts);\r\n }\r\n\r\n /**\r\n * 更新BufferGeometry的顶点\r\n * @param geo\r\n * @param pts\r\n * @returns 当成功时返回true,更新失败时返回false\r\n */\r\n export function UpdatePts(geo: BufferGeometry, pts: Vector3[]): boolean\r\n {\r\n let bf = geo.getAttribute(\"position\") as BufferAttribute;\r\n if (bf === undefined)\r\n geo.setFromPoints(pts);\r\n else if (bf.count >= pts.length)\r\n {\r\n bf.copyVector3sArray(pts);\r\n bf.needsUpdate = true;\r\n geo.drawRange.count = pts.length;\r\n }\r\n else\r\n return false;\r\n\r\n BufferGeometry2GeometryCacheMap.delete(geo);\r\n return true;\r\n }\r\n\r\n let arrowGeometry: ShapeGeometry;\r\n export function ArrowGeometry()\r\n {\r\n if (arrowGeometry)\r\n return arrowGeometry;\r\n else\r\n {\r\n let arrowShape = new Shape();\r\n arrowShape.lineTo(-0.5, -1.8);\r\n arrowShape.lineTo(0.5, -1.8);\r\n arrowGeometry = new ShapeGeometry(arrowShape);\r\n arrowGeometry.computeBoundingBox();\r\n return arrowGeometry;\r\n }\r\n }\r\n\r\n export function MergeBufferGeometries(geometries: BufferGeometry[], useGroups: boolean = false): BufferGeometry\r\n {\r\n if (geometries.length === 0)\r\n return new BufferGeometry();\r\n let isIndexed = geometries[0].index !== null;\r\n\r\n let attributesUsed = new Set(Object.keys(geometries[0].attributes));\r\n let morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes));\r\n\r\n let attributes = {};\r\n let morphAttributes = {};\r\n\r\n let morphTargetsRelative = geometries[0].morphTargetsRelative;\r\n\r\n let mergedGeometry = new BufferGeometry();\r\n\r\n let offset = 0;\r\n\r\n for (let i = 0; i < geometries.length; ++i)\r\n {\r\n\r\n let geometry = geometries[i];\r\n\r\n // ensure that all geometries are indexed, or none\r\n\r\n if (isIndexed !== (geometry.index !== null)) return null;\r\n\r\n // gather attributes, exit early if they're different\r\n\r\n for (let name in geometry.attributes)\r\n {\r\n\r\n if (!attributesUsed.has(name)) continue;\r\n\r\n if (attributes[name] === undefined) attributes[name] = [];\r\n\r\n attributes[name].push(geometry.attributes[name]);\r\n\r\n }\r\n\r\n // gather morph attributes, exit early if they're different\r\n\r\n if (morphTargetsRelative !== geometry.morphTargetsRelative) return null;\r\n\r\n for (let name in geometry.morphAttributes)\r\n {\r\n\r\n if (!morphAttributesUsed.has(name)) continue;\r\n\r\n if (morphAttributes[name] === undefined) morphAttributes[name] = [];\r\n\r\n morphAttributes[name].push(geometry.morphAttributes[name]);\r\n\r\n }\r\n\r\n // gather .userData\r\n\r\n mergedGeometry.userData.mergedUserData = mergedGeometry.userData.mergedUserData || [];\r\n mergedGeometry.userData.mergedUserData.push(geometry.userData);\r\n\r\n if (useGroups)\r\n {\r\n\r\n let count: number;\r\n\r\n if (isIndexed)\r\n {\r\n\r\n count = geometry.index.count;\r\n\r\n } else if (geometry.attributes.position !== undefined)\r\n {\r\n\r\n count = geometry.attributes.position.count;\r\n\r\n } else\r\n {\r\n\r\n return null;\r\n\r\n }\r\n\r\n mergedGeometry.addGroup(offset, count, i);\r\n\r\n offset += count;\r\n\r\n }\r\n\r\n }\r\n\r\n // merge indices\r\n\r\n if (isIndexed)\r\n {\r\n\r\n let indexOffset = 0;\r\n let mergedIndex = [];\r\n\r\n for (let i = 0; i < geometries.length; ++i)\r\n {\r\n\r\n let index = geometries[i].index;\r\n\r\n for (let j = 0; j < index.count; ++j)\r\n {\r\n\r\n mergedIndex.push(index.getX(j) + indexOffset);\r\n\r\n }\r\n\r\n indexOffset += geometries[i].attributes.position.count;\r\n\r\n }\r\n\r\n mergedGeometry.setIndex(mergedIndex);\r\n\r\n }\r\n\r\n // merge attributes\r\n\r\n for (let name in attributes)\r\n {\r\n\r\n let mergedAttribute = MergeBufferAttributes(attributes[name]);\r\n\r\n if (!mergedAttribute) return null;\r\n\r\n mergedGeometry.setAttribute(name, mergedAttribute);\r\n\r\n }\r\n\r\n // merge morph attributes\r\n\r\n for (let name in morphAttributes)\r\n {\r\n\r\n let numMorphTargets = morphAttributes[name][0].length;\r\n\r\n if (numMorphTargets === 0) break;\r\n\r\n mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\r\n mergedGeometry.morphAttributes[name] = [];\r\n\r\n for (let i = 0; i < numMorphTargets; ++i)\r\n {\r\n\r\n let morphAttributesToMerge: any[] = [];\r\n\r\n for (let j = 0; j < morphAttributes[name].length; ++j)\r\n {\r\n\r\n morphAttributesToMerge.push(morphAttributes[name][j][i]);\r\n\r\n }\r\n\r\n let mergedMorphAttribute = MergeBufferAttributes(morphAttributesToMerge);\r\n\r\n if (!mergedMorphAttribute) return null;\r\n\r\n mergedGeometry.morphAttributes[name].push(mergedMorphAttribute);\r\n\r\n }\r\n\r\n }\r\n\r\n return mergedGeometry;\r\n\r\n }\r\n\r\n export function MergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute\r\n {\r\n let TypedArray;\r\n let itemSize: number;\r\n let normalized: boolean;\r\n let arrayLength = 0;\r\n\r\n for (let i = 0; i < attributes.length; ++i)\r\n {\r\n\r\n let attribute = attributes[i];\r\n\r\n if (TypedArray === undefined) TypedArray = attribute.array.constructor;\r\n if (TypedArray !== attribute.array.constructor) return null;\r\n\r\n if (itemSize === undefined) itemSize = attribute.itemSize;\r\n if (itemSize !== attribute.itemSize) return null;\r\n\r\n if (normalized === undefined) normalized = attribute.normalized;\r\n if (normalized !== attribute.normalized) return null;\r\n\r\n arrayLength += attribute.array.length;\r\n\r\n }\r\n\r\n let array = new TypedArray(arrayLength);\r\n let offset = 0;\r\n\r\n for (let i = 0; i < attributes.length; ++i)\r\n {\r\n\r\n array.set(attributes[i].array, offset);\r\n\r\n offset += attributes[i].array.length;\r\n\r\n }\r\n\r\n return new BufferAttribute(array, itemSize, normalized);\r\n\r\n }\r\n\r\n}\r\n","import { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { clamp } from \"../Common/Utils\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\n\r\nexport class Shape2 extends Shape\r\n{\r\n getPoints(divisions: number = 12)\r\n {\r\n divisions = divisions || 12;\r\n let points = [], last: Vector2;\r\n for (let i = 0, curves = this.curves; i < curves.length; i++)\r\n {\r\n let curve = curves[i];\r\n //@ts-ignore\r\n let resolution = (curve && curve.isEllipseCurve) ? clamp(curve.getLength() / 20, divisions * 2, 60)\r\n //@ts-ignore\r\n : (curve && (curve.isLineCurve || curve.isLineCurve3)) ? 1\r\n //@ts-ignore\r\n : (curve && curve.isSplineCurve) ? divisions * curve.points.length\r\n : divisions;\r\n\r\n let pts = curve.getPoints(resolution);\r\n\r\n for (let j = 0; j < pts.length; j++)\r\n {\r\n let point = pts[j];\r\n if (last && equalv2(last, point, 1e-4))\r\n continue; // ensures no consecutive points are duplicates\r\n\r\n points.push(point);\r\n last = point;\r\n\r\n if (j === pts.length - 1)\r\n point[\"_mask_\"] = true;\r\n }\r\n }\r\n if (this.autoClose\r\n && points.length > 1\r\n && !points[points.length - 1].equals(points[0]))\r\n {\r\n points.push(points[0]);\r\n }\r\n return points;\r\n }\r\n\r\n\r\n absellipse(aX: number, aY: number, xRadius: number, yRadius: number, aStartAngle: number, aEndAngle: number, aClockwise: boolean, aRotation: number): this\r\n {\r\n let curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation);\r\n\r\n /*\r\n if (this.curves.length > 0)\r\n {\r\n // if a previous curve is present, attempt to join\r\n let firstPoint = curve.getPoint(0);\r\n if (!equalv2(firstPoint, this.currentPoint))\r\n {\r\n this.lineTo(firstPoint.x, firstPoint.y);\r\n }\r\n }\r\n */\r\n\r\n this.curves.push(curve);\r\n\r\n let lastPoint = curve.getPoint(1);\r\n this.currentPoint.copy(lastPoint);\r\n\r\n return this;\r\n }\r\n}\r\n","import { Vector2, Vector3, Matrix4 } from \"three\";\r\n\r\nexport class Matrix2\r\n{\r\n //column-major\r\n el = [1, 0, 0, 1]; //ix iy jx jy [a c b d]\r\n\r\n set(ix: number, iy: number, jx: number, jy: number)\r\n {\r\n this.el[0] = ix;\r\n this.el[1] = iy;\r\n this.el[2] = jx;\r\n this.el[3] = jy;\r\n }\r\n\r\n applyVector(vec: Vector2 | Vector3)\r\n {\r\n let x = vec.x;\r\n let y = vec.y;\r\n let e = this.el;\r\n vec.x = e[0] * x + e[2] * y;\r\n vec.y = e[1] * x + e[3] * y;\r\n return this;\r\n }\r\n\r\n fromMatrix4(mtx4: Matrix4)\r\n {\r\n this.set(mtx4.elements[0], mtx4.elements[1],\r\n mtx4.elements[3], mtx4.elements[4]\r\n );\r\n }\r\n\r\n setRotate(theta: number): this\r\n {\r\n let c = Math.cos(theta);\r\n let s = Math.sin(theta);\r\n this.set(c, s, -s, c);\r\n return this;\r\n }\r\n\r\n //自我求逆矩阵,返回自身\r\n invert(): this\r\n {\r\n //ref:https://www.mathsisfun.com/algebra/matrix-inverse.html\r\n let [a, c, b, d] = this.el;\r\n let det = 1 / (a * d - b * c);\r\n this.set(d * det, -c * det,\r\n -b * det, a * det\r\n );\r\n return this;\r\n }\r\n}\r\n","import { Matrix2 } from './Matrix2';\r\n\r\nlet r = new Matrix2();\r\nexport function RotateUVs(geo: THREE.Geometry)\r\n{\r\n r.set(0, -1,\r\n 1, 0);\r\n\r\n for (let uvs of geo.faceVertexUvs)\r\n {\r\n for (let uv of uvs)\r\n {\r\n for (let v of uv)\r\n r.applyVector(v);\r\n }\r\n }\r\n geo.uvsNeedUpdate = true;\r\n}\r\n","import { ExtrudeGeometry, Matrix4, Mesh, Shape, Vector2 } from 'three';\r\nimport { Shape2 } from '../../DatabaseServices/Shape2';\r\nimport { AsVector3, equaln, polar } from '../../Geometry/GeUtils';\r\nimport { RotateUVs } from '../../Geometry/RotateUV';\r\n\r\nexport namespace CreateBoardUtil\r\n{\r\n //解析二维圆弧\r\n export class Arc2d\r\n {\r\n _StartAn: number;\r\n _EndAn: number;\r\n _StartPoint: Vector2;\r\n _EndPoint: Vector2;\r\n _Center: Vector2;\r\n _Radius: number;\r\n constructor(p1: Vector2, p2: Vector2, bul: number)\r\n {\r\n this._StartPoint = p1.clone();\r\n this._EndPoint = p2.clone();\r\n\r\n let vec: Vector2 = p2.clone().sub(p1);\r\n let len = vec.length();\r\n let an = vec.angle();\r\n this._Radius = len / Math.sin(2 * Math.atan(bul)) / 2;\r\n let allAngle = Math.atan(bul) * 4;\r\n let delDis = bul * len / 2;\r\n let toDis = this._Radius - delDis;\r\n an += Math.PI * 0.5;\r\n\r\n this._Center = p1.clone().add(p2);\r\n this._Center.multiplyScalar(0.5);\r\n\r\n polar(this._Center, an, toDis);\r\n\r\n this._StartAn = p1.clone().sub(this._Center).angle();\r\n this._EndAn = p2.clone().sub(this._Center).angle();\r\n if (bul < 0)\r\n {\r\n //一个神奇的特性 它需要这么做\r\n this._StartAn -= Math.PI;\r\n this._EndAn -= Math.PI;\r\n }\r\n }\r\n }\r\n\r\n\r\n //创建轮廓 通过点表和凸度\r\n export function CreatePath(pts: Vector2[], buls: number[]): Shape\r\n {\r\n let shape = new Shape2();\r\n if (pts.length === 0) return shape;\r\n let firstPt = pts[0];\r\n\r\n shape.moveTo(firstPt.x, firstPt.y);\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let nextPt = pts[i + 1];\r\n if (equaln(buls[i], 0, 1e-8))\r\n {\r\n shape.lineTo(nextPt.x, nextPt.y);\r\n }\r\n else\r\n {\r\n let pt = pts[i];\r\n //参考\r\n //http://www.dorodnic.com/blog/tag/three-js/ 绘制一个齿轮\r\n //https://www.kirupa.com/html5/drawing_circles_canvas.htm //html5\r\n let arc2 = new Arc2d(pt, nextPt, buls[i]);\r\n let cen = arc2._Center;\r\n shape.absarc(cen.x, cen.y, arc2._Radius, arc2._StartAn, arc2._EndAn, buls[i] < 0);\r\n }\r\n }\r\n return shape;\r\n }\r\n\r\n //创建板件 暂时这么写\r\n export function createBoard(boardData: object)\r\n {\r\n var pts: Vector2[] = new Array();\r\n var buls: number[] = new Array();\r\n var boardPts = boardData[\"Pts\"];\r\n var boardBuls = boardData[\"Buls\"];\r\n\r\n let boardHeight = boardData[\"H\"];\r\n\r\n var boardMat = new Matrix4();\r\n var matInv: Matrix4 = new Matrix4();\r\n //InitBoardMat\r\n {\r\n\r\n var xD = AsVector3(boardData[\"XVec\"]);\r\n var yD = AsVector3(boardData[\"YVec\"]);\r\n var ZD = AsVector3(boardData[\"ZVec\"]);\r\n var pBase = AsVector3(boardData[\"BasePoint\"]).multiplyScalar(0.001);\r\n\r\n boardMat.makeBasis(xD, yD, ZD);\r\n boardMat.setPosition(pBase);\r\n matInv.getInverse(boardMat);\r\n }\r\n\r\n for (let i = 0; i < boardPts.length; i++)\r\n {\r\n var pt = AsVector3(boardPts[i]).multiplyScalar(0.001);\r\n pt.applyMatrix4(matInv);\r\n pts.push(new Vector2(pt.x, pt.y));\r\n buls.push(boardBuls[i]);\r\n }\r\n\r\n var sp = CreatePath(pts, buls);\r\n var extrudeSettings = {\r\n steps: 1,\r\n bevelEnabled: false,\r\n amount: boardHeight * 0.001\r\n };\r\n\r\n var ext = new ExtrudeGeometry(sp, extrudeSettings);\r\n ext.translate(0, 0, -boardHeight * 0.001);\r\n ext.applyMatrix4(boardMat);\r\n\r\n if (boardData[\"BoardName\"] === \"地脚线\")\r\n {\r\n RotateUVs(ext);\r\n }\r\n\r\n var mesh = new Mesh(ext);\r\n return mesh;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { angle, clampRad, equalv3 } from \"./GeUtils\";\r\n\r\n//顶点\r\nexport interface Vertice\r\n{\r\n //位置\r\n position: Vector3;\r\n //路径\r\n routes: Route[];\r\n}\r\n\r\n//路线\r\nexport interface Route\r\n{\r\n curve: Curve; //路线的曲线\r\n from: Vertice;\r\n to: Vertice; //终点的点\r\n length: number;\r\n isReverse: boolean;\r\n an?: number; //角度\r\n\r\n s: Vector3;\r\n e: Vector3;\r\n}\r\n\r\n/**\r\n * 曲线连接图\r\n * 所有的顶点和边的关系\r\n */\r\nexport class CurveMap\r\n{\r\n constructor(\r\n public numdimensions = 4,\r\n public _RemoveSortLine = false,\r\n private multiplier = 10 ** numdimensions,\r\n ) { }\r\n\r\n /*\r\n 节点图.\r\n 每个节点对应下一个路口的路线表.\r\n 路口表使用逆时针排序,起始角度使用正x轴.\r\n */\r\n _VerticeMap = new Map();\r\n\r\n _Vertices: Vertice[] = [];\r\n\r\n /**\r\n * 得到节点图的所有站点列表\r\n */\r\n get Stands(): Vertice[]\r\n {\r\n return this._Vertices;\r\n }\r\n\r\n /**\r\n * @param curve\r\n * @param [isArc=curve instanceof Arc]\r\n * @param [removeDuplicate=false]\r\n * @returns 加入成功?\r\n */\r\n AddCurveToMap(curve: Curve, isArc: boolean = curve instanceof Arc, removeDuplicate: boolean = false, parseAngle = false): boolean\r\n {\r\n let sp = curve.StartPoint;\r\n let ep = curve.EndPoint;\r\n let startS = this.GetOnlyVertice(sp);\r\n let endS = this.GetOnlyVertice(ep);\r\n\r\n //在面域分析中,路线指向同一个顶点已经没有意义了\r\n if (this._RemoveSortLine && startS === endS)\r\n return false;\r\n\r\n if (removeDuplicate)//删除重复\r\n {\r\n let index = startS.routes.findIndex(r =>\r\n {\r\n if (r.to === endS && r.curve.constructor.name === curve.constructor.name)\r\n {\r\n if (isArc)\r\n return equalv3(curve.GetPointAtParam(0.5), r.curve.GetPointAtParam(0.5));\r\n return true;\r\n }\r\n });\r\n if (index !== -1) return false;\r\n }\r\n\r\n let length = curve.Length;\r\n curve.TempData = 0;\r\n\r\n let routeS2E: Route = { curve, isReverse: false, length, from: startS, to: endS, s: sp, e: ep };\r\n let routeE2S: Route = { curve, isReverse: true, length, from: endS, to: startS, e: sp, s: ep };\r\n\r\n if (!isArc && parseAngle)\r\n {\r\n let an = angle(endS.position.clone().sub(startS.position));\r\n routeS2E.an = an;\r\n routeE2S.an = clampRad(an + Math.PI);\r\n }\r\n startS.routes.push(routeS2E);\r\n endS.routes.push(routeE2S);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * 获得唯一的顶点\r\n */\r\n GetOnlyVertice(p: Vector3): Vertice\r\n {\r\n let gp = this.GenerateP(p);\r\n if (this._VerticeMap.has(gp))\r\n return this._VerticeMap.get(gp);\r\n\r\n let vertice: Vertice = { position: gp, routes: [] };\r\n this._VerticeMap.set(p, vertice);\r\n this._Vertices.push(vertice);\r\n return vertice;\r\n }\r\n\r\n _LookupTable: { [key: string]: Vector3; } = {};\r\n\r\n /**\r\n * 生成一个唯一的向量.\r\n */\r\n GenerateP(p: Vector3): Vector3\r\n {\r\n let key = \"\";\r\n let els = p.toArray();\r\n for (let n of els)\r\n {\r\n let valueQuantized = Math.round(n * this.multiplier);\r\n key += valueQuantized + '/';\r\n }\r\n\r\n if (key in this._LookupTable)\r\n return this._LookupTable[key];\r\n\r\n let hashparts = els.map((el) =>\r\n {\r\n let q0 = Math.floor(el * this.multiplier);\r\n let q1 = q0 + 1;\r\n return ['' + q0 + '/', '' + q1 + '/'];\r\n });\r\n\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n key = '';\r\n hashparts.forEach(function (hashpart)\r\n {\r\n key += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this._LookupTable[key] = p;\r\n }\r\n return p;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveIf, arrayRemoveOnce } from \"../Common/ArrayExt\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { CurveMap, Route, Vertice } from \"./CurveMap\";\r\nimport { angle } from \"./GeUtils\";\r\n\r\n//区域的路线表 表示了一个区域\r\ntype RegionRouteS = Route[][];\r\n\r\n/**\r\n面域分析,基于最小循环图重新实现的版本,拓展了实现求最大轮廓。\r\n当最大轮廓=最小轮廓时,只绘制最大轮廓(独立轮廓无分裂)。\r\n\r\n算法只实现去重模式,业务场景应该没有非去重模式。\r\n如果需要非去重模式,那么应该获取到多个CurveMap,然后对多个CurveMap进行面域分析,得出多个重叠的面域。\r\n */\r\nexport class RegionParse\r\n{\r\n //区域列表 通常是外轮廓\r\n RegionsOutline: RegionRouteS = [];\r\n //区域列表 通常是内轮廓\r\n RegionsInternal: RegionRouteS = [];\r\n\r\n //碎线 曲线进入到这里会被炸开.\r\n ExpLineMap: Map = new Map();\r\n\r\n private _CurveCount: number;\r\n\r\n /**\r\n * @param cuList 请不要传递圆和椭圆.\r\n * @param [numDimensions=3] 精度:小数点后个数\r\n * @param [removeDuplicate=true] 删除重复(现在必须是true,请不要修改它)\r\n */\r\n constructor(cuList: Curve[], public numDimensions = 3, private removeDuplicate = true)\r\n {\r\n //需要搜索的站\r\n let vertices = this.GenerateVerticeMap(cuList);\r\n\r\n //移除细丝\r\n while (true)\r\n {\r\n let v = vertices.find(v => v.routes.length < 2);\r\n if (v) this.RemoveFilamentAt(v, vertices);\r\n else break;\r\n }\r\n let lowerVertice: Vertice;\r\n while (vertices.length > 0)\r\n {\r\n lowerVertice = lowerVertice?.routes.length > 1 ? lowerVertice : this.FindLowerLeftStand(vertices);\r\n let minWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Min);\r\n let maxWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Max);\r\n\r\n this.RemoveEdge(minWalk[0]);\r\n this.RemoveFilamentAt(minWalk[0].from, vertices);\r\n this.RemoveFilamentAt(minWalk[0].to, vertices);\r\n\r\n minWalk = ReduceWalk(minWalk);\r\n maxWalk = ReduceWalk(maxWalk);\r\n if (maxWalk.length > 1)\r\n {\r\n this.RegionsOutline.push(maxWalk);\r\n if (minWalk.length === maxWalk.length && minWalk.every((w1, index) => w1 === maxWalk[index]))//大小重叠\r\n {\r\n //直接remove,不用计算引用个数\r\n for (let w of minWalk)\r\n {\r\n this.RemoveEdge(w);\r\n this.RemoveFilamentAt(w.from, vertices);\r\n this.RemoveFilamentAt(w.to, vertices);\r\n }\r\n continue;//继续循环\r\n }\r\n else\r\n for (let w of maxWalk)\r\n w.curve.TempData = 1;\r\n }\r\n\r\n if (minWalk.length > 1)// && minWalk.every(w => (w.curve.TempData) < 2) 没有重复线应该不会被用2次\r\n {\r\n this.RegionsInternal.push(minWalk);\r\n for (let w of minWalk)\r\n {\r\n w.curve.TempData++;\r\n if (w.curve.TempData === 2)\r\n {\r\n this.RemoveEdge(w);\r\n this.RemoveFilamentAt(w.from, vertices);\r\n this.RemoveFilamentAt(w.to, vertices);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n RemoveFilamentAt(v: Vertice, vertices: Vertice[])\r\n {\r\n let current = v;\r\n while (current && current.routes.length < 2)\r\n {\r\n vertices = arrayRemoveOnce(vertices, current);\r\n let r = current.routes[0];\r\n if (r)\r\n {\r\n this.RemoveEdge(r);\r\n current = r.to;\r\n }\r\n else\r\n current = undefined;\r\n }\r\n }\r\n\r\n RemoveEdge(r: Route)\r\n {\r\n let index = r.from.routes.findIndex(rr => rr.curve === r.curve);\r\n if (index !== -1)\r\n r.from.routes.splice(index, 1);\r\n\r\n index = r.to.routes.findIndex(rr => rr.curve === r.curve);\r\n if (index !== -1)\r\n r.to.routes.splice(index, 1);\r\n }\r\n\r\n /**\r\n * 找到最下方并且最左边的站 yx\r\n */\r\n private FindLowerLeftStand(vertices: Vertice[]): Vertice\r\n {\r\n return vertices.reduce((m, v) =>\r\n {\r\n let dy = v.position.y - m.position.y;\r\n if (dy < 0) return v;\r\n if (dy > 0) return m;\r\n return v.position.x - m.position.x < 0 ? v : m;\r\n });\r\n }\r\n\r\n /**\r\n * 构造路线图. 每个节点对应下一个路口的路线表. 路口表使用逆时针排序,起始角度使用正x轴.\r\n * @returns 所有的顶点\r\n */\r\n private GenerateVerticeMap(curveList: Curve[]): Array\r\n {\r\n let curveMap = new CurveMap(this.numDimensions, true);\r\n\r\n //将多段线炸开\r\n let plcus: Curve[] = [];\r\n arrayRemoveIf(curveList, c =>\r\n {\r\n if (c instanceof Polyline)\r\n {\r\n let cus = c.Explode();\r\n\r\n //如果为圆弧,提前打断\r\n let arcs: Arc[] = [];\r\n arrayRemoveIf(cus, c =>\r\n {\r\n if (c.Length < 1e-5) return true;\r\n\r\n if (c instanceof Arc)\r\n {\r\n let arcBrs = this.BreakArc(c);\r\n for (let arc of arcBrs)\r\n arcs.push(arc);\r\n }\r\n\r\n return false;\r\n });\r\n //加入到计算\r\n cus.push(...arcs);\r\n\r\n this.ExpLineMap.set(c, cus);\r\n plcus.push(...cus);\r\n return true;\r\n }\r\n return false;\r\n });\r\n curveList.push(...plcus);\r\n\r\n this._CurveCount = curveList.length;\r\n\r\n for (let cu of curveList)\r\n {\r\n //由于圆弧可能导致最低点计算错误的问题.\r\n if (cu instanceof Arc)\r\n {\r\n let arcs = this.BreakArc(cu);\r\n if (arcs.length > 1)\r\n {\r\n arcs.forEach(a => curveMap.AddCurveToMap(a, true, this.removeDuplicate, true));\r\n this.ExpLineMap.set(cu, arcs);\r\n continue;\r\n }\r\n else\r\n curveMap.AddCurveToMap(cu, true, this.removeDuplicate, true);\r\n }\r\n else\r\n curveMap.AddCurveToMap(cu, false, this.removeDuplicate, true);\r\n }\r\n\r\n //排序,根据角度逆时针排序.\r\n for (let v of curveMap._Vertices)\r\n {\r\n let minLength = Infinity;\r\n for (let r of v.routes)\r\n if (r.length < minLength) minLength = r.length;\r\n for (let r of v.routes)\r\n CalcRouteAngle(r, minLength * 0.2);\r\n v.routes.sort((r1, r2) => r1.an - r2.an);\r\n }\r\n return curveMap.Stands;\r\n }\r\n\r\n private BreakArc(arc: Arc): Arc[]\r\n {\r\n let underPt = arc.Center.add(new Vector3(0, -arc.Radius));\r\n let param = arc.GetParamAtPoint(underPt);\r\n if (param > 0.01 && param < 0.99)\r\n return arc.GetSplitCurves(param);\r\n else\r\n return [arc];\r\n }\r\n\r\n /**\r\n * 曲线是否已经被算法使用\r\n */\r\n GetCueveUsed(cu: Curve): boolean\r\n {\r\n if (this.ExpLineMap.has(cu))\r\n {\r\n let use = this.ExpLineMap.get(cu).some(c => c.TempData > 0);\r\n if (!use)\r\n this.ExpLineMap.delete(cu);\r\n return use;\r\n }\r\n else\r\n return cu.TempData > 0;\r\n }\r\n}\r\n\r\nfunction CalcRouteAngle(r: Route, length: number)\r\n{\r\n if (r.an !== undefined) return;\r\n let cu = r.curve;\r\n let p = r.isReverse ?\r\n cu.GetPointAtParam(cu.GetParamAtDist(r.length - length))\r\n : cu.GetPointAtParam(cu.GetParamAtDist(length));\r\n r.an = angle(p.sub(r.from.position));\r\n}\r\n\r\nenum WalkType\r\n{\r\n Min = 1,\r\n Max = -1,\r\n}\r\n\r\nfunction ClosedWalkFrom(startVertice: Vertice, maxRoute: number, type = WalkType.Min): Route[]\r\n{\r\n let walk: Route[] = [];\r\n let curVertice: Vertice = startVertice;\r\n let preRoute: Route;\r\n // console.log(\"start\", type, startVertice.position.toArray());\r\n do\r\n {\r\n let route = GetNextRoute(curVertice, preRoute, type);\r\n if (type === WalkType.Max && route.curve.TempData > 0)\r\n return [];\r\n // console.log(route.to.position.toArray());\r\n walk.push(route);\r\n [curVertice, preRoute] = [route.to, route];\r\n if (walk.length > maxRoute * 2)\r\n throw \"超过计算次数限制\";\r\n }\r\n while (curVertice !== startVertice);\r\n\r\n return walk;\r\n}\r\n\r\n/**\r\n * 删除中途回路\r\n */\r\nfunction ReduceWalk(w: Route[]): Route[]\r\n{\r\n if (w.length === 0) return w;\r\n //未构成回路,直接回家\r\n if (w[0].curve === arrayLast(w).curve) return [];\r\n\r\n for (let i = 0; i < w.length; i++)\r\n {\r\n let r1 = w[i];\r\n for (let j = w.length; j--;)\r\n {\r\n if (i === j) break;\r\n let r2 = w[j];\r\n if (r1.to === r2.to)\r\n {\r\n if (j > i)\r\n w.splice(i + 1, j - i);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return w;\r\n}\r\n\r\nfunction GetNextRoute(v: Vertice, prev?: Route, type: WalkType = WalkType.Min): Route\r\n{\r\n if (!prev)\r\n return arrayLast(v.routes); //顺时针 cw \\|/ 从左往右\r\n\r\n //逆时针 ccw 往左\r\n let index = v.routes.findIndex(r => r.curve === prev.curve);\r\n let newIndex = FixIndex(index + 1 * type, v.routes);\r\n return v.routes[newIndex];\r\n}\r\n","import { Vector3 } from 'three';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { IntersectOption } from './IntersectWith';\r\n\r\nexport enum BoolOpeartionType\r\n{\r\n Intersection = 0,\r\n Union = 1,\r\n Subtract = 2\r\n}\r\n\r\nconst fuzz = 1e-3;\r\nlet fuzzV3 = new Vector3(fuzz, fuzz, fuzz);\r\n\r\n//判断曲线是否在源封闭曲线内\r\nexport function isTargetCurInOrOnSourceCur(sourceCur: Polyline | Circle | Ellipse, targetCur: Curve)\r\n{\r\n if (!sourceCur.BoundingBox.expandByVector(fuzzV3).containsBox(targetCur.BoundingBox))\r\n return false;\r\n\r\n let cus: Curve[] = [];\r\n if (targetCur instanceof Polyline)\r\n cus = targetCur.Explode();\r\n else\r\n cus = [targetCur];\r\n\r\n return cus.every(c =>\r\n {\r\n let pts = getIntPtContextPts(sourceCur, c);\r\n if (pts.length <= 1)\r\n pts.push(c.StartPoint, c.EndPoint);\r\n return IsPtsAllInOrOnReg(sourceCur, pts);\r\n });\r\n}\r\n\r\n//获取交点处上下距0.01par的点\r\nfunction getIntPtContextPts(sourceCur: Curve, cu: Curve, pts: Vector3[] = [])\r\n{\r\n let interPts = cu.IntersectWith(sourceCur, IntersectOption.OnBothOperands);\r\n if (interPts.length > 0)\r\n {\r\n let pars = interPts.map(pt => cu.GetParamAtPoint(pt));\r\n for (let par of pars)\r\n {\r\n if (par >= 0.02)\r\n pts.push(cu.GetPointAtParam(par - 0.01));\r\n\r\n if (par <= (cu.EndParam - 0.02))\r\n pts.push(cu.GetPointAtParam(par + 0.01));\r\n }\r\n }\r\n return pts;\r\n}\r\n//判断点点是否全部都在封闭区域内或者在曲线上\r\nfunction IsPtsAllInOrOnReg(sourceReg: Polyline | Circle | Ellipse, pts: Vector3[])\r\n{\r\n return pts.every(pt =>\r\n {\r\n //是否点在封闭曲线内\r\n return sourceReg.PtOnCurve(pt) || sourceReg.PtInCurve(pt);\r\n });\r\n}\r\n\r\n//判断点是否全部都在封闭区域外或者在曲线上\r\nexport function IsPtsAllOutOrOnReg(sourceReg: Polyline | Circle, pts: Vector3[])\r\n{\r\n return pts.every(pt =>\r\n {\r\n //是否点在封闭曲线内\r\n return sourceReg.PtOnCurve(pt) || !sourceReg.PtInCurve(pt);\r\n });\r\n}\r\n","import { Line, Material, Object3D, Shape, Vector3 } from 'three';\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { Status } from '../../Common/Status';\r\nimport { equaln, equalv3 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectResult } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Entity } from './Entity';\r\n\r\nexport enum ExtendType\r\n{\r\n /**\r\n * 前后都不延伸\r\n */\r\n None = 0,\r\n /**\r\n * 只允许延伸前面\r\n */\r\n Front = 1,\r\n /**\r\n * 只允许延伸后面\r\n */\r\n Back = 2,\r\n /**\r\n * 前后延伸\r\n */\r\n Both = 3,\r\n}\r\n\r\n/**\r\n * 曲线的基类,子类请实现以下方法.\r\n */\r\n@Factory\r\nexport abstract class Curve extends Entity\r\n{\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Is2D()\r\n {\r\n return equaln(this._Matrix.elements[14], 0);\r\n }\r\n\r\n get StartPoint(): Vector3 { return; }\r\n set StartPoint(v: Vector3) { return; }\r\n get StartParam(): number { return; }\r\n get EndPoint(): Vector3 { return; }\r\n set EndPoint(v: Vector3) { return; }\r\n\r\n /** 曲线中点 */\r\n get Midpoint()\r\n {\r\n return this.GetPointAtParam(this.MidParam);\r\n }\r\n\r\n get MidParam()\r\n {\r\n if (this.EndParam === 1)\r\n return 0.5;\r\n else\r\n return this.GetParamAtDist(this.Length * 0.5);\r\n }\r\n\r\n get EndParam(): number { return; }\r\n get Area(): number { return 0; }\r\n /**\r\n *获得曲线的面积,逆时针为正,顺时针为负.\r\n */\r\n get Area2(): number { return 0; }\r\n get Length(): number { return 0; }\r\n get IsClose(): boolean { return false; }\r\n /** 曲线为顺时针 */\r\n get IsClockWise(): boolean { return this.Area2 < 0; }\r\n\r\n abstract get Shape(): Shape;\r\n\r\n GetPointAtParam(param: number): Vector3 { return; }\r\n GetPointAtDistance(distance: number): Vector3 { return; }\r\n GetDistAtParam(param: number): number { return; }\r\n GetDistAtPoint(pt: Vector3): number { return; }\r\n GetParamAtPoint(pt: Vector3): number { return; }\r\n GetParamAtPoint2(pt: Vector3): number { return this.GetParamAtPoint(pt); }\r\n\r\n GetParamAtDist(d: number): number { return; }\r\n\r\n /**\r\n * 返回曲线在指定位置的一阶导数(在wcs内)\r\n *\r\n * @param {(number | Vector3)} param\r\n * @returns {Vector3}\r\n * @memberof Curve\r\n */\r\n GetFistDeriv(param: number | Vector3): Vector3 { return; }\r\n GetFistDerivAngle(param: number | Vector3): number\r\n {\r\n let d = this.GetFistDeriv(param);\r\n return Math.atan2(d.y, d.x);\r\n }\r\n\r\n /**\r\n * 返回切割曲线后的结果.总是从起点开始切割,并且按顺序返回曲线.\r\n * @param {(number[] | number)} param\r\n * @returns {Array}\r\n */\r\n GetSplitCurves(param: number[] | number): Array { return; }\r\n //未完善\r\n GetCurveAtParamRange(startParam: number, EndParam: number): Array { return; }\r\n GetSplitCurvesByPts(pt: Vector3[] | Vector3): Array\r\n {\r\n let pts = Array.isArray(pt) ? pt : [pt];\r\n let pars = pts.map(p => this.GetParamAtPoint(p));\r\n return this.GetSplitCurves(pars);\r\n }\r\n protected SplitParamSort(param: number[] | number): number[]\r\n {\r\n if (Array.isArray(param))\r\n {\r\n param = param.filter(p => this.ParamOnCurve(p));\r\n if (param.length === 0)\r\n return [];\r\n param.push(0, this.EndParam);\r\n arraySortByNumber(param);\r\n arrayRemoveDuplicateBySort(param, (e1, e2) => equaln(e1, e2, 1e-7));\r\n return param;\r\n }\r\n else if (this.ParamOnCurve(param))\r\n return [0, param, this.EndParam];\r\n else\r\n return [];\r\n }\r\n Extend(newParam: number) { }\r\n /**\r\n * 连接曲线到本曲线,如果成功返回true\r\n * @param {Curve} cu 需要连接的曲线\r\n * @returns {boolean} 连接成功\r\n * @memberof Curve\r\n */\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-4): Status { return Status.False; }\r\n\r\n //翻转曲线.首尾调换.\r\n Reverse(): this { return this; }\r\n\r\n //点在曲线上\r\n PtOnCurve(pt: Vector3, fuzz = 1e-6): boolean\r\n {\r\n return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt));\r\n }\r\n\r\n //点在曲线中,不在起点或者终点.\r\n PtOnCurve2(pt: Vector3): boolean\r\n {\r\n return !(equalv3(this.StartPoint, pt, 1e-6) || equalv3(this.EndPoint, pt, 1e-6)) && this.ParamOnCurve(this.GetParamAtPoint(pt), 0);\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n return this.PtOnCurve(p, fuzz);\r\n }\r\n\r\n //参数在曲线上 容差,1e-6\r\n ParamOnCurve(param: number, fuzz = 1e-6): boolean { return !isNaN(param) && param >= -fuzz && param <= this.EndParam + fuzz; }\r\n GetOffsetCurves(offsetDist: number): Array { return; }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3 { return; }\r\n\r\n /**\r\n * 曲线相交点\r\n */\r\n IntersectWith(curve: Curve, intType: IntersectOption, tolerance = 1e-6): Vector3[]\r\n {\r\n return this.IntersectWith2(curve, intType, tolerance).map(r => r.pt);\r\n }\r\n\r\n /**\r\n * 曲线相交点和点的参数\r\n */\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-6): IntersectResult[] { return []; }\r\n\r\n\r\n /**\r\n * 拽托点个数\r\n */\r\n GetDragPointCount(drag: DragPointType): number { return 0; }\r\n\r\n //------------------绘制相关------------------\r\n //重载\r\n protected OnlyRenderType = true;\r\n\r\n /**\r\n * 重载:更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (type === RenderType.WireframePrint)\r\n {\r\n //打印模式暂时不需要改颜色\r\n }\r\n else\r\n {\r\n let m = obj as Line;\r\n m.material = material || ColorMaterial.GetLineMaterial(this._Color);\r\n }\r\n }\r\n\r\n UpdateJigMaterial(color = 8)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n this.UpdateDrawObjectMaterial(type, obj, ColorMaterial.GetLineMaterial(color));\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { curveLinkGroup, equalCurve } from \"../Common/CurveUtils\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { IntersectBox2 } from \"../Geometry/Box\";\r\nimport { Route } from \"../Geometry/CurveMap\";\r\nimport { equaln, equalv3 } from \"../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../Geometry/RegionParse\";\r\nimport { isTargetCurInOrOnSourceCur } from \"../GraphicsSystem/BoolOperateUtils\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\nimport { Arc } from \"./Entity/Arc\";\r\nimport { Circle } from \"./Entity/Circle\";\r\nimport { Curve } from \"./Entity/Curve\";\r\nimport { Polyline } from \"./Entity/Polyline\";\r\n\r\nlet cache = new WeakMap();\r\n\r\nconst COMBINE_FUZZ = 1e-2;\r\n\r\nexport class Contour\r\n{\r\n private _Curve: Polyline | Circle;\r\n\r\n protected SetCurve(cu: Polyline | Circle)\r\n {\r\n if (cu instanceof Polyline)\r\n {\r\n if (cu.Area2 < 0)\r\n cu.Reverse();\r\n }\r\n this._Curve = cu;\r\n }\r\n /**会将传入的闭合轮廓改为逆时针 */\r\n static CreateContour(cus: Curve[] | Polyline | Circle, needLink = true)\r\n {\r\n if (cus instanceof Curve)\r\n {\r\n if (cus.IsClose)\r\n {\r\n let c = new Contour();\r\n c.SetCurve(cus);\r\n return c;\r\n }\r\n return;\r\n }\r\n\r\n let closeCurve = Contour.Combine(cus, needLink, COMBINE_FUZZ) as Polyline | Circle;\r\n if (closeCurve && closeCurve.IsClose)\r\n {\r\n if (closeCurve instanceof Polyline && closeCurve.CloseMark === false)\r\n {\r\n closeCurve.CloseMark = true;\r\n closeCurve.RemoveVertexAt(closeCurve.NumberOfVertices - 1);\r\n }\r\n\r\n let c = new Contour();\r\n c.SetCurve(closeCurve);\r\n return c;\r\n }\r\n }\r\n get Curve(): Polyline | Circle\r\n {\r\n return this._Curve;\r\n }\r\n get Area()\r\n {\r\n return this._Curve.Area;\r\n }\r\n get BoundingBox()\r\n {\r\n return this._Curve.BoundingBox;\r\n }\r\n /**\r\n * 不等比例缩放\r\n * @param {number} ref 缩放参考值,大于该值的点缩放\r\n * @param {number} dist 缩放距离\r\n * @param {string} dir x y z\r\n */\r\n UnEqualProportionScale(ref: number, dist: number, dir: \"x\" | \"y\")\r\n {\r\n let cu = this._Curve;\r\n if (cu instanceof Polyline)\r\n {\r\n let lineData = cu.LineData;\r\n let length = lineData.length;\r\n let p = cu.Position[dir];\r\n\r\n let moveIndexs: number[] = [];\r\n for (let i = 0; i < length; i++)\r\n {\r\n if (lineData[i].pt[dir] + p > ref)\r\n moveIndexs.push(i);\r\n }\r\n let moveVec = new Vector3();\r\n moveVec[dir] = dist;\r\n cu.MoveStretchPoints(moveIndexs, moveVec);\r\n return true;\r\n }\r\n return false;\r\n }\r\n Clone()\r\n {\r\n return Contour.CreateContour([this._Curve.Clone()]);\r\n }\r\n //交集:结果数组为空则失败\r\n IntersectionBoolOperation(target: Contour): Contour[]\r\n {\r\n if (!IntersectBox2(this.BoundingBox, target.BoundingBox))\r\n return [];\r\n let resultCus = this.GetIntersetAndUnionList(target);\r\n return Contour.GetAllContour(resultCus.intersectionList);\r\n }\r\n //并集:结果轮廓数组长度大于2,则失败.等于1则成功.\r\n UnionBoolOperation(target: Contour): { contours: Contour[], holes: Contour[]; }\r\n {\r\n let resultCus = this.GetIntersetAndUnionList(target);\r\n\r\n //快速\r\n if (resultCus.unionList.every(c => c.IsClose))\r\n return {\r\n contours: Contour.GetAllContour(resultCus.unionList),\r\n holes: [],\r\n };\r\n\r\n //并集后的线段表如果有共线的直接合并起来\r\n let cus: Curve[] = [];\r\n for (let pl of resultCus.unionList)\r\n {\r\n if (pl instanceof Polyline)\r\n cus.push(...pl.Explode());\r\n else\r\n cus.push(pl);\r\n }\r\n let cuGroups = curveLinkGroup(cus);\r\n for (let g of cuGroups)\r\n {\r\n for (let i = 0; i < g.length; i++)\r\n {\r\n let c1 = g[i];\r\n let nextI = FixIndex(i + 1, g);\r\n let c2 = g[nextI];\r\n\r\n let status = c1.Join(c2);\r\n if (status === Status.True)\r\n {\r\n g.splice(nextI, 1);\r\n i--;\r\n }\r\n else if (status === Status.ConverToCircle)\r\n {\r\n g.length = 0;\r\n let a = c1 as Arc;\r\n g.push(new Circle(a.Center, a.Radius));\r\n break;\r\n }\r\n }\r\n }\r\n let allContour = Contour.GetAllContour(cuGroups);\r\n if (allContour.length < 2)\r\n {\r\n return {\r\n contours: allContour,\r\n holes: [],\r\n };\r\n }\r\n else\r\n {\r\n let cache = new WeakMap();\r\n for (let c of allContour)\r\n cache.set(c, c.Area);\r\n allContour.sort((a, b) => cache.get(b) - cache.get(a));\r\n return {\r\n contours: [allContour[0]],\r\n holes: allContour.slice(1)\r\n };\r\n }\r\n\r\n }\r\n //差集:等于0完全被减去\r\n SubstactBoolOperation(target: Contour): Contour[]\r\n {\r\n let subtractList = this.GetSubtractList(target);\r\n\r\n //纯网洞\r\n if (subtractList.every(c => c.IsClose))\r\n return Contour.GetAllContour(subtractList);\r\n\r\n let regParse = new RegionParse(subtractList, 2);\r\n\r\n let contours: Contour[] = [];\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c\r\n && !equalCurve(c.Curve, this.Curve)\r\n && !equalCurve(c.Curve, target.Curve)\r\n && c.Area > 1e-3)\r\n contours.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n\r\n return contours;\r\n }\r\n /**\r\n * 计算与目标轮廓布尔运算后的结果曲线.\r\n */\r\n GetIntersetAndUnionList(target: Contour): { intersectionList: Curve[], unionList: Curve[]; }\r\n {\r\n let intersectionList: Curve[] = [];\r\n let unionList: Curve[] = [];\r\n\r\n let sourceOutline = this._Curve;\r\n let targetOutline = target.Curve;\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3);\r\n\r\n //可能会有提升,但是好像不大(并且还有更慢的趋势)\r\n // if (!sourceOutline.BoundingBox.intersectsBox(targetOutline.BoundingBox, 1e-3))\r\n // return { intersectionList, unionList };\r\n\r\n let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n\r\n let sourceContainerTarget: boolean;\r\n let targetContainerSource: boolean;\r\n if (sourceOutline.Area > targetOutline.Area)\r\n {\r\n sourceContainerTarget = interPts.length === 0 ? fastCurveInCurve(sourceOutline as Polyline, targetOutline as Polyline) : this.CuInOutline(targetOutline);\r\n targetContainerSource = false;\r\n }\r\n else\r\n {\r\n sourceContainerTarget = false;\r\n targetContainerSource = interPts.length === 0 ? fastCurveInCurve(targetOutline as Polyline, sourceOutline as Polyline) : target.CuInOutline(sourceOutline);\r\n }\r\n\r\n //包含.相交.分离(三种状态)\r\n if (sourceContainerTarget)//源包含目标\r\n {\r\n intersectionList.push(targetOutline);\r\n unionList.push(sourceOutline);\r\n }\r\n else if (targetContainerSource)//目标包含源\r\n {\r\n unionList.push(targetOutline);\r\n intersectionList.push(sourceOutline);\r\n }\r\n else if (interPts.length <= 1)//分离\r\n {\r\n unionList.push(sourceOutline, targetOutline);\r\n }\r\n else//相交 interPts.length > 0\r\n {\r\n let pars1 = interPts.map(r => r.thisParam);\r\n let pars2 = interPts.map(r => r.argParam);\r\n\r\n let sourceCus: Array = sourceOutline.GetSplitCurves(pars1);\r\n let targetCus: Array = targetOutline.GetSplitCurves(pars2);\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let hasEqualCus = false;\r\n for (let i = 0; i < targetCus.length; i++)\r\n {\r\n let cu = targetCus[i];\r\n hasEqualCus = fastEqualCurve(cu, pl);\r\n if (hasEqualCus)\r\n {\r\n //方向相同\r\n if (\r\n equalv3(cu.GetFistDeriv(cu.EndParam * 0.5).normalize(), pl.GetFistDeriv(pl.EndParam * 0.5).normalize(), 1e-3)\r\n === isEqualNormal\r\n )\r\n {\r\n unionList.push(pl);\r\n intersectionList.push(pl);\r\n }\r\n targetCus.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n if (hasEqualCus)\r\n continue;\r\n\r\n if (fastCurveInCurve(targetOutline, pl))\r\n intersectionList.push(pl);\r\n else\r\n unionList.push(pl);\r\n }\r\n\r\n for (let pl of targetCus)\r\n {\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n intersectionList.push(pl);\r\n else\r\n unionList.push(pl);\r\n }\r\n\r\n //特殊的分离\r\n if (intersectionList.length === 0 && unionList.length === (sourceCus.length + targetCus.length))\r\n {\r\n return { intersectionList, unionList: [sourceOutline, targetOutline] };\r\n }\r\n }\r\n return { intersectionList, unionList };\r\n }\r\n GetSubtractList(target: Contour): Polyline[]\r\n {\r\n let sourceOutline = this._Curve as Polyline;\r\n let targetOutline = target.Curve as Polyline;\r\n\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3);\r\n\r\n let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n\r\n if (interPts.length <= 1)\r\n {\r\n //反包含\r\n if (fastCurveInCurve2(targetOutline, sourceOutline) || equalCurve(targetOutline, sourceOutline))\r\n return [];\r\n //包含\r\n if (fastCurveInCurve2(sourceOutline, targetOutline))\r\n return [sourceOutline, targetOutline];\r\n else//分离\r\n return [sourceOutline];\r\n }\r\n\r\n //相交\r\n let subtractList: Polyline[] = [];\r\n let sourceCus = sourceOutline.GetSplitCurves(interPts.map(r => r.thisParam)) as Polyline[];\r\n let targetCus = targetOutline.GetSplitCurves(interPts.map(r => r.argParam)) as Polyline[];\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let plMidParam = pl.MidParam;\r\n let plDir = pl.GetFistDeriv(plMidParam).normalize();\r\n\r\n let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl));\r\n if (index !== -1)\r\n {\r\n let cu = targetCus[index];\r\n let cuMidParam = cu.MidParam;\r\n let cuDir = cu.GetFistDeriv(cuMidParam).normalize();\r\n\r\n if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3))//不同向\r\n subtractList.push(pl);\r\n\r\n targetCus.splice(index, 1);\r\n\r\n continue;\r\n }\r\n if (!fastCurveInCurve(targetOutline, pl))\r\n subtractList.push(pl);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceCus.length;\r\n\r\n for (let pl of targetCus)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceCus.length)\r\n return [sourceOutline];\r\n\r\n return subtractList;\r\n }\r\n GetSubtractListByMoreTargets(targets: Contour[])\r\n {\r\n let { holes, subtractList } = this.GetSubListWithCus(targets);\r\n\r\n //纯网洞\r\n if (subtractList.every(c => c.IsClose))\r\n return {\r\n holes: holes.map(h => Contour.CreateContour(h)),\r\n outlines: Contour.GetAllContour(subtractList)\r\n };\r\n\r\n let regParse = new RegionParse(subtractList, 2);\r\n\r\n let contours: Contour[] = [];\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c\r\n && !equalCurve(c.Curve, this.Curve)\r\n && targets.every(target => !equalCurve(c.Curve, target.Curve))\r\n && c.Area > 1e-3)\r\n contours.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n\r\n return {\r\n holes: holes.map(h => Contour.CreateContour(h)),\r\n outlines: contours\r\n };\r\n\r\n }\r\n GetSubListWithCus(targets: Contour[])\r\n {\r\n let sourceOutline = this._Curve as Polyline;\r\n let subtractList: Polyline[] = [];\r\n let holes: Polyline[] = [];\r\n let intPars: number[] = [];\r\n let cuMap = new Map();\r\n\r\n let outBox = sourceOutline.BoundingBox;\r\n\r\n for (let con of targets)\r\n {\r\n const targetOutline = con.Curve as Polyline;\r\n\r\n if (!IntersectBox2(outBox, targetOutline.BoundingBox))\r\n continue;\r\n\r\n let pts = sourceOutline.IntersectWith2(con.Curve, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n if (pts.length <= 1)\r\n {\r\n //反包含\r\n if (fastCurveInCurve2(targetOutline, sourceOutline) || equalCurve(targetOutline, sourceOutline))\r\n return { holes, subtractList };\r\n //包含\r\n if (fastCurveInCurve2(sourceOutline, targetOutline))\r\n holes.push(targetOutline);\r\n else//分离\r\n {\r\n\r\n }\r\n }\r\n else\r\n {\r\n intPars.push(...pts.map(r => r.thisParam));\r\n cuMap.set(targetOutline, pts.map(r => r.argParam));\r\n }\r\n }\r\n intPars.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(intPars, (e1, e2) => equaln(e1, e2, 1e-8));\r\n let sourceCus = sourceOutline.GetSplitCurves(intPars) as Polyline[];\r\n let targetCus: Polyline[] = [];\r\n\r\n let targetMap = new WeakMap();\r\n\r\n let isEqualNormal: boolean;\r\n\r\n for (let [c, pars] of cuMap)\r\n {\r\n let cus = c.GetSplitCurves(pars) as Polyline[];\r\n cus.forEach(cu => targetMap.set(cu, c));\r\n targetCus.push(...cus);\r\n }\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let plMidParam = pl.MidParam;\r\n let plDir = pl.GetFistDeriv(plMidParam).normalize();\r\n\r\n let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl, 0.05));\r\n if (index !== -1)\r\n {\r\n let cu = targetCus[index];\r\n isEqualNormal = equalv3(sourceOutline.Normal, targetMap.get(cu).Normal, 1e-3);\r\n let cuMidParam = cu.MidParam;\r\n let cuDir = cu.GetFistDeriv(cuMidParam).normalize();\r\n\r\n if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3))//不同向\r\n subtractList.push(pl);\r\n\r\n targetCus.splice(index, 1);\r\n\r\n continue;\r\n }\r\n\r\n if (targets.every(t => !fastCurveInCurve(t.Curve as Polyline, pl)))\r\n subtractList.push(pl);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceCus.length;\r\n\r\n for (let pl of targetCus)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceCus.length)\r\n return { subtractList: [sourceOutline], holes };\r\n\r\n return { subtractList, holes };\r\n\r\n }\r\n /**\r\n * 获得全部闭合曲线\r\n * @若传入二维曲线数据,将默认子数组为闭合曲线段\r\n */\r\n static GetAllContour(cus: Curve[] | Curve[][]): Contour[]\r\n {\r\n if (cus.length === 0)\r\n return [];\r\n\r\n let cuGroups: Curve[][];\r\n if (Array.isArray(cus[0]))\r\n cuGroups = cus as Curve[][];\r\n else\r\n cuGroups = curveLinkGroup(cus as Curve[]);\r\n\r\n let contours: Contour[] = [];\r\n\r\n for (let g of cuGroups)\r\n contours.push(Contour.CreateContour(g, false));\r\n return contours.filter(c => c !== undefined && !equaln(c.Area, 0, 1e-6));\r\n }\r\n /**\r\n * 合并曲线组成为多段线\r\n * @param cus 曲线组\r\n * @param [needLink=true] 需要解析成首尾连接状态\r\n * @returns 单一曲线,如果返回超过1个,其他的将被遗弃.\r\n */\r\n static Combine(cus: Curve[], needLink = true, tolerance = 1e-3): Curve\r\n {\r\n if (cus.length === 0) return undefined;\r\n\r\n let groups = needLink ? curveLinkGroup(cus) : [cus];\r\n for (let g of groups)\r\n {\r\n if (g.length === 1)\r\n return g[0].Clone();\r\n else\r\n {\r\n if (cache.has(g))\r\n return cache.get(g);\r\n\r\n let gclone = g.map(c => c.Clone());\r\n\r\n arrayRemoveDuplicateBySort(gclone, (cu1: Curve, cu2: Curve) => cu1.Join(cu2, false, tolerance) === Status.True);\r\n\r\n if (gclone.length > 1 && gclone[0].Join(arrayLast(gclone), false, tolerance))\r\n gclone.pop();\r\n\r\n let pl = Polyline.Combine(gclone, tolerance);\r\n\r\n cache.set(g, pl);\r\n\r\n return pl;\r\n }\r\n }\r\n }\r\n get Shape(): THREE.Shape\r\n {\r\n return this._Curve.Shape;\r\n }\r\n CuInOutline(targetCur: Curve)\r\n {\r\n return isTargetCurInOrOnSourceCur(this._Curve, targetCur);\r\n }\r\n Equal(tar: Contour)\r\n {\r\n return equalCurve(this._Curve, tar._Curve);\r\n }\r\n}\r\n\r\n/**\r\n * 对于轮廓切割后的曲线判断相同,使用这个函数进行快速判断\r\n */\r\nfunction fastEqualCurve(c1: Curve, c2: Curve, tolerance = 1e-3)\r\n{\r\n let sp1 = c1.StartPoint;\r\n let ep1 = c1.EndPoint;\r\n let sp2 = c2.StartPoint;\r\n let ep2 = c2.EndPoint;\r\n\r\n if (!(\r\n (equalv3(sp1, sp2, tolerance) && equalv3(ep1, ep2, tolerance))\r\n || (equalv3(sp1, ep2, tolerance) && equalv3(ep1, sp2, tolerance))\r\n ))\r\n return false;\r\n\r\n return equalv3(c1.Midpoint, c2.Midpoint, tolerance);\r\n}\r\n\r\n\r\n//对于双多段线互相切割后的结果,快速判断曲线是否在另一条曲线内部\r\n//也许有一天这个中点算法需要改一下, 使用 src\\Geometry\\ExtrudeEdgeGeometry2.ts->CenterPoint 会比较稳妥\r\nfunction fastCurveInCurve(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.GetPointAtParam(targetCu.EndParam * 0.5));\r\n}\r\n\r\nfunction fastCurveInCurve2(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.StartPoint) &&\r\n sourceCu.PtInCurve(targetCu.GetPointAtParam(targetCu.EndParam * 0.5));\r\n}\r\n","import { Line3, Plane, Ray, Vector3 } from \"three\";\r\n\r\nexport class PlaneExt extends Plane\r\n{\r\n constructor(normal = new Vector3(0, 0, 1), constant?: number | Vector3)\r\n {\r\n super(normal);\r\n if (typeof constant === \"number\")\r\n this.constant = constant;\r\n else if (constant)\r\n this.constant = -this.normal.dot(constant);\r\n }\r\n\r\n intersectLine(line: Line3, optionalTarget = new Vector3(), extendLine = false): Vector3\r\n {\r\n let v1 = new Vector3();\r\n\r\n let direction = line.delta(v1);\r\n\r\n let denominator = this.normal.dot(direction);\r\n\r\n if (denominator === 0)\r\n {\r\n // line is coplanar, return origin\r\n if (this.distanceToPoint(line.start) === 0)\r\n {\r\n return optionalTarget.copy(line.start);\r\n }\r\n // Unsure if this is the correct method to handle this case.\r\n return undefined;\r\n }\r\n\r\n let t = - (line.start.dot(this.normal) + this.constant) / denominator;\r\n //If you not extendLine,check intersect point in Line\r\n if (!extendLine && (t < -1e-6 || t > 1))\r\n {\r\n return undefined;\r\n }\r\n\r\n return optionalTarget.copy(direction).multiplyScalar(t).add(line.start);\r\n }\r\n intersectRay(ray: Ray, optionalTarget?: Vector3, extendLine?: boolean): Vector3\r\n {\r\n // 从射线初始位置\r\n let line = new Line3(ray.origin.clone(), ray.origin.clone().add(ray.direction));\r\n return this.intersectLine(line, optionalTarget, extendLine);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Matrix3, Matrix4, Object3D, Shape, Vector3, Line as TLine, MathUtils } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getDeterminantFor2V, getArcOrCirNearPts, getTanPtsOnEllipse, Pts2Polyline } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { angle, equaln, equalv3, MoveMatrix, rotatePoint, angleTo, AsVector2, AsVector3 } from '../../Geometry/GeUtils';\r\nimport { IntersectEllipse, IntersectEllipseAndCircleOrArc, IntersectEllipseAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Arc } from './Arc';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\n\r\n@Factory\r\nexport class Ellipse extends Curve\r\n{\r\n private _radX: number;\r\n private _radY: number;\r\n private _rotate: number;\r\n private _startAngle = 0;\r\n private _endAngle = Math.PI * 2;\r\n constructor(\r\n center?: Vector3,\r\n radX: number = 1e-3,\r\n radY: number = 1e-3,\r\n angle: number = 0)\r\n {\r\n super();\r\n center && this._Matrix.setPosition(center);\r\n this._radX = radX;\r\n this._radY = radY;\r\n this._rotate = angle;\r\n }\r\n get StartParam(): number\r\n {\r\n return 0;\r\n }\r\n get EndParam(): number\r\n {\r\n return 1;\r\n }\r\n get StartPoint()\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get EndPoint()\r\n {\r\n return this.GetPointAtParam(1);\r\n }\r\n get Shape(): Shape\r\n {\r\n let sp = new Shape();\r\n sp.ellipse(0, 0, this._radX, this._radY, this._startAngle, this._endAngle, false, this._rotate);\r\n return sp;\r\n }\r\n get IsClose(): boolean\r\n {\r\n return equaln(this.TotalAngle, Math.PI * 2);\r\n }\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(v);\r\n this.Update();\r\n }\r\n get RadX()\r\n {\r\n return this._radX;\r\n }\r\n set RadX(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._radX = v;\r\n this.Update();\r\n }\r\n get RadY()\r\n {\r\n return this._radY;\r\n }\r\n set RadY(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._radY = v;\r\n this.Update();\r\n }\r\n get Rotation()\r\n {\r\n return this._rotate;\r\n }\r\n set Rotation(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._rotate = v;\r\n this.Update();\r\n }\r\n get StartAngle()\r\n {\r\n return this._startAngle;\r\n }\r\n get EndAngle()\r\n {\r\n return this._startAngle;\r\n }\r\n set StartAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._startAngle = v;\r\n this.Update();\r\n }\r\n set EndAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._endAngle = v;\r\n this.Update();\r\n }\r\n get Length()\r\n {\r\n let a = this._radX;\r\n let b = this._radY;\r\n return Math.PI * Math.abs(3 * (a + b) - Math.sqrt((3 * a + b) * (a + 3 * b))) * this.TotalAngle / Math.PI * 0.5;\r\n }\r\n get Area()\r\n {\r\n let area = Math.PI * this._radX * this._radY;\r\n let an = this._endAngle - this._startAngle;\r\n if (an < 0)\r\n an = Math.PI * 2 + an;\r\n area *= an / Math.PI * 0.5;\r\n let area2 = Math.abs(\r\n getDeterminantFor2V(\r\n AsVector2(this.StartPoint.sub(this.Center)),\r\n AsVector2(this.EndPoint.sub(this.Center)))\r\n ) / 2;\r\n if (an < Math.PI)\r\n area -= area2;\r\n else\r\n area += area2;\r\n return area;\r\n }\r\n get TotalAngle()\r\n {\r\n let totolAngle = this._endAngle - this._startAngle;\r\n if (totolAngle < 0)\r\n totolAngle = Math.PI * 2 + totolAngle;\r\n return totolAngle;\r\n }\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3().setFromPoints(this.GetGripPoints());\r\n }\r\n PtInCurve(pt: Vector3)\r\n {\r\n let p = rotatePoint(pt.clone().sub(this.Center), -this.Rotation);\r\n return p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2 < 1;\r\n }\r\n PtOnCurve(pt: Vector3)\r\n {\r\n if (this.PtOnEllipse(pt))\r\n {\r\n let a = this.GetCircleAngleAtPoint(pt);\r\n return a <= this.TotalAngle + 1e-6;\r\n }\r\n return false;\r\n }\r\n PtOnEllipse(pt: Vector3)\r\n {\r\n let p = rotatePoint(pt.clone().applyMatrix4(this.OCSInv), -this.Rotation);\r\n return equaln(p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2, 1, 1e-3);\r\n }\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.TotalAngle * param + this._startAngle;\r\n\r\n if (an > Math.PI)\r\n an -= 2 * Math.PI;\r\n\r\n let a = this.RadX;\r\n let b = this.RadY;\r\n let pt = new Vector3(a * Math.cos(an), b * Math.sin(an), 0);\r\n\r\n pt.applyMatrix4(new Matrix4().makeRotationZ(this._rotate));\r\n\r\n return pt.applyMatrix4(this.OCS);\r\n }\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnEllipse(pt))\r\n {\r\n return NaN;\r\n }\r\n let an = this.GetCircleAngleAtPoint(pt);\r\n let par = an / this.TotalAngle;\r\n\r\n if (this.IsClose || par < 1 + 1e-6)\r\n return par;\r\n else\r\n {\r\n let diffPar = Math.PI * 2 / this.TotalAngle - 1;\r\n if (par - 1 < diffPar / 2)\r\n return par;\r\n else\r\n return par - 1 - diffPar;\r\n }\r\n }\r\n GetPointAtDistance(distance: number)\r\n {\r\n let param = distance / this.Length;\r\n return this.GetPointAtParam(param);\r\n }\r\n GetDistAtParam(param: number)\r\n {\r\n return this.Length * param;\r\n }\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n GetAngleAtParam(par: number)\r\n {\r\n let pt = this.GetPointAtParam(par).applyMatrix4(this.OCSInv).applyMatrix4(new Matrix4().makeRotationZ(-this.Rotation));\r\n return angle(pt) + this._startAngle;\r\n }\r\n GetCircleAngleAtPoint(pt: Vector3)\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv);\r\n let an = angle(pt) - this._rotate;\r\n if (an < 0)\r\n an = Math.PI * 2 - an;\r\n if (an > Math.PI * 2)\r\n an -= Math.PI * 2;\r\n let dist = pt.length();\r\n let k = dist * Math.cos(an) / this._radX;\r\n if (Math.abs(k) > 1)\r\n k = Math.floor(Math.abs(k)) * Math.sign(k);\r\n if (Math.abs(an) <= Math.PI)\r\n an = Math.acos(k);\r\n else\r\n an = Math.PI * 2 - Math.acos(k);\r\n\r\n an -= this._startAngle;\r\n\r\n if (an < 0)\r\n an = Math.PI * 2 + an;\r\n return an;\r\n }\r\n\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n if (typeof pt === \"number\")\r\n pt = this.GetPointAtParam(pt);\r\n else\r\n pt = pt.clone();\r\n\r\n let refPts = this.GetGripPoints();\r\n\r\n let p = pt.clone().applyMatrix4(this.OCSInv).applyMatrix4(new Matrix4().makeRotationZ(-this._rotate));\r\n let vec = new Vector3();\r\n if (equalv3(pt, refPts[0]))\r\n vec.set(0, 1, 0);\r\n else if (equalv3(pt, refPts[1]))\r\n {\r\n vec.set(0, -1, 0);\r\n }\r\n else if (p.y > 0)\r\n {\r\n let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y);\r\n vec.set(-1, -k, 0);\r\n }\r\n else\r\n {\r\n let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y);\r\n vec.set(1, k, 0);\r\n }\r\n vec.applyMatrix4(new Matrix4().makeRotationZ(this._rotate));\r\n\r\n return vec.applyMatrix4(new Matrix4().extractRotation(this.OCS));\r\n }\r\n GetClosestPointTo(p: Vector3, extend: boolean): Vector3\r\n {\r\n //参考:https://wet-robots.ghost.io/simple-method-for-distance-to-ellipse/\r\n let ro = new Matrix4().makeRotationZ(this._rotate);\r\n let roInv = new Matrix4().getInverse(ro);\r\n let pt = p.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(roInv);\r\n let px = pt.x;\r\n let py = pt.y;\r\n let t = angle(pt);\r\n let a = this._radX;\r\n let b = this._radY;\r\n let x: number, y: number;\r\n for (let i = 0; i < 3; i++)\r\n {\r\n x = a * Math.cos(t);\r\n y = b * Math.sin(t);\r\n let ex = (a ** 2 - b ** 2) * Math.cos(t) ** 3 / a;\r\n let ey = (b * b - a * a) * Math.sin(t) ** 3 / b;\r\n let rx = x - ex;\r\n let ry = y - ey;\r\n let qx = px - ex;\r\n let qy = py - ey;\r\n\r\n let r = Math.sqrt(ry ** 2 + rx ** 2);\r\n let q = Math.sqrt(qy ** 2 + qx ** 2);\r\n\r\n let dc = r * Math.asin((rx * qy - ry * qx) / (r * q));\r\n let dt = dc / Math.sqrt(a * a + b * b - x * x - y * y);\r\n\r\n t += dt;\r\n }\r\n let retPt = new Vector3(x, y).applyMatrix4(ro).applyMatrix4(this.OCS);\r\n if (this.IsClose || extend)\r\n {\r\n return retPt;\r\n }\r\n else if (this.PtOnCurve(retPt))\r\n {\r\n return retPt;\r\n }\r\n else\r\n {\r\n let d1 = p.distanceToSquared(this.StartPoint);\r\n let d2 = p.distanceToSquared(this.EndPoint);\r\n return d1 < d2 ? this.StartPoint : this.EndPoint;\r\n }\r\n }\r\n GetOffsetCurves(offsetDist: number)\r\n {\r\n if ((offsetDist + Math.min(this._radX, this._radY)) > 0)\r\n {\r\n let el = this.Clone();\r\n el.RadX = this._radX + offsetDist;\r\n el.RadY = this._radY + offsetDist;\r\n return [el];\r\n }\r\n return [];\r\n }\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params: number[];\r\n if (param instanceof Array)\r\n {\r\n params = param.filter(p => this.ParamOnCurve(p));\r\n params.sort((a1, a2) => a2 - a1);//从大到小\r\n }\r\n else\r\n params = [param];\r\n\r\n //补上最后一个到第一个的弧\r\n if (this.IsClose)\r\n params.unshift(arrayLast(params));\r\n else\r\n {\r\n params.unshift(1);\r\n params.push(0);\r\n }\r\n arrayRemoveDuplicateBySort(params);\r\n\r\n let anglelist = params.map(param => this.TotalAngle * param + this._startAngle);\r\n let elllist: this[] = [];\r\n for (let i = 0; i < anglelist.length - 1; i++)\r\n {\r\n let sa = anglelist[i];\r\n let ea = anglelist[i + 1];\r\n let el = this.Clone();\r\n if (!equaln(sa, ea, 1e-6))\r\n {\r\n el.StartAngle = ea;\r\n el.EndAngle = equaln(sa, 0) ? Math.PI * 2 : sa;\r\n elllist.push(el);\r\n }\r\n }\r\n return elllist;\r\n }\r\n Join(el: Ellipse)\r\n {\r\n if (this.IsClose || el.IsClose || !this.IsCoplaneTo(el) || !equalv3(el.Center, this.Center))\r\n return Status.False;\r\n\r\n let status = Status.False;\r\n\r\n if (equaln(this._endAngle, this._startAngle))\r\n {\r\n this.EndAngle = this._endAngle;\r\n status = Status.True;\r\n }\r\n else if (equaln(this._startAngle, el._endAngle))\r\n {\r\n this.StartAngle = el._startAngle;\r\n status = Status.True;\r\n }\r\n if (status === Status.True && !this.IsClose && equaln(this._startAngle, this._endAngle))\r\n {\r\n this.StartAngle = 0;\r\n this.EndAngle = Math.PI * 2;\r\n }\r\n return status;\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n {\r\n let pts = this.GetGripPoints();\r\n return pts;\r\n }\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Nea:\r\n {\r\n return getArcOrCirNearPts(this, pickPoint, viewXform);\r\n }\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n return [this.GetClosestPointTo(lastPoint, false)];\r\n }\r\n case ObjectSnapMode.Tan:\r\n {\r\n //TODO:过某点获取椭圆全部切点\r\n if (lastPoint)\r\n {\r\n return getTanPtsOnEllipse(this, lastPoint);\r\n }\r\n }\r\n default:\r\n return [];\r\n }\r\n }\r\n IntersectWith2(curve: Curve, intType: IntersectOption)\r\n {\r\n //TODO:优化椭圆和椭圆,椭圆和圆相交\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectEllipseAndLine(curve, this, reverseIntersectOption(intType)));\r\n }\r\n else if (curve instanceof Circle || curve instanceof Arc)\r\n {\r\n return IntersectEllipseAndCircleOrArc(this, curve, intType);\r\n }\r\n else if (curve instanceof Polyline)\r\n {\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, intType));\r\n }\r\n else if (curve instanceof Ellipse)\r\n {\r\n return IntersectEllipse(this, curve, intType);\r\n }\r\n else\r\n return [];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let line = new TLine(this.UpdateGeometry(), ColorMaterial.GetLineMaterial(this._Color));\r\n this.UpdateDrawObject(renderType, line);\r\n return line;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let geo = (obj as TLine).geometry as BufferGeometry;\r\n this.UpdateGeometry(geo);\r\n }\r\n //更新Geometry\r\n private UpdateGeometry(geo?: BufferGeometry)\r\n {\r\n if (!geo)\r\n geo = new BufferGeometry();\r\n let curve = this.Shape;\r\n geo.setFromPoints(curve.getPoints(60));\r\n return geo;\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let tmpMat4 = new Matrix4().makeRotationZ(this.Rotation);\r\n let pts = [\r\n new Vector3(this._radX, 0),\r\n new Vector3(-this._radX, 0),\r\n new Vector3(0, this._radY),\r\n new Vector3(0, -this._radY)\r\n ].map(p => p.applyMatrix4(tmpMat4).applyMatrix4(this.OCS));\r\n\r\n if (!equaln(0, this._startAngle))\r\n pts.push(this.StartPoint);\r\n if (!equaln(0, this._endAngle))\r\n pts.push(this.EndPoint);\r\n\r\n pts.push(this.Center);\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n let pts = this.GetStretchPoints();\r\n\r\n if (indexList.length > 0)\r\n {\r\n let p = pts[indexList[0]].clone();\r\n p.add(vec);\r\n\r\n if (indexList[0] <= 1)\r\n this.RadX = p.distanceTo(this.Center);\r\n else if (indexList[0] <= 3)\r\n this.RadY = p.distanceTo(this.Center);\r\n else\r\n {\r\n let p1 = pts[indexList[0]];\r\n //TODO:跟cad不一致待优化\r\n if (equalv3(p1, this.StartPoint))\r\n {\r\n let v1 = p1.clone().sub(this.Center);\r\n let v2 = p.clone().sub(this.Center);\r\n let an = angleTo(v1, v2);\r\n this.StartAngle = this.StartAngle + an;\r\n }\r\n else if (equalv3(p1, this.EndPoint))\r\n {\r\n let v1 = p1.clone().sub(this.Center);\r\n let v2 = p.clone().sub(this.Center);\r\n let an = angleTo(v2, v1);\r\n this.EndAngle = this.EndAngle + an;\r\n }\r\n else\r\n this.Center = p;\r\n }\r\n }\r\n }\r\n Convert2Polyline(count = 0)\r\n {\r\n const MIN_LEN = 80;\r\n const par = this.TotalAngle / Math.PI * 0.5;\r\n if (!count)\r\n {\r\n count = Math.floor(this.Length / par / MIN_LEN);\r\n count = MathUtils.clamp(count, 15, 80);\r\n }\r\n\r\n count = Math.floor(count * par);\r\n\r\n if ((count & 1) === 0)\r\n count++;\r\n\r\n let pts = this.Shape.getPoints(count);\r\n if (this.IsClose)\r\n pts.pop();\r\n\r\n let pl = Pts2Polyline(pts, this.IsClose);\r\n pl.ApplyMatrix(this.OCS);\r\n if (this.IsClose)\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._radX = file.Read();\r\n this._radY = file.Read();\r\n this._rotate = file.Read();\r\n this._startAngle = file.Read();\r\n this._endAngle = file.Read();\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);\r\n file.Write(this.RadX);\r\n file.Write(this.RadY);\r\n file.Write(this.Rotation);\r\n file.Write(this._startAngle);\r\n file.Write(this._endAngle);\r\n }\r\n\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Line3, Matrix3, Matrix4, Object3D, Shape, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { PlaneExt } from '../../Geometry/Plane';\r\nimport { IntersectEllipseAndLine, IntersectLineAndArc, IntersectLineAndCircle, IntersectLineAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Arc } from './Arc';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Polyline } from './Polyline';\r\n\r\n@Factory\r\nexport class Line extends Curve\r\n{\r\n\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3)\r\n {\r\n super();\r\n }\r\n\r\n get Is2D()\r\n {\r\n return super.Is2D && equaln(this._StartPoint.z, 0) && equaln(this._EndPoint.z, 0);\r\n }\r\n\r\n get Shape()\r\n {\r\n return new Shape([AsVector2(this._StartPoint), AsVector2(this._EndPoint)]);\r\n }\r\n\r\n Z0()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.StartPoint = this.StartPoint.setZ(0);\r\n this.EndPoint = this.EndPoint.setZ(0);\r\n return this;\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.StartPoint = this.StartPoint.applyMatrix4(m);\r\n this.EndPoint = this.EndPoint.applyMatrix4(m);\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this.StartPoint = sp;\r\n this.EndPoint = ep;\r\n return this;\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let geo = BufferGeometryUtils.CreateFromPts([this._StartPoint, this._EndPoint]);\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry();\r\n geometry.setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, lineObj: TLine)\r\n {\r\n BufferGeometryUtils.UpdatePts(lineObj.geometry as BufferGeometry, [this._StartPoint, this._EndPoint]);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return [this.StartPoint, this.EndPoint];\r\n case ObjectSnapMode.Mid:\r\n return [this.GetPointAtParam(0.5)];\r\n case ObjectSnapMode.Nea:\r\n {\r\n let derv = this.GetFistDeriv(0).normalize();\r\n let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3);\r\n\r\n //平行不捕捉\r\n if (isParallelTo(viewNormal, derv))\r\n return [];\r\n\r\n let fNormal = new Vector3().crossVectors(viewNormal, derv);\r\n fNormal.crossVectors(derv, fNormal);\r\n\r\n let plane = new PlaneExt(fNormal, this.StartPoint);\r\n let plocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true);\r\n let pclosest = this.GetClosestPointTo(plocal, false);\r\n return [pclosest];\r\n }\r\n case ObjectSnapMode.Ext:\r\n return [this.GetClosestPointTo(pickPoint, true)];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(lastPoint, true);\r\n if (this.ParamOnCurve(param))\r\n return [closestPt];\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this.StartPoint, this.GetPointAtParam(0.5), this.EndPoint];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n if (index === 0)\r\n this.StartPoint = this.StartPoint.add(vec);\r\n else if (index === 2)\r\n this.EndPoint = this.EndPoint.add(vec);\r\n else\r\n {\r\n let m = MoveMatrix(vec);\r\n this.ApplyMatrix(m);\r\n }\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n if (index === 0)\r\n this.StartPoint = this.StartPoint.add(vec);\r\n else\r\n this.EndPoint = this.EndPoint.add(vec);\r\n }\r\n }\r\n\r\n GetFistDeriv(param: number | Vector3): Vector3\r\n {\r\n return this.EndPoint.sub(this.StartPoint);\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4)\r\n {\r\n if (curve instanceof Line)\r\n {\r\n return IntersectLineAndLine(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectLineAndArc(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectLineAndCircle(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Polyline)\r\n {\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n\r\n if (curve instanceof Ellipse)\r\n return IntersectEllipseAndLine(this, curve, intType, tolerance);\r\n\r\n //其他的尚未实现.\r\n return [];\r\n }\r\n\r\n //Param\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this.StartPoint.add(this.GetFistDeriv(0).multiplyScalar(param));\r\n }\r\n GetParamAtPoint(pt: Vector3): number\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(pt, true);\r\n if (!equalv3(closestPt, pt, 1e-5))\r\n return NaN;\r\n return param;\r\n }\r\n GetParamAtDist(d: number): number\r\n {\r\n return d / this.Length;\r\n }\r\n GetPointAtDistance(distance: number): Vector3\r\n {\r\n return this.GetPointAtParam(this.GetParamAtDist(distance));\r\n }\r\n GetDistAtParam(param: number): number\r\n {\r\n return this.Length * param;\r\n }\r\n GetDistAtPoint(pt: Vector3): number\r\n {\r\n return this.GetDistAtParam(this.GetParamAtPoint(pt));\r\n }\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params = this.SplitParamSort(param);\r\n let pts = params.map(param => this.GetPointAtParam(param));\r\n let ret = new Array();\r\n if (pts.length >= 2)\r\n {\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let newLine = this.Clone() as Line;\r\n newLine.ColorIndex = this.ColorIndex;\r\n newLine.StartPoint = pts[i];\r\n newLine.EndPoint = pts[i + 1];\r\n ret.push(newLine);\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n GetParamAtPoint2(pt: Vector3): number\r\n {\r\n let { param } = this.GetClosestAtPoint(pt, true);\r\n return param;\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n let { param } = this.GetClosestAtPoint(p, true);\r\n return this.ParamOnCurve(param, fuzz);\r\n }\r\n\r\n GetClosestAtPoint(pt: Vector3, extend: boolean): { closestPt: Vector3, param: number; }\r\n {\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n if (equalv3(pt, sp, 1e-8))\r\n return { closestPt: sp, param: 0 };\r\n else if (equalv3(pt, ep, 1e-8))\r\n return { closestPt: ep, param: 1 };\r\n\r\n let direction = this.GetFistDeriv(0);\r\n let length = direction.length();\r\n\r\n if (length === 0)\r\n {\r\n let param = NaN;\r\n if (equalv3(pt, this.StartPoint, 1e-6))\r\n param = 0;\r\n return { closestPt: sp, param: param };\r\n }\r\n\r\n direction.divideScalar(length);\r\n\r\n let diff = pt.clone().sub(sp);\r\n let param = direction.dot(diff);\r\n\r\n let closestPt: Vector3;\r\n if (extend)\r\n closestPt = sp.add(direction.multiplyScalar(param));\r\n else\r\n if (param < 0)\r\n {\r\n closestPt = sp;\r\n param = 0;\r\n }\r\n else if (param > length)\r\n {\r\n closestPt = this.EndPoint;\r\n param = length;\r\n }\r\n else\r\n closestPt = sp.add(direction.multiplyScalar(param));\r\n return {\r\n closestPt: closestPt,\r\n param: param / length\r\n };\r\n }\r\n\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.GetClosestAtPoint(pt, extend).closestPt;\r\n }\r\n\r\n Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < this.StartParam)\r\n {\r\n this.StartPoint = this.GetPointAtParam(newParam);\r\n }\r\n else if (newParam > this.EndParam)\r\n {\r\n this.EndPoint = this.GetPointAtParam(newParam);\r\n }\r\n }\r\n\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-5): Status\r\n {\r\n if (cu instanceof Line)\r\n {\r\n //平行\r\n if (!isParallelTo(this.GetFistDeriv(0).normalize(), cu.GetFistDeriv(0).normalize()))\r\n return Status.False;\r\n\r\n let sp = cu.StartPoint;\r\n let { closestPt: cp1, param: param1 } = this.GetClosestAtPoint(sp, true);\r\n if (!equalv3(sp, cp1, tolerance))//点在曲线上,允许较低的精度\r\n return Status.False;\r\n\r\n let ep = cu.EndPoint;\r\n let { closestPt: cp2, param: param2 } = this.GetClosestAtPoint(ep, true);\r\n if (!equalv3(ep, cp2, tolerance))\r\n return Status.False;\r\n\r\n if (param1 > param2)\r\n {\r\n [param1, param2] = [param2, param1];\r\n [sp, ep] = [ep, sp];\r\n }\r\n\r\n if (allowGap || Math.max(0, param1) < Math.min(1, param2) + tolerance / this.Length)//这里的容差是值容差,但是我们用它来判断参数,所以进行转换\r\n {\r\n if (param1 < 0)\r\n this.StartPoint = sp;\r\n if (param2 > 1)\r\n this.EndPoint = ep;\r\n return Status.True;\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n [this._StartPoint, this._EndPoint] = [this._EndPoint, this._StartPoint];\r\n return this;\r\n }\r\n\r\n GetOffsetCurves(offsetDist: number): Array\r\n {\r\n let derv = this.GetFistDeriv(0).normalize().multiplyScalar(offsetDist);\r\n derv.applyMatrix4(new Matrix4().makeRotationAxis(this.Normal, -Math.PI / 2));\r\n let newLine = this.Clone() as Line;\r\n newLine.StartPoint = this.StartPoint.add(derv);\r\n newLine.EndPoint = this.EndPoint.add(derv);\r\n return [newLine];\r\n }\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3().setFromPoints([this.StartPoint, this.EndPoint]);\r\n }\r\n\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return 1;\r\n }\r\n //属性\r\n get Length(): number { return this._StartPoint.distanceTo(this._EndPoint); }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._StartPoint.fromArray(file.Read());\r\n this._EndPoint.fromArray(file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.Write(this._StartPoint.toArray());\r\n file.Write(this._EndPoint.toArray());\r\n }\r\n //#endregion-----------------------------File End-----------------------------\r\n\r\n //#region 属性\r\n set StartPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCS);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCS);\r\n }\r\n set EndPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline } from \"../Common/CurveUtils\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { IntersectsBox } from \"../Geometry/Box\";\r\nimport { CurveMap, Route, Vertice } from \"../Geometry/CurveMap\";\r\nimport { angle, equaln, equalv2, equalv3, IdentityMtx4, SelectNearP } from \"../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\ninterface IOffsetResult\r\n{\r\n index: number;\r\n curve: Curve;\r\n sp?: Vector3;\r\n preArc?: Curve;\r\n ep?: Vector3;\r\n nextArc?: Curve;\r\n paddingCurve?: Curve[];\r\n}\r\n\r\nclass CurveTreeNode\r\n{\r\n children: CurveTreeNode[];\r\n box: Box3;\r\n used: boolean;\r\n constructor(public curve: Curve, box?: Box3)\r\n {\r\n this.box = box || curve.BoundingBox;\r\n }\r\n\r\n TrimBy(contour: Contour, box: Box3)\r\n {\r\n if (IntersectsBox(box, this.box))\r\n {\r\n if (this.children !== undefined)\r\n {\r\n for (let c of this.children)\r\n c.TrimBy(contour, box);\r\n }\r\n else\r\n {\r\n if (contour.Curve instanceof Circle && this.curve instanceof Arc)\r\n {\r\n if (equalv3(contour.Curve.Center, this.curve.Center))\r\n {\r\n if (contour.Curve.Radius > this.curve.Radius + 1e-4)\r\n this.children = [];\r\n\r\n return;\r\n }\r\n }\r\n\r\n //交点参数列表\r\n let iParams = this.curve.IntersectWith(contour.Curve, IntersectOption.OnBothOperands)\r\n .map(p => this.curve.GetParamAtPoint2(p));\r\n\r\n let cus = this.curve.GetSplitCurves(iParams);\r\n if (cus.length === 0)\r\n {\r\n let p = this.curve.GetPointAtParam(0.5);\r\n if (box.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p)))\r\n this.children = [];\r\n }\r\n else\r\n {\r\n this.children = [];\r\n for (let c of cus)\r\n {\r\n let p = c.GetPointAtParam(0.5);\r\n if (CurveIsFine(c) && (!(box.containsPoint(p) && contour.Curve.PtInCurve(p)) || contour.Curve.PtOnCurve(p)))\r\n this.children.push(new CurveTreeNode(c));\r\n }\r\n if (this.children.length === cus.length)\r\n this.children = undefined;\r\n }\r\n }\r\n }\r\n }\r\n\r\n get Nodes()\r\n {\r\n if (!this.children) return [this];\r\n else\r\n {\r\n let cus: CurveTreeNode[] = [];\r\n for (let c of this.children)\r\n cus.push(...c.Nodes);\r\n return cus;\r\n }\r\n }\r\n}\r\n\r\nexport class OffsetPolyline\r\n{\r\n //多段线信息\r\n _CacheOCS: Matrix4;\r\n _Vertexs: Vector3[];\r\n _SubCurves: Curve[];\r\n _Circles: Circle[];\r\n\r\n //偏移子曲线\r\n _SubOffsetedCurves: IOffsetResult[];\r\n //用于裁剪的曲线节点\r\n _CurveTreeNodes: CurveTreeNode[];\r\n //裁剪完的曲线节点\r\n _CurveTrimedTreeNodes: CurveTreeNode[];\r\n\r\n //裁剪轮廓\r\n _TrimPolylineContours: Contour[];\r\n _TrimCircleContours: Circle[];\r\n _TrimArcContours: Contour[];\r\n\r\n //结果曲线\r\n _RetCurves: Polyline[];\r\n\r\n _IsClose: boolean;\r\n _OffsetDistSign: number;\r\n\r\n constructor(public _Polyline: Polyline, public _OffsetDist: number, public _ToolPath = false,\r\n private _OffsetDistSq = (_OffsetDist ** 2) * 2.1//对直角走刀不进行圆弧过度\r\n )\r\n {\r\n }\r\n\r\n Do(): Polyline[]\r\n {\r\n this._OffsetDistSign = Math.sign(this._OffsetDist);\r\n this._TrimPolylineContours = [];\r\n this._TrimCircleContours = [];\r\n this._TrimArcContours = [];\r\n\r\n this._RetCurves = [];\r\n this._CurveTreeNodes = [];\r\n\r\n this.InitSubCurves();\r\n if (this._SubCurves.length === 0)\r\n return this._RetCurves;\r\n\r\n this.GeneralCirclesAndVertexs();\r\n this.OffsetSubCurves();\r\n this.LinkSubCurves();\r\n\r\n if (this._SubOffsetedCurves.length === 0)\r\n {\r\n this._SubOffsetedCurves.push({ curve: this._Circles[0], index: 0, paddingCurve: this._Circles.slice(1) });\r\n\r\n this._TrimPolylineContours.push(\r\n ...this._Circles.map(c => Contour.CreateContour(c, false)),\r\n ...this._SubCurves.map(c => Contour.CreateContour([c, new Line(c.StartPoint, c.EndPoint)], false))\r\n );\r\n }\r\n else\r\n this.GeneralTrimContours();\r\n this.TrimByContours();\r\n this.FilterInvalidCurve();\r\n this.JoinCollinear();\r\n this.LinkResultPolyline();\r\n return this._RetCurves;\r\n }\r\n\r\n InitSubCurves()\r\n {\r\n this._CacheOCS = this._Polyline.OCS;\r\n this._IsClose = this._Polyline.IsClose;\r\n this._Polyline.OCS = IdentityMtx4;\r\n this._SubCurves = this._Polyline.Explode().filter(c => c.Length > 1e-4);\r\n this._Polyline.OCS = this._CacheOCS;\r\n return this;\r\n }\r\n\r\n protected GeneralCirclesAndVertexs()\r\n {\r\n this._Vertexs = this._SubCurves.map(c => c.StartPoint);\r\n let lastCu = arrayLast(this._SubCurves);\r\n if (!equalv3(lastCu.EndPoint, this._Vertexs[0], 1e-3))\r\n this._Vertexs.push(lastCu.EndPoint);\r\n\r\n let radius = Math.abs(this._OffsetDist);\r\n this._Circles = this._Vertexs.map(p => new Circle(p, radius));\r\n }\r\n\r\n protected OffsetSubCurves()\r\n {\r\n this._SubOffsetedCurves = [];\r\n for (let index = 0; index < this._SubCurves.length; index++)\r\n {\r\n let curveOld = this._SubCurves[index];\r\n if (curveOld.Length > 1e-6)\r\n {\r\n let curve = curveOld.GetOffsetCurves(this._OffsetDist)[0];\r\n if (curve)\r\n this._SubOffsetedCurves.push({ curve, index });\r\n else\r\n this._TrimArcContours.push(Contour.CreateContour([curveOld, new Line(curveOld.StartPoint, curveOld.EndPoint)], false));\r\n }\r\n }\r\n }\r\n\r\n //连接(延伸)曲线,或者补(圆弧,直线)\r\n protected LinkSubCurves()\r\n {\r\n let count = this._SubOffsetedCurves.length;\r\n if (!this._IsClose) count--;\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let curveResNow = this._SubOffsetedCurves[i];\r\n let iNext = FixIndex(i + 1, this._SubOffsetedCurves);\r\n let curveResNext = this._SubOffsetedCurves[iNext];\r\n let curveNow = curveResNow.curve;\r\n let curveNext = curveResNext.curve;\r\n let isNeighbor = FixIndex(curveResNow.index + 1, this._SubCurves) === curveResNext.index;\r\n\r\n if (isNeighbor)\r\n {\r\n let sp = curveNow.EndPoint;\r\n let ep = curveNext.StartPoint;\r\n //直连\r\n if (equalv3(sp, ep, 1e-3))\r\n continue;\r\n\r\n let iPts = curveNow.IntersectWith(curveNext, IntersectOption.ExtendBoth);\r\n let tPts = iPts.filter(p => curveNow.PtOnCurve3(p) && curveNext.PtOnCurve3(p));\r\n\r\n let code = EntityEncode2(curveNow, curveNext);\r\n\r\n let tp: Vector3;\r\n if (code === 1)\r\n {\r\n if (tPts.length > 0)//不走刀或者有真交点 this._ToolPath === false ||\r\n tp = iPts[0];\r\n else\r\n {\r\n if (iPts.length > 0 && curveNow.GetParamAtPoint(iPts[0]) > 1)\r\n {\r\n let refP = this._Vertexs[curveResNext.index];\r\n let distSq = iPts[0].distanceToSquared(refP);\r\n if (this._ToolPath && distSq > this._OffsetDistSq)\r\n {\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];\r\n this._TrimCircleContours.push(this._Circles[curveResNext.index]);\r\n }\r\n else\r\n tp = iPts[0];\r\n }\r\n // else\r\n // curveResNow.paddingCurve = [new Line(sp, ep)];\r\n }\r\n }\r\n else\r\n {\r\n let refP = this._Vertexs[curveResNext.index];\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(iPts, refP);\r\n else //补单圆 或者尝试连接\r\n {\r\n let arc = this.CreateArc(refP, sp, ep);\r\n\r\n if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext, refP))\r\n {\r\n //设置新的连接点,并且备份旧点\r\n let oldp: Vector3;\r\n if (curveResNow.sp)\r\n {\r\n oldp = curveNow.StartPoint;\r\n curveNow.StartPoint = curveResNow.sp;\r\n }\r\n let oldp2: Vector3;\r\n if (curveResNext.ep)\r\n {\r\n oldp2 = curveNext.EndPoint;\r\n curveNext.EndPoint = curveResNext.ep;\r\n }\r\n\r\n let p: Vector3;\r\n\r\n if (code === 2 && iPts.length === 2)\r\n {\r\n let c = curveNow as Arc;\r\n let minArc = new Arc(c.Center, c.Radius, c.EndAngle, 0, c.IsClockWise);\r\n\r\n let p1 = iPts[0];\r\n let a1 = minArc.GetAngleAtPoint(p1);\r\n let anAll1 = c.ParamOnCurve(c.GetParamAtAngle(a1)) ? Infinity : minArc.ComputeAnlge(a1);\r\n\r\n let p2 = iPts[1];\r\n let a2 = minArc.GetAngleAtPoint(p2);\r\n let anAll2 = c.ParamOnCurve(c.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2);\r\n\r\n if (anAll2 < anAll1)\r\n p = p2;\r\n else\r\n p = p1;\r\n }\r\n else\r\n p = SelectNearP(iPts, refP);\r\n\r\n let onPre: boolean;\r\n let param = curveNow.GetParamAtPoint2(p);\r\n if (curveNow instanceof Line)\r\n onPre = param > 1;\r\n else\r\n onPre = param < 0 || param > 1;\r\n\r\n let onNext: boolean = false;\r\n if (onPre)\r\n {\r\n let param2 = curveNext.GetParamAtPoint2(p);\r\n if (curveNext instanceof Line)\r\n onNext = param2 < 0;\r\n else\r\n onNext = param2 < 0 || param2 > 1;\r\n }\r\n\r\n if (curveResNow.sp)\r\n curveNow.StartPoint = oldp;\r\n if (curveResNext.ep)\r\n curveNext.EndPoint = oldp2;\r\n\r\n if (onPre && onNext)\r\n tp = p;\r\n else\r\n curveResNow.paddingCurve = [arc];\r\n }\r\n else\r\n curveResNow.paddingCurve = [arc];\r\n\r\n this._TrimCircleContours.push(this._Circles[curveResNext.index]);\r\n }\r\n }\r\n if (tp)\r\n {\r\n curveResNow.ep = tp;\r\n curveResNext.sp = tp;\r\n\r\n curveResNow.nextArc = curveNext;\r\n curveResNext.preArc = curveNow;\r\n }\r\n }\r\n else\r\n {\r\n let padCirs: Circle[] = [];\r\n for (let s = FixIndex(curveResNow.index + 1, this._Circles); ; s = FixIndex(s + 1, this._Circles))\r\n {\r\n let c = this._Circles[s];\r\n this._TrimCircleContours.push(c);\r\n padCirs.push(c);\r\n if (s === curveResNext.index)\r\n break;\r\n }\r\n curveResNow.paddingCurve = padCirs;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n private IsSharpCorner(curveResNow: IOffsetResult, curveResNext: IOffsetResult, refP: Vector3): boolean\r\n {\r\n let v1 = this._SubCurves[curveResNow.index].GetPointAtParam(0.9);\r\n let v2 = this._SubCurves[curveResNext.index].GetPointAtParam(0.1);\r\n v1.subVectors(refP, v1);\r\n v2.sub(refP);\r\n v1.cross(v2);\r\n return Math.sign(v1.z) === this._OffsetDistSign;\r\n }\r\n\r\n protected GeneralTrimContours()\r\n {\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let cu2 = d.curve;\r\n if (d.sp && d.ep)\r\n {\r\n let param1 = cu2.GetParamAtPoint(d.sp);\r\n let param2 = cu2.GetParamAtPoint(d.ep);\r\n\r\n if (cu2.ParamOnCurve(param1) && cu2.ParamOnCurve(param2) && param1 > param2)\r\n [d.sp, d.ep] = [d.ep, d.sp];\r\n }\r\n if (d.sp) cu2.StartPoint = d.sp;\r\n if (d.ep) cu2.EndPoint = d.ep;\r\n\r\n //这是极端情况,圆弧被压缩成0长度圆弧,本质是空圆弧(我们会在下面判断它)(因为精度的问题)\r\n //因为精度的问题,这种0圆心角的圆弧会被当成全圆,但是偏移算法中,应该不可能出现全圆弧的圆弧,所以我们压扁它\r\n if (cu2 instanceof Arc\r\n && equaln(cu2.StartAngle, cu2.EndAngle, 1e-6)\r\n // && !equaln((this._SubCurves[d.index]).AllAngle, Math.PI * 2, 1e-3) 应该不会出现\r\n )\r\n {\r\n if (cu2.IsClockWise)\r\n cu2.StartAngle = cu2.EndAngle + 1e-6;\r\n else\r\n cu2.EndAngle = cu2.StartAngle + 1e-6;\r\n }\r\n }\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let cu1 = this._SubCurves[d.index];\r\n let cu2 = d.curve;\r\n\r\n let [p1, p2, p3, p4] = [cu1.StartPoint, cu2.StartPoint, cu1.EndPoint, cu2.EndPoint];\r\n let l1 = new Line(p1, p2);\r\n let l2 = new Line(p3, p4);\r\n\r\n let ipts = l1.IntersectWith(l2, IntersectOption.OnBothOperands, 1e-8);\r\n if (ipts.length > 0)\r\n {\r\n let p = ipts[0];\r\n l1.EndPoint = p;\r\n l2.EndPoint = p;\r\n let cus = [cu1, l1, l2];\r\n let contour = Contour.CreateContour(cus, false);\r\n if (contour)\r\n {\r\n this._TrimPolylineContours.push(contour);\r\n continue;\r\n }\r\n else\r\n {\r\n console.error(\"未预料到的错误,构建轮廓失败\" + this._OffsetDist);\r\n }\r\n }\r\n\r\n //真理1:针脚线不可能同时被两个圆弧所切割\r\n let l1Intact = true;\r\n let l2Intact = true;\r\n if (cu2 instanceof Arc)\r\n {\r\n if (Math.sign(cu2.Bul) !== this._OffsetDistSign)\r\n {\r\n let ipts1 = cu2.IntersectWith(l1, IntersectOption.OnBothOperands);\r\n let ipts2 = cu2.IntersectWith(l2, IntersectOption.OnBothOperands);\r\n\r\n let sp: Vector3;\r\n let ep: Vector3;\r\n if (ipts1.length === 2)\r\n sp = SelectNearP(ipts1, p1);\r\n if (ipts2.length === 2)\r\n ep = SelectNearP(ipts2, p3);\r\n\r\n if (sp || ep) cu2 = cu2.Clone();\r\n if (sp)\r\n {\r\n l1.EndPoint = sp;\r\n cu2.StartPoint = sp;\r\n l1Intact = false;\r\n }\r\n if (ep)\r\n {\r\n l2.EndPoint = ep;\r\n cu2.EndPoint = ep;\r\n l2Intact = false;\r\n }\r\n }\r\n }\r\n\r\n let l1PadArc: Arc;\r\n let l2PadArc: Arc;\r\n //真理2:隔壁的圆弧不可能破坏当前的圆弧,只能破坏当前的针脚\r\n if (l1Intact && d.preArc && d.preArc instanceof Arc)\r\n {\r\n let a = d.preArc;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l1, IntersectOption.OnBothOperands);\r\n if (ipts.length === 2)\r\n {\r\n let sp = SelectNearP(ipts, p1);\r\n l1.EndPoint = sp;\r\n l1PadArc = a.Clone();\r\n l1PadArc.StartPoint = sp;\r\n }\r\n }\r\n }\r\n if (l2Intact && d.nextArc && d.nextArc instanceof Arc)\r\n {\r\n let a = d.nextArc;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l2, IntersectOption.OnBothOperands);\r\n if (ipts.length === 2)\r\n {\r\n let ep = SelectNearP(ipts, p3);\r\n l2.EndPoint = ep;\r\n l2PadArc = a.Clone();\r\n l2PadArc.EndPoint = ep;\r\n }\r\n }\r\n }\r\n\r\n let pl = new Polyline();\r\n let cus = [cu1, l1];\r\n if (l1PadArc) cus.push(l1PadArc);\r\n cus.push(cu2, l2);\r\n if (l2PadArc) cus.push(l2PadArc);\r\n\r\n for (let c of cus)\r\n pl.Join(c);\r\n\r\n let contour = Contour.CreateContour(pl, false);\r\n if (contour)\r\n this._TrimPolylineContours.push(contour);\r\n else\r\n console.error(\"未预料到的错误,构建轮廓失败\" + this._OffsetDist);\r\n }\r\n\r\n if (!this._IsClose)\r\n {\r\n if (this._TrimCircleContours[0] !== this._Circles[0])\r\n this._TrimCircleContours.push(this._Circles[0]);\r\n let lastTrimCircle = arrayLast(this._TrimCircleContours);\r\n let lastCircle = arrayLast(this._Circles);\r\n if (lastTrimCircle !== lastCircle)\r\n this._TrimCircleContours.push(lastCircle);\r\n if (this._SubOffsetedCurves[0].index !== 0)\r\n this._TrimCircleContours.push(this._Circles[this._SubOffsetedCurves[0].index]);\r\n\r\n let lastIndex = this._Circles.length - 1;\r\n let lastD = arrayLast(this._SubOffsetedCurves);\r\n if (lastIndex !== lastD.index)\r\n this._TrimCircleContours.push(this._Circles[lastD.index + 1]);\r\n }\r\n\r\n this._TrimPolylineContours.push(\r\n ...this._TrimCircleContours.map(c => Contour.CreateContour(c, false)),\r\n ...this._TrimArcContours\r\n );\r\n }\r\n\r\n // 通过构建的轮廓对偏移曲线进行裁剪\r\n protected TrimByContours()\r\n {\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let c = d.curve;\r\n if (CurveIsFine(c))\r\n this._CurveTreeNodes.push(new CurveTreeNode(c));\r\n if (d.paddingCurve)\r\n this._CurveTreeNodes.push(...d.paddingCurve.map(c => new CurveTreeNode(c)));\r\n }\r\n\r\n for (let i = 0; i < this._TrimPolylineContours.length; i++)\r\n {\r\n let c = this._TrimPolylineContours[i];\r\n let cbox = c.BoundingBox;\r\n for (let curveNode of this._CurveTreeNodes)\r\n curveNode.TrimBy(c, cbox);\r\n }\r\n }\r\n\r\n //过滤方向相反和0长度线\r\n private FilterInvalidCurve()\r\n {\r\n this._CurveTrimedTreeNodes = [];\r\n for (let n of this._CurveTreeNodes)\r\n {\r\n let ns = n.Nodes;\r\n for (let sn of ns)\r\n {\r\n if (this.CheckPointDir(sn.curve.GetPointAtParam(0.5)))\r\n this._CurveTrimedTreeNodes.push(sn);\r\n }\r\n }\r\n }\r\n\r\n //合并共线\r\n private JoinCollinear()\r\n {\r\n for (let i = 0; i < this._CurveTrimedTreeNodes.length; i++)\r\n {\r\n let n = this._CurveTrimedTreeNodes[i];\r\n if (n.used) continue;\r\n let sp = n.curve.StartPoint;\r\n for (let j = i + 1; j < this._CurveTrimedTreeNodes.length; j++)\r\n {\r\n let n2 = this._CurveTrimedTreeNodes[j];\r\n if (n2.used) continue;\r\n let status = n.curve.Join(n2.curve);\r\n if (status === Status.ConverToCircle)\r\n {\r\n n.used = true;\r\n n2.used = true;\r\n let circle = new Circle((n.curve).Center, (n.curve).Radius);\r\n n.curve = circle;\r\n this._RetCurves.push(ConverCircleToPolyline(circle).ApplyMatrix(this._CacheOCS));\r\n }\r\n else if (status === Status.True)\r\n {\r\n if (equalv3(sp, n.curve.StartPoint))\r\n n2.used = true;\r\n else\r\n {\r\n n.used = true;\r\n n2.curve = n.curve;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //连接结果曲线,返回最终多段线\r\n private LinkResultPolyline()\r\n {\r\n let used = new Set();\r\n let cuMap = new CurveMap(1);\r\n for (let n of this._CurveTrimedTreeNodes)\r\n {\r\n if (!n.used)\r\n cuMap.AddCurveToMap(n.curve);\r\n }\r\n\r\n let preP: Vector3;\r\n\r\n let searchNext = (s: Vertice, pl: Polyline): Vertice =>\r\n {\r\n let minDist = Infinity;\r\n let minR: Route;\r\n for (let r of s.routes)\r\n {\r\n if (used.has(r.curve)) continue;\r\n\r\n if (preP)\r\n {\r\n let d = r.s.distanceToSquared(preP);\r\n if (d < minDist)\r\n {\r\n minR = r;\r\n minDist = d;\r\n }\r\n }\r\n else\r\n {\r\n minR = r;\r\n break;\r\n }\r\n }\r\n\r\n if (minR)\r\n {\r\n used.add(minR.curve);\r\n preP = minR.e;\r\n let status = pl.Join(minR.curve, false, 5e-2);\r\n if (status !== Status.True)\r\n console.warn(\"连接失败\");\r\n return minR.to;\r\n }\r\n };\r\n\r\n for (let s of cuMap.Stands)\r\n {\r\n preP = undefined;\r\n let pl = new Polyline();\r\n let ss = s;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl);\r\n ss = s;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl);\r\n\r\n if (pl.NumberOfVertices > 1)\r\n {\r\n //避免0长度的线\r\n if (pl.NumberOfVertices === 2 && pl.Length < 1e-6) continue;\r\n\r\n let d = pl.LineData;\r\n let ld = arrayLast(d);\r\n if (equalv2(d[0].pt, ld.pt, 1e-2))\r\n ld.pt.copy(d[0].pt);\r\n this._RetCurves.push(pl.ApplyMatrix(this._CacheOCS));\r\n }\r\n }\r\n }\r\n\r\n CheckPointDir(pt: Vector3): boolean\r\n {\r\n return this.GetPointAtCurveDir(pt) === this._OffsetDistSign;\r\n }\r\n\r\n GetPointAtCurveDir(pt: Vector3): number\r\n {\r\n let minIndex = Infinity;\r\n let minDist = Infinity;\r\n let minCp: Vector3;\r\n for (let i = 0; i < this._SubCurves.length; i++)\r\n {\r\n let c = this._SubCurves[i];\r\n let cp = c.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-5)) return 0;\r\n\r\n let dist = cp.distanceToSquared(pt);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n minIndex = i;\r\n minCp = cp;\r\n }\r\n }\r\n\r\n let c = this._SubCurves[minIndex];\r\n let param = c.GetParamAtPoint(minCp);\r\n\r\n if (equaln(param, 0) && ((minIndex === 0) ? this._IsClose : true))\r\n {\r\n let preIndex = FixIndex(minIndex - 1, this._SubCurves);\r\n let preCurve = this._SubCurves[preIndex];\r\n\r\n if (!equalv3(c.GetFistDeriv(0).normalize(), preCurve.GetFistDeriv(1).normalize()))\r\n {\r\n let p = c.StartPoint;\r\n let l1 = c.Length;\r\n let l2 = preCurve.Length;\r\n let minLength = Math.min(l1, l2) * 0.2;\r\n\r\n let nextP: Vector3;\r\n let preP: Vector3;\r\n if (c instanceof Arc)\r\n nextP = c.GetPointAtDistance(minLength);\r\n else\r\n nextP = c.EndPoint;\r\n\r\n if (preCurve instanceof Arc)\r\n preP = preCurve.GetPointAtDistance(l2 - minLength);\r\n else\r\n preP = preCurve.StartPoint;\r\n\r\n let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p)));\r\n\r\n let dir = arc.PtOnCurve3(pt) ? -1 : 1;\r\n return dir;\r\n }\r\n }\r\n else if (equaln(param, 1) && ((minIndex === this._SubCurves.length - 1) ? this._IsClose : true))\r\n {\r\n let nextIndex = FixIndex(minIndex + 1, this._SubCurves);\r\n let nextCurve = this._SubCurves[nextIndex];\r\n\r\n if (!equalv3(c.GetFistDeriv(1).normalize(), nextCurve.GetFistDeriv(0).normalize()))\r\n {\r\n let p = c.EndPoint;\r\n\r\n let l1 = c.Length;\r\n let l2 = nextCurve.Length;\r\n let minLength = Math.min(l1, l2) * 0.2;\r\n\r\n let nextP: Vector3;\r\n let preP: Vector3;\r\n if (c instanceof Arc)\r\n preP = c.GetPointAtDistance(l1 - minLength);\r\n else\r\n preP = c.StartPoint;\r\n\r\n if (nextCurve instanceof Arc)\r\n nextP = nextCurve.GetPointAtDistance(minLength);\r\n else\r\n nextP = nextCurve.EndPoint;\r\n\r\n let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p)));\r\n\r\n let dir = arc.PtOnCurve3(pt) ? -1 : 1;\r\n return dir;\r\n }\r\n }\r\n\r\n let dri = c.GetFistDeriv(param);\r\n let cross = dri.cross(pt.clone().sub(minCp));\r\n return -Math.sign(cross.z);\r\n }\r\n\r\n protected CreateArc(center: Vector3, startP: Vector3, endP?: Vector3)\r\n {\r\n let sa = angle(startP.clone().sub(center));\r\n let ea = endP ? angle(endP.clone().sub(center)) : sa;\r\n let arc = new Arc(center, Math.abs(this._OffsetDist), sa, ea, this._OffsetDist < 0);\r\n return arc;\r\n }\r\n}\r\n\r\nfunction EntityEncode(c: Curve)\r\n{\r\n if (c instanceof Line) return 1;\r\n else return 2;\r\n}\r\nfunction EntityEncode2(c1: Curve, c2: Curve)\r\n{\r\n return EntityEncode(c1) & EntityEncode(c2);\r\n}\r\n\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nfunction CurveIsFine(curve: Curve)\r\n{\r\n if (curve instanceof Arc && curve.AllAngle < 2e-6) return false;\r\n return curve.Length > 5e-5;\r\n}\r\n","import { Vector2, Vector3 } from 'three';\r\nimport { angle, equaln, equalv3 } from '../Geometry/GeUtils';\r\nimport { IntersectOption } from '../GraphicsSystem/IntersectWith';\r\nimport { Arc } from './Entity/Arc';\r\nimport { Line } from './Entity/Line';\r\nimport { Polyline } from './Entity/Polyline';\r\n\r\n/**\r\n * 点在扇形内部,提供一个简单实现的版本.\r\n * 优化版本请参照:http://www.cnblogs.com/miloyip/archive/2013/04/19/3029852.html\r\n * \r\n * @param arc 二维圆弧\r\n * @param pt \r\n * @returns 点在扇形内部.\r\n */\r\nfunction IsPointInCircularSector(arc: Arc, pt: Vector3): boolean\r\n{\r\n let center = arc.Center;\r\n let disSq = center.distanceTo(pt);\r\n if (disSq > arc.Radius * arc.Radius) return false;\r\n let an = angle(pt.clone().sub(center));\r\n let param = arc.GetParamAtAngle(an);\r\n return arc.ParamOnCurve(param);\r\n}\r\n\r\n/**\r\n * 点在弓型内部\r\n * \r\n * @param arc 二维圆弧\r\n * @param pt 点\r\n * @param isInChrodIsTrue 当点在弦上也认为在弓形内部\r\n * @returns 点在内部\r\n */\r\nexport function IsPointInBowArc(arc: Arc, pt: Vector3, isInChrodIsTrue = false): boolean\r\n{\r\n let pv = pt.clone().sub(arc.StartPoint);\r\n let av = arc.EndPoint.sub(arc.StartPoint);\r\n\r\n pv.cross(av);\r\n\r\n //未优化的代码\r\n // if (pv.z > 0 && arc.IsClockWise)\r\n // return false;\r\n // else if (pv.z < 0 && !arc.IsClockWise)\r\n // return false;\r\n // else\r\n // return arc.Center.distanceToSquared(pt) < arc.Radius * arc.Radius;\r\n\r\n //简化的代码\r\n if ((pv.z > 0) !== arc.IsClockWise || (isInChrodIsTrue && equaln(pv.z, 0)))\r\n {\r\n return arc.Center.distanceToSquared(pt) < arc.Radius * arc.Radius;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * 判断点在多段线内外\r\n * @param pl 多段线\r\n * @param pt 点\r\n * @returns 点在多段线内部\r\n */\r\nexport function IsPointInPolyLine(pl: Polyline, pt: Vector3): boolean\r\n{\r\n let crossings = 0;\r\n\r\n let insLine = new Line(pt, pt.clone().add(new Vector3(0, 10, 0)));\r\n\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n if (equaln(pl.GetBuilgeAt(i), 0, 5e-6))//直线\r\n {\r\n let sp = pl.GetPointAtParam(i);\r\n let ep = pl.GetPointAtParam(i + 1);\r\n //点位于线上面\r\n if (pt.y > Math.max(sp.y, ep.y))\r\n continue;\r\n //线垂直Y轴\r\n let derX = ep.x - sp.x;\r\n if (equaln(derX, 0, 5e-6))\r\n continue;\r\n\r\n //起点\r\n if (equaln(sp.x, pt.x, 5e-6))\r\n {\r\n if (sp.y > pt.y && derX < 0) crossings++;\r\n continue;\r\n }\r\n //终点\r\n if (equaln(ep.x, pt.x, 5e-6))\r\n {\r\n if (ep.y > pt.y && derX > 0) crossings++;\r\n continue;\r\n }\r\n\r\n //快速求交,只验证有没有交点\r\n let [x1, x2] = sp.x > ep.x ? [ep.x, sp.x] : [sp.x, ep.x];\r\n if (pt.x > x1 && pt.x < x2)\r\n {\r\n let derY = ep.y - sp.y;\r\n let k = derY / derX;\r\n\r\n if ((pt.x - sp.x) * k + sp.y > pt.y)\r\n crossings++;\r\n }\r\n }\r\n else //圆弧\r\n {\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n let sp = arc.StartPoint;\r\n let ep = arc.EndPoint;\r\n\r\n //如果相切\r\n if (equaln(Math.abs(pt.x - arc.Center.x), arc.Radius))\r\n {\r\n //当点和起点或者终点和点相切时\r\n if (equaln(sp.x, pt.x) && sp.y > pt.y)\r\n {\r\n if (ep.x - sp.x < -1e-5)\r\n crossings++;\r\n }\r\n else if (equaln(ep.x, pt.x) && ep.y > pt.y)\r\n {\r\n if (ep.x - sp.x > 1e-5)\r\n crossings++;\r\n }\r\n continue;\r\n }\r\n if (equaln(sp.x, pt.x) && sp.y > pt.y)\r\n {\r\n let der = arc.GetFistDeriv(0);\r\n if (der.x < -1e-5)\r\n crossings++;\r\n }\r\n if (equaln(ep.x, pt.x) && ep.y > pt.y)\r\n {\r\n let der = arc.GetFistDeriv(1);\r\n if (der.x > 1e-5)\r\n crossings++;\r\n }\r\n\r\n for (let pti of arc.IntersectWith(insLine, IntersectOption.ExtendArg))\r\n {\r\n if (pti.y < pt.y || equalv3(sp, pti, 1e-5) || equalv3(ep, pti, 1e-5))\r\n continue;\r\n\r\n let der = arc.GetFistDeriv(pti);\r\n if (!equaln(der.x, 0)) //相切.\r\n crossings++;\r\n }\r\n }\r\n }\r\n\r\n return (crossings % 2) === 1;\r\n}\r\n\r\n/**\r\n * 点在区域内部\r\n * \r\n * @param pt \r\n * @param pts \r\n * @returns \r\n */\r\nfunction IsPointInPolygon(pt: Vector3, pts: Vector2[])\r\n{\r\n let crossings = 0; //int\r\n let [px, py] = [pt.x, pt.y];\r\n\r\n let ptCout = pts.length;\r\n for (let i = 0; i < ptCout; i++)\r\n {\r\n let pti = pts[i];\r\n let ptn = pts[(i + 1) % ptCout];\r\n\r\n let [x1, x2] = [pti.x, ptn.x];\r\n\r\n /* This is done to ensure that we get the same result when\r\n the line goes from left to right and right to left */\r\n if (x1 > x2) [x1, x2] = [x2, x1];\r\n\r\n /* First check if the ray is possible to cross the line */\r\n if (px > x1 && px <= x2 && (py < pti.y || py <= ptn.y))\r\n {\r\n const eps = 0.000001;\r\n\r\n /* Calculate the equation of the line */\r\n let dx = ptn.x - pti.x;\r\n let dy = ptn.y - pti.y;\r\n let k;\r\n\r\n if (Math.abs(dx) < eps)\r\n k = 1e300;\r\n else\r\n k = dy / dx;\r\n\r\n let m = pti.y - k * pts[i].x;\r\n\r\n /* Find if the ray crosses the line */\r\n let y2 = k * px + m;\r\n if (py <= y2)\r\n crossings++;\r\n }\r\n }\r\n\r\n return crossings % 2 === 1;\r\n}\r\n","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Matrix3, Matrix4, Object3D, Vector2, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { CreateBoardUtil } from '../../ApplicationServices/mesh/createBoard';\r\nimport { arrayLast, arrayRemoveDuplicateBySort, changeArrayStartIndex } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { ComputerCurvesNormalOCS, getDeterminantFor2V } from '../../Common/CurveUtils';\r\nimport { matrixAlignCoordSys, matrixIsCoplane, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { FixIndex } from '../../Common/Utils';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, MatrixIsIdentityCS, updateGeometry } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../../GraphicsSystem/OffsetPolyline';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Arc } from './Arc';\r\nimport { Curve, ExtendType } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Line } from './Line';\r\n\r\nexport interface PolylineProps\r\n{\r\n pt: Vector2,\r\n bul: number;\r\n}\r\n@Factory\r\nexport class Polyline extends Curve\r\n{\r\n private _ClosedMark: boolean = false;\r\n constructor(private _LineData: PolylineProps[] = [])\r\n {\r\n super();\r\n }\r\n\r\n UpdateMatrixTo(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p = new Vector3().setFromMatrixPosition(m);\r\n p.applyMatrix4(this.OCSInv);\r\n if (equaln(p.z, 0))\r\n {\r\n let dir = Math.sign(this.Area2);\r\n let tm = matrixAlignCoordSys(this.OCS, m);\r\n for (let p of this._LineData)\r\n {\r\n let p3 = AsVector3(p.pt);\r\n p3.applyMatrix4(tm);\r\n p.pt.set(p3.x, p3.y);\r\n }\r\n this.OCS = m;\r\n let newDir = Math.sign(this.Area2);\r\n if (dir !== newDir)\r\n for (let p of this._LineData)\r\n p.bul *= -1;\r\n }\r\n }\r\n\r\n /**\r\n * 原地翻转,仅改变法向量\r\n */\r\n Flip()\r\n {\r\n this.WriteAllObjectRecord();\r\n let x = new Vector3();\r\n let y = new Vector3();\r\n let z = new Vector3();\r\n this._Matrix.extractBasis(x, y, z);\r\n z.negate();\r\n y.crossVectors(z, x);\r\n let p = this.Position;\r\n this._Matrix.makeBasis(x, y, z).setPosition(p);\r\n\r\n for (let d of this._LineData)\r\n {\r\n d.pt.y *= -1;\r\n d.bul *= -1;\r\n }\r\n this.Update();\r\n return this;\r\n }\r\n\r\n //翻转曲线,首尾调换\r\n Reverse(): this\r\n {\r\n if (this._LineData.length === 0)\r\n return this;\r\n this.WriteAllObjectRecord();\r\n\r\n let pts = [];\r\n let buls = [];\r\n for (let data of this._LineData)\r\n {\r\n pts.push(data.pt);\r\n buls.push(-data.bul);\r\n }\r\n\r\n let lastBul = buls.pop();\r\n buls.reverse();\r\n buls.push(lastBul);\r\n\r\n pts.reverse();\r\n\r\n if (this._ClosedMark && !equalv2(pts[0], arrayLast(pts)))\r\n {\r\n pts.unshift(pts.pop());\r\n buls.unshift(buls.pop());\r\n }\r\n\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let d = this._LineData[i];\r\n d.pt = pts[i];\r\n d.bul = buls[i];\r\n }\r\n\r\n return this;\r\n }\r\n set LineData(data: PolylineProps[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData = data;\r\n this.Update();\r\n }\r\n get LineData()\r\n {\r\n return this._LineData;\r\n }\r\n\r\n get NumberOfVertices(): number\r\n {\r\n return this._LineData.length;\r\n }\r\n\r\n /**\r\n * 在指定位置插入点.\r\n * 例如:\r\n * pl.AddVertexAt(pl.NumberOfVerticesk,p);//在末尾插入一个点\r\n *\r\n * @param {number} index 索引位置\r\n * @param {Vector2} pt 点\r\n * @returns {this}\r\n * @memberof Polyline\r\n */\r\n AddVertexAt(index: number, pt: Vector2 | Vector2[]): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let pts: PolylineProps[];\r\n if (Array.isArray(pt))\r\n {\r\n pts = pt.map(p =>\r\n {\r\n return {\r\n pt: p.clone(),\r\n bul: 0\r\n };\r\n });\r\n }\r\n else\r\n pts = [{ pt: pt.clone(), bul: 0 }];\r\n\r\n this._LineData.splice(index, 0, ...pts);\r\n this.Update();\r\n return this;\r\n }\r\n RemoveVertexAt(index: number): this\r\n {\r\n if (index < this._LineData.length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.splice(index, 1);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n RemoveVertexIn(from: number, to: number): this\r\n {\r\n if (from + 1 < this._LineData.length && to > from)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.splice(from + 1, to - from - 1);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * 重设闭合多段线的起点\r\n * @param index 起始index,如果index非整数,将用最接近的整数作为起始索引\r\n */\r\n ResetStartPoint(index: number)\r\n {\r\n if (!this.IsClose || index >= this.EndParam) return false;\r\n\r\n if (equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt))\r\n this._LineData.pop();\r\n\r\n changeArrayStartIndex(this._LineData, Math.floor(index + 0.5));\r\n this._LineData.push({\r\n pt: this._LineData[0].pt.clone(),\r\n bul: 0\r\n });\r\n return true;\r\n }\r\n GetPoint2dAt(index: number): Vector2 | undefined\r\n {\r\n if (index >= 0 && this._LineData.length > index)\r\n return this._LineData[index].pt.clone();\r\n }\r\n /**\r\n * 设置指定点的位置\r\n *\r\n * @param {number} index\r\n * @param {Vector2} pt\r\n * @memberof Polyline\r\n */\r\n SetPointAt(index: number, pt: Vector2): this\r\n {\r\n let d = this._LineData[index];\r\n if (d)\r\n {\r\n this.WriteAllObjectRecord();\r\n d.pt.copy(pt);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n for (let i = 0; i <= this.EndParam; i++)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n p.applyMatrix4(m).applyMatrix4(this.OCSInv);\r\n this.SetPointAt(i, AsVector2(p));\r\n }\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldPts = this.GetStretchPoints();\r\n reviseMirrorMatrix(this._Matrix);\r\n for (let i = 0; i < oldPts.length; i++)\r\n {\r\n let newP = oldPts[i].applyMatrix4(this.OCSInv);\r\n let newBul = -this.GetBuilgeAt(i);\r\n this.SetPointAt(i, AsVector2(newP));\r\n this.SetBulgeAt(i, newBul);\r\n }\r\n this.Reverse();\r\n return this;\r\n }\r\n SetBulgeAt(index: number, bul: number): this\r\n {\r\n let d = this._LineData[index];\r\n if (d)\r\n {\r\n this.WriteAllObjectRecord();\r\n d.bul = bul;\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n GetBuilgeAt(index: number): number\r\n {\r\n return this._LineData[index].bul;\r\n }\r\n Rectangle(length: number, height: number): this\r\n {\r\n this.LineData = [\r\n { pt: new Vector2(), bul: 0 },\r\n { pt: new Vector2(length), bul: 0 },\r\n { pt: new Vector2(length, height), bul: 0 },\r\n { pt: new Vector2(0, height), bul: 0 }];\r\n this.CloseMark = true;\r\n return this;\r\n }\r\n RectangleFrom2Pt(p1: Vector3, p2: Vector3): this\r\n {\r\n let box = new Box3();\r\n box.setFromPoints([p2, p1].map((p: Vector3) => p.clone().applyMatrix4(this.OCSInv)));\r\n\r\n let px1 = AsVector2(box.min);\r\n let px3 = AsVector2(box.max);\r\n let px2 = new Vector2(px3.x, px1.y);\r\n let px4 = new Vector2(px1.x, px3.y);\r\n\r\n this.LineData = [\r\n { pt: px1, bul: 0 },\r\n { pt: px2, bul: 0 },\r\n { pt: px3, bul: 0 },\r\n { pt: px4, bul: 0 }];\r\n\r\n this.CloseMark = true;\r\n return this;\r\n }\r\n //多段线起点\r\n get StartPoint()\r\n {\r\n if (this._LineData.length > 0)\r\n return AsVector3(this._LineData[0].pt).applyMatrix4(this.OCS);\r\n return new Vector3();\r\n }\r\n set StartPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n\r\n if (this._LineData.length === 0)\r\n this.AddVertexAt(0, AsVector2(p));\r\n else if (this._LineData.length === 1)\r\n this.SetPointAt(0, AsVector2(p));\r\n else\r\n {\r\n let bul = this.GetBuilgeAt(0);\r\n if (bul !== 0)\r\n {\r\n let arc = this.GetCurveAtParam(0) as Arc;\r\n arc.StartPoint = p;\r\n //前面线的凸度调整\r\n this.SetBulgeAt(0, Math.tan(arc.AllAngle / 4) * Math.sign(bul));\r\n }\r\n this.SetPointAt(0, AsVector2(p));\r\n }\r\n }\r\n get EndPoint()\r\n {\r\n if (this._ClosedMark) return this.StartPoint;\r\n if (this._LineData.length > 0)\r\n return AsVector3(this._LineData[this.EndParam].pt).applyMatrix4(this.OCS);\r\n return new Vector3();\r\n }\r\n set EndPoint(p: Vector3)\r\n {\r\n if (this._LineData.length < 2 || this.CloseMark)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n\r\n let bul = this.GetBuilgeAt(this.EndParam - 1);\r\n if (bul !== 0)\r\n {\r\n let arc = this.GetCurveAtParam(this.EndParam - 1) as Arc;\r\n arc.ApplyMatrix(this.OCSInv);\r\n arc.EndPoint = p;\r\n //前面线的凸度调整\r\n this.SetBulgeAt(this.EndParam - 1, Math.tan(arc.AllAngle / 4) * Math.sign(bul));\r\n }\r\n this.SetPointAt(this.EndParam, AsVector2(p));\r\n }\r\n\r\n get CurveCount(): number\r\n {\r\n return this.EndParam;\r\n }\r\n\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n\r\n /**\r\n * 表示最后一条曲线的终止参数,使用该参数可以直接遍历到多段线的所有子线段. for(i 1 && (equalv3(this.StartPoint, this.EndPoint, 1e-4)));\r\n }\r\n set CloseMark(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = v;\r\n this.Update();\r\n }\r\n\r\n DigestionCloseMark()\r\n {\r\n if (this._ClosedMark && this._LineData.length > 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = false;\r\n\r\n if (!equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt))\r\n this._LineData.push({ pt: AsVector2(this._LineData[0].pt), bul: 0 });\r\n }\r\n }\r\n\r\n get Length()\r\n {\r\n return this.Explode().reduce((l, cu) => l + cu.Length, 0);\r\n }\r\n\r\n /**\r\n * 获得指定参数所在的点.\r\n * 当曲线存在闭合标志时,参数必须在曲线内部.\r\n * 当曲线不存在闭合标志时,参数允许延伸出曲线.\r\n *\r\n * @param {number} param 参数\r\n * @returns {Vector3} 三维点,可为空\r\n * @memberof Polyline\r\n */\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n if (param === Math.floor(param) && this.ParamOnCurve(param))\r\n return AsVector3(this.GetPoint2dAt(FixIndex(param, this.NumberOfVertices))).applyMatrix4(this.OCS);\r\n let cu: Curve = this.GetCurveAtParam(param);\r\n if (cu)\r\n return cu.GetPointAtParam(this.GetCurveParamAtParam(param));\r\n return undefined;\r\n }\r\n\r\n GetDistAtParam(param: number): number\r\n {\r\n if (this._ClosedMark && !this.ParamOnCurve(param))\r\n return NaN;\r\n\r\n //参数 整数\r\n let paramFloor = Math.floor(param);\r\n //需要计算的曲线个数\r\n let cuCout = paramFloor > this.EndParam ? this.EndParam : paramFloor;\r\n\r\n let dist = 0;\r\n //首先计算完整曲线的长度\r\n for (let i = 0; i < cuCout; i++)\r\n {\r\n dist += this.GetCurveAtIndex(i).Length;\r\n }\r\n\r\n //参数已经大于索引,证明参数在线外.\r\n if (paramFloor !== cuCout)\r\n {\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCout);\r\n }\r\n else if (param > paramFloor)\r\n {\r\n let lastParam = param - paramFloor;\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(lastParam);\r\n }\r\n\r\n return dist;\r\n }\r\n GetPointAtDistance(dist: number): Vector3\r\n {\r\n let param = this.GetParamAtDist(dist);\r\n return this.GetPointAtParam(param);\r\n }\r\n\r\n /**\r\n * 返回参数所在的点. 如果曲线不闭合,会试图返回延伸点参数\r\n *\r\n * @param {Vector3} pt\r\n * @returns {number}\r\n * @memberof Polyline\r\n */\r\n GetParamAtPoint(pt: Vector3): number\r\n {\r\n let cus = this.Explode();\r\n if (cus.length === 0) return NaN;\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let param = cu.GetParamAtPoint(pt);\r\n if (cu.ParamOnCurve(param))\r\n return i + param; //返回点在曲线内部的参数\r\n }\r\n\r\n //当曲线闭合时,不需要延伸首尾去判断参数\r\n if (this._ClosedMark) return NaN;\r\n\r\n //起点终点参数集合\r\n let seParams: number[] = [];\r\n //点在第一条曲线上的参数\r\n let startParam = cus[0].GetParamAtPoint(pt);\r\n if (!isNaN(startParam) && startParam < 0)\r\n seParams.push(startParam);\r\n //点在最后一条线上的参数\r\n let endParam = cus[cus.length - 1].GetParamAtPoint(pt);\r\n if (!isNaN(endParam) && endParam > 0)\r\n seParams.push(endParam + this.EndParam - 1);\r\n\r\n if (seParams.length == 1)\r\n {\r\n return seParams[0];\r\n }\r\n else if (seParams.length == 2)\r\n {\r\n //返回较近的参数\r\n if (pt.distanceToSquared(this.StartPoint)\r\n < pt.distanceToSquared(this.EndPoint))\r\n return seParams[0];\r\n else\r\n return seParams[1];\r\n }\r\n return NaN;\r\n }\r\n GetParamAtDist(dist: number): number\r\n {\r\n let cus = this.Explode();\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let len = cu.Length;\r\n if (dist <= len)\r\n return i + cu.GetParamAtDist(dist);\r\n else if (equaln(dist, len, 1e-8))\r\n return i + 1;\r\n dist -= len;\r\n }\r\n if (!this._ClosedMark)\r\n return cus.length + cus[cus.length - 1].GetParamAtDist(dist);\r\n\r\n return NaN;\r\n }\r\n GetDistAtPoint(pt: Vector3): number\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n if (!this.ParamOnCurve(param)) return NaN;\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n /**\r\n * 返回曲线的一阶导数.\r\n * 当曲线闭合(标志)且点不在曲线上.\r\n * 或者曲线不闭合(标志) 且点不在曲线上也不在延伸上\r\n *\r\n * @param {(number | Vector3)} param\r\n * @returns {Vector3}\r\n * @memberof Polyline\r\n */\r\n GetFistDeriv(param: number | Vector3): Vector3\r\n {\r\n if (param instanceof Vector3)\r\n param = this.GetParamAtPoint(param);\r\n\r\n if (isNaN(param))\r\n return undefined;\r\n\r\n let cu = this.GetCurveAtParam(param);\r\n\r\n if (!cu) return undefined;\r\n\r\n return cu.GetFistDeriv(this.GetCurveParamAtParam(param));\r\n }\r\n GetSplitCurves(param: number[] | number): Array\r\n {\r\n //参数需要转化为参数数组\r\n let params: number[];\r\n if (typeof param == \"number\")\r\n params = [param];\r\n else\r\n params = param;\r\n\r\n //校验参数在曲线中,修正参数\r\n let endParam = this.EndParam;\r\n params = params.filter(p => this.ParamOnCurve(p) && p > -1e-6)\r\n .map(a =>\r\n {\r\n if (a < 0) return 0;\r\n if (a > endParam) return endParam;\r\n if (equaln(a, Math.floor(a + 0.5), 1e-8))\r\n return Math.floor(a + 0.5);\r\n return a;\r\n });\r\n //排序\r\n params.sort((a, b) => a - b);\r\n let hasEndParam = arrayLast(params) === this.EndParam;\r\n //必须加入最后一个参数,保证切割后的曲线完整\r\n if (!hasEndParam)\r\n params.push(this.EndParam);\r\n arrayRemoveDuplicateBySort(params, (e1, e2) => equaln(e1, e2, 1e-8));\r\n params = params.filter(p => this.ParamOnCurve(p));\r\n if (params.length === 0)\r\n return [];\r\n\r\n //判断是否存在0参数\r\n let hasZeroParam = params[0] === 0;\r\n if (hasZeroParam)\r\n params.shift();\r\n\r\n let { pts, buls } = this.PtsBuls;\r\n\r\n //返回的多段线集合\r\n let pls: Polyline[] = [];\r\n\r\n let len = 0;//已经走过的参数长度(整数)\r\n\r\n //上一个切割参数的位置 0-1\r\n let prePa = 0;\r\n for (let pa of params)\r\n {\r\n //参数所在点\r\n let pt = AsVector2(this.GetPointAtParam(pa).applyMatrix4(this.OCSInv));\r\n pa -= len;\r\n let pafloor = Math.floor(pa);\r\n len += pafloor;\r\n\r\n let plData: PolylineProps[] = [];\r\n\r\n //添加点\r\n for (let i = 0; i < pafloor; i++)\r\n {\r\n if (i === 0 && !equaln(buls[0], 0, 1e-8))\r\n {\r\n buls[0] = Math.tan((1 - prePa) * Math.atan(buls[0]));\r\n }\r\n plData.push({ pt: pts[0], bul: buls[0] });\r\n pts.shift();\r\n buls.shift();\r\n }\r\n\r\n if (equaln(pa, pafloor, 1e-8))//如果pa在点上\r\n {\r\n plData.push({ pt: pts[0].clone(), bul: buls[0] });\r\n }\r\n else //在曲线上\r\n {\r\n let bul: number = buls[0];\r\n if (!equaln(bul, 0, 1e-6))\r\n bul = Math.tan((pa - pafloor - (0 === pafloor ? prePa : 0)) * Math.atan(buls[0])); //->凸度\r\n\r\n //加入顶点+凸度\r\n plData.push({ pt: pts[0].clone(), bul });\r\n //终点\r\n plData.push({ pt, bul: 0 });\r\n\r\n //修正剩余的点表和凸度表\r\n pts[0].copy(pt);\r\n }\r\n\r\n prePa = pa - pafloor;\r\n if (plData.length > 1)\r\n {\r\n let pl = new Polyline(plData).ApplyMatrix(this.OCS);\r\n pl.ColorIndex = this.ColorIndex;\r\n pls.push(pl);\r\n }\r\n }\r\n\r\n //当曲线为闭合曲线,并且不存在0切割参数时,首尾连接曲线\r\n if (this._ClosedMark && !hasZeroParam && !hasEndParam)\r\n {\r\n let lastPl = pls[pls.length - 1];\r\n if (equalv2(arrayLast(lastPl._LineData).pt, pls[0]._LineData[0].pt))\r\n lastPl._LineData.pop();\r\n\r\n lastPl._LineData.push(...pls[0]._LineData);\r\n\r\n pls.shift();\r\n }\r\n return pls;\r\n }\r\n\r\n //未完善\r\n GetCurveAtParamRange(startParam: number, endParam: number): Array\r\n {\r\n let sfloor = Math.floor(startParam + 0.5);\r\n if (equaln(sfloor, startParam, 1e-8)) startParam = sfloor;\r\n else sfloor = Math.floor(startParam);\r\n let efloor = Math.floor(endParam + 0.5);\r\n if (equaln(efloor, endParam, 1e-8)) endParam = efloor;\r\n else efloor = Math.floor(efloor);\r\n\r\n const GetCurve = (index: number) =>\r\n {\r\n let d = this._LineData[index];\r\n let next = this._LineData[index + 1];\r\n if (!equaln(d.bul, 0, 1e-8))\r\n return new Arc().ParseFromBul(d.pt, next.pt, d.bul);\r\n else\r\n return new Line(AsVector3(d.pt), AsVector3(next.pt));\r\n };\r\n\r\n let lined: PolylineProps[] = [];\r\n if (startParam === sfloor)\r\n {\r\n let d = this._LineData[sfloor];\r\n lined.push({ pt: d.pt.clone(), bul: d.bul });\r\n }\r\n else\r\n {\r\n let d = this._LineData[sfloor];\r\n let cu = GetCurve(sfloor);\r\n let remParam = startParam - sfloor;\r\n let p = cu.GetPointAtParam(remParam);\r\n let bul = d.bul;\r\n if (!equaln(bul, 0))\r\n bul = Math.tan(Math.atan(bul) * (1 - remParam));\r\n lined.push({ pt: AsVector2(p), bul: bul });\r\n }\r\n\r\n for (let i = sfloor + 1; i < efloor; i++)\r\n {\r\n let d = this._LineData[i];\r\n lined.push({ pt: d.pt.clone(), bul: d.bul });\r\n }\r\n\r\n if (efloor !== endParam)\r\n {\r\n let d = this.LineData[efloor];\r\n let remParam = endParam - efloor;\r\n let cu = GetCurve(efloor);\r\n let p = cu.GetPointAtParam(remParam);\r\n let bul = d.bul;\r\n if (!equaln(bul, 0))\r\n {\r\n arrayLast(lined).bul = Math.tan(Math.atan(bul) * remParam);\r\n bul = Math.tan(Math.atan(bul) * (1 - remParam));\r\n }\r\n lined.push({ pt: AsVector2(p), bul });\r\n }\r\n\r\n let pl = new Polyline(lined);\r\n pl.OCS = this.OCSNoClone;\r\n return;\r\n }\r\n\r\n Extend(newParam: number)\r\n {\r\n if (this.CloseMark || this.ParamOnCurve(newParam)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let ptIndex: number;\r\n let bulIndex: number;\r\n\r\n if (newParam < 0)\r\n {\r\n ptIndex = 0;\r\n bulIndex = 0;\r\n }\r\n else if (newParam > this.EndParam)\r\n {\r\n ptIndex = this.EndParam;\r\n bulIndex = ptIndex - 1;\r\n }\r\n\r\n //修改顶点\r\n this._LineData[ptIndex].pt = AsVector2(this.GetPointAtParam(newParam).applyMatrix4(this.OCSInv));\r\n\r\n //修改凸度\r\n let oldBul = this._LineData[bulIndex].bul;\r\n if (oldBul != 0)\r\n this._LineData[bulIndex].bul = Math.tan(Math.atan(oldBul) * (1 + newParam - ptIndex));\r\n\r\n this.Update();\r\n }\r\n\r\n //const this\r\n MatrixAlignTo2(toMatrix: Matrix4)\r\n {\r\n if (!matrixIsCoplane(this._Matrix, toMatrix, 1e-4))\r\n return this.PtsBuls;\r\n\r\n let m = matrixAlignCoordSys(this._Matrix, toMatrix);\r\n\r\n let z1 = this.Normal;\r\n let z2 = new Vector3().setFromMatrixColumn(toMatrix, 2);\r\n let isMirror = equalv3(z1, z2.negate());\r\n\r\n let pts: Vector2[] = [];\r\n let buls: number[] = [];\r\n for (let d of this._LineData)\r\n {\r\n let p = AsVector2(AsVector3(d.pt).applyMatrix4(m));\r\n pts.push(p);\r\n buls.push(isMirror ? -d.bul : d.bul);\r\n }\r\n return { pts, buls };\r\n }\r\n\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-4)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (this._ClosedMark)\r\n return Status.False;\r\n\r\n let [sp, ep, cuSp, cuEp] = [this.StartPoint, this.EndPoint, cu.StartPoint, cu.EndPoint];\r\n\r\n let ocsInv = this.OCSInv;\r\n let [cuSp2, cuEp2] = [cuSp, cuEp].map(p => AsVector2(p.clone().applyMatrix4(ocsInv)));\r\n\r\n if (this._LineData.length === 0)\r\n {\r\n if (cu instanceof Line)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: cu.Bul });\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (cu instanceof Polyline)\r\n {\r\n let f = new CADFiler();\r\n cu.WriteFile(f);\r\n this.ReadFile(f);\r\n }\r\n else\r\n return Status.False;\r\n }\r\n else\r\n {\r\n enum LinkType\r\n {\r\n None = 0,\r\n SpSp = 1,\r\n SpEp = 2,\r\n EpSp = 3,\r\n EpEp = 4,\r\n };\r\n\r\n let spspDisSq = cuSp.distanceToSquared(sp);\r\n let spepDisSq = cuSp.distanceToSquared(ep);\r\n let epspDisSq = cuEp.distanceToSquared(sp);\r\n let epepDisSq = cuEp.distanceToSquared(ep);\r\n let minDis = tolerance * tolerance;\r\n\r\n let linkType = LinkType.None;\r\n\r\n if (spspDisSq < minDis)\r\n {\r\n linkType = LinkType.SpSp;\r\n minDis = spspDisSq;\r\n }\r\n\r\n if (spepDisSq < minDis)\r\n {\r\n linkType = LinkType.SpEp;\r\n minDis = spepDisSq;\r\n }\r\n\r\n if (epspDisSq < minDis)\r\n {\r\n linkType = LinkType.EpSp;\r\n minDis = epspDisSq;\r\n }\r\n\r\n if (epepDisSq < minDis)\r\n linkType = LinkType.EpEp;\r\n\r\n if (linkType === LinkType.None)\r\n return Status.False;\r\n\r\n if (cu instanceof Line)\r\n {\r\n if (linkType === LinkType.SpSp)\r\n {\r\n this._LineData.unshift({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n this._LineData.unshift({ pt: cuSp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n }\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n let dir = equalv3(this.Normal, cu.Normal.negate()) ? -1 : 1;\r\n let bul = cu.Bul * dir;\r\n if (linkType === LinkType.SpSp)\r\n {\r\n this._LineData.unshift({ pt: cuEp2, bul: -bul });\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n arrayLast(this._LineData).bul = bul;\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n this._LineData.unshift({ pt: cuSp2, bul: bul });\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n arrayLast(this._LineData).bul = -bul;\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n }\r\n }\r\n else if (cu instanceof Polyline)\r\n {\r\n if (cu.CloseMark) return Status.False;\r\n\r\n let { pts, buls } = this.PtsBuls;\r\n\r\n if (linkType === LinkType.SpSp)\r\n {\r\n cu.Reverse();\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n cuPtsBul.pts.pop();\r\n cuPtsBul.buls.pop();\r\n pts = cuPtsBul.pts.concat(pts);\r\n buls = cuPtsBul.buls.concat(buls);\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n pts.pop();\r\n buls.pop();\r\n\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n pts = pts.concat(cuPtsBul.pts);\r\n buls = buls.concat(cuPtsBul.buls);\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n cuPtsBul.pts.pop();\r\n cuPtsBul.buls.pop();\r\n pts = cuPtsBul.pts.concat(pts);\r\n buls = cuPtsBul.buls.concat(buls);\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n pts.pop();\r\n buls.pop();\r\n\r\n cu.Reverse();\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n pts = pts.concat(cuPtsBul.pts);\r\n buls = buls.concat(cuPtsBul.buls);\r\n }\r\n\r\n this._LineData.length = 0;\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n this._LineData.push({ pt: pts[i], bul: buls[i] });\r\n }\r\n }\r\n else\r\n return Status.False;\r\n }\r\n\r\n //在上面的其他分支已经返回了假 所以这里直接返回真.\r\n this.Update();\r\n return Status.True;\r\n }\r\n\r\n /**\r\n * 将曲线数组组合成多段线\r\n * @param curves 已经使用CurveLinked的数组,总是首尾相连\r\n * @returns\r\n */\r\n static Combine(curves: Curve[], tolerance = 1e-5): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n pl.OCS = ComputerCurvesNormalOCS(curves);\r\n\r\n for (let cu of curves)\r\n pl.Join(cu, false, tolerance);\r\n\r\n let d = pl.LineData;\r\n if (d.length > 1)\r\n {\r\n let ld = arrayLast(d).pt;\r\n if (equalv2(d[0].pt, ld, tolerance))\r\n ld.copy(d[0].pt);\r\n }\r\n\r\n return pl;\r\n }\r\n /**首尾相连的曲线直接连接 */\r\n static FastCombine(curves: Curve[], tolerance = 1e-5): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n pl.OCS = ComputerCurvesNormalOCS(curves);\r\n\r\n let ocsInv = pl.OCSInv;\r\n\r\n let lineData: PolylineProps[] = [];\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let cu = curves[i];\r\n let bul = 0;\r\n if (cu instanceof Arc)\r\n bul = cu.Bul;\r\n\r\n lineData.push({\r\n pt: AsVector2(cu.StartPoint.applyMatrix4(ocsInv)),\r\n bul\r\n });\r\n\r\n if (i === curves.length - 1)\r\n {\r\n lineData.push({\r\n pt: AsVector2(cu.EndPoint.applyMatrix4(ocsInv)),\r\n bul: 0\r\n });\r\n }\r\n }\r\n\r\n if (lineData.length > 1)\r\n {\r\n let ld = arrayLast(lineData).pt;\r\n if (equalv2(lineData[0].pt, ld, tolerance))\r\n ld.copy(lineData[0].pt);\r\n }\r\n pl.LineData = lineData;\r\n return pl;\r\n }\r\n\r\n PtOnCurve(pt: Vector3): boolean\r\n {\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let c = this.GetCurveAtIndex(i);\r\n if (c.PtOnCurve(pt))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let c = this.GetCurveAtIndex(i);\r\n if (c.PtOnCurve3(p, fuzz))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n PtInCurve(pt: Vector3)\r\n {\r\n return this.IsClose && IsPointInPolyLine(this, pt);\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.GetClosestPointTo2(pt, extend ? ExtendType.Both : ExtendType.None);\r\n }\r\n GetClosestPointTo2(pt: Vector3, extType: ExtendType): Vector3\r\n {\r\n //当曲线空时,返回空\r\n if (this.EndParam < 1) return undefined;\r\n //当有闭合标志时,曲线在任何位置都不延伸\r\n if (this._ClosedMark) extType = ExtendType.None;\r\n\r\n //最近点\r\n let ptC = undefined;\r\n //最近点的距离\r\n let ptCDist = Infinity;\r\n\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n\r\n //前延伸\r\n if (i === 0 && (extType & ExtendType.Front) > 0)\r\n {\r\n let ptCFirst = cu.GetClosestPointTo(pt, true);\r\n if (cu.GetParamAtPoint(ptCFirst) <= 1)\r\n {\r\n ptC = ptCFirst;\r\n ptCDist = ptC.distanceToSquared(pt);\r\n }\r\n if (extType === ExtendType.Front)\r\n continue;\r\n }\r\n\r\n let ptCloseNew: Vector3; //新的最近点\r\n\r\n //后延伸 (此处与前延伸分开if 如果线只有一段,那么前后延伸都能同时触发)\r\n if (i === (this.EndParam - 1) && (extType & ExtendType.Back) > 0)\r\n {\r\n let ptCLast = cu.GetClosestPointTo(pt, true);\r\n if (cu.GetParamAtPoint(ptCLast) >= 0)\r\n ptCloseNew = ptCLast;\r\n else //如果延伸之后并不在曲线或者曲线的后延伸上\r\n ptCloseNew = cu.EndPoint;\r\n }\r\n else\r\n {\r\n ptCloseNew = cu.GetClosestPointTo(pt, false);\r\n }\r\n\r\n let newDist = ptCloseNew.distanceToSquared(pt);\r\n if (newDist < ptCDist)\r\n {\r\n ptC = ptCloseNew;\r\n ptCDist = newDist;\r\n }\r\n }\r\n\r\n return ptC;\r\n }\r\n //偏移\r\n GetOffsetCurves(offsetDist: number): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist);\r\n let curves = polyOffestUtil.Do();\r\n for (let cu of curves)\r\n cu.ColorIndex = this.ColorIndex;\r\n return curves;\r\n }\r\n GetFeedingToolPath(offsetDist: number, offsetDistSq = (offsetDist ** 2) * 2.1): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq);\r\n return polyOffestUtil.Do();\r\n }\r\n /**\r\n * 分解\r\n */\r\n Explode(): Curve[]\r\n {\r\n let exportCus: Curve[] = [];\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n exportCus.push(this.GetCurveAtIndex(i));\r\n }\r\n return exportCus;\r\n }\r\n\r\n /**\r\n * 根据参数得到参数所在的子曲线.\r\n *\r\n * 当曲线存在闭合标志时,参数必须在曲线内部,否则返回空.\r\n *\r\n * @param {number} param 参数值\r\n * @returns {Curve} 曲线(直线或者圆弧) 或空\r\n * @memberof Polyline\r\n */\r\n GetCurveAtParam(param: number): Curve\r\n {\r\n if (this._ClosedMark && !this.ParamOnCurve(param))\r\n return undefined;\r\n\r\n if (param < 0)\r\n return this.GetCurveAtIndex(0);\r\n else if (param >= this.EndParam)\r\n return this.GetCurveAtIndex(this.EndParam - 1);\r\n else return this.GetCurveAtIndex(Math.floor(param));\r\n }\r\n\r\n /**\r\n * 得到参数在子曲线中的表示\r\n *\r\n * @param {number} param 参数在多段线中表示\r\n * @returns {number} 参数在子曲线中表示\r\n * @memberof Polyline\r\n */\r\n GetCurveParamAtParam(param: number): number\r\n {\r\n if (param >= this.EndParam) param -= this.EndParam - 1;\r\n else if (param > 0) param -= Math.floor(param);\r\n\r\n return param;\r\n }\r\n\r\n /**\r\n * 获得曲线,来自索引位置.\r\n * @param {number} i 索引位置 整数\r\n */\r\n GetCurveAtIndex(i: number): Curve\r\n {\r\n if (i >= this._LineData.length) return undefined;\r\n\r\n if (!this.ParamOnCurve(i)) return undefined;\r\n\r\n if (!this._ClosedMark && i === this._LineData.length - 1) return undefined;\r\n\r\n let d1 = this._LineData[i];\r\n let d2 = this._LineData[FixIndex(i + 1, this._LineData)];\r\n\r\n let curve: Curve;\r\n if (equaln(d1.bul, 0, 1e-8))\r\n curve = new Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCS);\r\n else\r\n curve = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCS);\r\n\r\n curve.ColorIndex = this._Color;\r\n return curve;\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-5)\r\n {\r\n return IntersectPolylineAndCurve(this, curve, intType, tolerance);\r\n }\r\n\r\n //计算自交点.\r\n IntersectSelf(): number[]\r\n {\r\n let cus = this.Explode();\r\n if (cus.length === 0) return [];\r\n\r\n let intParams: number[] = [];\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n for (let j = i + 2; j < cus.length; j++)\r\n {\r\n let c2 = cus[j];\r\n let pts = c.IntersectWith(c2, IntersectOption.OnBothOperands);\r\n\r\n for (let p of pts)\r\n {\r\n intParams.push(i + c.GetParamAtPoint(p));\r\n intParams.push(j + c2.GetParamAtPoint(p));\r\n }\r\n }\r\n }\r\n return intParams;\r\n }\r\n IsIntersectSelf()\r\n {\r\n let cus = this.Explode().filter(c => !equaln(c.Length, 0, 1e-3));\r\n for (let i = 0; i < cus.length - 1; i++)\r\n {\r\n let c1 = cus[i];\r\n let c1IsLine = c1 instanceof Line;\r\n let d1 = c1.GetFistDeriv(c1IsLine ? 0 : 1).normalize();\r\n\r\n for (let j = i + 1; j < cus.length; j++)\r\n {\r\n let c2 = cus[j];\r\n let c2IsLine = c2 instanceof Line;\r\n let d2 = c2.GetFistDeriv(0).normalize();\r\n if (j === i + 1)\r\n {\r\n if (c1IsLine === c2IsLine)\r\n {\r\n if (c1IsLine)\r\n {\r\n if (equalv3(d1, d2.negate()))\r\n return true;\r\n continue;\r\n }\r\n else\r\n {\r\n if (equalv3(d1, d2.negate()) && equalv3((c1).Center, (c2).Center))\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n let intPts = c1.IntersectWith2(c2, 0);\r\n let intPtsLen = intPts.length;\r\n\r\n if (intPtsLen > 0)\r\n {\r\n if (intPtsLen === 2 && equalv3(intPts[0].pt, intPts[1].pt, 1e-3))\r\n {\r\n intPtsLen = 1;\r\n intPts.pop();\r\n }\r\n\r\n if (intPtsLen === 2 && j === i + 1 && cus.length === 2)\r\n {\r\n if (intPts.every(r => equaln(r.thisParam, 0, 1e-3) || equaln(r.thisParam, 1, 1e-3)))\r\n continue;\r\n }\r\n\r\n if (j === i + 1 && intPtsLen === 1)\r\n continue;\r\n if (this.IsClose && i === 0 && j === cus.length - 1 && intPtsLen === 1)\r\n continue;\r\n return true;\r\n }\r\n }\r\n\r\n }\r\n return false;\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n let box = new Box3Ext();\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n box.union(cu.BoundingBox);\r\n }\r\n return box;\r\n }\r\n\r\n /**\r\n * 得到曲线有用的点表和凸度(闭合曲线首尾重复)\r\n */\r\n get PtsBuls(): { pts: Vector2[], buls: number[]; }\r\n {\r\n let pts: Vector2[] = [];\r\n let buls: number[] = [];\r\n\r\n if (this._LineData.length === 0)\r\n return { pts, buls };\r\n\r\n for (let data of this._LineData)\r\n {\r\n pts.push(data.pt.clone());\r\n buls.push(data.bul);\r\n }\r\n //闭合且起点不等于终点\r\n if (this._ClosedMark &&\r\n !this._LineData[0].pt.equals(arrayLast(this._LineData).pt))\r\n {\r\n pts.push(pts[0].clone());\r\n buls.push(buls[0]);\r\n }\r\n\r\n return { pts, buls };\r\n }\r\n get IsBulge()\r\n {\r\n if (!this.IsClose) return false;\r\n\r\n let refDir = Math.sign(this.Area2);\r\n let c1: Curve;\r\n let c2: Curve;\r\n\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n c1 = this.GetCurveAtIndex(i);\r\n c2 = this.GetCurveAtIndex(FixIndex(i + 1, this.EndParam));\r\n\r\n let len1 = c1.Length;\r\n let len2 = c2.Length;\r\n let minLen = Math.min(len1, len2) * 0.2;\r\n\r\n let p = c1.EndPoint;\r\n let p1: Vector3;\r\n let p2: Vector3;\r\n\r\n if (c1 instanceof Arc)\r\n {\r\n let dir = c1.IsClockWise ? -1 : 1;\r\n if (dir !== refDir)\r\n return false;\r\n p1 = c1.GetPointAtDistance(len1 - minLen);\r\n }\r\n else\r\n p1 = c1.StartPoint;\r\n\r\n if (c2 instanceof Arc)\r\n {\r\n let dir = c2.IsClockWise ? -1 : 1;\r\n if (dir !== refDir)\r\n return false;\r\n p2 = c2.GetPointAtDistance(minLen);\r\n }\r\n else\r\n p2 = c2.EndPoint;\r\n\r\n let vec1 = p.clone().sub(p1);\r\n let vec2 = p2.sub(p);\r\n let dir = Math.sign(vec1.cross(vec2).z);\r\n\r\n if (dir !== 0 && dir !== refDir)\r\n return false;\r\n }\r\n return true;\r\n }\r\n get Shape()\r\n {\r\n let { pts, buls } = this.PtsBuls;\r\n let curve = CreateBoardUtil.CreatePath(pts, buls);\r\n return curve;\r\n }\r\n get SVG()\r\n {\r\n let sp = this.StartPoint;\r\n let str = `M${sp.x} ${sp.y} `;\r\n for (let i = 1; i <= this.EndParam; i++)\r\n {\r\n let bul = this.GetBuilgeAt(i - 1);\r\n let p = this.GetPointAtParam(i);\r\n if (bul === 0)\r\n str += `L${p.x} ${p.y} `;\r\n else\r\n {\r\n let arc = this.GetCurveAtIndex(i - 1) as Arc;\r\n str += `A ${arc.Radius} ${arc.Radius} 0 ${Math.abs(bul) >= 1 ? 1 : 0} ${arc.IsClockWise ? 0 : 1} ${p.x} ${p.y}`;\r\n }\r\n }\r\n return str;\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let shape = this.Shape;\r\n\r\n let geo = BufferGeometryUtils.CreateFromPts(shape.getPoints(50).map(AsVector3));\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry().setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let obj = new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n return obj;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let shape = this.Shape;\r\n let pts = shape.getPoints(50).map(AsVector3);\r\n let plObj = en as TLine;\r\n let geo = plObj.geometry as BufferGeometry;\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts))\r\n {\r\n updateGeometry(plObj, BufferGeometryUtils.CreateFromPts(pts));\r\n }\r\n }\r\n\r\n GetDragPointCount(drag: DragPointType): number\r\n {\r\n if (drag === DragPointType.Grip)\r\n {\r\n let count = this.EndParam * 2 + 1;\r\n if (this.CloseMark) count--;\r\n return count;\r\n }\r\n else\r\n {\r\n return this._LineData.length;\r\n }\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n let midPts = [];\r\n let enParam = this.EndParam;\r\n for (let i = 0.5; i < enParam; i++)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n p && midPts.push(p);\r\n }\r\n return midPts;\r\n case ObjectSnapMode.Nea:\r\n {\r\n let nea: Vector3[] = [];\r\n for (let cu of this.Explode())\r\n {\r\n let neaa = cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n if (neaa)\r\n nea.push(...neaa);\r\n }\r\n return nea;\r\n }\r\n case ObjectSnapMode.Ext:\r\n {\r\n let cp = this.GetClosestPointTo(pickPoint, true);\r\n if (cp)\r\n return [cp];\r\n break;\r\n }\r\n case ObjectSnapMode.Cen:\r\n let cenPts: Vector3[] = [];\r\n for (let i = 0; i < this._LineData.length; i++)\r\n {\r\n let data = this._LineData[i];\r\n if (!equaln(data.bul, 0))\r\n {\r\n let cu = this.GetCurveAtIndex(i) as Arc;\r\n if (cu)//end bul !== 0 但是并没有圆弧\r\n cenPts.push(cu.Center);\r\n }\r\n }\r\n return cenPts;\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n let cp = this.GetClosestPointTo(pickPoint, false);\r\n if (!cp) return [];\r\n let cparam = this.GetParamAtPoint(cp);\r\n let cu = this.GetCurveAtParam(cparam);\r\n if (cu)\r\n {\r\n let closestPt = cu.GetClosestPointTo(lastPoint, true);\r\n if (closestPt && this.PtOnCurve(closestPt))\r\n return [closestPt];\r\n }\r\n }\r\n case ObjectSnapMode.Tan:\r\n if (lastPoint)\r\n {\r\n let clostPt = this.GetClosestPointTo(pickPoint, false);\r\n if (!clostPt) return [];\r\n let par = this.GetParamAtPoint(clostPt);\r\n let cu = this.GetCurveAtParam(par);\r\n if (cu instanceof Arc)\r\n return cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint);\r\n return [];\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let ptList: Vector3[] = [];\r\n if (this._LineData.length < 2)\r\n return ptList;\r\n\r\n let enParam = this.EndParam;\r\n if (this.CloseMark) enParam -= 0.5;\r\n for (let i = 0; i < enParam + 0.5; i += 0.5)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n ptList.push(p);\r\n }\r\n return ptList;\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let moveVLoc = AsVector2(moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n\r\n let calcIndexList = indexList;\r\n if (indexList.length > 1)\r\n {\r\n let centerIndexes = indexList.filter(i => i % 2 === 0);\r\n if (centerIndexes.length > 0)\r\n calcIndexList = centerIndexes;\r\n }\r\n\r\n for (let index of calcIndexList)\r\n {\r\n if (index % 2 === 0)\r\n {\r\n let cuIndex = index / 2;\r\n\r\n let ptCout = this._LineData.length;\r\n\r\n let frontIndex = cuIndex - 1;\r\n if (this._ClosedMark)\r\n frontIndex = FixIndex(frontIndex, ptCout);\r\n\r\n if (frontIndex >= 0 && this.GetBuilgeAt(frontIndex))\r\n {\r\n let arc = this.GetCurveAtIndex(frontIndex) as Arc;\r\n arc.MoveGripPoints([2], moveVec);\r\n this._LineData[frontIndex].bul = arc.Bul;\r\n }\r\n if ((cuIndex !== ptCout - 1) && this.GetBuilgeAt(cuIndex))\r\n {\r\n let arc = this.GetCurveAtIndex(cuIndex) as Arc;\r\n arc.MoveGripPoints([0], moveVec);\r\n this._LineData[cuIndex].bul = arc.Bul;\r\n }\r\n this._LineData[cuIndex].pt.add(moveVLoc);\r\n }\r\n else\r\n {\r\n let ptIndex = (index - 1) / 2;\r\n let nextIndex = (FixIndex(ptIndex + 1, this._LineData));\r\n let d = this._LineData[ptIndex];\r\n if (d.bul == 0)\r\n {\r\n this._LineData[ptIndex].pt.add(moveVLoc);\r\n this._LineData[nextIndex].pt.add(moveVLoc);\r\n }\r\n else\r\n {\r\n let arc = this.GetCurveAtIndex(ptIndex) as Arc;\r\n arc.MoveGripPoints([1], moveVec);\r\n this._LineData[ptIndex].bul = arc.Bul;\r\n }\r\n }\r\n }\r\n\r\n this.Update();\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n let iswcs = MatrixIsIdentityCS(this._Matrix);\r\n let pts: Vector3[] = [];\r\n for (let data of this._LineData)\r\n {\r\n let p = AsVector3(data.pt);\r\n if (!iswcs) p.applyMatrix4(this._Matrix);\r\n pts.push(p);\r\n }\r\n return pts;\r\n }\r\n\r\n /**\r\n * 范围拉伸(stretch),对夹点进行拉伸.\r\n * 如果对圆弧的一侧进行拉伸,那么修改bul\r\n *\r\n * @param {Array} indexList\r\n * @param {Vector3} vec\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n //本地坐标系移动向量\r\n let moveVLoc = vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv));\r\n\r\n let ptCout = this._LineData.length;\r\n\r\n for (let index of indexList)\r\n {\r\n if (index >= ptCout)\r\n throw \"在拉伸多段线顶点时,尝试拉伸不存在的顶点!(通常是因为模块中的板轮廓被破坏,导致的顶点丢失!)\";\r\n\r\n let frontIndex = index - 1;\r\n let nextIndex = index + 1;\r\n if (this._ClosedMark)\r\n {\r\n frontIndex = FixIndex(frontIndex, ptCout);\r\n nextIndex = FixIndex(nextIndex, ptCout);\r\n }\r\n\r\n /**\r\n * 根据新的拉伸点修改凸度.\r\n *\r\n * @param {number} nextIndex 隔壁点索引\r\n * @param {number} bulIndex 需要修改凸度位置的索引\r\n * @returns\r\n */\r\n const ChangeBul = (nextIndex: number, bulIndex: number) =>\r\n {\r\n //需要修改的点的数据\r\n let d = this._LineData[bulIndex];\r\n if (d === undefined || d.bul == 0) return;\r\n\r\n //如果隔壁点不在拉伸列表中\r\n if (indexList.indexOf(nextIndex) === -1)\r\n {\r\n let needChangeP = this.GetPointAtParam(index);\r\n let notChangeP = this.GetPointAtParam(nextIndex);\r\n\r\n //原先的弦长的一半\r\n let oldChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5;\r\n\r\n //弓高\r\n let arcHeight = oldChordLengthHalf * d.bul;\r\n\r\n needChangeP.add(vec);\r\n\r\n let newChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5;\r\n\r\n d.bul = arcHeight / newChordLengthHalf;\r\n }\r\n };\r\n\r\n ChangeBul(frontIndex, frontIndex);\r\n ChangeBul(nextIndex, index);\r\n\r\n //修改顶点\r\n this._LineData[index].pt.add(AsVector2(moveVLoc));\r\n }\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._LineData.length = 0;\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let v = new Vector2().fromArray(file.Read());\r\n let bul = file.Read();\r\n\r\n this._LineData.push({ pt: v, bul: bul });\r\n }\r\n if (ver > 1)\r\n this._ClosedMark = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n file.Write(this._LineData.length);\r\n\r\n for (let l of this._LineData)\r\n {\r\n file.Write(l.pt.toArray());\r\n file.Write(l.bul);\r\n }\r\n file.Write(this._ClosedMark);\r\n }\r\n}\r\n\r\nexport const TempPolyline = new Polyline();\r\n","import { Matrix4, Vector3 } from 'three';\r\nimport { arrayRemoveDuplicateBySort } from '../Common/ArrayExt';\r\nimport { Arc } from '../DatabaseServices/Entity/Arc';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Line } from '../DatabaseServices/Entity/Line';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { comparePoint, equaln, equalv3 } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 相交延伸选项.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum IntersectOption\r\n{\r\n /**\r\n * 两者都不延伸\r\n */\r\n OnBothOperands = 0,\r\n /**\r\n * 延伸自身\r\n */\r\n ExtendThis = 1,\r\n /**\r\n * 延伸参数\r\n */\r\n ExtendArg = 2,\r\n /**\r\n * 延伸两者\r\n */\r\n ExtendBoth = 3,\r\n}\r\n\r\nexport interface IntersectResult\r\n{\r\n pt: Vector3,\r\n thisParam: number,\r\n argParam: number,\r\n}\r\n\r\n//延伸自身还是参数反转\r\nexport function reverseIntersectOption(intType: IntersectOption)\r\n{\r\n if (intType === IntersectOption.ExtendThis)\r\n intType = IntersectOption.ExtendArg;\r\n else if (intType === IntersectOption.ExtendArg)\r\n intType = IntersectOption.ExtendThis;\r\n return intType;\r\n}\r\n/**\r\n * 校验相交点是否满足延伸选项\r\n * 算法会计算无限延伸状态下的曲线交点,调用该方法进行校验返回校验后的点表\r\n *\r\n * @param {Vector3[]} intRes 相交点.曲线当作完全状态下的相交点\r\n * @param {Curve} c1 曲线1 由this参数传入\r\n * @param {Curve} c2 曲线2 由arg 参数传入\r\n * @param {Intersect} extType 延伸选项.\r\n * @returns {Array} 校验完成后的点表\r\n */\r\nfunction CheckPointOnCurve(intRes: IntersectResult[], c1: Curve, c2: Curve, extType: IntersectOption, tolerance = 1e-6): Array\r\n{\r\n return intRes.filter(r =>\r\n {\r\n if (!(extType & IntersectOption.ExtendThis))\r\n if (!c1.ParamOnCurve(r.thisParam, tolerance / c1.Length))\r\n return false;\r\n\r\n if (!(extType & IntersectOption.ExtendArg))\r\n if (!c2.ParamOnCurve(r.argParam, tolerance / c2.Length))\r\n return false;\r\n return true;\r\n });\r\n}\r\nexport function IntersectCircleAndCircle(cu1: Circle | Arc, cu2: Circle | Arc): IntersectResult[]\r\n{\r\n if (!cu1.IsCoplaneTo(cu2)) return [];\r\n\r\n let c1OcsInv = cu1.OCSInv;\r\n let c1Ocs = cu1.OCS;\r\n\r\n let center1 = cu1.Center.applyMatrix4(c1OcsInv);\r\n let center2 = cu2.Center.applyMatrix4(c1OcsInv);\r\n let radius1 = cu1.Radius;\r\n let radius2 = cu2.Radius;\r\n\r\n let pts: IntersectResult[] = [];\r\n let dist = center2.distanceTo(center1);\r\n\r\n if (dist < Math.abs(radius1 - radius2) - 1e-3\r\n || dist > (radius1 + radius2 + 1e-3))\r\n return pts;\r\n if (equaln(dist, 0, 1e-6)) return pts;\r\n\r\n let dstsqr = dist * dist;\r\n let r1sqr = radius1 * radius1;\r\n let r2sqr = radius2 * radius2;\r\n\r\n let a = (dstsqr - r2sqr + r1sqr) / (2 * dist);\r\n let h = Math.sqrt(Math.abs(r1sqr - (a * a)));\r\n\r\n let ratio_a = a / dist;\r\n let ratio_h = h / dist;\r\n\r\n let dx = center2.x - center1.x;\r\n let dy = center2.y - center1.y;\r\n\r\n let phix = center1.x + (ratio_a * dx);\r\n let phiy = center1.y + (ratio_a * dy);\r\n\r\n dx *= ratio_h;\r\n dy *= ratio_h;\r\n\r\n let p1 = new Vector3(phix + dy, phiy - dx);\r\n let p2 = new Vector3(phix - dy, phiy + dx);\r\n p1.applyMatrix4(c1Ocs);\r\n p2.applyMatrix4(c1Ocs);\r\n\r\n pts.push({\r\n pt: p1,\r\n thisParam: cu1.GetParamAtPoint(p1),\r\n argParam: cu2.GetParamAtPoint(p1),\r\n });\r\n if (!equalv3(p1, p2))//防止点重复\r\n pts.push({\r\n pt: p2,\r\n thisParam: cu1.GetParamAtPoint(p2),\r\n argParam: cu2.GetParamAtPoint(p2),\r\n });\r\n\r\n return pts;\r\n}\r\n/**\r\n * 计算圆与圆弧的交点.\r\n *\r\n * @export\r\n * @param {Circle} circle 圆\r\n * @param {Arc} arc 圆弧\r\n * @param {IntersectOption} extType 延伸选项\r\n * @returns 交点集合\r\n */\r\nexport function IntersectCircleAndArc(circle: Circle, arc: Arc, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let pts = IntersectCircleAndCircle(circle, arc);\r\n return CheckPointOnCurve(pts, circle, arc, extType | IntersectOption.ExtendThis, tolerance);\r\n}\r\n\r\n/**\r\n * 计算圆弧与圆弧的交点\r\n *\r\n * @export\r\n * @param {Arc} arc1 圆弧\r\n * @param {Arc} arc2 圆弧\r\n * @param {IntersectOption} extType 延伸选项\r\n * @returns 交点集合\r\n */\r\nexport function IntersectArcAndArc(arc1: Arc, arc2: Arc, extType: IntersectOption, tolerance = 1e-5)\r\n{\r\n let pts = IntersectCircleAndCircle(arc1, arc2);\r\n return CheckPointOnCurve(pts, arc1, arc2, extType, tolerance);\r\n}\r\n\r\nexport function IntersectEllipseAndLine(l: Line, el: Ellipse, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let pts = IntersectLineAndEllipseFor2D(l, el);\r\n return CheckPointOnCurve(pts, l, el, extType, tolerance);\r\n}\r\n\r\n/**\r\n * 通用方法:计算直线与圆的交点,默认延伸全部\r\n *\r\n * @export\r\n * @param {Line} line 直线\r\n * @param {(Circle | Arc)} circle 圆或圆弧\r\n * @returns 交点集合\r\n */\r\nfunction IntersectLineAndCircleOrArc(line: Line, circle: Circle | Arc): IntersectResult[]\r\n{\r\n let lineOrg = line.StartPoint;\r\n let lineDirection = line.EndPoint.sub(lineOrg);\r\n let dirLen = lineDirection.length();\r\n if (equaln(dirLen, 0)) return [];\r\n lineDirection.divideScalar(dirLen);\r\n\r\n let diff = lineOrg.clone().sub(circle.Center);\r\n let a0 = diff.dot(diff) - circle.Radius ** 2;\r\n let a1 = lineDirection.dot(diff);\r\n let discr = a1 ** 2 - a0;\r\n\r\n if (equaln(discr, 0, 1e-7))\r\n {\r\n let pt = lineOrg.add(lineDirection.multiplyScalar(-a1));\r\n\r\n return [{\r\n pt,\r\n thisParam: -a1 / dirLen,\r\n argParam: circle.GetParamAtPoint(pt)\r\n }];\r\n }\r\n else if (discr > 0)\r\n {\r\n let root = Math.sqrt(discr);\r\n let p1 = lineOrg.clone().add(lineDirection.clone().multiplyScalar(-a1 + root));\r\n let p2 = lineOrg.add(lineDirection.multiplyScalar(-a1 - root));\r\n\r\n return [\r\n {\r\n pt: p1,\r\n thisParam: (-a1 + root) / dirLen,\r\n argParam: circle.GetParamAtPoint(p1)\r\n }, {\r\n pt: p2,\r\n thisParam: (-a1 - root) / dirLen,\r\n argParam: circle.GetParamAtPoint(p2)\r\n }\r\n ];\r\n }\r\n return [];\r\n}\r\n\r\n//直线和圆\r\nexport function IntersectLineAndCircle(line: Line, circle: Circle, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let ptArr = IntersectLineAndCircleOrArc(line, circle);\r\n return CheckPointOnCurve(ptArr, line, circle, extType | IntersectOption.ExtendArg);\r\n}\r\n//直线和圆弧\r\nexport function IntersectLineAndArc(line: Line, arc: Arc, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let ptArr = IntersectLineAndCircleOrArc(line, arc);\r\n return CheckPointOnCurve(ptArr, line, arc, extType, tolerance);\r\n}\r\n//直线和直线\r\nexport function IntersectLAndLFor2D(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3): Vector3\r\n{\r\n let dx1 = p1.x - p2.x;\r\n let dx2 = p3.x - p4.x;\r\n let dx3 = p4.x - p2.x;\r\n let dy1 = p1.y - p2.y;\r\n let dy2 = p3.y - p4.y;\r\n let dy3 = p4.y - p2.y;\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);\r\n\r\n if (equaln(det, 0.0, 1e-5))\r\n {\r\n // if (equaln(dx2 * dy3, dy2 * dx3, 1e-5))\r\n // {\r\n // return midPoint(midPoint(p1, p2), midPoint(p3, p4));\r\n // }\r\n return;\r\n }\r\n\r\n let pt = new Vector3;\r\n let ratio = ((dx1 * dy3) - (dy1 * dx3)) / det;\r\n pt.x = (ratio * dx2) + p4.x;\r\n pt.y = (ratio * dy2) + p4.y;\r\n\r\n return pt;\r\n}\r\n\r\nexport function IntersectLAndLFor2D2(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3): Vector3[]\r\n{\r\n let dx1 = p1.x - p2.x;\r\n let dx2 = p3.x - p4.x;\r\n let dx3 = p4.x - p2.x;\r\n let dy1 = p1.y - p2.y;\r\n let dy2 = p3.y - p4.y;\r\n let dy3 = p4.y - p2.y;\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);\r\n\r\n if (equaln(det, 0.0, 1e-5))\r\n {\r\n if (equaln(dx2 * dy3, dy2 * dx3, 1e-5))\r\n return [p1, p2, p3, p4];\r\n return [];\r\n }\r\n\r\n let pt = new Vector3;\r\n let ratio = ((dx1 * dy3) - (dy1 * dx3)) / det;\r\n pt.x = (ratio * dx2) + p4.x;\r\n pt.y = (ratio * dy2) + p4.y;\r\n\r\n return [pt];\r\n}\r\n\r\nexport function IntersectLine3AndLine3(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3, epsilon = 1e-6)\r\n{\r\n let pts = ShortestLine3AndLine3(p1, p2, p3, p4);\r\n if (pts) return pts[0];\r\n}\r\n\r\n/**\r\n * 三维中两行之间最短的直线\r\n * ref:https://stackoverflow.com/questions/2316490/the-algorithm-to-find-the-point-of-intersection-of-two-3d-line-segment\r\n * ref:http://paulbourke.net/geometry/pointlineplane/\r\n * ref:http://paulbourke.net/geometry/pointlineplane/calclineline.cs\r\n *\r\n * @export\r\n * @param {Vector3} p1 l1.start\r\n * @param {Vector3} p2 l1.end\r\n * @param {Vector3} p3 l2.start\r\n * @param {Vector3} p4 l2.end\r\n * @returns 交点集合\r\n */\r\nfunction ShortestLine3AndLine3(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3, epsilon = 1e-6)\r\n{\r\n let p43 = p4.clone().sub(p3);\r\n if (p43.lengthSq() < epsilon)\r\n return;\r\n let p21 = p2.clone().sub(p1);\r\n if (p21.lengthSq() < epsilon)\r\n return;\r\n\r\n let p13 = p1.clone().sub(p3);\r\n\r\n let d1343 = p13.x * p43.x + p13.y * p43.y + p13.z * p43.z;\r\n let d4321 = p43.x * p21.x + p43.y * p21.y + p43.z * p21.z;\r\n let d1321 = p13.x * p21.x + p13.y * p21.y + p13.z * p21.z;\r\n let d4343 = p43.x * p43.x + p43.y * p43.y + p43.z * p43.z;\r\n let d2121 = p21.x * p21.x + p21.y * p21.y + p21.z * p21.z;\r\n\r\n let denom = d2121 * d4343 - d4321 * d4321;\r\n if (Math.abs(denom) < epsilon)\r\n return;\r\n let numer = d1343 * d4321 - d1321 * d4343;\r\n\r\n let mua = numer / denom;\r\n let mub = (d1343 + d4321 * (mua)) / d4343;\r\n\r\n let resultSegmentPoint1 = new Vector3();\r\n resultSegmentPoint1.x = p1.x + mua * p21.x;\r\n resultSegmentPoint1.y = p1.y + mua * p21.y;\r\n resultSegmentPoint1.z = p1.z + mua * p21.z;\r\n let resultSegmentPoint2 = new Vector3();\r\n resultSegmentPoint2.x = p3.x + mub * p43.x;\r\n resultSegmentPoint2.y = p3.y + mub * p43.y;\r\n resultSegmentPoint2.z = p3.z + mub * p43.z;\r\n\r\n return [resultSegmentPoint1, resultSegmentPoint2];\r\n}\r\n\r\n//直线和直线\r\nexport function IntersectLineAndLine(l1: Line, l2: Line, extType: IntersectOption, fuzz = 1e-4): IntersectResult[]\r\n{\r\n let [pt1, pt2, pt3, pt4] = [l1.StartPoint, l1.EndPoint, l2.StartPoint, l2.EndPoint];\r\n\r\n let ipts: Vector3[];\r\n if (equaln(pt1.z, 0, fuzz) && equaln(pt2.z, 0, fuzz) && equaln(pt3.z, 0, fuzz) && equaln(pt4.z, 0, fuzz))\r\n {\r\n ipts = IntersectLAndLFor2D2(pt1, pt2, pt3, pt4);\r\n ipts.sort(comparePoint(\"xy\"));\r\n arrayRemoveDuplicateBySort(ipts, (p1, p2) => equalv3(p1, p2, fuzz));\r\n }\r\n else\r\n {\r\n ipts = ShortestLine3AndLine3(pt1, pt2, pt3, pt4);\r\n if (!ipts) return [];\r\n if (ipts.length === 2)\r\n ipts.pop();\r\n }\r\n\r\n let ints: IntersectResult[] = [];\r\n for (let pt of ipts)\r\n {\r\n let { closestPt: p1, param: param1 } = l1.GetClosestAtPoint(pt, true);\r\n if (!equalv3(pt, p1, fuzz)) return [];\r\n if (!(extType & IntersectOption.ExtendThis))\r\n if (!(l1.ParamOnCurve(param1, 0) || equalv3(pt1, pt, fuzz) || equalv3(pt2, pt, fuzz)))\r\n return [];\r\n let { closestPt: p2, param: param2 } = l2.GetClosestAtPoint(pt, true);\r\n if (!equalv3(pt, p2, fuzz)) return [];\r\n if (!(extType & IntersectOption.ExtendArg))\r\n if (!(l2.ParamOnCurve(param2, 0) || equalv3(pt3, pt, fuzz) || equalv3(pt4, pt, fuzz)))\r\n return [];\r\n ints.push({ pt, thisParam: param1, argParam: param2 });\r\n }\r\n return ints;\r\n}\r\n\r\nexport function IntersectPolylineAndCurve(pl: Polyline, cu: Curve, extType: IntersectOption, tolerance = 1e-6): IntersectResult[]\r\n{\r\n let cus: Curve[] = pl.Explode();\r\n let cus2: Curve[];\r\n if (cu instanceof Polyline)\r\n cus2 = cu.Explode();\r\n else\r\n cus2 = [cu];\r\n\r\n let intRes: IntersectResult[] = [];\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu1 = cus[i];\r\n for (let j = 0; j < cus2.length; j++)\r\n {\r\n let cu2 = cus2[j];\r\n let ext = extType;\r\n\r\n let isStart = i === 0;\r\n let isEnd = i === cus.length - 1;\r\n\r\n let isStart2 = j === 0;\r\n let isEnd2 = j === cus2.length - 1;\r\n\r\n //当曲线闭合时,或者当前的子曲线不是起始和不是结束,那么不延伸曲线.\r\n if (pl.CloseMark || !(isStart || isEnd))\r\n ext = ext & ~IntersectOption.ExtendThis;\r\n if ((cu instanceof Polyline && cu.CloseMark) || !(isStart2 || isEnd2))\r\n ext = ext & ~IntersectOption.ExtendArg;\r\n\r\n let ptPars = cu1.IntersectWith2(cu2, ext, tolerance).filter(r1 => intRes.every(r2 => !equalv3(r1.pt, r2.pt)));\r\n\r\n //校验延伸\r\n if (IntersectOption.ExtendThis & ext)\r\n {\r\n //如果曲线是起始又是结束,那么不校验.\r\n if (isStart && isEnd)\r\n {\r\n }\r\n else if (isStart)\r\n {\r\n ptPars = ptPars.filter(res => res.thisParam <= 1);\r\n }\r\n else if (isEnd)\r\n {\r\n ptPars = ptPars.filter(res => res.thisParam >= 0);\r\n }\r\n }\r\n if (IntersectOption.ExtendArg & ext)\r\n {\r\n //如果曲线是起始又是结束,那么不校验.\r\n if (isStart2 && isEnd2)\r\n {\r\n }\r\n else if (isStart2)\r\n {\r\n ptPars = ptPars.filter(res => res.argParam + j <= cu2.EndParam);\r\n }\r\n else if (isEnd2)\r\n {\r\n ptPars = ptPars.filter(res => res.argParam + j >= 0);\r\n }\r\n }\r\n\r\n intRes.push(...ptPars.map(r =>\r\n {\r\n return {\r\n pt: r.pt,\r\n thisParam: i + r.thisParam,\r\n argParam: j + r.argParam,\r\n };\r\n }));\r\n }\r\n }\r\n return intRes;\r\n}\r\n\r\nexport function IntersectLineAndEllipseFor2D(l: Line, el: Ellipse)\r\n{\r\n if (!l.IsCoplaneTo(el)) return [];\r\n\r\n let mat = new Matrix4().makeRotationZ(-el.Rotation).multiply(el.OCSInv);\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let sp = l.StartPoint.applyMatrix4(mat);\r\n let ep = l.EndPoint.applyMatrix4(mat);\r\n let pts: Vector3[] = [];\r\n if (equaln(sp.x, ep.x))\r\n {\r\n let c = sp.x;\r\n let j = (b ** 2) * (1 - (c ** 2) / (a ** 2));\r\n if (equaln(j, 0))\r\n {\r\n pts = [new Vector3(sp.x, 0)];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let y1 = Math.sqrt(j);\r\n let y2 = -Math.sqrt(j);\r\n pts = [\r\n new Vector3(c, y1),\r\n new Vector3(c, y2)\r\n ];\r\n }\r\n }\r\n else\r\n {\r\n let k = (sp.y - ep.y) / (sp.x - ep.x);\r\n let c = sp.y - sp.x * k;\r\n let j = (2 * a * a * k * c) * (2 * a * a * k * c) - 4 * (b * b + a * a * k * k) * a * a * (c * c - b * b);\r\n if (equaln(j, 0))\r\n {\r\n let x1 = -2 * k * c * a * a / (2 * (b * b + a * a * k * k));\r\n let y1 = k * x1 + c;\r\n pts = [new Vector3(x1, y1)];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let x1 = (-2 * k * c * a * a + Math.sqrt(j)) / (2 * (b * b + a * a * k * k));\r\n let y1 = k * x1 + c;\r\n let x2 = (-2 * k * c * a * a - Math.sqrt(j)) / (2 * (b * b + a * a * k * k));\r\n let y2 = k * x2 + c;\r\n pts = [\r\n new Vector3(x1, y1),\r\n new Vector3(x2, y2)\r\n ];\r\n }\r\n }\r\n\r\n let matInv = new Matrix4().getInverse(mat);\r\n return pts.map(p =>\r\n {\r\n let pt = p.applyMatrix4(matInv);\r\n return {\r\n pt,\r\n thisParam: l.GetParamAtPoint(pt),\r\n argParam: el.GetParamAtPoint(pt)\r\n };\r\n });\r\n}\r\nexport function IntersectEllipseAndCircleOrArc(el: Ellipse, cir: Circle | Arc, type: IntersectOption)\r\n{\r\n if (!el.IsCoplaneTo(cir)) return [];\r\n\r\n let a = Math.max(el.RadX, el.RadY);\r\n let dist = el.Center.distanceTo(cir.Center);\r\n\r\n let disVail = dist > (a + cir.Radius);\r\n\r\n if (disVail)\r\n return [];\r\n\r\n if (equalv3(el.Center, cir.Center))\r\n {\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let r = cir.Radius;\r\n let j = ((a * b) ** 2 - (b * r) ** 2) / (a ** 2 - b ** 2);\r\n let pts: Vector3[] = [];\r\n if (equaln(j, 0) || equaln(j, r ** 2))\r\n {\r\n if (equaln(j, 0))\r\n pts = [\r\n new Vector3(a, 0),\r\n new Vector3(-a, 0)\r\n ];\r\n else\r\n pts = [\r\n new Vector3(0, r),\r\n new Vector3(0, -r)\r\n ];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let y1 = Math.sqrt(j);\r\n let y2 = - Math.sqrt(j);\r\n let n = r ** 2 - j;\r\n let x1 = Math.sqrt(n);\r\n let x2 = - Math.sqrt(n);\r\n pts = [\r\n new Vector3(x1, y1),\r\n new Vector3(x1, y2),\r\n new Vector3(x2, y1),\r\n new Vector3(x2, y2),\r\n ];\r\n }\r\n let ro = new Matrix4().makeRotationZ(el.Rotation);\r\n let res = pts.map(p =>\r\n {\r\n let pt = p.applyMatrix4(ro).applyMatrix4(el.OCS);\r\n return {\r\n pt,\r\n thisParam: el.GetParamAtPoint(pt),\r\n argParam: cir.GetParamAtPoint(pt)\r\n };\r\n });\r\n return CheckPointOnCurve(res, el, cir, type);\r\n }\r\n else\r\n {\r\n let pts = el.Shape.getPoints(60);\r\n let lineData = pts.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n let pl = new Polyline(lineData);\r\n let cirClone = cir.Clone().ApplyMatrix(el.OCSInv);\r\n\r\n if (type === IntersectOption.ExtendBoth)\r\n type = IntersectOption.ExtendArg;\r\n else if (type !== IntersectOption.ExtendArg)\r\n type = IntersectOption.OnBothOperands;\r\n\r\n let intPts = IntersectPolylineAndCurve(pl, cirClone, type);\r\n intPts.forEach(r => r.pt.applyMatrix4(el.OCS));\r\n return intPts;\r\n }\r\n}\r\nexport function IntersectEllipse(el1: Ellipse, el2: Ellipse, type: IntersectOption)\r\n{\r\n if (!el1.IsCoplaneTo(el2)) return [];\r\n\r\n let isEqul = equalv3(el1.Center, el2.Center)\r\n && equaln(el1.RadX, el2.RadX)\r\n && equaln(el1.RadY, el2.RadY)\r\n && equalv3(el1.StartPoint, el2.StartPoint);\r\n\r\n if (isEqul)\r\n return [];\r\n\r\n let a1 = Math.max(el1.RadX, el1.RadY);\r\n let a2 = Math.max(el2.RadX, el2.RadY);\r\n\r\n let dist = el1.Center.distanceToSquared(el2.Center);\r\n if (dist > (a1 + a2) ** 2)\r\n {\r\n return [];\r\n }\r\n\r\n if (!el1.BoundingBox.intersectsBox(el2.BoundingBox))\r\n return [];\r\n\r\n let diffMat = el1.OCSInv.multiply(el2.OCS);\r\n let pts1 = el1.Shape.getPoints(60);\r\n let pts2 = el2.Shape.getPoints(60);\r\n\r\n let lineData1 = pts1.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n let lineData2 = pts2.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n\r\n let pl1 = new Polyline(lineData1);\r\n let pl2 = new Polyline(lineData2).ApplyMatrix(diffMat);\r\n\r\n let intPts = pl1.IntersectWith2(pl2, 0);\r\n intPts.forEach(r => r.pt.applyMatrix4(el1.OCS));\r\n return intPts;\r\n}\r\n","import { BufferGeometry, EllipseCurve, Line as TLine, Material, Matrix3, Matrix4, Object3D, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getArcOrCirNearPts, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { clamp } from '../../Common/Utils';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { angle, AsVector3, equaln, MoveMatrix, polar } from '../../Geometry/GeUtils';\r\nimport { IntersectCircleAndArc, IntersectCircleAndCircle, IntersectEllipseAndCircleOrArc, IntersectLineAndCircle, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Shape2 } from '../Shape2';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Arc } from './Arc';\r\nimport { Curve } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\nlet circleGeometry: BufferGeometry;\r\nfunction GetCircleGeometry()\r\n{\r\n if (!circleGeometry)\r\n circleGeometry = BufferGeometryUtils.CreateFromPts(\r\n new EllipseCurve(0, 0, 1, 1, 0, 2 * Math.PI, false, 0).getPoints(360).map(AsVector3)\r\n );\r\n return circleGeometry;\r\n}\r\n\r\n@Factory\r\nexport class Circle extends Curve\r\n{\r\n constructor(center?: Vector3, radius: number = 1e-6)\r\n {\r\n super();\r\n center && this._Matrix.setPosition(center);\r\n this._Radius = radius;\r\n }\r\n private _Radius: number;\r\n\r\n get Shape()\r\n {\r\n let sp = new Shape2();\r\n sp.ellipse(0, 0, this._Radius, this._Radius, 0, 2 * Math.PI, false, 0);\r\n return sp;\r\n }\r\n\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(v);\r\n this.Update();\r\n }\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Radius = clamp(v, 1e-9, 1e19);\r\n this.Update();\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Center = this.Center.applyMatrix4(m);\r\n this.Radius = this.Radius * m.getMaxScaleOnAxis();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n return this;\r\n }\r\n\r\n //******************** Curve function start*****************//\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get StartParam(): number\r\n {\r\n return 0;\r\n }\r\n get EndPoint(): Vector3\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get EndParam(): number\r\n {\r\n return 1;\r\n }\r\n PtInCurve(pt: Vector3)\r\n {\r\n return pt.distanceToSquared(this.Center) < Math.pow(this.Radius, 2);\r\n }\r\n get Area()\r\n {\r\n return Math.PI * this._Radius ** 2;\r\n }\r\n get Area2()\r\n {\r\n return Math.PI * this._Radius ** 2;\r\n }\r\n get Length()\r\n {\r\n return Math.PI * 2 * this._Radius;\r\n }\r\n\r\n get IsClose(): boolean\r\n {\r\n return true;\r\n }\r\n\r\n //曲线为顺时针\r\n get IsClockWise(): boolean { return false; }\r\n\r\n GetPointAtParam(param: number)\r\n {\r\n return (polar(new Vector3(), param * 2 * Math.PI, this._Radius) as Vector3).applyMatrix4(this._Matrix);\r\n }\r\n\r\n GetPointAtDistance(distance: number)\r\n {\r\n let param = distance / (Math.PI * 2 * this._Radius);\r\n return this.GetPointAtParam(param);\r\n }\r\n\r\n GetDistAtParam(param: number)\r\n {\r\n return Math.PI * 2 * this._Radius * param;\r\n }\r\n\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n GetParamAtDist(d: number)\r\n {\r\n return d / (Math.PI * 2 * this._Radius);\r\n }\r\n\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params: number[];\r\n if (param instanceof Array)\r\n {\r\n params = param.filter(p => this.ParamOnCurve(p));\r\n params.sort((a1, a2) => a2 - a1);//从大到小\r\n arrayRemoveDuplicateBySort(params);\r\n if (params.length < 2) return [];\r\n }\r\n else //圆不能被单个参数切割\r\n return [];\r\n\r\n //补上最后一个到第一个的弧\r\n params.unshift(arrayLast(params));\r\n\r\n let anglelist = params.map(param => Math.PI * 2 * param);\r\n\r\n let curvelist = new Array();\r\n for (let i = 0; i < anglelist.length - 1; i++)\r\n {\r\n let sa = anglelist[i];\r\n let ea = anglelist[i + 1];\r\n if (!equaln(sa, ea, 1e-6))\r\n {\r\n let arc = new Arc(new Vector3(), this._Radius, ea, sa, false);\r\n arc.ColorIndex = this.ColorIndex;\r\n arc.ApplyMatrix(this.OCS);\r\n curvelist.push(arc);\r\n }\r\n }\r\n return curvelist;\r\n }\r\n\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnCurve(pt))\r\n return NaN;\r\n return angle(pt.clone().applyMatrix4(this.OCSInv)) / (Math.PI * 2);\r\n }\r\n\r\n PtOnCurve(pt: Vector3)\r\n {\r\n return equaln(pt.distanceToSquared(this.Center), this._Radius * this._Radius, 1e-5);\r\n }\r\n GetOffsetCurves(offsetDist: number): Curve[]\r\n {\r\n if ((offsetDist + this._Radius) > 0)\r\n {\r\n let circle = this.Clone();\r\n circle.Radius = this._Radius + offsetDist;\r\n return [circle];\r\n }\r\n return [];\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption)\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectCircleAndArc(this, curve, intType);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType)));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectCircleAndCircle(this, curve);\r\n }\r\n if (curve instanceof Ellipse)\r\n {\r\n return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType));\r\n }\r\n if (curve instanceof Polyline)\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType)));\r\n return [];\r\n }\r\n //******************** Curve function end*****************//\r\n\r\n get BoundingBox(): Box3Ext\r\n {\r\n return new Box3Ext().setFromPoints(this.GetGripPoints());\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n let cirGeo = GetCircleGeometry();\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let geometry = new LineGeometry().setPositions(cirGeo.attributes.position.array as number[]);\r\n obj.add(new Line2(geometry, ColorMaterial.PrintLineMatrial));\r\n }\r\n else\r\n {\r\n let line = new TLine(cirGeo, ColorMaterial.GetLineMaterial(this._Color));\r\n obj.add(line);\r\n }\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n obj.children[0].scale.set(this._Radius, this._Radius, this._Radius);\r\n obj.children[0].updateMatrix();\r\n }\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material: Material)\r\n {\r\n if (type === RenderType.WireframePrint)\r\n {\r\n //TODO:打印线需要其他颜色?\r\n }\r\n else\r\n {\r\n let m = obj.children[0] as TLine;\r\n m.material = material ? material : ColorMaterial.GetLineMaterial(this._Color);\r\n return obj;\r\n }\r\n\r\n }\r\n\r\n GetDragPointCount(drag: DragPointType): number\r\n {\r\n if (drag === DragPointType.Grip)\r\n return 5;\r\n else\r\n return 1;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let pts = [\r\n new Vector3(),\r\n new Vector3(0, this._Radius),\r\n new Vector3(0, -this._Radius),\r\n new Vector3(-this._Radius, 0),\r\n new Vector3(this._Radius, 0),\r\n ];\r\n\r\n let ocs = this.OCS;\r\n pts.forEach(p => p.applyMatrix4(ocs));\r\n return pts;\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.Nea:\r\n {\r\n return getArcOrCirNearPts(this, pickPoint, viewXform);\r\n }\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n let l = new Line(this.Center, lastPoint);\r\n return l.IntersectWith(this, IntersectOption.ExtendBoth);\r\n }\r\n case ObjectSnapMode.Tan:\r\n let pts = GetTanPtsOnArcOrCircle(this, lastPoint);\r\n if (pts)\r\n return pts;\r\n case ObjectSnapMode.End:\r\n {\r\n let pts = this.GetGripPoints();\r\n pts.shift();\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n\r\n let pts = this.GetGripPoints();\r\n if (indexList.length > 0)\r\n {\r\n let index = indexList[0];\r\n let p = pts[index];\r\n if (p)\r\n {\r\n if (index > 0)\r\n {\r\n p.add(vec);\r\n this.Radius = p.distanceTo(this.Center);\r\n }\r\n else\r\n {\r\n this.Center = this.Center.add(vec);\r\n }\r\n }\r\n }\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n let pts = [new Vector3()];\r\n let ocs = this.OCS;\r\n pts.forEach(p => p.applyMatrix4(ocs));\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n let mat = MoveMatrix(vec);\r\n this.ApplyMatrix(mat);\r\n }\r\n }\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n if (typeof pt === \"number\")\r\n pt = this.GetPointAtParam(pt);\r\n else\r\n pt = pt.clone();\r\n\r\n pt.applyMatrix4(this.OCSInv);\r\n\r\n let an = angle(pt) + Math.PI * 0.5;\r\n\r\n return polar(new Vector3(), an, 1).applyMatrix4(new Matrix4().extractRotation(this.OCS));\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(this.OCS);\r\n if (equaln(pt.distanceToSquared(this.Center), 0, 1e-10))\r\n return this.GetPointAtParam(0);\r\n let l = new Line(this.Center, pt);\r\n let pts = l.IntersectWith(this, IntersectOption.ExtendBoth);\r\n pts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(pt) - p2.distanceToSquared(pt);\r\n });\r\n return pts[0];\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Radius = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);\r\n file.Write(this._Radius);\r\n }\r\n //#endregion\r\n}\r\n","\r\n/**\r\n * 一个简单的计数器实现,本质是使用一个Map来保存元素的个数\r\n * \r\n * 例:\r\n * let count = new Count();\r\n * count.AddCount(\"Test\", 1);\r\n * count.GetCount(\"Test\");//现在 Test 的个数为1\r\n */\r\nexport class Count\r\n{\r\n private m_CountMap = new WeakMap();\r\n GetCount(obj: any): number\r\n {\r\n let count = this.m_CountMap.get(obj);\r\n if (!count)\r\n {\r\n this.m_CountMap.set(obj, 0);\r\n count = 0;\r\n }\r\n return count;\r\n }\r\n AddCount(obj: any, add: number)\r\n {\r\n this.m_CountMap.set(obj, this.GetCount(obj) + add);\r\n }\r\n}\r\n","import { Vector3, MathUtils } from \"three\";\r\nimport { YAxis, ZAxis, equaln } from \"./GeUtils\";\r\n\r\n/**\r\n * 轨道控制的数学类,观察向量和角度的互相转换\r\n * 当x当抬头或者低头到90度时,触发万向锁.\r\n */\r\nexport class Orbit\r\n{\r\n //抬头低头 正数抬头 负数低头\r\n private phi: number = 0;//Φ\r\n\r\n //身体旋转 0为正右边 逆时针旋转\r\n theta: number = 0;//θ\r\n\r\n get RoX()\r\n {\r\n return this.phi;\r\n }\r\n set RoX(v)\r\n {\r\n this.phi = MathUtils.clamp(v, Math.PI * -0.49, Math.PI * 0.49);\r\n }\r\n\r\n /**\r\n * 使用旋转角度 计算观察向量\r\n * @param [outDirection] 引用传入,如果传入,那么就不构造新的向量\r\n * @returns 返回观察向量\r\n */\r\n UpdateDirection(outDirection = new Vector3()): Vector3\r\n {\r\n outDirection.z = Math.sin(this.phi);\r\n //归一化专用.\r\n let d = Math.abs(Math.cos(this.phi));\r\n\r\n outDirection.x = Math.cos(this.theta) * d;\r\n outDirection.y = Math.sin(this.theta) * d;\r\n\r\n return outDirection;\r\n }\r\n\r\n /**\r\n * 使用观察向量,计算旋转角度\r\n * @param dir 这个向量会被修改成单位向量.\r\n */\r\n SetFromDirection(dir: Vector3): void\r\n {\r\n dir.normalize();\r\n this.phi = Math.asin(dir.z);\r\n if (equaln(dir.x, 0) && equaln(dir.y, 0))\r\n if (dir.z > 0)\r\n this.theta = Math.PI * -0.5;\r\n else\r\n this.theta = Math.PI * 0.5;\r\n else\r\n this.theta = Math.atan2(dir.y, dir.x);\r\n }\r\n\r\n /**\r\n * 参考任意轴坐标系算法.\r\n * http://help.autodesk.com/view/ACD/2017/CHS/?guid=GUID-E19E5B42-0CC7-4EBA-B29F-5E1D595149EE\r\n */\r\n static ComputUpDirection(n: Vector3, ay: Vector3 = new Vector3(), ax: Vector3 = new Vector3()): Vector3\r\n {\r\n n.normalize();\r\n if (Math.abs(n.x) < 0.015625 && Math.abs(n.y) < 0.015625)\r\n ax.crossVectors(YAxis, n);\r\n else\r\n ax.crossVectors(ZAxis, n);\r\n ay.crossVectors(n, ax);\r\n ax.normalize();\r\n ay.normalize();\r\n return ay;\r\n }\r\n}\r\n","import { Box3, Line3, Matrix3, Matrix4, Vec2, Vector2, Vector3 } from 'three';\r\nimport { Arc } from '../DatabaseServices/Entity/Arc';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Line } from '../DatabaseServices/Entity/Line';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { IsPointInBowArc } from '../DatabaseServices/PointInPolyline';\r\nimport { Count } from '../Geometry/Count';\r\nimport { CurveMap, Vertice } from '../Geometry/CurveMap';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, isParallelTo, XAxis, ZeroVec, isPerpendicularityTo, YAxis, isIntersect } from '../Geometry/GeUtils';\r\nimport { Vec3 } from '../Geometry/IVec3';\r\nimport { Orbit } from '../Geometry/Orbit';\r\nimport { PlaneExt } from '../Geometry/Plane';\r\nimport { IntersectOption, IntersectResult } from '../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../GraphicsSystem/OffsetPolyline';\r\nimport { arrayLast, changeArrayStartIndex, equalArray } from './ArrayExt';\r\nimport { Status } from './Status';\r\nimport { FixIndex, LINK_FUZZ } from './Utils';\r\n\r\n//3点获取圆心\r\nexport function getCircleCenter(pt1: Vector3, pt2: Vector3, pt3: Vector3)\r\n{\r\n if (!(pt1 && pt2 && pt3))\r\n return;\r\n let A1 = pt1.x - pt2.x;\r\n let B1 = pt1.y - pt2.y;\r\n let C1 = (Math.pow(pt1.x, 2) - Math.pow(pt2.x, 2) + Math.pow(pt1.y, 2) - Math.pow(pt2.y, 2)) / 2;\r\n let A2 = pt3.x - pt2.x;\r\n let B2 = pt3.y - pt2.y;\r\n let C2 = (Math.pow(pt3.x, 2) - Math.pow(pt2.x, 2) + Math.pow(pt3.y, 2) - Math.pow(pt2.y, 2)) / 2;\r\n //令temp = A1*B2 - A2*B1\r\n let temp = A1 * B2 - A2 * B1;\r\n let center = new Vector3();\r\n //判断三点是否共线\r\n if (temp === 0)\r\n {\r\n //共线则将第一个点pt1作为圆心\r\n center.x = pt1.x;\r\n center.y = pt1.y;\r\n }\r\n else\r\n {\r\n //不共线则求出圆心:\r\n center.x = (C1 * B2 - C2 * B1) / temp;\r\n center.y = (A1 * C2 - A2 * C1) / temp;\r\n }\r\n\r\n return center;\r\n}\r\n\r\n// 弦长+切线获取圆心角\r\nexport function getCirAngleByChordAndTangent(chord: Vector3, tangentLine: Vector3)\r\n{\r\n let dir = tangentLine.clone().cross(chord).normalize();\r\n\r\n let ctAngle = chord.angleTo(tangentLine);\r\n\r\n // 圆心角\r\n let cirAng = Math.PI - 2 * Math.abs(ctAngle - Math.PI / 2);\r\n\r\n if (ctAngle > Math.PI / 2)\r\n {\r\n cirAng = Math.PI * 2 - cirAng;\r\n }\r\n return cirAng *= dir.z;\r\n}\r\n//行列式\r\nexport function getDeterminantFor2V(v1: Vector2, v2: Vector2): number\r\n{\r\n return v1.x * v2.y - v1.y * v2.x;\r\n}\r\n\r\nexport function getDeterminantFor3V(v1: Vector3, v2: Vector3, v3: Vector3)\r\n{\r\n let mat = new Matrix3();\r\n mat.set(v1.x, v1.y, v1.z, v2.x, v2.y, v2.z, v3.x, v3.y, v3.z);\r\n return mat.determinant();\r\n}\r\n\r\n/**\r\n * 曲线根据连接来分组,每组都是一条首尾相连的曲线表.\r\n *\r\n * @export\r\n * @param {Curve[]} cus 传入的分组的曲线表\r\n * @returns {Array>} 返回如下\r\n * [\r\n * [c1,c2,c3...],//后面的曲线的起点总是等于上一个曲线的终点\r\n * [c1,c2,c3...],\r\n * ]\r\n */\r\nexport function curveLinkGroup(cus: Curve[]): Array>\r\n{\r\n //返回的曲线组\r\n let groupCus = new Array>();\r\n\r\n //将封闭的曲线先提取出来\r\n cus = cus.filter(c =>\r\n {\r\n let isClose = c.IsClose;\r\n if (isClose)\r\n groupCus.push([c]);\r\n return !isClose;\r\n });\r\n if (cus.length === 0) return groupCus;\r\n //曲线节点图\r\n let cuMap = new CurveMap();\r\n cus.forEach(c => cuMap.AddCurveToMap(c));\r\n\r\n //曲线站点表\r\n let stands = cuMap.Stands;\r\n //曲线使用计数\r\n let cuCount = new Count();\r\n\r\n /**\r\n * 从站点的路线中任意取一条,加入到曲线数组中.\r\n *\r\n * @param {Curve[]} cus 已经连接的曲线列表\r\n * @param {boolean} isEndSeach true:从终点搜索,false:从起点搜索\r\n * @returns {Stand} 如果站点中存在可以取得的曲线,返回下个站点,否则返回undefined\r\n */\r\n function linkCurve(stand: Vertice, cus: Curve[], isEndSeach: boolean): Vertice | undefined\r\n {\r\n for (let route of stand.routes)\r\n {\r\n let cu = route.curve;\r\n if (cuCount.GetCount(cu) === 0)\r\n {\r\n if (isEndSeach)\r\n {\r\n //保证曲线总是从起点连接到终点\r\n if (!equalv3(cu.StartPoint, stand.position))\r\n cu.Reverse();\r\n cus.push(cu);\r\n }\r\n else\r\n {\r\n //保证曲线总是从起点连接到终点\r\n if (!equalv3(cu.EndPoint, stand.position))\r\n cu.Reverse();\r\n cus.unshift(cu);\r\n }\r\n\r\n cuCount.AddCount(cu, 1);\r\n return route.to;\r\n }\r\n }\r\n }\r\n\r\n for (let stand of stands)\r\n {\r\n let startStand = stand;\r\n let cus: Curve[] = []; //形成合并轮廓的曲线组\r\n while (startStand)\r\n startStand = linkCurve(startStand, cus, true);\r\n\r\n if (cus.length > 0)\r\n {\r\n startStand = cuMap.GetOnlyVertice(cus[0].StartPoint);\r\n while (startStand)\r\n startStand = linkCurve(startStand, cus, false);\r\n }\r\n\r\n if (cus.length > 0)\r\n groupCus.push(cus);\r\n }\r\n\r\n return groupCus;\r\n}\r\n\r\nexport function equalCurve(cu1: Curve, cu2: Curve, tolerance = 1e-4)\r\n{\r\n if ((cu1 instanceof Polyline) && (cu2 instanceof Polyline))\r\n {\r\n if (cu1.IsClose !== cu2.IsClose || !isParallelTo(cu1.Normal, cu2.Normal))\r\n return false;\r\n\r\n let area1 = cu1.Area2;\r\n let area2 = cu2.Area2;\r\n\r\n if (!equaln(Math.abs(area1), Math.abs(area2), 0.1))\r\n return false;\r\n\r\n let ptsBuls1 = cu1.PtsBuls;\r\n let ptsBuls2 = cu2.PtsBuls;\r\n\r\n let pts1 = ptsBuls1.pts;\r\n let pts2 = ptsBuls2.pts;\r\n let buls1 = ptsBuls1.buls;\r\n let buls2 = ptsBuls2.buls;\r\n\r\n let isEqualArea = equaln(area1, area2, 0.1);\r\n if (!equalv3(cu1.Normal, cu2.Normal))\r\n {\r\n if (isEqualArea)\r\n {\r\n pts2.reverse();\r\n buls2.reverse();\r\n buls2.push(buls2.shift());\r\n }\r\n else\r\n buls2 = buls2.map(bul => -bul);\r\n }\r\n else if (!isEqualArea)\r\n {\r\n pts2.reverse();\r\n buls2.reverse();\r\n buls2 = buls2.map(bul => -bul);\r\n buls2.push(buls2.shift());\r\n }\r\n\r\n if (cu1.IsClose && equalv2(pts1[0], arrayLast(pts1), tolerance))\r\n {\r\n pts1.pop();\r\n buls1.pop();\r\n }\r\n if (cu2.IsClose && equalv2(pts2[0], arrayLast(pts2), tolerance))\r\n {\r\n pts2.pop();\r\n buls2.pop();\r\n }\r\n\r\n let cu1Sp = AsVector2(cu1.StartPoint.applyMatrix4(cu2.OCSInv));\r\n\r\n let index = pts2.findIndex(p => equalv2(cu1Sp, p, tolerance));\r\n changeArrayStartIndex(buls2, index);\r\n changeArrayStartIndex(pts2, index);\r\n\r\n return equalArray(buls1, buls2, equaln) &&\r\n equalArray(pts1, pts2, (p1: Vector2, p2: Vector2) =>\r\n equalv3(\r\n AsVector3(p1).applyMatrix4(cu1.OCS),\r\n AsVector3(p2).applyMatrix4(cu2.OCS),\r\n tolerance\r\n )\r\n );\r\n }\r\n else if (cu1 instanceof Circle && cu2 instanceof Circle)\r\n {\r\n return equalv3(cu1.Center, cu2.Center) && equaln(cu1.Radius, cu2.Radius, 1e-6);\r\n }\r\n else if (cu1 instanceof Arc && cu2 instanceof Arc)\r\n {\r\n if (!equalv3(cu1.StartPoint, cu2.EndPoint)) cu1.Reverse();\r\n return equalv3(cu1.Center, cu2.Center)\r\n && equaln(cu1.Radius, cu2.Radius, 1e-6)\r\n && equaln(cu1.StartAngle, cu2.StartAngle)\r\n && equaln(cu1.EndAngle, cu2.EndAngle);\r\n }\r\n else if (cu1 instanceof Ellipse && cu2 instanceof Ellipse)\r\n {\r\n return equalv3(cu1.Center, cu2.Center)\r\n && equaln(cu1.RadX, cu2.RadX)\r\n && equaln(cu1.RadY, cu2.RadY)\r\n && equalv3(cu1.StartPoint, cu2.StartPoint);\r\n }\r\n else if (cu1 instanceof Line && cu2 instanceof Line)\r\n {\r\n let ps1 = [cu1.StartPoint, cu1.EndPoint];\r\n let ps2 = [cu2.StartPoint, cu2.EndPoint];\r\n return ps1.every(p => ps2.some(p1 => equalv3(p1, p)));\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n* 计算点在曲线前进方向的方位,左边或者右边\r\n*\r\n* @param {Curve} cu\r\n* @param {Vector3} pt\r\n* @returns {boolean} 左边为-1,右边为1\r\n*/\r\nexport function GetPointAtCurveDir(cu: Curve, pt: Vector3): number\r\n{\r\n if (cu instanceof Circle)\r\n return cu.PtInCurve(pt) ? -1 : 1;\r\n else if (cu instanceof Polyline)\r\n {\r\n let u = new OffsetPolyline(cu, 1);\r\n u.InitSubCurves();\r\n return u.GetPointAtCurveDir(pt.clone().applyMatrix4(cu.OCSInv).setZ(0));\r\n }\r\n //最近点\r\n let cp = cu.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-6)) return 0;\r\n //最近点参数\r\n let cparam = cu.GetParamAtPoint(cp);\r\n let dri = cu.GetFistDeriv(cparam);\r\n let cross = dri.cross(pt.clone().sub(cp)).applyMatrix4(cu.OCSInv);\r\n return -Math.sign(cross.z);\r\n}\r\n\r\n/**\r\n * 点在多段线的某个索引的圆弧(弓形)内\r\n *\r\n * @param {Polyline} pl\r\n * @param {number} index\r\n * @param {Vector3} pt\r\n * @returns {number}\r\n */\r\nfunction PointInPolylineArc(pl: Polyline, index: number, pt: Vector3): number\r\n{\r\n let bul = pl.GetBuilgeAt(index);\r\n if (equaln(bul, 0, 1e-8)) return 0;\r\n\r\n let arc = pl.GetCurveAtIndex(index) as Arc;\r\n\r\n if (IsPointInBowArc(arc, pt, true))\r\n return Math.sign(bul);\r\n\r\n return 0;\r\n}\r\n\r\nexport function ConverCircleToPolyline(cir: Circle): Polyline\r\n{\r\n //该写法不支持三维坐标系\r\n // let pl = new Polyline();\r\n // let bul = Math.tan(Math.PI * 0.125);\r\n // for (let i = 0; i < 4; i++)\r\n // {\r\n // let p = cir.GetPointAtParam(i * 0.25);\r\n // pl.AddVertexAt(i, Vec3DTo2D(p));\r\n // pl.SetBulgeAt(i, bul);\r\n // }\r\n // pl.CloseMark = true;\r\n // return pl;\r\n\r\n let arcs = cir.GetSplitCurves([0, 0.5]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCS;\r\n pl.Join(arcs[0]);\r\n pl.Join(arcs[1]);\r\n return pl;\r\n}\r\n\r\nexport function GetTanPtsOnArcOrCircle(cu: Arc | Circle, lastPoint?: Vector3)\r\n{\r\n if (lastPoint)\r\n {\r\n //ref:wykobi\r\n let ocsInv = cu.OCSInv;\r\n let v = lastPoint.clone().applyMatrix4(ocsInv);\r\n\r\n let lengthSq = v.lengthSq();\r\n let radiusSq = cu.Radius ** 2;\r\n\r\n if (lengthSq >= radiusSq)\r\n {\r\n let ratio = 1 / lengthSq;\r\n let deltaDist = Math.sqrt(lengthSq - radiusSq);\r\n\r\n let pts = [\r\n new Vector3(\r\n cu.Radius * (cu.Radius * v.x - v.y * deltaDist) * ratio,\r\n cu.Radius * (cu.Radius * v.y + v.x * deltaDist) * ratio,\r\n ),\r\n new Vector3(\r\n cu.Radius * (cu.Radius * v.x + v.y * deltaDist) * ratio,\r\n cu.Radius * (cu.Radius * v.y - v.x * deltaDist) * ratio,\r\n ),\r\n ];\r\n for (let p of pts)\r\n p.applyMatrix4(cu.OCS);\r\n return pts;\r\n }\r\n }\r\n}\r\n\r\nexport function CircleInternalTangentLines(cir0: Circle, cir1: Circle): Line[]\r\n{\r\n let c0 = new Vector3();\r\n let c1 = cir1.Center.applyMatrix4(cir0.OCSInv);\r\n\r\n let dist = c0.distanceTo(c1);\r\n\r\n if (dist - (cir0.Radius + cir1.Radius) < 0)\r\n return [];\r\n else if (equaln(dist - (cir0.Radius + cir1.Radius), 0))\r\n return [];\r\n else\r\n {\r\n let m = cir0.Radius / cir1.Radius;\r\n let h0 = (m * dist) / (m + 1);\r\n let h1 = dist / (m + 1);\r\n\r\n let i = new Vector3(\r\n (h1 * c0.x + h0 * c1.x) / dist,\r\n (h1 * c0.y + h0 * c1.y) / dist\r\n ).applyMatrix4(cir0.OCS);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(cir0, i);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(cir1, i);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\nexport function CircleOuterTangentLines(circle0: Circle, circle1: Circle): Line[]\r\n{\r\n let c0 = circle0.Center;\r\n let c1 = circle1.Center;\r\n\r\n let dist = c0.distanceTo(c1);\r\n\r\n let rd = Math.abs(circle0.Radius - circle1.Radius);\r\n if (dist < rd)\r\n return [];\r\n else if (equaln(Math.abs(dist - rd), 0))\r\n return [];\r\n else if (equaln(circle0.Radius, circle1.Radius))\r\n {\r\n let cp = circle0.GetClosestPointTo(c1, true);\r\n let derv = circle0.GetFistDeriv(cp).multiplyScalar(circle0.Radius);\r\n let dervn = derv.clone().negate();\r\n\r\n let c0p0 = c0.clone().add(derv);\r\n let c0p1 = c0.clone().add(dervn);\r\n\r\n let c1p0 = c1.clone().add(derv);\r\n let c1p1 = c1.clone().add(dervn);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n else\r\n {\r\n let c0 = new Vector3();\r\n let c1 = circle1.Center.applyMatrix4(circle0.OCSInv);\r\n\r\n let p: Vector3;\r\n if (circle0.Radius > circle1.Radius)\r\n p = new Vector3(\r\n c1.x * circle0.Radius - c0.x * circle1.Radius,\r\n c1.y * circle0.Radius - c0.y * circle1.Radius\r\n );\r\n else\r\n p = new Vector3(\r\n c0.x * circle1.Radius - c1.x * circle0.Radius,\r\n c0.y * circle1.Radius - c1.y * circle0.Radius\r\n );\r\n\r\n let diff = Math.abs(circle0.Radius - circle1.Radius);\r\n\r\n p.x /= diff;\r\n p.y /= diff;\r\n\r\n p.applyMatrix4(circle0.OCS);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(circle0, p);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(circle1, p);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\nexport function getArcOrCirNearPts(cu: Circle | Arc | Ellipse, pickPoint: Vector3, viewXform: Matrix3)\r\n{\r\n let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3);\r\n\r\n let plane = new PlaneExt(cu.Normal, cu.Center);\r\n\r\n let pickLocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true);\r\n\r\n if (pickLocal)\r\n {\r\n let x = new Vector3().fromArray(viewXform.elements, 0).add(pickLocal);\r\n let y = new Vector3().fromArray(viewXform.elements, 3).add(pickLocal);\r\n\r\n x = plane.intersectLine(new Line3(x, x.clone().add(viewNormal)), new Vector3(), true);\r\n y = plane.intersectLine(new Line3(y, y.clone().add(viewNormal)), new Vector3(), true);\r\n\r\n let lx = new Line(pickLocal, x);\r\n let ly = new Line(pickLocal, y);\r\n\r\n let ins = cu.IntersectWith(lx, IntersectOption.ExtendBoth);\r\n ins.push(...cu.IntersectWith(ly, IntersectOption.ExtendBoth));\r\n return ins;\r\n }\r\n else\r\n {\r\n let ptLocal = plane.projectPoint(pickPoint, new Vector3());\r\n let lz = new Line(ptLocal, ptLocal.clone().add(viewNormal));\r\n return cu.IntersectWith(lz, IntersectOption.ExtendBoth);\r\n }\r\n}\r\n\r\nexport function getTanPtsOnEllipse(cu: Ellipse, lastPoint: Vector3)\r\n{\r\n return [];\r\n}\r\n\r\nexport interface IRectInfo\r\n{\r\n isRect: boolean;\r\n size?: Vector3;\r\n box?: Box3;\r\n OCS?: Matrix4;\r\n}\r\n\r\nexport function IsRect(cu: Curve): IRectInfo\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (!cu.IsClose) return { isRect: false };\r\n\r\n let pts = cu.GetStretchPoints();\r\n\r\n if (pts.length < 4) return { isRect: false };\r\n\r\n let xVec: Vector3;\r\n let p1 = pts[0];\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n xVec = pts[i].clone().sub(p1).normalize();\r\n if (!equalv3(xVec, ZeroVec))\r\n break;\r\n }\r\n\r\n if (!xVec) return { isRect: false };\r\n\r\n let zVec = cu.Normal;\r\n let yVec = zVec.clone().cross(xVec).normalize();\r\n\r\n let rectOCS = new Matrix4().makeBasis(xVec, yVec, zVec);\r\n let rectOCSInv = new Matrix4().getInverse(rectOCS);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(rectOCSInv);\r\n\r\n let box = new Box3().setFromPoints(pts);\r\n\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x * size.y, cu.Area, 0.1))\r\n {\r\n return {\r\n isRect: true,\r\n size,\r\n box,\r\n OCS: rectOCS,\r\n };\r\n }\r\n }\r\n return { isRect: false };\r\n}\r\n\r\n/**用4个矩形点构造矩形 */\r\nexport function getRectFrom4Pts(pts: Vector3[])\r\n{\r\n if (pts.length !== 4) return;\r\n let p = pts.shift();\r\n pts.sort((p1, p2) => p.distanceTo(p1) - p.distanceTo(p2));\r\n pts.splice(1, 0, p);\r\n let lineData = pts.map(p =>\r\n {\r\n return {\r\n pt: new Vector2(p.x, p.y),\r\n bul: 0\r\n };\r\n });\r\n let l = new Polyline(lineData);\r\n l.CloseMark = true;\r\n return l;\r\n}\r\n\r\nexport function MergeCurvelist(cus: Curve[])\r\n{\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c1 = cus[i];\r\n let nextI = FixIndex(i + 1, cus);\r\n let c2 = cus[nextI];\r\n\r\n\r\n let status = equaln(c2.Length, 0, LINK_FUZZ) ? Status.True : c1.Join(c2, false, LINK_FUZZ);\r\n if (status === Status.True)\r\n {\r\n cus.splice(nextI, 1);\r\n i--;\r\n }\r\n else if (status === Status.ConverToCircle)\r\n {\r\n cus.length = 0;\r\n let a = c1 as Arc;\r\n cus.push(new Circle(a.Center, a.Radius));\r\n break;\r\n }\r\n }\r\n return cus;\r\n}\r\n\r\nexport function SwapParam(res: IntersectResult[]): IntersectResult[]\r\n{\r\n for (let r of res)\r\n [r.thisParam, r.argParam] = [r.argParam, r.thisParam];\r\n return res;\r\n}\r\n\r\nexport function ComputerCurvesNormalOCS(curves: Curve[], allowAutoCalc: boolean = true): Matrix4 | undefined\r\n{\r\n if (!curves || curves.length === 0) return;\r\n\r\n //准备计算多段线的法向量\r\n let normal: Vector3;\r\n let firstV: Vector3;\r\n for (let c of curves)\r\n {\r\n if (c instanceof Arc)\r\n {\r\n normal = c.Normal;\r\n break;\r\n }\r\n else if (firstV)\r\n {\r\n let v = c.GetFistDeriv(0);\r\n v.cross(firstV);\r\n if (!equalv3(v, ZeroVec))\r\n {\r\n normal = v.normalize();\r\n break;\r\n }\r\n }\r\n else\r\n {\r\n let cus = c.Explode() as Curve[];\r\n let ocs = ComputerCurvesNormalOCS(cus, false);\r\n if (ocs)\r\n return ocs;\r\n let fv = c.GetFistDeriv(0);\r\n if (fv && !equalv3(fv, ZeroVec, 1e-5))\r\n firstV = fv;\r\n }\r\n }\r\n\r\n if (!normal && !allowAutoCalc) return;\r\n\r\n let x = new Vector3();\r\n let y = new Vector3();\r\n if (!normal)\r\n {\r\n if (!firstV)\r\n return curves[0].OCS;\r\n\r\n normal = firstV.normalize();\r\n Orbit.ComputUpDirection(normal, y, x);\r\n [x, y, normal] = [normal, x, y];\r\n }\r\n else\r\n {\r\n if (equalv3(normal, curves[0].Normal.negate()))\r\n normal.negate();\r\n Orbit.ComputUpDirection(normal, y, x);\r\n }\r\n return new Matrix4().makeBasis(x, y, normal).setPosition(curves[0].StartPoint);\r\n}\r\n\r\n\r\nexport function Pts2Polyline(pts: (Vec3 | Vec2)[], isClose: boolean): Polyline\r\n{\r\n let pl = new Polyline();\r\n for (let i = 0; i < pts.length; i += 2)\r\n {\r\n let p1 = AsVector3(pts[i]);\r\n let arc: Arc | Line;\r\n let p2: Vector3;\r\n let p3: Vector3;\r\n\r\n if (isClose)\r\n {\r\n p2 = AsVector3(pts[FixIndex(i + 1, pts.length)]);\r\n p3 = AsVector3(pts[FixIndex(i + 2, pts.length)]);\r\n }\r\n else\r\n {\r\n if (i >= pts.length - 2) break;\r\n p2 = AsVector3(pts[i + 1]);\r\n p3 = AsVector3(pts[i + 2]);\r\n }\r\n let v1 = p1.clone().sub(p2);\r\n let v2 = p2.clone().sub(p3);\r\n\r\n if (equaln(v1.angleTo(v2), 0))\r\n arc = new Line(p1, p3);\r\n else\r\n arc = new Arc().FromThreePoint(p1, p2, p3);\r\n pl.Join(arc);\r\n }\r\n return pl;\r\n}\r\n\r\n/**获取矩形信息 */\r\nexport function GetRectData(cu: Curve): { isRect: boolean, size?: Vector3, box?: Box3, OCS?: Matrix4; }\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (!cu.IsClose) return { isRect: false };\r\n\r\n let pts = cu.GetStretchPoints();\r\n if (cu.Area2 < 0)\r\n pts.reverse();\r\n\r\n if (equalv3(pts[0], arrayLast(pts)))\r\n pts.pop();\r\n\r\n if (pts.length < 4) return { isRect: false };\r\n\r\n let xVec: Vector3;\r\n let p1 = pts[0];\r\n\r\n let originIndex = 0;\r\n\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n if (pts[i].y < p1.y)\r\n {\r\n p1 = pts[i];\r\n originIndex = i;\r\n }\r\n else if (equaln(pts[i].y, p1.y))\r\n {\r\n if (pts[i].x < p1.x)\r\n {\r\n p1 = pts[i];\r\n originIndex = i;\r\n }\r\n }\r\n }\r\n\r\n let tempPts = pts.splice(0, originIndex);\r\n pts.push(...tempPts);\r\n\r\n p1 = pts[0];\r\n\r\n\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n let v = pts[i].clone().sub(p1);\r\n if (equalv3(v, ZeroVec))\r\n continue;\r\n if (!xVec)\r\n xVec = v;\r\n else\r\n {\r\n if (isParallelTo(v, xVec))\r\n xVec.copy(v);\r\n else\r\n break;\r\n }\r\n }\r\n\r\n let yVec: Vector3;\r\n\r\n for (let i = pts.length - 1; i > 0; i--)\r\n {\r\n let v = pts[i].clone().sub(p1);\r\n if (equalv3(v, ZeroVec))\r\n continue;\r\n if (!yVec)\r\n yVec = v;\r\n else\r\n {\r\n if (isParallelTo(v, yVec))\r\n yVec.copy(v);\r\n else\r\n break;\r\n }\r\n }\r\n\r\n if (!xVec || !yVec) return { isRect: false };\r\n\r\n //2向量必须垂直\r\n if (!isPerpendicularityTo(xVec.clone().normalize(), yVec.clone().normalize()))\r\n return { isRect: false };\r\n\r\n if (yVec.length() > xVec.length())\r\n [xVec, yVec] = [yVec.negate(), xVec];\r\n\r\n if (xVec.angleTo(XAxis) > Math.PI / 4)\r\n [xVec, yVec] = [yVec.negate(), xVec];\r\n\r\n\r\n let rectOCS = new Matrix4().makeBasis(xVec.normalize(), yVec.normalize(), xVec.clone().cross(yVec));\r\n let rectOCSInv = new Matrix4().getInverse(rectOCS);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(rectOCSInv);\r\n\r\n let box = new Box3().setFromPoints(pts);\r\n\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x * size.y, cu.Area, 0.1))\r\n {\r\n return {\r\n isRect: true,\r\n size,\r\n box,\r\n OCS: rectOCS,\r\n };\r\n }\r\n }\r\n return { isRect: false };\r\n}\r\n\r\nconst PolylineSpliteRectFuzz = 1e-3;\r\n/**封闭多段线 分割成矩形 */\r\nexport function PolylineSpliteRect(outline: Polyline): Polyline[]\r\n{\r\n if (!outline.IsClose || IsRect(outline).isRect)\r\n return [outline];\r\n\r\n let firstDerv = outline.GetFistDeriv(0).normalize();\r\n if (!isParallelTo(firstDerv, XAxis, PolylineSpliteRectFuzz) && !isParallelTo(firstDerv, YAxis, PolylineSpliteRectFuzz)) return [outline];\r\n\r\n let cus = outline.Explode();\r\n let yCus: Curve[] = [];\r\n\r\n for (let c of cus)\r\n {\r\n if (c instanceof Arc) return [outline];\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (isParallelTo(derv, YAxis, PolylineSpliteRectFuzz))\r\n yCus.push(c);\r\n else\r\n if (!isParallelTo(derv, XAxis, PolylineSpliteRectFuzz))\r\n {\r\n return [outline];\r\n }\r\n }\r\n\r\n yCus.sort((c1, c2) => c1.StartPoint.x - c2.StartPoint.x);\r\n\r\n\r\n let rects: Polyline[] = [];\r\n\r\n for (let i = 0; i < yCus.length - 1; i++)\r\n {\r\n let c1 = yCus[i];\r\n let c2 = yCus[i + 1];\r\n\r\n let x1 = c1.StartPoint.x;\r\n let x2 = c2.StartPoint.x;\r\n if (equaln(x1, x2))\r\n continue;\r\n\r\n let y1: number;\r\n let y2: number;\r\n\r\n let res = c1.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n\r\n let res2 = c2.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n let pars = [...res.map(r => Math.floor(r.argParam)), ...res2.map(r => Math.floor(r.argParam))];\r\n pars = [...new Set(pars)];\r\n pars.sort((a, b) => a - b);\r\n\r\n let ys: number[] = [];\r\n for (let par of pars)\r\n {\r\n let c = outline.GetCurveAtParam(par);\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, PolylineSpliteRectFuzz))\r\n {\r\n let x3 = c.StartPoint.x;\r\n let x4 = c.EndPoint.x;\r\n if (x3 > x4)\r\n [x3, x4] = [x4, x3];\r\n if (isIntersect(x1, x2, x3, x4, -PolylineSpliteRectFuzz))\r\n ys.push(c.StartPoint.y);\r\n }\r\n }\r\n\r\n if (ys.length < 2) return [outline];\r\n\r\n ys.sort((a, b) => a - b);\r\n\r\n y1 = ys[0];\r\n y2 = arrayLast(ys);\r\n\r\n rects.push(new Polyline().RectangleFrom2Pt(new Vector3(x1, y1), new Vector3(x2, y2)));\r\n }\r\n\r\n return rects;\r\n\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Matrix3, Matrix4, Object3D, Shape, Vector2, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getArcOrCirNearPts, getCircleCenter, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { matrixSetVector, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { angle, AsVector3, clampRad, equaln, equalv3, midPoint, MoveMatrix, polar } from '../../Geometry/GeUtils';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\n/**\r\n * 圆弧实体类\r\n * 与ACAD不同,这个类加入了时针变量,并且默认构造的圆弧为顺时针圆弧.\r\n *\r\n * 关于时针圆弧:\r\n * 起始圆弧到终止圆弧总是在0-2PI之间.(一个完整的圆).\r\n * 圆弧的绘制从起始圆弧绘制到终止圆弧. 按照时针绘制.\r\n * 参考计算圆弧的完整角度方法查看该计算方式.\r\n */\r\n@Factory\r\nexport class Arc extends Curve\r\n{\r\n constructor(center: Vector3 = new Vector3(), radius: number = 0.1, startAngle: number = 0.1, endAngle: number = 0, clockwise = true)\r\n {\r\n super();\r\n this._Matrix.setPosition(center);\r\n this._Radius = radius;\r\n this._StartAngle = clampRad(startAngle);\r\n this._EndAngle = clampRad(endAngle);\r\n this._Clockwise = clockwise;\r\n }\r\n private _Radius: number;\r\n private _StartAngle: number;\r\n private _EndAngle: number;\r\n /**\r\n * 曲线为顺时针\r\n */\r\n private _Clockwise = true;\r\n\r\n get Shape()\r\n {\r\n let sp = new Shape();\r\n sp.absarc(0, 0, this._Radius, this._StartAngle, this._EndAngle, this._Clockwise);\r\n return sp;\r\n }\r\n\r\n get Center()\r\n {\r\n return this.Position;\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.Position = v;\r\n }\r\n\r\n get Normal()\r\n {\r\n return new Vector3().setFromMatrixColumn(this._Matrix, 2);\r\n }\r\n set Normal(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n matrixSetVector(this._Matrix, 2, v);\r\n this.Update();\r\n }\r\n\r\n get Area(): number\r\n {\r\n return 0.5 * this.AllAngle * this.Radius * this.Radius;\r\n }\r\n //获得曲线的面积,逆时针为正,顺时针为负.\r\n get Area2(): number\r\n {\r\n let clockwise = this._Clockwise ? -1 : 1;\r\n return 0.5 * this.AllAngle * this.Radius * this.Radius * clockwise;\r\n }\r\n get IsClose(): boolean\r\n {\r\n return false;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n let pts = [this.StartPoint, this.EndPoint];\r\n\r\n //TODO:考虑三维圆弧.\r\n let addPts = [\r\n this.Center.add(new Vector3(this._Radius, 0)),\r\n this.Center.add(new Vector3(0, this._Radius)),\r\n this.Center.add(new Vector3(-this._Radius, 0)),\r\n this.Center.add(new Vector3(0, -this._Radius)),\r\n ];\r\n addPts.forEach(p =>\r\n {\r\n if (this.PtOnCurve(p))\r\n pts.push(p);\r\n });\r\n return new Box3().setFromPoints(pts);\r\n }\r\n\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Radius = v <= 0 ? 1e-19 : v;\r\n this.Update();\r\n }\r\n\r\n get IsClockWise()\r\n {\r\n return this._Clockwise;\r\n }\r\n set IsClockWise(v: boolean)\r\n {\r\n if (v !== this._Clockwise)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Clockwise = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get StartAngle()\r\n {\r\n return this._StartAngle;\r\n }\r\n set StartAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartAngle = v;\r\n this.Update();\r\n }\r\n\r\n get EndAngle()\r\n {\r\n return this._EndAngle;\r\n }\r\n set EndAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndAngle = v;\r\n this.Update();\r\n }\r\n\r\n //******************** Curve function start*****************//\r\n get StartPoint()\r\n {\r\n return polar(new Vector3(), this._StartAngle, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n set StartPoint(v: Vector3)\r\n {\r\n let vTemp = v.clone().applyMatrix4(this.OCSInv);\r\n this.StartAngle = angle(vTemp);\r\n }\r\n get EndPoint()\r\n {\r\n return polar(new Vector3(), this._EndAngle, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n set EndPoint(v: Vector3)\r\n {\r\n let vTemp = v.clone().applyMatrix4(this.OCSInv);\r\n this.EndAngle = angle(vTemp);\r\n }\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return 1;\r\n }\r\n get Length()\r\n {\r\n return this.AllAngle * this._Radius;\r\n }\r\n\r\n GetParamAtPoint2(pt: Vector3): number\r\n {\r\n return this.GetParamAtAngle(this.GetAngleAtPoint(pt));\r\n }\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n let param = this.GetParamAtPoint2(p);\r\n return this.ParamOnCurve(param, fuzz);\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Center = this.Center.applyMatrix4(m);\r\n this.Radius = this.Radius * m.getMaxScaleOnAxis();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this._Clockwise = !this._Clockwise;\r\n this.StartPoint = sp;\r\n this.EndPoint = ep;\r\n return this;\r\n }\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.GetAngleAtParam(param);\r\n return polar(new Vector3(), an, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n GetPointAtDistance(distance: number)\r\n {\r\n let len = this.Length;\r\n if (len == 0) return;\r\n return this.GetPointAtParam(distance / len);\r\n }\r\n\r\n GetDistAtParam(param: number)\r\n {\r\n return Math.abs(param * this.Length);\r\n }\r\n\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n GetParamAtPoint(pt: Vector3)\r\n {\r\n if (this._Radius == 0 ||\r\n this.AllAngle == 0 ||\r\n !equaln(pt.distanceTo(this.Center), this._Radius, 1e-6))\r\n return NaN;\r\n\r\n return this.GetParamAtAngle(this.GetAngleAtPoint(pt));\r\n }\r\n\r\n /**\r\n * 利用角度计算该角度在圆弧中代表的参数.\r\n * 如果角度在圆弧内,那么返回0-1\r\n * 如果角度不在圆弧内,那么尝试返回离圆弧起始或者结束的较近的参数\r\n *\r\n * @param {number} an\r\n * @returns\r\n * @memberof Arc\r\n */\r\n GetParamAtAngle(an: number)\r\n {\r\n //如果以pt为终点,那么所有的角度为\r\n let ptAllAn = this.ComputeAnlge(an);\r\n let allAn = this.AllAngle;\r\n\r\n //减去圆弧角度,剩余角度的一半\r\n let surplusAngleHalf = Math.PI - allAn / 2;\r\n\r\n if (ptAllAn > allAn + surplusAngleHalf)//返回负数\r\n return ((ptAllAn - allAn) - (surplusAngleHalf * 2)) / allAn;\r\n else//返回正数\r\n return ptAllAn / allAn;\r\n }\r\n\r\n /**\r\n * 根据角度获得参数,不过在这里我们可以指定我们是要获取前面的参数还是后面的参数(正负)\r\n * @param an\r\n * @param [isStart] true:返回负数,false 返回正数\r\n * @returns\r\n */\r\n GetParamAtAngle2(an: number, isStart = true)\r\n {\r\n //如果以pt为终点,那么所有的角度为\r\n let ptAllAn = this.ComputeAnlge(an);\r\n let allAn = this.AllAngle;\r\n\r\n //减去圆弧角度,剩余角度的一半\r\n let surplusAngleHalf = Math.PI - allAn / 2;\r\n\r\n if (isStart)//返回负数\r\n return ((ptAllAn - allAn) - (surplusAngleHalf * 2)) / allAn;\r\n else//返回正数\r\n return ptAllAn / allAn;\r\n }\r\n\r\n GetAngleAtPoint(pt: Vector3)\r\n {\r\n let ptTmp = pt.clone().applyMatrix4(this.OCSInv);\r\n return angle(ptTmp);\r\n }\r\n\r\n GetAngleAtParam(param: number)\r\n {\r\n return clampRad(this._StartAngle + param * this.AllAngle * (this._Clockwise ? -1 : 1));\r\n }\r\n\r\n GetSplitCurves(param: number[] | number): Arc[]\r\n {\r\n let params = this.SplitParamSort(param);\r\n //角度列表\r\n let ans = params.map(p => this.GetAngleAtParam(p));\r\n //返回圆弧表\r\n let arcs: Arc[] = [];\r\n for (let i = 0; i < ans.length - 1; i++)\r\n {\r\n let arc = this.Clone() as Arc;\r\n arc.ColorIndex = this.ColorIndex;\r\n arc.StartAngle = ans[i];\r\n arc.EndAngle = ans[i + 1];\r\n arcs.push(arc);\r\n }\r\n return arcs;\r\n }\r\n GetOffsetCurves(offsetDist: number)\r\n {\r\n if (this._Clockwise) offsetDist *= -1;\r\n if ((offsetDist + this._Radius) > 0)\r\n {\r\n let arc = this.Clone() as Arc;\r\n arc.Radius = offsetDist + this._Radius;\r\n return [arc];\r\n }\r\n return [];\r\n }\r\n Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < 0)\r\n {\r\n this._StartAngle = this.GetAngleAtParam(newParam);\r\n }\r\n else if (newParam > 1)\r\n {\r\n this._EndAngle = this.GetAngleAtParam(newParam);\r\n }\r\n this.Update();\r\n }\r\n\r\n Join(cu: Curve): Status\r\n {\r\n if (cu instanceof Arc)\r\n {\r\n //非常小的圆弧直接结束\r\n if (cu.AllAngle < 5e-6) return Status.False;\r\n\r\n if (equalv3(cu.Center, this.Center) && equaln(cu._Radius, this._Radius))\r\n {\r\n this.WriteAllObjectRecord();\r\n let [sa, ea] = [cu.StartAngle, cu.EndAngle];\r\n if (cu._Clockwise != this._Clockwise)\r\n [sa, ea] = [ea, sa];\r\n\r\n let allAn = this.AllAngle;\r\n let saAllan = this.ComputeAnlge(sa);\r\n let eaAllan = this.ComputeAnlge(ea);\r\n\r\n if (equaln(sa, this._StartAngle)) //this起点对起点\r\n {\r\n if (eaAllan > allAn)\r\n this.EndAngle = ea;\r\n\r\n return Status.True;\r\n }\r\n else if (equaln(sa, this._EndAngle))//this终点对起点\r\n {\r\n if (eaAllan < allAn || equaln(ea, this._StartAngle))\r\n return Status.ConverToCircle;\r\n else\r\n this.EndAngle = ea;\r\n\r\n return Status.True;\r\n }\r\n else if (equaln(ea, this.StartAngle))//this起点对终点\r\n {\r\n if (saAllan < allAn)\r\n return Status.ConverToCircle;\r\n else\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n else if (equaln(ea, this._EndAngle))//this终点对终点\r\n {\r\n if (saAllan > allAn)\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n else if (this.ParamOnCurve(this.GetParamAtAngle(sa)))\r\n {\r\n if (eaAllan < saAllan)\r\n return Status.ConverToCircle;\r\n else if (eaAllan > allAn)\r\n this.EndAngle = ea;\r\n return Status.True;\r\n }\r\n else if (this.ParamOnCurve(this.GetParamAtAngle(ea)))\r\n {\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n\r\n //使用按负方向去计算它的参数\r\n let saParam: number;\r\n if (saAllan > allAn)\r\n saParam = (saAllan - Math.PI * 2) / allAn;\r\n else\r\n saParam = saAllan / allAn;\r\n\r\n let eaParam: number;\r\n if (eaAllan > saAllan && saAllan > allAn)\r\n eaParam = (eaAllan - Math.PI * 2) / allAn;\r\n else\r\n eaParam = eaAllan / allAn;\r\n\r\n let pMin = Math.max(0, saParam);\r\n let pMax = Math.min(1, eaParam);\r\n\r\n if (pMin <= pMax + 1e-5)\r\n {\r\n if (saParam < 0)\r\n this.StartAngle = sa;\r\n if (eaParam > 1)\r\n this.EndAngle = ea;\r\n return Status.True;\r\n }\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Clockwise = !this._Clockwise;\r\n [this._StartAngle, this._EndAngle] = [this._EndAngle, this._StartAngle];\r\n return this;\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4)\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectArcAndArc(this, curve, intType);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndArc(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return SwapParam(IntersectCircleAndArc(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Polyline)\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance));\r\n\r\n if (curve instanceof Ellipse)\r\n return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType));\r\n return [];\r\n }\r\n\r\n /**\r\n * 计算出圆弧所包含的角度\r\n *\r\n * @readonly\r\n * @type {number}\r\n * @memberof Arc\r\n */\r\n get AllAngle(): number\r\n {\r\n return this.ComputeAnlge(this._EndAngle);\r\n }\r\n\r\n get Bul(): number\r\n {\r\n if (equaln(this.AllAngle, Math.PI * 2))\r\n return 1;\r\n return Math.tan(this.AllAngle * 0.25) * (this.IsClockWise ? -1 : 1);\r\n }\r\n\r\n /**\r\n * 计算所包含的角度\r\n *\r\n * @private\r\n * @param {number} endAngle 结束的角度\r\n * @returns\r\n * @memberof Arc\r\n */\r\n ComputeAnlge(endAngle: number)\r\n {\r\n //顺时针\r\n if (this._Clockwise)\r\n {\r\n if (this._StartAngle > endAngle)\r\n return this.StartAngle - endAngle;\r\n else //越过0点绘制圆弧\r\n return (Math.PI * 2) - (endAngle - this._StartAngle);\r\n }\r\n else\r\n {\r\n if (endAngle > this._StartAngle)\r\n return endAngle - this._StartAngle;\r\n else\r\n return (Math.PI * 2) - (this._StartAngle - endAngle);\r\n }\r\n }\r\n\r\n /**\r\n * 解析两点和凸度所构成的圆弧\r\n *\r\n * @param {Vector2} p1\r\n * @param {Vector2} p2\r\n * @param {number} bul 凸度,在cad中,凸度为 <(四分之一圆心角)的正切值>\r\n */\r\n ParseFromBul(p1: Vector3 | Vector2, p2: Vector3 | Vector2, bul: number): Arc\r\n {\r\n if (p1 instanceof Vector2)\r\n p1 = AsVector3(p1);\r\n if (p2 instanceof Vector2)\r\n p2 = AsVector3(p2);\r\n\r\n let ocsInv = this.OCSInv;\r\n p1 = p1.clone().applyMatrix4(ocsInv);\r\n p2 = p2.clone().applyMatrix4(ocsInv);\r\n\r\n //弦向量\r\n let chordV = p2.clone().sub(p1);\r\n //弦角度\r\n let chordAn = angle(chordV);\r\n //弦长度/2\r\n let chordLengthHalf = chordV.length() / 2;\r\n\r\n let allAngle = Math.atan(bul) * 4;\r\n let HalfAngle = allAngle * 0.5;\r\n //半径\r\n this._Radius = chordLengthHalf / Math.sin(HalfAngle);\r\n\r\n //指向圆心的角度\r\n let toCenterAn = chordAn + Math.PI * 0.5;//弦角度转90\r\n\r\n //圆心\r\n let center = midPoint(p1, p2);\r\n polar(center, toCenterAn, this._Radius - (bul * chordLengthHalf));\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n\r\n this._Radius = Math.abs(this._Radius);\r\n\r\n this._StartAngle = angle(p1.clone().sub(center));\r\n this._EndAngle = angle(p2.clone().sub(center));\r\n\r\n this._Clockwise = bul < 0;\r\n\r\n return this;\r\n }\r\n FromThreePoint(pt1: Vector3, pt2: Vector3, pt3: Vector3)\r\n {\r\n if (!(pt1 && pt2 && pt3))\r\n return;\r\n\r\n let ocsInv = this.OCSInv;\r\n pt1 = pt1.clone().applyMatrix4(ocsInv).setZ(0);\r\n pt2 = pt2.clone().applyMatrix4(ocsInv).setZ(0);\r\n pt3 = pt3.clone().applyMatrix4(ocsInv).setZ(0);\r\n\r\n let center = getCircleCenter(pt1, pt2, pt3);\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n //用圆心和其中一个点求距离得到半径:\r\n this._Radius = center.distanceTo(pt1);\r\n //起始角度 端点角度\r\n this._StartAngle = angle(pt1.clone().sub(center));\r\n this._EndAngle = angle(pt3.clone().sub(center));\r\n //求出向量p1->p2,p1->p3\r\n let p1 = pt2.clone().sub(pt1);\r\n let p2 = pt3.clone().sub(pt1);\r\n\r\n this._Clockwise = p1.cross(p2).z < 0;\r\n return this;\r\n }\r\n\r\n /**\r\n * 重载: 初始化绘制实体.\r\n *\r\n * @param {RenderType} [renderType=RenderType.Wireframe]\r\n */\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let geo = BufferGeometryUtils.CreateFromPts(this.Shape.getPoints(60).map(AsVector3));\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry();\r\n geometry.setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n //更新Geometry\r\n private UpdateGeometry(geo: BufferGeometry | LineGeometry)\r\n {\r\n let pts = this.Shape.getPoints(60).map(AsVector3);\r\n if (geo instanceof LineGeometry)\r\n geo.setPositions(pts.reduce((arr: number[], p) => { return [...arr, ...p.toArray()]; }, []));\r\n else\r\n BufferGeometryUtils.UpdatePts(geo, pts);\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n *\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n * @memberof Arc\r\n */\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let geo = obj[\"geometry\"] as BufferGeometry;\r\n this.UpdateGeometry(geo);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return [this.StartPoint, this.EndPoint];\r\n case ObjectSnapMode.Mid:\r\n return [this.GetPointAtParam(0.5)];\r\n case ObjectSnapMode.Nea:\r\n return getArcOrCirNearPts(this, pickPoint, viewXform)\r\n .filter(p => this.PtOnCurve(p));\r\n case ObjectSnapMode.Ext:\r\n return [this.GetClosestPointTo(pickPoint, true)];\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n let l = new Line(this.Center, lastPoint);\r\n return l.IntersectWith(this, IntersectOption.ExtendBoth).filter(p => this.PtOnCurve(p));\r\n }\r\n case ObjectSnapMode.Tan:\r\n let pts = GetTanPtsOnArcOrCircle(this, lastPoint);\r\n if (pts)\r\n return pts.filter(p => this.PtOnCurve(p));\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [\r\n this.StartPoint,\r\n this.GetPointAtParam(0.5),\r\n this.EndPoint,\r\n this.Center.clone(),\r\n ];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n this.WriteAllObjectRecord();\r\n let ptsArr = this.GetGripPoints();\r\n let index = indexList[0];\r\n let p = ptsArr[index];\r\n if (p)\r\n {\r\n p.add(vec);\r\n if (index > 2)\r\n this.Center = this.Center.add(vec);\r\n else\r\n this.FromThreePoint(ptsArr[0], ptsArr[1], ptsArr[2]);\r\n this.Update();\r\n }\r\n }\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length === 0)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n if (indexList.length === 2)\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n else\r\n for (let index of indexList)\r\n {\r\n let pts = [this.StartPoint, this.EndPoint];\r\n let [sp, ep] = pts;\r\n\r\n let oldChordLengthHalf = sp.distanceTo(ep) * 0.5;\r\n\r\n let arcHeight = oldChordLengthHalf * this.Bul;\r\n\r\n pts[index].add(vec);\r\n\r\n let newChordLengthHalf = sp.distanceTo(ep) * 0.5;\r\n\r\n let newBul = arcHeight / newChordLengthHalf;\r\n\r\n //根据凸度构造新的弧\r\n this.ParseFromBul(sp, ep, newBul);\r\n this.Update();\r\n }\r\n }\r\n\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n let an: number;\r\n if (typeof pt === \"number\")\r\n an = this.GetAngleAtParam(pt);\r\n else\r\n an = angle(pt.clone().applyMatrix4(this.OCSInv));\r\n\r\n an += Math.PI * 0.5 * (this._Clockwise ? -1 : 1);\r\n\r\n let ocs = new Matrix4().extractRotation(this.OCS);\r\n return polar(new Vector3(), an, this._Radius).applyMatrix4(ocs);\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n let l = new Line(this.Center, pt);\r\n let inPts: Vector3[] = this.IntersectWith(l, extend ? IntersectOption.ExtendBoth : IntersectOption.ExtendArg);\r\n if (inPts.length < 2)\r\n inPts.push(this.StartPoint, this.EndPoint);\r\n return inPts.reduce((p1, p2) => p1.distanceToSquared(pt) < p2.distanceToSquared(pt) ? p1 : p2);\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n if (ver === 1)\r\n {\r\n this.Center = new Vector3().fromArray(file.Read());\r\n this.Normal = new Vector3().fromArray(file.Read());\r\n }\r\n this._Radius = file.Read();\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n this._Clockwise = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n file.Write(this._Radius);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.Write(this._Clockwise);\r\n }\r\n //#endregion\r\n}\r\n","\r\ntype LogFunction = (message?: any, ...optionalParams: any[]) => void;\r\n\r\nexport const _LogInjectFunctions: LogFunction[] = [];\r\n\r\nexport function Log(message?: any, ...optionalParams: any[]): void\r\n{\r\n for (let f of _LogInjectFunctions)\r\n f(message, ...optionalParams);\r\n}\r\n\r\nexport const LogEnable = {\r\n Display: false\r\n};\r\n","\r\n\r\nlet instanceMap = new Map();\r\n\r\n/**\r\n * 构造单例类的静态类.\r\n * # Example:\r\n * class A extends Singleton(){};\r\n * //获得单例\r\n * let a = A.GetInstance();\r\n */\r\nexport class Singleton\r\n{\r\n protected constructor() { }\r\n\r\n //FIXME: https://github.com/Microsoft/TypeScript/issues/5863\r\n static GetInstance(): T\r\n {\r\n if (instanceMap.has(this))\r\n return instanceMap.get(this);\r\n //@ts-ignore\r\n let __instance__ = new this.prototype.constructor();\r\n instanceMap.set(this, __instance__);\r\n return __instance__;\r\n }\r\n}\r\n","import { Geometry, Matrix4, Vector3 } from \"three\";\r\n\r\nexport function ScaleUV(geo: Geometry, scale = 1e-3)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n uv.multiplyScalar(scale);\r\n }\r\n }\r\n }\r\n}\r\nexport function ScaleUV2(geo: Geometry, ocs: Matrix4, xScale = 1e-3, yScale = 1e-3, isInvert = false)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n let p = new Vector3(uv.x, uv.y).applyMatrix4(ocs);\r\n uv.x = p.x;\r\n uv.y = p.y;\r\n if (isInvert)\r\n {\r\n uv.x /= yScale;\r\n uv.y /= xScale;\r\n }\r\n else\r\n {\r\n uv.x /= xScale;\r\n uv.y /= yScale;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { Matrix3, Matrix4, Path, Shape as TShape, Vector3, Box3 } from 'three';\r\nimport { arrayRemoveIf } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Contour } from './Contour';\r\nimport { Circle } from './Entity/Circle';\r\nimport { Curve } from './Entity/Curve';\r\nimport { Polyline } from './Entity/Polyline';\r\nimport { equaln } from '../Geometry/GeUtils';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\n\r\nexport class Shape\r\n{\r\n private _Outline: Contour;\r\n private _Holes: Contour[] = [];\r\n private _Shape: TShape = new TShape();\r\n constructor(out?: Contour, hols?: Contour[])\r\n {\r\n this._Outline = out || new Contour();\r\n hols && this._Holes.push(...hols);\r\n }\r\n\r\n get Outline()\r\n {\r\n return this._Outline;\r\n }\r\n get Holes()\r\n {\r\n return this._Holes;\r\n }\r\n get Area()\r\n {\r\n let outlineArea = this._Outline.Area;\r\n let holeArea = this._Holes.map(l => l.Area).reduce((a1, a2) => a1 + a2, 0);\r\n return outlineArea - holeArea;\r\n }\r\n get BoundingBox()\r\n {\r\n return this._Outline.BoundingBox;\r\n }\r\n set Outline(cus: Contour)\r\n {\r\n this._Outline = cus;\r\n this.UpdateShape();\r\n }\r\n set Holes(cus: Contour[])\r\n {\r\n this._Holes = cus;\r\n this.UpdateShape();\r\n }\r\n get Shape()\r\n {\r\n this.UpdateShape();\r\n return this._Shape;\r\n }\r\n get Position()\r\n {\r\n return this._Outline.Curve.Position;\r\n }\r\n set Position(p: Vector3)\r\n {\r\n let vec = p.clone().sub(this._Outline.Curve.Position);\r\n this._Outline.Curve.Position = p;\r\n for (let h of this._Holes)\r\n h.Curve.Position = h.Curve.Position.add(vec);\r\n }\r\n Z0()\r\n {\r\n this._Outline.Curve.Z0();\r\n for (let h of this._Holes)\r\n h.Curve.Z0();\r\n return this;\r\n }\r\n\r\n MatrixPlanarizere()\r\n {\r\n this._Outline.Curve.MatrixPlanarizere();\r\n for (let h of this._Holes)\r\n h.Curve.MatrixPlanarizere();\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n this._Outline.Curve.ApplyMatrix(m);\r\n this._Holes.forEach(h => h.Curve.ApplyMatrix(m));\r\n return this;\r\n }\r\n ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n\r\n let cu = this.Outline.Curve;\r\n let cus = this._Holes.map(h => h.Curve);\r\n cus.unshift(cu);\r\n for (let c of cus)\r\n {\r\n c.ApplyMatrix(c.OCS);\r\n c.ApplyMatrix(m);\r\n c.ApplyMatrix(c.OCSInv);\r\n }\r\n\r\n return this;\r\n }\r\n Explode()\r\n {\r\n let cus: Curve[] = [];\r\n let contours: Contour[] = [this._Outline, ...this._Holes];\r\n for (let con of contours)\r\n {\r\n if (con.Curve instanceof Polyline)\r\n cus.push(...con.Curve.Explode());\r\n else\r\n cus.push(con.Curve.Clone());\r\n }\r\n return cus;\r\n }\r\n Clone()\r\n {\r\n let shape = new Shape();\r\n shape.Outline = this._Outline.Clone();\r\n shape.Holes = this.Holes.map(h => h.Clone());\r\n return shape;\r\n }\r\n SetColor(color: number)\r\n {\r\n this._Outline.Curve.ColorIndex = color;\r\n this._Holes.forEach(h => h.Curve.ColorIndex = color);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let cus: Curve[] = [this._Outline.Curve];\r\n for (let h of this._Holes)\r\n {\r\n cus.push(h.Curve);\r\n }\r\n let pts: Vector3[] = [];\r\n for (let c of cus)\r\n {\r\n pts.push(...c.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints()\r\n {\r\n let pts = this.Outline.Curve.GetGripPoints();\r\n for (let h of this._Holes)\r\n {\r\n pts.push(...h.Curve.GetGripPoints());\r\n }\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n let i = indexList[0];\r\n let outlineIndex = this._Outline.Curve.GetGripPoints().length;\r\n\r\n let cu = this._Outline.Curve;\r\n\r\n if (i >= outlineIndex)\r\n {\r\n for (let h of this._Holes)\r\n {\r\n let len = h.Curve.GetGripPoints().length;\r\n if (indexList[0] < outlineIndex + len)\r\n {\r\n indexList = [indexList[0] - outlineIndex];\r\n cu = h.Curve;\r\n break;\r\n }\r\n outlineIndex += len;\r\n }\r\n }\r\n cu.MoveGripPoints(indexList, vec);\r\n }\r\n GetStretchPoints()\r\n {\r\n let pts = this.Outline.Curve.GetStretchPoints();\r\n for (let h of this._Holes)\r\n {\r\n pts.push(...h.Curve.GetStretchPoints());\r\n }\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n let outlen = 0;\r\n for (let cu of [this._Outline.Curve, ...this._Holes.map(h => h.Curve)])\r\n {\r\n let count = cu.GetStretchPoints().length;\r\n let refIndex = outlen + count;\r\n let curIndexs = [];\r\n while (indexList.length)\r\n {\r\n if (indexList[0] < refIndex)\r\n curIndexs.push(indexList.shift() - outlen);\r\n else\r\n break;\r\n }\r\n cu.MoveStretchPoints(curIndexs, vec);\r\n\r\n if (indexList.length === 0)\r\n break;\r\n\r\n outlen += count;\r\n }\r\n }\r\n //交集 如果成功返回一个面域 失败返回0个\r\n IntersectionBoolOperation(targetShape: Shape): Shape[]\r\n {\r\n let resOutlines = this._Outline.IntersectionBoolOperation(targetShape._Outline);\r\n let cus = this.targetOutlineSubHoleOutline(resOutlines, Shape.mergeContours([...this._Holes, ...targetShape._Holes]));\r\n return Shape.pairHoleAndOutline(cus);\r\n }\r\n\r\n //并集,如果成功返回1个形状,不成功返回2个形状\r\n UnionBoolOperation(targetShape: Shape, checkIntersect = false): Shape[]\r\n {\r\n if (checkIntersect && !this.BoundingBox.intersectsBox(targetShape.BoundingBox, 1e-3)) return [this, targetShape];\r\n\r\n let { contours, holes } = this._Outline.UnionBoolOperation(targetShape._Outline);\r\n\r\n let shapes: Shape[] = [];\r\n\r\n //提取出所有的孔洞, 目标线段孔洞和原线段差,如果孔洞和目标相减后有被包围轮廓,应把这个单独提取出来作为形状\r\n let unionHoles: Contour[] = [];\r\n\r\n //合并运算时提取出运算后的孔洞和形状\r\n const pickUpHoleOrShape = (srcHoles: Contour[], tarHoles: Contour[], outline: Contour) =>\r\n {\r\n srcHoles.forEach(cu =>\r\n {\r\n let tmpContours = cu.SubstactBoolOperation(outline).sort((a, b) => b.Area - a.Area);\r\n let isAllContainered = tmpContours.length > 1 && tmpContours.slice(1).every((cu, index) => tmpContours[0].CuInOutline(cu.Curve));\r\n\r\n //洞是否被最大的洞包含,是,则把被包含的洞都提取出来加入形状数组\r\n if (isAllContainered)\r\n {\r\n shapes.push(...this.targetOutlinesSubHoles(tmpContours.slice(1).map(c => new Shape(c)), tarHoles.map(c => new Shape(c))));\r\n } else\r\n unionHoles.push(...tmpContours);\r\n });\r\n\r\n };\r\n pickUpHoleOrShape(targetShape._Holes, this._Holes, this._Outline);\r\n pickUpHoleOrShape(this._Holes, targetShape._Holes, targetShape._Outline);\r\n targetShape._Holes.forEach(cu =>\r\n {\r\n this._Holes.forEach(c =>\r\n {\r\n unionHoles.push(...c.IntersectionBoolOperation(cu));\r\n });\r\n });\r\n\r\n shapes.push(...this.targetOutlinesSubHoles(contours.map(c => new Shape(c, holes)), unionHoles.map(c => new Shape(c))));\r\n return shapes;\r\n }\r\n\r\n /**\r\n * 如果完全被减掉,就返回0个.其他的返回1个或者n个\r\n * @param targetShapes 已经是合并后的形状数组\r\n */\r\n SubstactBoolOperation(targetShapes: Shape[])\r\n {\r\n let originOutline = this.Outline;\r\n let targetOutlines = targetShapes.map(s => s.Outline);\r\n const { holes, outlines } = originOutline.GetSubtractListByMoreTargets(targetOutlines);\r\n holes.push(...this.Holes);\r\n\r\n let newShapes: Shape[] = [];\r\n\r\n if (outlines.length === 1 && equaln(outlines[0].Area, originOutline.Area))\r\n {\r\n newShapes = [new Shape(outlines[0], Shape.mergeContours(holes))];\r\n }\r\n else if (holes.length === 0)\r\n {\r\n newShapes = outlines.map(o => new Shape(o));\r\n }\r\n else\r\n {\r\n for (let outline of outlines)\r\n newShapes.push(...new Shape(outline).SubstactBoolOperation(holes.map(h => new Shape(h))));\r\n }\r\n\r\n let holeShape = this.Holes.map(h => new Shape(h));\r\n\r\n for (let target of targetShapes)\r\n {\r\n let tmpInterList: Contour[] = [];\r\n if (target.Holes.length === 0) continue;\r\n for (let hole of target.Holes)\r\n {\r\n let list = hole.IntersectionBoolOperation(originOutline);\r\n tmpInterList.push(...list);\r\n }\r\n\r\n for (let ot of tmpInterList)\r\n {\r\n let subShapes: Shape[] = [];\r\n subShapes.push(...holeShape);\r\n for (let t of targetShapes)\r\n {\r\n if (t !== target)\r\n subShapes.push(new Shape(t.Outline));\r\n }\r\n\r\n newShapes.push(...new Shape(ot).SubstactBoolOperation(subShapes));\r\n }\r\n\r\n }\r\n\r\n return newShapes;\r\n }\r\n Equal(targetShape: Shape)\r\n {\r\n if (this._Outline.Equal(targetShape._Outline))\r\n {\r\n return this._Holes.length === targetShape._Holes.length\r\n && this._Holes.every(h1 =>\r\n targetShape._Holes.some(h2 => h1.Equal(h2))\r\n );\r\n }\r\n return false;\r\n }\r\n private targetOutlinesSubHoles(targetShapes: Shape[], holeShapes: Shape[])\r\n {\r\n let resultShapes: Shape[] = [];\r\n for (let ts of targetShapes)\r\n {\r\n let res = ts.SubstactBoolOperation(holeShapes);\r\n resultShapes.push(...res);\r\n }\r\n return resultShapes;\r\n\r\n }\r\n /**\r\n * 目标轮廓减去洞\r\n *\r\n * @private\r\n * @param {Contour[]} tarContours 轮廓列表\r\n * @param {Contour[]} holes 洞列表\r\n * @returns {Contour[]} 新的轮廓列表\r\n * @memberof Shape\r\n */\r\n private targetOutlineSubHoleOutline(tarContours: Contour[], holes: Contour[]): Contour[]\r\n {\r\n if (!holes.length)\r\n return tarContours;\r\n\r\n let resultContours: Contour[] = [];\r\n\r\n for (let minuendContour of tarContours)\r\n {\r\n //需要被差集的形状列表\r\n let tmpContour: Contour[] = [minuendContour];\r\n for (let hole of holes)\r\n {\r\n //缓存差集生成的轮廓\r\n let tmps: Contour[] = [];\r\n tmpContour.forEach(r =>\r\n {\r\n let cus = r.SubstactBoolOperation(hole);\r\n tmps.push(...cus);\r\n });\r\n tmpContour = tmps;//使用新生成的进行下一轮计算\r\n }\r\n resultContours.push(...tmpContour);\r\n }\r\n\r\n return resultContours;\r\n }\r\n\r\n //整理轮廓数组,匹配洞和外轮廓\r\n static pairHoleAndOutline(contours: Contour[]): Shape[]\r\n {\r\n let shapes: Shape[] = [];\r\n contours.sort((a, b) => b.Area - a.Area);\r\n while (contours.length)\r\n {\r\n //洞列表\r\n let tmpHoles: Contour[] = [];\r\n let outline: Contour = contours.shift();\r\n\r\n //取出包含的洞\r\n arrayRemoveIf(contours, (con: Contour) =>\r\n {\r\n let bisIn = outline.CuInOutline(con.Curve);\r\n if (bisIn) tmpHoles.push(con);\r\n return bisIn;\r\n });\r\n let holes: Contour[] = Shape.removeBeContaineredHoles(tmpHoles);\r\n shapes.push(new Shape(outline, holes));\r\n }\r\n return shapes;\r\n }\r\n /**\r\n * 合并洞,本质是使用(并集算法)将可以并集的洞合并在一起,减少洞的数量.\r\n * canSidewipe 用于走刀,擦边的,包含的,是否合并\r\n */\r\n static mergeContours(holes: Contour[], canSidewipe = true): Contour[]\r\n {\r\n if (holes.length <= 1) return holes;\r\n let rets: Contour[] = [];//返回的合并轮廓\r\n let cache = new Map();\r\n\r\n while (holes.length > 0)\r\n {\r\n let c = holes.shift();//取第一个\r\n let b1 = cache.get(c);\r\n if (!b1)\r\n {\r\n b1 = c.BoundingBox;\r\n cache.set(c, b1);\r\n }\r\n\r\n while (true)\r\n {\r\n //剩余的 不相交的形状表 remaining\r\n let remHoles = holes.filter(ic =>\r\n {\r\n let b2 = cache.get(ic);\r\n if (!b2)\r\n {\r\n b2 = ic.BoundingBox;\r\n cache.set(ic, b2);\r\n }\r\n\r\n if (!IntersectBox2(b1, b2))\r\n return true;\r\n\r\n let unions = c.UnionBoolOperation(ic);\r\n\r\n if (unions.holes.length > 0)\r\n console.warn(\"未知情况\");\r\n\r\n if (unions.contours.length === 1)//并集成功\r\n {\r\n if (!canSidewipe)\r\n {\r\n if (equaln(c.Area + ic.Area, unions.contours[0].Area, 0.1))\r\n return true;\r\n if (equaln(unions.contours[0].Area, Math.max(c.Area, ic.Area), 0.1))\r\n return true;\r\n }\r\n c = unions.contours[0]; //更新c\r\n b1 = c.BoundingBox;\r\n cache.set(c, b1);\r\n }\r\n\r\n return unions.contours.length !== 1; //过滤出并集失败的形状\r\n });\r\n\r\n //如果c和剩余的轮廓都不相交,那么退出\r\n if (remHoles.length === holes.length)\r\n {\r\n rets.push(c); //c已经是一个独立的轮廓,不和任意轮廓相交(不能合并了)\r\n break;//退出循环.下一个\r\n }\r\n else\r\n holes = remHoles; //更新为剩下的轮廓列表\r\n }\r\n }\r\n\r\n return rets;\r\n }\r\n\r\n /**\r\n * 移除被包含的洞.(移除无效的洞,已经被更大的洞包含)\r\n *\r\n * @private\r\n * @param {Contour[]} tmpHoles 洞列表\r\n * @returns {Contour[]} 返回的洞列表都不会互相包含.\r\n * @memberof Shape\r\n */\r\n private static removeBeContaineredHoles(tmpHoles: Contour[]): Contour[]\r\n {\r\n let holes: Contour[] = [];\r\n if (tmpHoles.length <= 1) return tmpHoles;\r\n tmpHoles.sort((a, b) => b.Area - a.Area);\r\n while (tmpHoles.length)\r\n {\r\n let srcHole = tmpHoles.shift();\r\n holes.push(srcHole);\r\n\r\n //移除包含的洞\r\n arrayRemoveIf(tmpHoles, h => srcHole.CuInOutline(h.Curve));\r\n }\r\n return holes;\r\n }\r\n UpdateShape()\r\n {\r\n this._Shape = this.Outline.Shape;\r\n for (let h of this._Holes)\r\n {\r\n if (h.Curve instanceof Polyline)\r\n h.Curve.UpdateMatrixTo(this.Outline.Curve.OCS);\r\n\r\n if (h.Curve instanceof Circle)\r\n {\r\n let sp = new Path();\r\n let cen = h.Curve.Center.applyMatrix4(this.Outline.Curve.OCSInv);\r\n sp.ellipse(cen.x, cen.y, h.Curve.Radius, h.Curve.Radius, 0, 2 * Math.PI, false, 0);\r\n this._Shape.holes.push(sp);\r\n }\r\n else\r\n this._Shape.holes.push(h.Shape);\r\n }\r\n }\r\n //读写文件\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();//1\r\n this._Outline = Contour.CreateContour([file.ReadObject() as Curve]);\r\n\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n this._Holes.push(\r\n Contour.CreateContour([file.ReadObject() as Curve])\r\n );\r\n }\r\n\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.WriteObject(this._Outline.Curve);\r\n file.Write(this._Holes.length);\r\n this._Holes.forEach(h => file.WriteObject(h.Curve));\r\n }\r\n}\r\n","import { BoolOpeartionType } from '../GraphicsSystem/BoolOperateUtils';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Shape } from './Shape';\r\nimport { Matrix4 } from 'three';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\n\r\n\r\nexport class ShapeManager\r\n{\r\n private _ShapeList: Shape[] = [];\r\n get ShapeList()\r\n {\r\n return this._ShapeList.slice();\r\n }\r\n get ShapeCount()\r\n {\r\n return this._ShapeList.length;\r\n }\r\n get ShapeArea()\r\n {\r\n return this._ShapeList.map(s => s.Area).reduce((a1, a2) => a1 + a2, 0);\r\n }\r\n AppendShapeList(shapes: Shape | Shape[])\r\n {\r\n Array.isArray(shapes) ? this._ShapeList.push(...shapes) : this._ShapeList.push(shapes);\r\n return this;\r\n }\r\n Clear()\r\n {\r\n this._ShapeList.length = 0;\r\n }\r\n BoolOper(otherMg: ShapeManager, booltype: BoolOpeartionType)\r\n {\r\n switch (booltype)\r\n {\r\n case BoolOpeartionType.Intersection:\r\n return this.IntersectionBoolOperation(otherMg);\r\n case BoolOpeartionType.Union:\r\n return this.UnionBoolOperation(otherMg);\r\n case BoolOpeartionType.Subtract:\r\n return this.SubstactBoolOperation(otherMg);\r\n }\r\n }\r\n //交集 如果成功返回一个面域 失败返回0个\r\n IntersectionBoolOperation(target: ShapeManager)\r\n {\r\n let shapes: Shape[] = [];\r\n for (let srcShape of this._ShapeList)\r\n {\r\n for (let tarShape of target._ShapeList)\r\n {\r\n let tmpShapes = srcShape.IntersectionBoolOperation(tarShape);\r\n shapes.push(...tmpShapes);\r\n }\r\n }\r\n this.Clear();\r\n this._ShapeList = shapes;\r\n return this._ShapeList.length > 0;\r\n }\r\n //并集,如果有一个形状并集成功,就成功\r\n UnionBoolOperation(targetMg: ShapeManager)\r\n {\r\n let isSuccess = false;\r\n let srcShapes = this._ShapeList;\r\n let tarShapes = targetMg._ShapeList;\r\n\r\n let alones: Shape[] = [];//孤立的形状\r\n\r\n const boxCache = new WeakMap();\r\n\r\n for (let src of srcShapes)\r\n {\r\n let notUnions: Shape[] = [];//未被合并的形状列表 来自tarShapes\r\n let srcBox = src.BoundingBox;\r\n for (let tar of tarShapes)\r\n {\r\n let tarBox = boxCache.get(tar);\r\n if (!tarBox)\r\n {\r\n tarBox = tar.BoundingBox;\r\n boxCache.set(tar, tarBox);\r\n }\r\n if (!IntersectBox2(srcBox, tarBox))\r\n {\r\n notUnions.push(tar);\r\n continue;\r\n }\r\n let unions = src.UnionBoolOperation(tar);\r\n if (unions.length === 1)//并集成功\r\n {\r\n isSuccess = true;\r\n src = unions[0];//src设置为 合并完的形状\r\n }\r\n else//并集失败\r\n notUnions.push(tar); //设置为未计算\r\n }\r\n\r\n //如果发现src和任意一个形状并集成功,那么\r\n if (notUnions.length != tarShapes.length)\r\n {\r\n notUnions.push(src); //加入src 进行下一轮\r\n tarShapes = notUnions;\r\n }\r\n else\r\n alones.push(src);//它是孤独的一个形状\r\n }\r\n\r\n this._ShapeList = alones.concat(tarShapes);\r\n return isSuccess;\r\n }\r\n SubstactBoolOperation(target: ShapeManager)\r\n {\r\n let newShapes: Shape[] = [];\r\n for (let s of this._ShapeList)\r\n {\r\n let ss = s.SubstactBoolOperation(target.ShapeList);\r\n newShapes.push(...ss);\r\n }\r\n this._ShapeList = newShapes;\r\n return true;\r\n }\r\n\r\n /**\r\n * 与region.ApplyMatrix不同的是,这个是直接操作内部对象.\r\n * 通常用来计算布尔运算时需要真实的移动这个位置.\r\n * 并且将不会刷新显示\r\n *\r\n * @param {Matrix4} mat4\r\n * @memberof ShapeManager\r\n */\r\n ApplyMatrix(mat4: Matrix4)\r\n {\r\n for (let s of this._ShapeList)\r\n {\r\n s.Outline.Curve.ApplyMatrix(mat4);\r\n s.Holes.forEach(o => o.Curve.ApplyMatrix(mat4));\r\n }\r\n\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();//1\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let obj = new Shape();\r\n obj.ReadFile(file);\r\n this._ShapeList.push(obj);\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.ShapeList.length);\r\n for (let s of this.ShapeList)\r\n {\r\n s.WriteFile(file);\r\n }\r\n }\r\n}\r\n","import { Box3, BufferGeometry, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Vector2, Vector3 } from 'three';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils, BufferGeometryUtils as BufferGeometryUtils2 } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector3, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { ScaleUV } from '../../Geometry/UVUtils';\r\nimport { BoolOpeartionType } from '../../GraphicsSystem/BoolOperateUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { Shape } from '../Shape';\r\nimport { ShapeManager } from '../ShapeManager';\r\nimport { Curve } from './Curve';\r\nimport { Entity } from './Entity';\r\n\r\n@Factory\r\nexport class Region extends Entity\r\n{\r\n static CreateFromCurves(cus: Curve[]): Region | undefined\r\n {\r\n let shapes = Contour.GetAllContour(cus).map(out => new Shape(out));\r\n if (shapes.length > 0)\r\n {\r\n let reg = new Region();\r\n //MarkX:曲线同面域一起移动\r\n reg.ApplyMatrix(shapes[0].Outline.Curve.OCS);\r\n reg.ShapeManager.AppendShapeList(shapes);\r\n return reg;\r\n }\r\n }\r\n\r\n constructor(private _ShapeManager: ShapeManager = new ShapeManager())\r\n {\r\n super();\r\n }\r\n\r\n //如果需要修改获取到的属性,需要Clone后进行操作,否则会对原实体进行破坏\r\n get ShapeManager()\r\n {\r\n return this._ShapeManager;\r\n }\r\n get Area()\r\n {\r\n return this.ShapeManager.ShapeArea;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3();\r\n for (let s of this._ShapeManager.ShapeList)\r\n box.union(s.BoundingBox);\r\n return box;\r\n }\r\n Explode()\r\n {\r\n let shapeList = this._ShapeManager.ShapeList;\r\n if (shapeList.length <= 1)\r\n {\r\n return shapeList[0].Explode();\r\n }\r\n else\r\n {\r\n let regs: Region[] = [];\r\n shapeList.forEach(s =>\r\n {\r\n let reg = new Region().ApplyMatrix(this.OCS);\r\n reg.ShapeManager.AppendShapeList(s);\r\n regs.push(reg);\r\n });\r\n return regs;\r\n }\r\n }\r\n\r\n /**\r\n * 对于布尔操作,这个将会变换内部轮廓到对方坐标系.\r\n * 并且这个变换不会更新图形绘制.\r\n * @param {Matrix4} m\r\n * @memberof Region\r\n */\r\n ShapeApplyMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ShapeManager.ApplyMatrix(m);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let pts: Vector3[] = [];\r\n for (let s of this._ShapeManager.ShapeList)\r\n {\r\n pts.push(...s.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let pts: Vector3[] = [];\r\n for (let s of this._ShapeManager.ShapeList)\r\n pts.push(...s.GetStretchPoints());\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let moveVLoc = moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv));\r\n this.ApplyMatrix(MoveMatrix(moveVLoc));\r\n }\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n //面域移动,组成面域的曲线也要移动 MarkX:曲线同面域一起移动\r\n this._ShapeManager.ShapeList.forEach(s => s.ApplyMatrix(m));\r\n return super.ApplyMatrix(m);\r\n }\r\n\r\n get Position()\r\n {\r\n return super.Position;\r\n }\r\n set Position(pt: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let moveX = pt.x - this._Matrix.elements[12];\r\n let moveY = pt.y - this._Matrix.elements[13];\r\n let moveZ = pt.z - this._Matrix.elements[14];\r\n this._Matrix.setPosition(pt);\r\n this._SpaceOCS.elements[12] += moveX;\r\n this._SpaceOCS.elements[13] += moveY;\r\n this._SpaceOCS.elements[14] += moveZ;\r\n\r\n let m = new Matrix4().setPosition(moveX, moveY, moveZ);\r\n for (let s of this.ShapeManager.ShapeList)\r\n s.ApplyMatrix(m);\r\n\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.ApplyScaleMatrix(m);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n\r\n //Z轴归0\r\n Z0()\r\n {\r\n super.Z0();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.Z0();\r\n\r\n return this;\r\n }\r\n MatrixPlanarizere()\r\n {\r\n super.MatrixPlanarizere();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.MatrixPlanarizere();\r\n return this;\r\n }\r\n\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n return this;\r\n }\r\n /**\r\n * 请注意:该计算会操作otherRegion的矩阵\r\n * @param {Region} otherRegion\r\n * @param {BoolOpeartionType} boolType\r\n */\r\n BooleanOper(otherRegion: Region, boolType: BoolOpeartionType): boolean\r\n {\r\n if (this.IsCoplaneTo(otherRegion))\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldOcs = this.OCS;\r\n\r\n //把形状曲线转移到二维屏幕计算后还原回来\r\n this.ShapeApplyMatrix(this.OCSInv);\r\n otherRegion.ShapeApplyMatrix(this.OCSInv);\r\n let isSuccess = this._ShapeManager.BoolOper(otherRegion._ShapeManager, boolType);\r\n this.ShapeApplyMatrix(oldOcs);\r\n this.Update();\r\n return isSuccess;\r\n }\r\n return false;\r\n }\r\n\r\n private _MeshGeometry: BufferGeometry;\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n this.UpdateGeometry();\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n this.UpdateGeometry();\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private UpdateGeometry()\r\n {\r\n let shapeList = this._ShapeManager.ShapeList;\r\n\r\n let edgePts: Vector3[] = [];\r\n let meshGeoms: BufferGeometry[] = [];\r\n\r\n const AddEdgePts = (pts: Vector2[], diffMat: Matrix4) =>\r\n {\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = AsVector3(pts[i]);\r\n p.applyMatrix4(diffMat);\r\n edgePts.push(p);\r\n if (i !== 0 && i !== pts.length - 1)\r\n edgePts.push(p);\r\n }\r\n };\r\n\r\n for (let i = 0; i < shapeList.length; i++)\r\n {\r\n let shape = shapeList[i];\r\n let geometry = new ShapeGeometry(shape.Shape, 60);//60 可以优化.\r\n let diffMat = this.OCSInv.clone().multiply(shape.Outline.Curve.OCSNoClone);\r\n geometry.applyMatrix4(diffMat);\r\n ScaleUV(geometry);\r\n meshGeoms.push(new BufferGeometry().fromGeometry(geometry));\r\n\r\n let shapeInfo = shape.Shape.extractPoints(60);\r\n\r\n let pts = shapeInfo.shape;\r\n AddEdgePts(pts, diffMat);\r\n\r\n let holePtss = shapeInfo.holes;\r\n for (let holePts of holePtss)\r\n AddEdgePts(holePts, diffMat);\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(edgePts);\r\n this._MeshGeometry = BufferGeometryUtils2.MergeBufferGeometries(meshGeoms);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n this._MeshGeometry.computeVertexNormals();\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(0));\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return new Object3D().add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n mesh,\r\n );\r\n }\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return obj.add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n mesh,\r\n );\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(0);\r\n }\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (type === RenderType.Wireframe || type === RenderType.Print)\r\n {\r\n let line = obj as LineSegments;\r\n line.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Conceptual)\r\n {\r\n for (let i = 0; i < obj.children.length; i++)\r\n {\r\n if (i % 2 === 0)\r\n {\r\n let l = obj.children[i] as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj.children[i] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n for (let m of obj.children)\r\n {\r\n let mesh = m as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._ShapeManager.Clear();\r\n this._ShapeManager.ReadFile(file);\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n this._ShapeManager.WriteFile(file);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { ConverCircleToPolyline } from \"../../Common/CurveUtils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\n\r\n/**\r\n * 把板件炸开成面域,0,1为正反面,其余的为边面(没有圆弧面)\r\n */\r\nexport function Board2Regions(br: Board): Region[]\r\n{\r\n let ocs = br.OCS;\r\n\r\n let cu = br.ContourCurve.Clone();\r\n\r\n if (cu instanceof Circle)\r\n cu = ConverCircleToPolyline(cu);\r\n\r\n let frontReg = Region.CreateFromCurves([cu.Clone()]);\r\n let regFrontOcs = ocs.clone();\r\n regFrontOcs.setPosition(br.Position.add(br.Normal.multiplyScalar(br.Thickness)));\r\n frontReg.ApplyMatrix(regFrontOcs);\r\n\r\n let backReg = Region.CreateFromCurves([cu.Flip()]);\r\n backReg.ApplyMatrix(ocs);\r\n\r\n let resultRegs = [frontReg, backReg];\r\n\r\n //edges\r\n let lines = cu.Explode().filter(c => c instanceof Line);\r\n\r\n\r\n for (let l of lines)\r\n {\r\n let rectPl = new Polyline().Rectangle(l.Length, br.Thickness);\r\n let reg = Region.CreateFromCurves([rectPl]);\r\n if (!reg) continue;\r\n\r\n let p = l.StartPoint.applyMatrix4(ocs);\r\n let x = l.GetFistDeriv(0).transformDirection(ocs);\r\n let y = br.Normal;\r\n let z = new Vector3().crossVectors(x, y);\r\n\r\n let mtx = new Matrix4().makeBasis(x, y, z).setPosition(p);\r\n reg.ApplyMatrix(mtx);\r\n resultRegs.push(reg);\r\n }\r\n\r\n return resultRegs;\r\n}\r\n","\r\n/**统一板件属性key的命名,修改值会导致无法 .xxx该属性 */\r\nexport enum EBoardKeyList\r\n{\r\n Height = \"height\",\r\n Width = \"width\",\r\n Thick = \"thickness\",\r\n RoomName = \"roomName\",\r\n CabinetName = \"cabinetName\",\r\n BrMat = \"boardName\", //板材\r\n Mat = \"material\", //材料\r\n Color = \"color\",\r\n Lines = \"lines\", //纹路\r\n ProcessGroup = \"ProcessGroup\",\r\n BigHole = \"bigHoleDir\",\r\n /**\r\n * 排钻类型,当没有定义每个边的排钻数据时,使用统一的排钻类型\r\n */\r\n DrillType = \"drillType\",\r\n ComposingFace = \"composingFace\",\r\n /**\r\n * 封边数组,定义每个边的封边信息\r\n */\r\n HighSealed = \"highSealed\",\r\n UpSealed = \"sealedUp\",\r\n DownSealed = \"sealedDown\",\r\n LeftSealed = \"sealedLeft\",\r\n RightSealed = \"sealedRight\",\r\n KnifeRad = \"knifeRadius\",\r\n SpliteHeight = \"spliteHeight\",\r\n SpliteWidth = \"spliteWidth\",\r\n SpliteThickness = \"spliteThickness\",\r\n}\r\n","import { BoardProcessOption } from \"../../UI/Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { CADFiler } from \"../../DatabaseServices/CADFiler\";\r\nimport { I2DModeling, I3DModeling, IPathItem } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Vector3 } from \"three\";\r\n\r\n/**序列化板件数据 */\r\nexport function serializeBoardData(file: CADFiler, processData: BoardProcessOption)\r\n{\r\n file.Write(processData[EBoardKeyList.RoomName]);\r\n file.Write(processData[EBoardKeyList.CabinetName]);\r\n file.Write(processData[EBoardKeyList.BrMat]);\r\n file.Write(processData[EBoardKeyList.Mat]);\r\n file.Write(processData[EBoardKeyList.Color]);\r\n file.Write(processData[EBoardKeyList.Lines]);\r\n file.Write(processData[EBoardKeyList.BigHole]);\r\n file.Write(processData[EBoardKeyList.DrillType]);\r\n file.Write(processData[EBoardKeyList.ComposingFace]);\r\n file.Write(processData[EBoardKeyList.HighSealed].length);\r\n for (let n of processData[EBoardKeyList.HighSealed])\r\n {\r\n file.Write(n.size);\r\n }\r\n file.Write(processData[EBoardKeyList.UpSealed]);\r\n file.Write(processData[EBoardKeyList.DownSealed]);\r\n file.Write(processData[EBoardKeyList.LeftSealed]);\r\n file.Write(processData[EBoardKeyList.RightSealed]);\r\n file.Write(processData.spliteHeight);\r\n file.Write(processData.spliteWidth);\r\n file.Write(processData.spliteThickness);\r\n\r\n file.Write(processData.highDrill.length);\r\n for (let n of processData.highDrill)\r\n file.Write(n);\r\n\r\n file.Write(processData.frontDrill);\r\n file.Write(processData.backDrill);\r\n file.Write(processData.remarks.length);\r\n for (let d of processData.remarks)\r\n {\r\n file.Write(d[0]);\r\n file.Write(d[1]);\r\n }\r\n}\r\n\r\n//反序列化板件数据\r\nexport function deserializationBoardData(file: CADFiler, processData: BoardProcessOption, ver: number)\r\n{\r\n processData[EBoardKeyList.RoomName] = file.Read();\r\n processData[EBoardKeyList.CabinetName] = file.Read();\r\n processData[EBoardKeyList.BrMat] = file.Read();\r\n processData[EBoardKeyList.Mat] = file.Read();\r\n processData[EBoardKeyList.Color] = file.Read();\r\n processData[EBoardKeyList.Lines] = file.Read();\r\n processData[EBoardKeyList.BigHole] = file.Read();\r\n processData[EBoardKeyList.DrillType] = file.Read();\r\n processData[EBoardKeyList.ComposingFace] = file.Read();\r\n\r\n let count = file.Read();\r\n processData[EBoardKeyList.HighSealed].length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let size = file.Read();\r\n if (ver < 4)\r\n {\r\n file.Read();\r\n }\r\n processData[EBoardKeyList.HighSealed].push({ size });\r\n }\r\n\r\n processData[EBoardKeyList.UpSealed] = file.Read();\r\n processData[EBoardKeyList.DownSealed] = file.Read();\r\n processData[EBoardKeyList.LeftSealed] = file.Read();\r\n processData[EBoardKeyList.RightSealed] = file.Read();\r\n processData.spliteHeight = file.Read();\r\n processData.spliteWidth = file.Read();\r\n processData.spliteThickness = file.Read();\r\n\r\n count = file.Read();\r\n processData.highDrill = file.ReadArray(count);\r\n\r\n processData.frontDrill = file.Read();\r\n processData.backDrill = file.Read();\r\n\r\n if (ver >= 7)\r\n {\r\n let count = file.Read();\r\n processData.remarks.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n processData.remarks.push(d);\r\n }\r\n }\r\n}\r\n\r\nexport function SerializeBoard2DModeingData(file: CADFiler, modelList: I2DModeling[])\r\n{\r\n file.Write(modelList.length);\r\n for (let data of modelList)\r\n {\r\n file.WriteObject(data.path);\r\n file.Write(data.dir);\r\n file.Write(data.items.length);\r\n for (let item of data.items)\r\n {\r\n file.Write(item.depth);\r\n file.Write(item.offset);\r\n file.Write(item.knife.id);\r\n file.Write(item.knife.radius);\r\n file.Write(item.knife.angle);\r\n file.Write(item.knife.name);\r\n }\r\n }\r\n}\r\nexport function SerializeBoard3DModeingData(file: CADFiler, modelList: I3DModeling[])\r\n{\r\n file.Write(modelList.length);\r\n for (let item of modelList)\r\n {\r\n file.Write(item.path.length);\r\n for (let d of item.path)\r\n {\r\n file.Write(d.pt.toArray());\r\n file.Write(d.bul);\r\n }\r\n file.Write(item.dir);\r\n file.Write(item.knife.id);\r\n file.Write(item.knife.radius);\r\n file.Write(item.knife.angle);\r\n file.Write(item.knife.name);\r\n }\r\n}\r\n\r\n//反序列化板件数据\r\nexport function DeserializationBoard2DModeingData(file: CADFiler, data: I2DModeling[], ver: number)\r\n{\r\n data.length = 0;\r\n const count = file.Read();\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let path = file.ReadObject() as Polyline;\r\n let dir = file.Read();\r\n let m: I2DModeling = {\r\n path,\r\n dir,\r\n items: []\r\n };\r\n const itemCount = file.Read();\r\n\r\n for (let j = 0; j < itemCount; j++)\r\n {\r\n let depth = file.Read();\r\n let offset = file.Read();\r\n let knifeId = file.Read();\r\n let knifeRad = file.Read();\r\n let knifeAngle = file.Read();\r\n let knifeName = file.Read();\r\n m.items.push({\r\n depth, offset, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName }\r\n });\r\n }\r\n data.push(m);\r\n }\r\n}\r\n//反序列化板件数据\r\nexport function DeserializationBoard3DModeingData(file: CADFiler, data: I3DModeling[], ver: number)\r\n{\r\n data.length = 0;\r\n const count = file.Read();\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let pathCount = file.Read();\r\n let path: IPathItem[] = [];\r\n for (let i = 0; i < pathCount; i++)\r\n {\r\n let pt = new Vector3().fromArray(file.Read());\r\n let bul = file.Read();\r\n path.push({ pt, bul });\r\n }\r\n let dir = file.Read();\r\n let knifeId = file.Read();\r\n let knifeRad = file.Read();\r\n let knifeAngle = file.Read();\r\n let knifeName = file.Read();\r\n data.push({\r\n path, dir, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName }\r\n });\r\n }\r\n}\r\n","import { ExtrudeBufferGeometry, UVGenerator, Vector2 } from \"three\";\r\n\r\nclass BoardUVGenerator implements UVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n\r\n return [\r\n new Vector2(a_x, a_y),\r\n new Vector2(b_x, b_y),\r\n new Vector2(c_x, c_y)\r\n ];\r\n }\r\n generateSideWallUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number, indexD: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var a_z = vertices[indexA * 3 + 2];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var b_z = vertices[indexB * 3 + 2];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n var c_z = vertices[indexC * 3 + 2];\r\n var d_x = vertices[indexD * 3];\r\n var d_y = vertices[indexD * 3 + 1];\r\n var d_z = vertices[indexD * 3 + 2];\r\n let pts: Vector2[];\r\n if (Math.abs(a_y - b_y) < 0.01)\r\n {\r\n pts = [\r\n new Vector2(a_z - 1, a_x),\r\n new Vector2(b_z - 1, b_x),\r\n new Vector2(c_z - 1, c_x),\r\n new Vector2(d_z - 1, d_x)\r\n ];\r\n\r\n }\r\n else\r\n {\r\n pts = [\r\n new Vector2(a_z - 1, a_y),\r\n new Vector2(b_z - 1, b_y),\r\n new Vector2(c_z - 1, c_y),\r\n new Vector2(d_z - 1, d_y)\r\n ];\r\n }\r\n return pts;\r\n }\r\n}\r\n\r\nclass BoardUVGenerator2 extends BoardUVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n\r\n return [\r\n new Vector2(a_y, a_x),\r\n new Vector2(b_y, b_x),\r\n new Vector2(c_y, c_x)\r\n ];\r\n }\r\n}\r\n\r\nexport let boardUVGenerator = new BoardUVGenerator();\r\nexport let boardUVGenerator2 = new BoardUVGenerator2();\r\n","import { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ObjectId } from \"../../DatabaseServices/ObjectId\";\r\n\r\nexport enum BoardType\r\n{\r\n Layer = 0, //层板\r\n Vertical = 1, //立板\r\n Behind = 2 //背板\r\n}\r\n\r\n/**\r\n *勿随意更改属性名,若更改,需更改对应UI模态框的属性和检验方法的key\r\n *\r\n */\r\nexport interface IBaseOption\r\n{\r\n version?: number;\r\n}\r\n\r\n//板件数据,配置信息+加工信息\r\nexport interface BoardData\r\n{\r\n boardConfig: BoardConfigOption;\r\n boardProcess: BoardProcessOption;\r\n}\r\n//排钻类型\r\nexport enum DrillType\r\n{\r\n Yes = \"排\",\r\n None = \"不排\",\r\n More = \"**多种**\",\r\n Invail = \"无效配置\",\r\n}\r\n//偏心轮类型\r\nexport enum FaceDirection\r\n{\r\n Front = 0,\r\n Back = 1,\r\n}\r\n\r\n//纹路类型\r\nexport enum LinesType\r\n{\r\n /** 正纹 */\r\n Positive = 0,\r\n /** 反纹 */\r\n Reverse = 1,\r\n /** 可翻转 */\r\n CanReversal = 2,\r\n}\r\n\r\n// 排版面\r\nexport enum ComposingType\r\n{\r\n Positive, Reverse, Arbitrary\r\n}\r\n/**\r\n *背板靠上还是靠下\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum BehindHeightPositon\r\n{\r\n ForTop = \"top\", //靠上\r\n ForBottom = \"bottom\",//靠下\r\n AllHeight = \"all\" //总高\r\n}\r\n\r\n/**\r\n *板件相对位置\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum BrRelativePos\r\n{\r\n Front = \"front\",\r\n Back = \"back\",\r\n Top = \"top\",\r\n Bottom = \"bottom\",\r\n Left = \"left\",\r\n Right = \"right\",\r\n Div = \"div\"\r\n}\r\n\r\nexport interface IHighSealedItem\r\n{\r\n size: number;\r\n}\r\n\r\nexport interface BoardProcessOption extends IBaseOption\r\n{\r\n [EBoardKeyList.RoomName]?: string;\r\n [EBoardKeyList.CabinetName]?: string;//柜名\r\n [EBoardKeyList.BrMat]?: string;//板材名\r\n [EBoardKeyList.Mat]?: string;//材料\r\n [EBoardKeyList.Color]?: string;\r\n [EBoardKeyList.Lines]?: LinesType;//纹路\r\n [EBoardKeyList.ProcessGroup]?: ObjectId[];//纹路\r\n [EBoardKeyList.BigHole]?: FaceDirection;//大孔面\r\n [EBoardKeyList.DrillType]?: string;//排钻类型\r\n [EBoardKeyList.ComposingFace]?: ComposingType;//排版面\r\n [EBoardKeyList.HighSealed]?: IHighSealedItem[];//封边数据\r\n [EBoardKeyList.UpSealed]?: string;//封边上下左右\r\n [EBoardKeyList.DownSealed]?: string;\r\n [EBoardKeyList.LeftSealed]?: string;\r\n [EBoardKeyList.RightSealed]?: string;\r\n [EBoardKeyList.SpliteHeight]?: string;//拆单高/宽/厚\r\n [EBoardKeyList.SpliteWidth]?: string;\r\n [EBoardKeyList.SpliteThickness]?: string;\r\n highDrill?: string[];\r\n frontDrill: boolean;\r\n backDrill: boolean;\r\n remarks: [string, string][];\r\n useBoardProcessOption?: boolean;\r\n}\r\n\r\n/**\r\n *板件参数\r\n */\r\nexport interface BoardConfigOption extends IBaseOption\r\n{\r\n type: BoardType;\r\n name: string;\r\n thickness?: number;\r\n height?: number;\r\n width?: number;\r\n}\r\nexport interface SideBoardOption extends BoardConfigOption\r\n{\r\n spaceSize?: number; //空间宽度\r\n leftShrink: number; //左侧板内缩\r\n rightShrink: number;\r\n}\r\n\r\n/**\r\n *背板参数\r\n *\r\n * @export\r\n * @interface BehindBoardOption\r\n * @extends {BoardConfigOption}\r\n */\r\nexport interface BehindBoardOption extends BoardConfigOption\r\n{\r\n //上下左右延伸\r\n leftExt: number;\r\n rightExt: number;\r\n topExt: number;\r\n bottomExt: number;\r\n //板件位置\r\n boardPosition: BehindHeightPositon;\r\n moveDist: number;\r\n\r\n spaceSize?: number;\r\n count?: number;\r\n //板件相对位置\r\n boardRelative?: BrRelativePos;\r\n calcHeight: string;//高度表达式\r\n calcSpaceSize: string;\r\n calcMoveDist: string;\r\n}\r\n\r\n/**\r\n *层板参数\r\n *\r\n * @export\r\n * @interface LayerBoardOption\r\n * @extends {BoardConfigOption}\r\n */\r\nexport interface LayerBoardOption extends BoardConfigOption\r\n{\r\n calcHeight: string;\r\n frontShrink: number;\r\n leftShrink: number;\r\n rightShrink: number;\r\n isTotalLength: boolean;\r\n isActive: boolean;\r\n spaceSize?: number;\r\n count?: number;\r\n boardRelative?: BrRelativePos;\r\n calcSpaceSize: string;\r\n calcFrontShrink: string;\r\n calcLeftShrink: string;\r\n calcRightShrink: string;\r\n}\r\n\r\n/**\r\n *层板钉参数\r\n *\r\n * @export\r\n * @interface LayerNailOption\r\n */\r\nexport interface LayerNailOption extends IBaseOption\r\n{\r\n isDraw: boolean; //是否绘制\r\n addCount: number;//增\r\n dist: number;\r\n isGroup: boolean;\r\n isInBack: boolean; //是否在背板绘制\r\n front: number;\r\n behind: number;\r\n count: number;\r\n rad: number;\r\n length: number;\r\n depth: number;\r\n}\r\n\r\n/**\r\n *立板参数\r\n */\r\nexport interface VerticalBoardOption extends BoardConfigOption\r\n{\r\n frontShrink: number; //前缩\r\n bottomShrink: number;//底缩\r\n isTotalLength: boolean; //是否取总高\r\n isTotalWidth: boolean;//是否取总宽\r\n count?: number;\r\n spaceSize?: number;\r\n boardRelative?: BrRelativePos;\r\n calcWidth: string; //板深表达式\r\n calcHeight: string;\r\n calcSpaceSize: string;\r\n calcFrontShrink: string;\r\n calcBottomShrink: string;\r\n}\r\nexport interface TBBoardOption extends BoardConfigOption\r\n{\r\n isDraw: boolean;\r\n frontDist: number; //前距\r\n behindDistance: number; //后距\r\n isWrapSide: boolean; //顶包侧\r\n useLFData: boolean;\r\n leftExt: number;\r\n rightExt: number;\r\n offset: number;//上留或者下留\r\n isDrawFooter?: boolean;\r\n footThickness?: number; //地脚厚\r\n footBehindShrink?: number;//内缩\r\n isDrawBackFooter?: boolean;\r\n footerOffset?: number;\r\n isDrawStrengthenStrip?: boolean;\r\n divCount?: number;\r\n}\r\nexport interface SingleBoardOption extends BoardConfigOption\r\n{\r\n rotateX: number;\r\n rotateY: number;\r\n rotateZ: number;\r\n\r\n}\r\nexport enum StripType\r\n{\r\n H = \"h\",\r\n V = \"v\",\r\n}\r\nexport interface ClosingStripOption extends BoardConfigOption\r\n{\r\n boardRelative: BrRelativePos;\r\n striptype: StripType;//收口条类型\r\n frontShrink: number; //前缩\r\n isDrawFuZhu: boolean; //是否绘制辅助条\r\n fzWidth: number;\r\n fzThickness: number;\r\n}\r\n\r\nexport interface IGrooveOption extends IBaseOption\r\n{\r\n grooveAddLength: string;//槽加长/宽/高\r\n grooveAddWidth: string;\r\n grooveAddDepth: string;\r\n knifeRadius?: string;\r\n}\r\n\r\nexport interface IShinkOption extends IBaseOption\r\n{\r\n left: number;\r\n right: number;\r\n front: number;\r\n back: number;\r\n isLREqual: boolean;\r\n isFBEqual: boolean;\r\n}\r\n\r\nexport type IUiOption = {\r\n [P in (keyof T)]: T[P] extends number ? string : T[P]\r\n};\r\n\r\nexport interface INailRule extends IBaseOption\r\n{\r\n startDist: number;\r\n endDist: number;\r\n count: number;\r\n}\r\n\r\nexport interface IHightDrillOption\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\nexport enum CurtailType\r\n{\r\n PerBr = \"0\",\r\n Total = \"1\",\r\n}\r\n\r\nexport interface IBoardBatchCurtailOption extends IBaseOption\r\n{\r\n type: CurtailType;\r\n front: number;\r\n back: number;\r\n left: number;\r\n right: number;\r\n moveBrs: boolean;\r\n}\r\n\r\nexport enum BoardOpenDir\r\n{\r\n Left = 1,\r\n Right = 2,\r\n Up = 3,\r\n Down = 4,\r\n None = 0,\r\n}\r\n\r\nexport type AnyObject = { [key: string]: any; };\r\n\r\n//见光面封边设置\r\nexport interface ISmoothEdgeOption extends IBaseOption\r\n{\r\n smoothEdge: number;//见光面\r\n edge: number;//非见光面\r\n scale: number;//见光比例\r\n filterArr: string[];//\r\n}\r\n\r\nexport interface IDrawBoardAutoCutOption\r\n{\r\n isAutoCut: boolean;//是否自动切割\r\n isRelevance: boolean;//是否关联切割\r\n}\r\n\r\nexport interface IKnifeProps\r\n{\r\n radius: number;\r\n angle: number;\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\n\r\n//将嵌入的实体绘制对象添加到当前的绘制对象(由于内嵌的实体可能被重复引用)\r\nexport function AddEntityDrawObject(obj: Object3D, embedEntity: Entity, renderType: RenderType = RenderType.Wireframe)\r\n{\r\n let embedObject = embedEntity.GetDrawObjectFromRenderType(renderType);\r\n if (embedObject.parent)\r\n obj.children.push(embedObject);//为了避免这个内嵌实体加入到不同的Object中(因为我们有PrintObject),这个写法能行,是因为我们会在其他地方更新它的矩阵\r\n else\r\n obj.add(embedObject);\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\n\r\nlet x = new Vector3();\r\nlet y = new Vector3();\r\nlet z = new Vector3();\r\nexport function IsMirror(mtx: Matrix4): boolean\r\n{\r\n mtx.extractBasis(x, y, z);\r\n // for a true orthogonal, non-mirrored base, u.cross(v) == w\r\n // If they have an opposite direction then we are mirroring\r\n const mirrorvalue = x.cross(y).dot(z);\r\n const ismirror = (mirrorvalue < 0);\r\n return ismirror;\r\n}\r\n","export const _CSGDEBUG = false;\r\n\r\n/** Epsilon used during determination of near zero distances.\r\n * @default\r\n */\r\nexport const EPS = 1e-5;\r\n\r\n// Tag factory: we can request a unique tag through CSG.getTag()\r\nexport let staticTag = 1;\r\nexport const getTag = () => staticTag++;\r\n","import { Vector3 } from \"three\";\r\n/** Class Vector3D\r\n * Represents a 3D vector with X, Y, Z coordinates.\r\n */\r\nexport class Vector3D extends Vector3\r\n{\r\n clone()\r\n {\r\n return new Vector3D(this.x, this.y, this.z) as this;\r\n }\r\n // find a vector that is somewhat perpendicular to this one\r\n randomNonParallelVector()\r\n {\r\n let x = Math.abs(this.x);\r\n let y = Math.abs(this.y);\r\n let z = Math.abs(this.z);\r\n\r\n if (x <= y && x <= z)\r\n return new Vector3D(1, 0, 0);\r\n else if (y <= x && y <= z)\r\n return new Vector3D(0, 1, 0);\r\n else\r\n return new Vector3D(0, 0, 1);\r\n }\r\n\r\n toString()\r\n {\r\n return (\r\n \"(\" +\r\n this.x.toFixed(5) +\r\n \", \" +\r\n this.y.toFixed(5) +\r\n \", \" +\r\n this.z.toFixed(5) +\r\n \")\"\r\n );\r\n }\r\n}\r\n","import { Vector3D } from \"./Vector3\";\r\nimport { Vector2 } from \"three\";\r\n\r\nexport class Vector2D extends Vector2\r\n{\r\n // extend to a 3D vector by adding a z coordinate:\r\n toVector3D(z: number)\r\n {\r\n return new Vector3D(this.x, this.y, z);\r\n }\r\n clone()\r\n {\r\n return new Vector2D(this.x, this.y) as this;\r\n }\r\n // returns the vector rotated by 90 degrees clockwise\r\n normal()\r\n {\r\n return new Vector2D(this.y, -this.x);\r\n }\r\n\r\n cross(a: Vector2)\r\n {\r\n return this.x * a.y - this.y * a.x;\r\n }\r\n}\r\n","import { getTag } from \"../constants\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Matrix4 } from \"three\";\r\n\r\n// # class Vertex\r\n// Represents a vertex of a polygon. Use your own vertex class instead of this\r\n// one to provide additional features like texture coordinates and vertex\r\n// colors. Custom vertex classes need to provide a `pos` property\r\n// `flipped()`, and `interpolate()` methods that behave analogous to the ones\r\n// FIXME: And a lot MORE (see plane.fromVector3Ds for ex) ! This is fragile code\r\n// defined by `Vertex`.\r\nexport class Vertex3D\r\n{\r\n tag: number;\r\n constructor(public pos: Vector3D, public uv = new Vector2D()) { }\r\n\r\n clone()\r\n {\r\n return new Vertex3D(this.pos.clone(), this.uv.clone());\r\n }\r\n\r\n // Return a vertex with all orientation-specific data (e.g. vertex normal) flipped. Called when the\r\n // orientation of a polygon is flipped.\r\n flipped()\r\n {\r\n return this;\r\n }\r\n\r\n getTag()\r\n {\r\n let result = this.tag;\r\n if (!result)\r\n {\r\n result = getTag();\r\n this.tag = result;\r\n }\r\n return result;\r\n }\r\n\r\n // Create a new vertex between this vertex and `other` by linearly\r\n // interpolating all properties using a parameter of `t`. Subclasses should\r\n // override this to interpolate additional properties.\r\n interpolate(other: Vertex3D, t: number)\r\n {\r\n let pos = this.pos.clone().lerp(other.pos, t);\r\n let uv = this.uv.clone().lerp(other.uv, t);\r\n return new Vertex3D(pos, uv);\r\n }\r\n\r\n // Affine transformation of vertex. Returns a new Vertex\r\n\r\n transform(matrix4x4: Matrix4)\r\n {\r\n const newpos = this.pos.clone().applyMatrix4(matrix4x4);\r\n return new Vertex3D(newpos, this.uv);\r\n }\r\n}\r\n","import { Matrix4 } from \"three\";\r\nimport { equaln, equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { getTag } from \"../constants\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\n\r\n// # class Plane\r\n// Represents a plane in 3D space.\r\nexport class Plane\r\n{\r\n normal: Vector3D;\r\n w: number;\r\n tag: number;\r\n constructor(normal: Vector3D, w: number)\r\n {\r\n this.normal = normal;\r\n this.w = w;\r\n }\r\n\r\n flipped()\r\n {\r\n return new Plane(this.normal.clone().negate(), -this.w);\r\n }\r\n\r\n getTag()\r\n {\r\n if (!this.tag)\r\n this.tag = getTag();\r\n return this.tag;\r\n }\r\n\r\n coplanarTo(plane: Plane)\r\n {\r\n return equalv3(this.normal, plane.normal, 1e-4) && equaln(this.w, plane.w, 1e-4);\r\n }\r\n\r\n transform(matrix4x4: Matrix4)\r\n {\r\n // get two vectors in the plane:\r\n let r = this.normal.randomNonParallelVector();\r\n let u = this.normal.clone().cross(r);\r\n let v = this.normal.clone().cross(u);\r\n // get 3 points in the plane:\r\n let point1 = this.normal.clone().multiplyScalar(this.w);\r\n let point2 = u.add(point1);\r\n let point3 = v.add(point1);\r\n // transform the points:\r\n point1.applyMatrix4(matrix4x4);\r\n point2.applyMatrix4(matrix4x4);\r\n point3.applyMatrix4(matrix4x4);\r\n // and create a new plane from the transformed points:\r\n let newplane = Plane.fromVector3Ds(point1, point2, point3);\r\n if (IsMirror(matrix4x4))\r\n {\r\n // the transform is mirroring\r\n // We should mirror the plane:\r\n newplane = newplane.flipped();\r\n }\r\n return newplane;\r\n }\r\n\r\n splitLineBetweenPoints(p1: Vertex3D, p2: Vertex3D): Vertex3D\r\n {\r\n let direction = p2.pos.clone().sub(p1.pos);\r\n let labda = (this.w - this.normal.dot(p1.pos)) / this.normal.dot(direction);\r\n if (isNaN(labda)) labda = 0;\r\n if (labda > 1) labda = 1;\r\n if (labda < 0) labda = 0;\r\n let pos = p1.pos.clone().add(direction.multiplyScalar(labda));\r\n let uv = p1.uv.clone().lerp(p2.uv, labda);\r\n return new Vertex3D(pos, uv);\r\n }\r\n\r\n static fromVector3Ds(a: Vector3D, b: Vector3D, c: Vector3D)\r\n {\r\n let n = b.clone()\r\n .sub(a)\r\n .cross(c.clone().sub(a))\r\n .normalize();\r\n return new Plane(n, n.dot(a));\r\n }\r\n}\r\n","import { _CSGDEBUG, EPS } from \"../constants\";\r\nimport { Plane } from \"./Plane\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { Matrix4 } from \"three\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\n\r\nexport enum Type\r\n{\r\n CoplanarFront = 0,\r\n CoplanarBack = 1,\r\n Front = 2,\r\n Back = 3,\r\n Spanning = 4,\r\n}\r\n\r\n\r\ninterface SplitPolygonData\r\n{\r\n type: Type;\r\n front: Polygon;\r\n back: Polygon;\r\n}\r\n\r\n/** Class Polygon\r\n * Represents a convex polygon. The vertices used to initialize a polygon must\r\n * be coplanar and form a convex loop. They do not have to be `Vertex`\r\n * instances but they must behave similarly (duck typing can be used for\r\n * customization).\r\n *
\r\n * Each convex polygon has a `shared` property, which is shared between all\r\n * polygons that are clones of each other or were split from the same polygon.\r\n * This can be used to define per-polygon properties (such as surface color).\r\n *
\r\n * The plane of the polygon is calculated from the vertex coordinates if not provided.\r\n * The plane can alternatively be passed as the third argument to avoid calculations.\r\n *\r\n *表示凸多边形。 用于初始化多边形的顶点必须共面并形成凸环。\r\n *多边形是彼此克隆或从同一多边形分割的多边形。\r\n *这可用于定义每个多边形属性(例如表面颜色)。\r\n */\r\nexport class Polygon\r\n{\r\n cachedBoundingSphere: [Vector3D, number];\r\n cachedBoundingBox: [Vector3D, Vector3D];\r\n constructor(public vertices: Vertex3D[], public plane?: Plane)\r\n {\r\n if (!plane)\r\n this.plane = Plane.fromVector3Ds(vertices[0].pos, vertices[1].pos, vertices[2].pos);\r\n\r\n if (_CSGDEBUG)\r\n if (!this.checkIfConvex()) throw new Error(\"Not convex!\");\r\n }\r\n\r\n /** Check whether the polygon is convex. (it should be, otherwise we will get unexpected results)*/\r\n checkIfConvex(): boolean\r\n {\r\n return Polygon.verticesConvex(this.vertices, this.plane.normal);\r\n }\r\n\r\n // returns an array with a Vector3D (center point) and a radius\r\n\r\n boundingSphere()\r\n {\r\n if (!this.cachedBoundingSphere)\r\n {\r\n let box = this.boundingBox();\r\n let middle = box[0].clone().add(box[1]).multiplyScalar(0.5);\r\n let radius3 = box[1].clone().sub(middle);\r\n let radius = radius3.length();\r\n this.cachedBoundingSphere = [middle, radius];\r\n }\r\n return this.cachedBoundingSphere;\r\n }\r\n\r\n // returns an array of two Vector3Ds (minimum coordinates and maximum coordinates)\r\n\r\n boundingBox(): Vector3D[]\r\n {\r\n if (!this.cachedBoundingBox)\r\n {\r\n let minpoint: Vector3D;\r\n let maxpoint: Vector3D;\r\n let vertices = this.vertices;\r\n let numvertices = vertices.length;\r\n if (numvertices === 0)\r\n minpoint = new Vector3D(0, 0, 0);\r\n else\r\n minpoint = vertices[0].pos.clone();\r\n maxpoint = minpoint.clone();\r\n for (let i = 1; i < numvertices; i++)\r\n {\r\n let point = vertices[i].pos;\r\n minpoint.min(point);\r\n maxpoint.max(point);\r\n }\r\n this.cachedBoundingBox = [minpoint, maxpoint];\r\n }\r\n return this.cachedBoundingBox;\r\n }\r\n\r\n flipped()\r\n {\r\n let newvertices = this.vertices.map(v => v.flipped());\r\n newvertices.reverse();\r\n let newplane = this.plane.flipped();\r\n return new Polygon(newvertices, newplane);\r\n }\r\n\r\n // Affine transformation of polygon. Returns a new Polygon\r\n transform(matrix4x4: Matrix4)\r\n {\r\n let newvertices = this.vertices.map(v => v.transform(matrix4x4));\r\n let newplane = this.plane.transform(matrix4x4);\r\n if (IsMirror(matrix4x4))\r\n {\r\n // need to reverse the vertex order\r\n // in order to preserve the inside/outside orientation:\r\n newvertices.reverse();\r\n }\r\n return new Polygon(newvertices, newplane);\r\n }\r\n\r\n splitByPlane(plane: Plane): SplitPolygonData\r\n {\r\n let result: SplitPolygonData = { type: null, front: null, back: null };\r\n // cache in local lets (speedup):\r\n let planeNormal = plane.normal;\r\n let vertices = this.vertices;\r\n let numVertices = vertices.length;\r\n if (this.plane.coplanarTo(plane))\r\n {\r\n result.type = Type.CoplanarFront;\r\n }\r\n else\r\n {\r\n let thisW = plane.w;\r\n let hasFront = false;\r\n let hasBack = false;\r\n let vertexIsBack: boolean[] = [];\r\n let MINEPS = -EPS;\r\n for (let i = 0; i < numVertices; i++)\r\n {\r\n let t = planeNormal.dot(vertices[i].pos) - thisW;\r\n let isBack = t < 0;\r\n vertexIsBack.push(isBack);\r\n if (t > EPS) hasFront = true;\r\n if (t < MINEPS) hasBack = true;\r\n }\r\n if (!hasFront && !hasBack)\r\n {\r\n // all points coplanar\r\n let t = planeNormal.dot(this.plane.normal);\r\n result.type = t >= 0 ? Type.CoplanarFront : Type.CoplanarBack;\r\n }\r\n else if (!hasBack)\r\n result.type = Type.Front;\r\n else if (!hasFront)\r\n result.type = Type.Back;\r\n else\r\n {\r\n result.type = Type.Spanning;\r\n let frontVertices: Vertex3D[] = [];\r\n let backVertices: Vertex3D[] = [];\r\n let isBack = vertexIsBack[0];\r\n for (\r\n let vertexIndex = 0;\r\n vertexIndex < numVertices;\r\n vertexIndex++\r\n )\r\n {\r\n let vertex = vertices[vertexIndex];\r\n let nextVertexindex = vertexIndex + 1;\r\n if (nextVertexindex >= numVertices) nextVertexindex = 0;\r\n let nextIsBack = vertexIsBack[nextVertexindex];\r\n if (isBack === nextIsBack)\r\n {\r\n // line segment is on one side of the plane:\r\n if (isBack)\r\n backVertices.push(vertex);\r\n else\r\n frontVertices.push(vertex);\r\n }\r\n else\r\n {\r\n let intersectionVertex = plane.splitLineBetweenPoints(vertex, vertices[nextVertexindex]);\r\n if (isBack)\r\n {\r\n backVertices.push(vertex);\r\n backVertices.push(intersectionVertex);\r\n frontVertices.push(intersectionVertex);\r\n }\r\n else\r\n {\r\n frontVertices.push(vertex);\r\n frontVertices.push(intersectionVertex);\r\n backVertices.push(intersectionVertex);\r\n }\r\n }\r\n isBack = nextIsBack;\r\n } // for vertexindex\r\n // remove duplicate vertices:\r\n let EPS_SQUARED = EPS * EPS;\r\n arrayRemoveDuplicateBySort(backVertices, (v1, v2) =>\r\n {\r\n return v1.pos.distanceToSquared(v2.pos) < EPS_SQUARED;\r\n });\r\n arrayRemoveDuplicateBySort(frontVertices, (v1, v2) =>\r\n {\r\n return v1.pos.distanceToSquared(v2.pos) < EPS_SQUARED;\r\n });\r\n if (frontVertices.length >= 3)\r\n result.front = new Polygon(frontVertices, this.plane);\r\n if (backVertices.length >= 3)\r\n result.back = new Polygon(backVertices, this.plane);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n static verticesConvex(vertices: Vertex3D[], planenormal: Vector3D)\r\n {\r\n let count = vertices.length;\r\n if (count < 3) return false;\r\n\r\n let prevPrevPos = vertices[count - 2].pos;\r\n let prevPos = vertices[count - 1].pos;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let pos = vertices[i].pos;\r\n if (!Polygon.isConvexPoint(prevPrevPos, prevPos, pos, planenormal))\r\n return false;\r\n\r\n prevPrevPos = prevPos;\r\n prevPos = pos;\r\n }\r\n return true;\r\n }\r\n\r\n // 计算3点是否凸角\r\n static isConvexPoint(prevpoint: Vector3D, point: Vector3D, nextpoint: Vector3D, normal: Vector3D)\r\n {\r\n let crossproduct = point.clone().sub(prevpoint).cross(nextpoint.clone().sub(point));\r\n let crossdotnormal = crossproduct.dot(normal);\r\n return crossdotnormal >= 0;\r\n }\r\n}\r\n","import { EPS, _CSGDEBUG } from \"./constants\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Polygon, Type } from \"./math/Polygon3\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\n\r\n// # class PolygonTreeNode\r\n// This class manages hierarchical splits of polygons\r\n// At the top is a root node which doesn hold a polygon, only child PolygonTreeNodes\r\n// Below that are zero or more 'top' nodes; each holds a polygon. The polygons can be in different planes\r\n// splitByPlane() splits a node by a plane. If the plane intersects the polygon, two new child nodes\r\n// are created holding the splitted polygon.\r\n// getPolygons() retrieves the polygon from the tree. If for PolygonTreeNode the polygon is split but\r\n// the two split parts (child nodes) are still intact, then the unsplit polygon is returned.\r\n// This ensures that we can safely split a polygon into many fragments. If the fragments are untouched,\r\n// getPolygons() will return the original unsplit polygon instead of the fragments.\r\n// remove() removes a polygon from the tree. Once a polygon is removed, the parent polygons are invalidated\r\n// since they are no longer intact.\r\n// constructor creates the root node:\r\n//此类管理多边形的层次分割\r\n//顶部是一个根节点,它不包含多边形,只有子PolygonTreeNodes\r\n//下面是零个或多个“顶部”节点; 每个都有一个多边形。 多边形可以位于不同的平面中\r\n// splitByPlane()按平面拆分节点。 如果平面与多边形相交,则会有两个新的子节点\r\n//创建持有分割多边形。\r\n// getPolygons()从树中检索多边形。 如果对于PolygonTreeNode,则多边形被拆分但是\r\n//两个分割部分(子节点)仍然完好无损,然后返回未分割的多边形。\r\n//这确保我们可以安全地将多边形拆分为多个片段。 如果碎片未受影响,\r\n// getPolygons()将返回原始的未分割多边形而不是片段。\r\n// remove()从树中删除多边形。 删除多边形后,父多边形将失效\r\n//因为它们不再完好无损\r\n//构造函数创建根节点:\r\nclass PolygonTreeNode\r\n{\r\n parent: PolygonTreeNode;\r\n children: PolygonTreeNode[] = [];\r\n polygon: Polygon;\r\n removed: boolean = false;\r\n constructor(polygon?: Polygon)\r\n {\r\n this.polygon = polygon;\r\n }\r\n\r\n // fill the tree with polygons. Should be called on the root node only; child nodes must\r\n // always be a derivate (split) of the parent node.\r\n addPolygons(polygons: Polygon[])\r\n {\r\n // new polygons can only be added to root node; children can only be splitted polygons\r\n if (!this.isRootNode())\r\n throw new Error(\"Assertion failed\");\r\n\r\n for (let polygon of polygons)\r\n this.addChild(polygon);\r\n }\r\n\r\n // remove a node\r\n // - the siblings become toplevel nodes\r\n // - the parent is removed recursively\r\n\r\n remove()\r\n {\r\n if (this.removed) return;\r\n\r\n this.removed = true;\r\n\r\n if (_CSGDEBUG)\r\n {\r\n if (this.isRootNode()) throw new Error(\"Assertion failed\"); // can't remove root node\r\n if (this.children.length) throw new Error(\"Assertion failed\"); // we shouldn't remove nodes with children\r\n }\r\n\r\n // remove ourselves from the parent's children list:\r\n let parentschildren = this.parent.children;\r\n let i = parentschildren.indexOf(this);\r\n if (i < 0) throw new Error(\"Assertion failed\");\r\n parentschildren.splice(i, 1);\r\n\r\n // invalidate the parent's polygon, and of all parents above it:\r\n this.parent.recursivelyInvalidatePolygon();\r\n }\r\n\r\n isRemoved()\r\n {\r\n return this.removed;\r\n }\r\n\r\n isRootNode()\r\n {\r\n return !this.parent;\r\n }\r\n\r\n // invert all polygons in the tree. Call on the root node\r\n\r\n invert()\r\n {\r\n if (!this.isRootNode()) throw new Error(\"Assertion failed\"); // can only call this on the root node\r\n this.invertSub();\r\n }\r\n\r\n getPolygon(): Polygon\r\n {\r\n if (!this.polygon) throw new Error(\"Assertion failed\"); // doesn't have a polygon, which means that it has been broken down\r\n return this.polygon;\r\n }\r\n\r\n getPolygons(outPolygons: Polygon[] = []): Polygon[]\r\n {\r\n let children: PolygonTreeNode[] = [this];\r\n let queue = [children];\r\n for (let i = 0; i < queue.length; ++i)\r\n {\r\n // queue size can change in loop, don't cache length\r\n children = queue[i];\r\n for (let node of children)\r\n {\r\n if (node.polygon)\r\n // the polygon hasn't been broken yet. We can ignore the children and return our polygon:\r\n outPolygons.push(node.polygon);\r\n else\r\n // our polygon has been split up and broken, so gather all subpolygons from the children\r\n queue.push(node.children);\r\n }\r\n }\r\n\r\n return outPolygons;\r\n }\r\n\r\n // split the node by a plane; add the resulting nodes to the frontnodes and backnodes array\r\n // If the plane doesn't intersect the polygon, the 'this' object is added to one of the arrays\r\n // If the plane does intersect the polygon, two new child nodes are created for the front and back fragments,\r\n // and added to both arrays.\r\n\r\n splitByPlane(\r\n plane: Plane,\r\n coplanarFrontNodes: PolygonTreeNode[],\r\n coplanarBackNodes: PolygonTreeNode[],\r\n frontNodes: PolygonTreeNode[],\r\n backNodes: PolygonTreeNode[]\r\n )\r\n {\r\n if (this.children.length)\r\n {\r\n let queue = [this.children];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n // queue.length can increase, do not cache\r\n let nodes = queue[i];\r\n for (let j = 0, l = nodes.length; j < l; j++)\r\n {\r\n // ok to cache length\r\n let node = nodes[j];\r\n if (node.children.length)\r\n queue.push(node.children);\r\n else\r\n {\r\n // no children. Split the polygon:\r\n node.splitByPlaneNotChildren(plane, coplanarFrontNodes, coplanarBackNodes, frontNodes, backNodes);\r\n }\r\n }\r\n }\r\n }\r\n else\r\n {\r\n this.splitByPlaneNotChildren(plane, coplanarFrontNodes, coplanarBackNodes, frontNodes, backNodes);\r\n }\r\n }\r\n\r\n // only to be called for nodes with no children\r\n // 仅用于没有子节点的节点\r\n private splitByPlaneNotChildren(\r\n plane: Plane,\r\n coplanarFrontNodes: PolygonTreeNode[],\r\n coplanarBackNodes: PolygonTreeNode[],\r\n frontNodes: PolygonTreeNode[],\r\n backNodes: PolygonTreeNode[]\r\n )\r\n {\r\n if (!this.polygon) return;\r\n\r\n let polygon = this.polygon;\r\n let bound = polygon.boundingSphere();\r\n let sphereradius = bound[1] + EPS; // FIXME Why add imprecision?\r\n let planenormal = plane.normal;\r\n let spherecenter = bound[0];\r\n let d = planenormal.dot(spherecenter) - plane.w;\r\n if (d > sphereradius)\r\n frontNodes.push(this);\r\n else if (d < -sphereradius)\r\n backNodes.push(this);\r\n else\r\n {\r\n let splitresult = polygon.splitByPlane(plane);\r\n switch (splitresult.type)\r\n {\r\n case Type.CoplanarFront:\r\n coplanarFrontNodes.push(this);\r\n break;\r\n\r\n case Type.CoplanarBack:\r\n coplanarBackNodes.push(this);\r\n break;\r\n\r\n case Type.Front:\r\n frontNodes.push(this);\r\n break;\r\n\r\n case Type.Back:\r\n backNodes.push(this);\r\n break;\r\n\r\n case Type.Spanning:\r\n if (splitresult.front)\r\n {\r\n let frontNode = this.addChild(splitresult.front);\r\n frontNodes.push(frontNode);\r\n }\r\n if (splitresult.back)\r\n {\r\n let backNode = this.addChild(splitresult.back);\r\n backNodes.push(backNode);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // add child to a node\r\n // this should be called whenever the polygon is split\r\n // a child should be created for every fragment of the split polygon\r\n // returns the newly created child\r\n addChild(polygon: Polygon): PolygonTreeNode\r\n {\r\n let newchild = new PolygonTreeNode(polygon);\r\n newchild.parent = this;\r\n this.children.push(newchild);\r\n return newchild;\r\n }\r\n\r\n invertSub()\r\n {\r\n let queue: PolygonTreeNode[][] = [[this]];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n let children = queue[i];\r\n for (let j = 0, l = children.length; j < l; j++)\r\n {\r\n let node = children[j];\r\n if (node.polygon)\r\n node.polygon = node.polygon.flipped();\r\n queue.push(node.children);\r\n }\r\n }\r\n }\r\n\r\n recursivelyInvalidatePolygon()\r\n {\r\n let node: PolygonTreeNode = this;\r\n while (node.polygon)\r\n {\r\n node.polygon = null;\r\n if (node.parent)\r\n node = node.parent;\r\n }\r\n }\r\n}\r\n\r\n// # class Tree\r\n// This is the root of a BSP tree\r\n// We are using this separate class for the root of the tree, to hold the PolygonTreeNode root\r\n// The actual tree is kept in this.rootnode\r\nexport class Tree\r\n{\r\n polygonTree = new PolygonTreeNode();\r\n rootNode = new Node(null);\r\n constructor(polygons: Polygon[])\r\n {\r\n this.addPolygons(polygons);\r\n }\r\n\r\n invert()\r\n {\r\n this.polygonTree.invert();\r\n this.rootNode.invert();\r\n }\r\n\r\n // Remove all polygons in this BSP tree that are inside the other BSP tree\r\n /**\r\n * this 减去 tree 删除此BSP树中位于其他BSP树内的所有多边形\r\n * @param tree 不会被修改\r\n * @param [alsoRemovecoplanarFront=false] 同时删除共面\r\n */\r\n clipTo(tree: Tree, alsoRemovecoplanarFront = false)\r\n {\r\n this.rootNode.clipTo(tree, alsoRemovecoplanarFront);\r\n }\r\n\r\n allPolygons()\r\n {\r\n return this.polygonTree.getPolygons();\r\n }\r\n\r\n addPolygons(polygons: Polygon[])\r\n {\r\n if (polygons.length > 1e4)\r\n return;\r\n let polygonTreeNodes = polygons.map((p) => this.polygonTree.addChild(p));\r\n this.rootNode.addPolygonTreeNodes(polygonTreeNodes);\r\n }\r\n}\r\n\r\n// # class Node\r\n// Holds a node in a BSP tree. A BSP tree is built from a collection of polygons\r\n// by picking a polygon to split along.\r\n// Polygons are not stored directly in the tree, but in PolygonTreeNodes, stored in\r\n// this.polygontreenodes. Those PolygonTreeNodes are children of the owning\r\n// Tree.polygonTree\r\n// This is not a leafy BSP tree since there is\r\n// no distinction between internal and leaf nodes.\r\nclass Node\r\n{\r\n plane: Plane;\r\n front: Node;\r\n back: Node;\r\n polygonTreeNodes: PolygonTreeNode[] = [];\r\n parent: Node;\r\n constructor(parent: Node)\r\n {\r\n this.parent = parent;\r\n }\r\n\r\n // Convert solid space to empty space and empty space to solid space.\r\n invert()\r\n {\r\n let queue: Node[] = [this];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n let node = queue[i];\r\n if (node.plane) node.plane = node.plane.flipped();\r\n if (node.front) queue.push(node.front);\r\n if (node.back) queue.push(node.back);\r\n let temp = node.front;\r\n node.front = node.back;\r\n node.back = temp;\r\n }\r\n }\r\n\r\n // clip polygontreenodes to our plane\r\n // calls remove() for all clipped PolygonTreeNodes\r\n //将polygontreenodes剪辑到我们的飞机上\r\n //为所有剪切的PolygonTreeNodes调用remove()\r\n clipPolygons(polygonTreeNodes: PolygonTreeNode[], alsoRemoveCoplanarFront: boolean)\r\n {\r\n interface D\r\n {\r\n node: Node;\r\n polygonTreeNodes: PolygonTreeNode[];\r\n }\r\n\r\n let args: D = { node: this, polygonTreeNodes };\r\n let stack: D[] = [];\r\n\r\n do\r\n {\r\n let node = args.node;\r\n let polygonTreeNodes1 = args.polygonTreeNodes;\r\n\r\n // begin \"function\"\r\n if (node.plane)\r\n {\r\n let backnodes: PolygonTreeNode[] = [];\r\n let frontnodes: PolygonTreeNode[] = [];\r\n let coplanarfrontnodes = alsoRemoveCoplanarFront ? backnodes : frontnodes;\r\n let plane = node.plane;\r\n for (let node1 of polygonTreeNodes1)\r\n {\r\n if (!node1.isRemoved())\r\n node1.splitByPlane(plane, coplanarfrontnodes, backnodes, frontnodes, backnodes);\r\n }\r\n\r\n if (node.front && frontnodes.length > 0)\r\n stack.push({ node: node.front, polygonTreeNodes: frontnodes });\r\n\r\n let numbacknodes = backnodes.length;\r\n if (node.back && numbacknodes > 0)\r\n stack.push({ node: node.back, polygonTreeNodes: backnodes });\r\n else\r\n {\r\n // there's nothing behind this plane. Delete the nodes behind this plane:\r\n // 这架飞机背后什么也没有。 删除此平面后面的节点:\r\n for (let i = 0; i < numbacknodes; i++)\r\n backnodes[i].remove();\r\n }\r\n }\r\n args = stack.pop();\r\n }\r\n while (args);\r\n }\r\n\r\n // Remove all polygons in this BSP tree that are inside the other BSP tree\r\n // `tree`.\r\n clipTo(tree: Tree, alsoRemovecoplanarFront: boolean)\r\n {\r\n let node: Node = this;\r\n let stack: Node[] = [];\r\n do\r\n {\r\n if (node.polygonTreeNodes.length > 0)\r\n {\r\n tree.rootNode.clipPolygons(\r\n node.polygonTreeNodes,\r\n alsoRemovecoplanarFront\r\n );\r\n }\r\n if (node.front) stack.push(node.front);\r\n if (node.back) stack.push(node.back);\r\n node = stack.pop();\r\n }\r\n while (node);\r\n }\r\n\r\n addPolygonTreeNodes(polygonTreeNodes: PolygonTreeNode[])\r\n {\r\n interface D\r\n {\r\n node: Node;\r\n polygontreenodes: PolygonTreeNode[];\r\n }\r\n let args: D = { node: this, polygontreenodes: polygonTreeNodes };\r\n let stack: D[] = [];\r\n do\r\n {\r\n let node = args.node;\r\n polygonTreeNodes = args.polygontreenodes;\r\n\r\n if (polygonTreeNodes.length === 0)\r\n {\r\n args = stack.pop();\r\n continue;\r\n }\r\n if (!node.plane)\r\n {\r\n let bestplane = polygonTreeNodes[Math.floor(polygonTreeNodes.length / 2)].getPolygon().plane;\r\n node.plane = bestplane;\r\n }\r\n let frontNodes: PolygonTreeNode[] = [];\r\n let backNodes: PolygonTreeNode[] = [];\r\n\r\n for (let i = 0, n = polygonTreeNodes.length; i < n; ++i)\r\n {\r\n polygonTreeNodes[i].splitByPlane(\r\n node.plane,\r\n node.polygonTreeNodes,\r\n backNodes,\r\n frontNodes,\r\n backNodes\r\n );\r\n }\r\n\r\n if (frontNodes.length > 0)\r\n {\r\n if (!node.front) node.front = new Node(node);\r\n stack.push({ node: node.front, polygontreenodes: frontNodes });\r\n }\r\n if (backNodes.length > 0)\r\n {\r\n if (!node.back) node.back = new Node(node);\r\n stack.push({ node: node.back, polygontreenodes: backNodes });\r\n }\r\n\r\n args = stack.pop();\r\n }\r\n while (args);\r\n }\r\n\r\n getParentPlaneNormals(normals: Vector3D[], maxdepth: number)\r\n {\r\n if (maxdepth > 0)\r\n {\r\n if (this.parent)\r\n {\r\n normals.push(this.parent.plane.normal);\r\n this.parent.getParentPlaneNormals(normals, maxdepth - 1);\r\n }\r\n }\r\n }\r\n}\r\n","\r\n// //////////////////////////////\r\n// ## class fuzzyFactory\r\n// This class acts as a factory for objects. We can search for an object with approximately\r\n// the desired properties (say a rectangle with width 2 and height 1)\r\n// The lookupOrCreate() method looks for an existing object (for example it may find an existing rectangle\r\n// with width 2.0001 and height 0.999. If no object is found, the user supplied callback is\r\n// called, which should generate a new object. The new object is inserted into the database\r\n// so it can be found by future lookupOrCreate() calls.\r\n// Constructor:\r\n// numdimensions: the number of parameters for each object\r\n// for example for a 2D rectangle this would be 2\r\n// tolerance: The maximum difference for each parameter allowed to be considered a match\r\nexport class FuzzyFactory\r\n{\r\n lookuptable: {};\r\n multiplier: number;\r\n constructor(numdimensions: number, tolerance: number)\r\n {\r\n this.lookuptable = {};\r\n this.multiplier = 1.0 / tolerance;\r\n }\r\n\r\n // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */});\r\n // Performs a fuzzy lookup of the object with the specified elements.\r\n // If found, returns the existing object\r\n // If not found, calls the supplied callback function which should create a new object with\r\n // the specified properties. This object is inserted in the lookup database.\r\n lookupOrCreate(els: number[], object: T): T\r\n {\r\n let hash = \"\";\r\n let multiplier = this.multiplier;\r\n for (let el of els)\r\n {\r\n let valueQuantized = Math.round(el * multiplier);\r\n hash += valueQuantized + \"/\";\r\n }\r\n if (hash in this.lookuptable) return this.lookuptable[hash];\r\n else\r\n {\r\n let hashparts = els.map(el =>\r\n {\r\n let q0 = Math.floor(el * multiplier);\r\n let q1 = q0 + 1;\r\n return [\"\" + q0 + \"/\", \"\" + q1 + \"/\"];\r\n });\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n hash = \"\";\r\n hashparts.forEach(hashpart =>\r\n {\r\n hash += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this.lookuptable[hash] = object;\r\n }\r\n return object;\r\n }\r\n }\r\n}\r\n","import { FuzzyFactory } from \"./FuzzyFactory\";\r\nimport { EPS } from \"./constants\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\n\r\nexport class FuzzyCSGFactory\r\n{\r\n vertexfactory = new FuzzyFactory(3, EPS);\r\n planefactory = new FuzzyFactory(4, EPS);\r\n constructor() { }\r\n\r\n getVertex(sourcevertex: Vertex3D): Vertex3D\r\n {\r\n let elements = [sourcevertex.pos.x, sourcevertex.pos.y, sourcevertex.pos.z];\r\n let result = this.vertexfactory.lookupOrCreate(elements, sourcevertex);\r\n return result;\r\n }\r\n\r\n getPlane(sourceplane: Plane): Plane\r\n {\r\n let elements: number[] = [sourceplane.normal.x, sourceplane.normal.y, sourceplane.normal.z, sourceplane.w];\r\n let result = this.planefactory.lookupOrCreate(elements, sourceplane);\r\n return result;\r\n }\r\n\r\n getPolygon(sourcePolygon: Polygon, outputPolygon = sourcePolygon): Polygon\r\n {\r\n let newPlane = this.getPlane(sourcePolygon.plane);\r\n let newVertices = sourcePolygon.vertices.map(vertex => this.getVertex(vertex));\r\n // two vertices that were originally very close may now have become\r\n // truly identical (referring to the same Vertex object).\r\n // Remove duplicate vertices:\r\n let newVerticesDedup: Vertex3D[] = [];//新的顶点列表(已过滤重复)\r\n if (newVertices.length > 0)\r\n {\r\n let prevVertexTag = newVertices[newVertices.length - 1].getTag();\r\n for (let vertex of newVertices)\r\n {\r\n let vertextag = vertex.getTag();\r\n if (vertextag !== prevVertexTag)\r\n newVerticesDedup.push(vertex);\r\n prevVertexTag = vertextag;\r\n }\r\n }\r\n // If it's degenerate, remove all vertices:\r\n if (newVerticesDedup.length < 3)\r\n newVerticesDedup = [];\r\n\r\n outputPolygon.vertices = newVertices;\r\n outputPolygon.plane = newPlane;\r\n return outputPolygon;\r\n }\r\n}\r\n","import { FuzzyCSGFactory } from \"../FuzzyFactory3d\";\r\nimport { FuzzyCAGFactory } from \"../FuzzyFactory2d\";\r\nimport { CSG } from \"../CSG\";\r\nimport { CAG } from \"../CAG\";\r\nimport { EPS } from \"../constants\";\r\nimport { Polygon } from \"../math/Polygon3\";\r\n\r\n/**\r\n * Returns a cannoicalized version of the input csg : ie every very close\r\n * points get deduplicated\r\n * \r\n * 返回删除重复点的csg,重复点将被合并\r\n */\r\nexport function canonicalizeCSG(csg: CSG): CSG\r\n{\r\n const factory = new FuzzyCSGFactory();\r\n let result = CSGFromCSGFuzzyFactory(factory, csg);\r\n result.isCanonicalized = true;\r\n result.isRetesselated = csg.isRetesselated;\r\n return result;\r\n}\r\n\r\nexport function canonicalizeCAG(cag: CAG)\r\n{\r\n let factory = new FuzzyCAGFactory();\r\n let result = CAGFromCAGFuzzyFactory(factory, cag);\r\n result.isCanonicalized = true;\r\n return result;\r\n}\r\n\r\nexport function CSGFromCSGFuzzyFactory(factory: FuzzyCSGFactory, sourcecsg: CSG)\r\n{\r\n let newpolygons: Polygon[] = sourcecsg.polygons.filter(poly =>\r\n {\r\n return factory.getPolygon(poly).vertices.length >= 3;\r\n });\r\n return new CSG(newpolygons);\r\n}\r\n\r\nfunction CAGFromCAGFuzzyFactory(factory: FuzzyCAGFactory, sourcecag: CAG)\r\n{\r\n let newsides = sourcecag.sides\r\n .map(side => factory.getSide(side))\r\n // remove bad sides (mostly a user input issue)\r\n .filter((side) => side.length() > EPS);\r\n return new CAG(newsides);\r\n};\r\n","import { Vector3D } from \"../math/Vector3\";\r\nimport { CSG } from \"../CSG\";\r\n/**\r\n * Returns an array of Vector3D, providing minimum coordinates and maximum coordinates\r\n * of this solid.\r\n * @example\r\n * let bounds = A.getBounds()\r\n * let minX = bounds[0].x\r\n */\r\nexport function bounds(csg: CSG): Vector3D[]\r\n{\r\n if (!csg.cachedBoundingBox)\r\n {\r\n let minpoint: Vector3D;\r\n let maxpoint: Vector3D;\r\n let polygons = csg.polygons;\r\n let numpolygons = polygons.length;\r\n for (let i = 0; i < numpolygons; i++)\r\n {\r\n let polygon = polygons[i];\r\n let bounds = polygon.boundingBox();\r\n if (i === 0)\r\n {\r\n minpoint = bounds[0].clone();\r\n maxpoint = bounds[1].clone();\r\n }\r\n else\r\n {\r\n minpoint.min(bounds[0]);\r\n maxpoint.max(bounds[1]);\r\n }\r\n }\r\n // FIXME: not ideal, we are mutating the input, we need to move some of it out\r\n csg.cachedBoundingBox = [minpoint, maxpoint];\r\n }\r\n return csg.cachedBoundingBox;\r\n};\r\n","import { Vector2D } from \"./math/Vector2\";\r\n\r\nexport function fnNumberSort(a, b)\r\n{\r\n return a - b;\r\n}\r\n\r\nexport const solve2Linear = function (a: number, b: number, c: number, d: number, u: number, v: number)\r\n{\r\n let det = a * d - b * c;\r\n let invdet = 1.0 / det;\r\n let x = u * d - b * v;\r\n let y = -u * c + a * v;\r\n x *= invdet;\r\n y *= invdet;\r\n return [x, y];\r\n};\r\n\r\nexport function insertSorted(array: T[], element: T, comparefunc: (a: T, b: T) => number)\r\n{\r\n let leftbound = 0;\r\n let rightbound = array.length;\r\n while (rightbound > leftbound)\r\n {\r\n let testindex = Math.floor((leftbound + rightbound) / 2);\r\n let testelement = array[testindex];\r\n let compareresult = comparefunc(element, testelement);\r\n if (compareresult > 0)\r\n // element > testelement\r\n leftbound = testindex + 1;\r\n else\r\n rightbound = testindex;\r\n }\r\n array.splice(leftbound, 0, element);\r\n}\r\n\r\n// Get the x coordinate of a point with a certain y coordinate, interpolated between two\r\n// points (CSG.Vector2D).\r\n// Interpolation is robust even if the points have the same y coordinate\r\nexport function interpolateBetween2DPointsForY(point1: Vector2D, point2: Vector2D, y: number)\r\n{\r\n let f1 = y - point1.y;\r\n let f2 = point2.y - point1.y;\r\n if (f2 < 0)\r\n {\r\n f1 = -f1;\r\n f2 = -f2;\r\n }\r\n let t: number;\r\n if (f1 <= 0)\r\n t = 0.0;\r\n else if (f1 >= f2)\r\n t = 1.0;\r\n else if (f2 < 1e-10)\r\n // FIXME Should this be CSG.EPS?\r\n t = 0.5;\r\n else\r\n t = f1 / f2;\r\n let result = point1.x + t * (point2.x - point1.x);\r\n return result;\r\n}\r\n","import { Vector2D } from \"./Vector2\";\r\n\r\n/** class Line2D\r\n * Represents a directional line in 2D space\r\n * A line is parametrized by its normal vector (perpendicular to the line, rotated 90 degrees counter clockwise)\r\n * and w. The line passes through the point .times(w).\r\n * Equation: p is on line if normal.dot(p)==w\r\n */\r\nexport class Line2D\r\n{\r\n normal: Vector2D;\r\n w: number;\r\n constructor(normal: Vector2D, w: number)\r\n {\r\n this.normal = normal.clone();\r\n let l = this.normal.length();\r\n w *= l;\r\n this.normal.normalize();\r\n this.w = w;\r\n }\r\n\r\n direction()\r\n {\r\n return this.normal;\r\n }\r\n static fromPoints(p1: Vector2D, p2: Vector2D)\r\n {\r\n let direction = p2.clone().sub(p1);\r\n let normal = direction\r\n .normal()\r\n .negate()\r\n .normalize();\r\n let w = p1.dot(normal);\r\n return new Line2D(normal, w);\r\n }\r\n}\r\n","import { Plane } from \"./Plane\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vector3D } from \"./Vector3\";\r\n\r\n/** class OrthoNormalBasis\r\n * Reprojects points on a 3D plane onto a 2D plane\r\n * or from a 2D plane back onto the 3D plane\r\n */\r\n\r\nexport class OrthoNormalBasis\r\n{\r\n v: Vector3D;\r\n u: Vector3D;\r\n planeorigin: Vector3D;\r\n constructor(public plane: Plane, rightVector: Vector3D = plane.normal.randomNonParallelVector())\r\n {\r\n this.v = plane.normal.clone().cross(rightVector).normalize();\r\n this.u = this.v.clone().cross(plane.normal);\r\n this.plane = plane;\r\n this.planeorigin = plane.normal.clone().multiplyScalar(plane.w);\r\n }\r\n to2D(vec3: Vector3D)\r\n {\r\n return new Vector2D(vec3.dot(this.u), vec3.dot(this.v));\r\n }\r\n\r\n to3D(vec2: Vector2D)\r\n {\r\n return this.planeorigin.clone()\r\n .add(this.u.clone().multiplyScalar(vec2.x))\r\n .add(this.v.clone().multiplyScalar(vec2.y));\r\n }\r\n}\r\n","import { EPS } from \"../constants\";\r\nimport { fnNumberSort, insertSorted, interpolateBetween2DPointsForY } from \"../utils\";\r\nimport { Line2D } from \"./Line2\";\r\nimport { OrthoNormalBasis } from \"./OrthoNormalBasis\";\r\nimport { Polygon } from \"./Polygon3\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\n\r\n//在这个文件中 Top 表示的是 y最小.\r\n// Bottom 表示的是 y最大\r\n\r\ninterface ActivePolygon\r\n{\r\n polygonindex: number;\r\n leftvertexindex: number;\r\n rightvertexindex: number;\r\n\r\n topleft: Vector2D;\r\n bottomleft: Vector2D;\r\n\r\n topright: Vector2D;\r\n bottomright: Vector2D;\r\n}\r\n\r\ninterface OutPolygon\r\n{\r\n topleft: Vector2D;\r\n topright: Vector2D;\r\n bottomleft: Vector2D;\r\n bottomright: Vector2D;\r\n leftline: Line2D;\r\n rightline: Line2D;\r\n outpolygon?: { leftpoints: Vector2D[]; rightpoints: Vector2D[]; };\r\n leftlinecontinues?: boolean;\r\n rightlinecontinues?: boolean;\r\n}\r\n\r\n//一组共面多边形的Retesselation函数。 请参阅此文件顶部的介绍。\r\nexport function reTesselateCoplanarPolygons(sourcePolygons: Polygon[], destpolygons: Polygon[] = []): void\r\n{\r\n let numPolygons = sourcePolygons.length;\r\n if (numPolygons < 2)\r\n {\r\n destpolygons.push(...sourcePolygons);\r\n return;\r\n }\r\n\r\n let plane = sourcePolygons[0].plane;\r\n let orthobasis = new OrthoNormalBasis(plane);\r\n\r\n // let xcoordinatebins = {}\r\n let yCoordinateBins: { [key: number]: number; } = {}; //整数map\r\n let yCoordinateBinningFactor = (1.0 / EPS) * 10;\r\n\r\n let polygonVertices2d: (Vector2D[])[] = []; // (Vector2[])[];\r\n let polygonTopVertexIndexes: number[] = []; // 每个多边形最顶层顶点的索引数组 minIndex\r\n let topY2PolygonIndexes: { [key: number]: number[]; } = {}; // Map\r\n let yCoordinateToPolygonIndexes: { [key: string]: { [key: number]: boolean; }; } = {}; // Map > Y坐标映射所有的多边形\r\n\r\n //将多边形转换为2d点表 polygonVertices2d\r\n //建立y对应的多边形Map yCoordinateToPolygonIndexes\r\n for (let polygonIndex = 0; polygonIndex < numPolygons; polygonIndex++)\r\n {\r\n let poly3d = sourcePolygons[polygonIndex];\r\n let numVertices = poly3d.vertices.length;\r\n\r\n if (numVertices === 0) continue;\r\n\r\n let vertices2d: Vector2D[] = []; //Vector2d[];\r\n let minIndex = -1;\r\n let miny: number, maxy: number;\r\n for (let i = 0; i < numVertices; i++)\r\n {\r\n let pos2d = orthobasis.to2D(poly3d.vertices[i].pos);\r\n // perform binning of y coordinates: If we have multiple vertices very\r\n // close to each other, give them the same y coordinate:\r\n let yCoordinatebin = Math.floor(pos2d.y * yCoordinateBinningFactor);\r\n let newy: number;\r\n if (yCoordinatebin in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin];\r\n else if (yCoordinatebin + 1 in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin + 1];\r\n else if (yCoordinatebin - 1 in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin - 1];\r\n else\r\n {\r\n newy = pos2d.y;\r\n yCoordinateBins[yCoordinatebin] = pos2d.y;\r\n }\r\n pos2d = new Vector2D(pos2d.x, newy);\r\n vertices2d.push(pos2d);\r\n if (i === 0 || newy < miny)\r\n {\r\n miny = newy;\r\n minIndex = i;\r\n }\r\n if (i === 0 || newy > maxy) maxy = newy;\r\n\r\n if (!(newy in yCoordinateToPolygonIndexes))\r\n yCoordinateToPolygonIndexes[newy] = {};\r\n\r\n yCoordinateToPolygonIndexes[newy][polygonIndex] = true;\r\n }\r\n\r\n //退化多边形,所有顶点都具有相同的y坐标。 从现在开始忽略它:\r\n if (miny >= maxy) continue;\r\n\r\n if (!(miny in topY2PolygonIndexes)) topY2PolygonIndexes[miny] = [];\r\n\r\n topY2PolygonIndexes[miny].push(polygonIndex);\r\n\r\n // reverse the vertex order:\r\n vertices2d.reverse();\r\n minIndex = numVertices - minIndex - 1;\r\n polygonVertices2d.push(vertices2d);\r\n polygonTopVertexIndexes.push(minIndex);\r\n }\r\n\r\n //所有的y坐标,从小到大排序\r\n let yCoordinates: string[] = [];\r\n for (let ycoordinate in yCoordinateToPolygonIndexes)\r\n yCoordinates.push(ycoordinate);\r\n yCoordinates.sort(fnNumberSort);\r\n\r\n //迭代y坐标 从低到高\r\n\r\n // activepolygons :'active'的源多边形,即与y坐标相交\r\n // 多边形是从左往右排序的\r\n // activepolygons 中的每个元素都具有以下属性:\r\n // polygonindex 源多边形的索引(即sourcepolygons的索引 和polygonvertices2d数组)\r\n // leftvertexindex 左边 在当前y坐标处或刚好在当前y坐标之上\r\n // rightvertexindex 右边\r\n // topleft bottomleft 与当前y坐标交叉的多边形左侧的坐标\r\n // topright bottomright 与当前y坐标交叉的多边形右侧的坐标\r\n\r\n let activePolygons: ActivePolygon[] = [];\r\n let prevOutPolygonRow: OutPolygon[] = []; //上一个输出多边形行?\r\n for (let yindex = 0; yindex < yCoordinates.length; yindex++)\r\n {\r\n let yCoordinateStr = yCoordinates[yindex];\r\n let yCoordinate = Number(yCoordinateStr);\r\n\r\n // 用当前的y 更新 activePolygons\r\n // - 删除以y坐标结尾的所有多边形 删除polygon maxy = y 的多边形\r\n // - 更新 leftvertexindex 和 rightvertexindex (指向当前顶点索引)\r\n // 在多边形的左侧和右侧\r\n\r\n // 迭代在Y坐标处有一个角的所有多边形\r\n let polygonIndexeSwithCorner = yCoordinateToPolygonIndexes[yCoordinateStr];\r\n for (\r\n let activePolygonIndex = 0;\r\n activePolygonIndex < activePolygons.length;\r\n activePolygonIndex++\r\n )\r\n {\r\n let activepolygon = activePolygons[activePolygonIndex];\r\n let polygonindex = activepolygon.polygonindex;\r\n\r\n if (!polygonIndexeSwithCorner[polygonindex])//如果不在角内\r\n continue;\r\n\r\n //多边形在此y坐标处有一个角\r\n let vertices2d = polygonVertices2d[polygonindex];\r\n let numvertices = vertices2d.length;\r\n let newleftvertexindex = activepolygon.leftvertexindex;\r\n let newrightvertexindex = activepolygon.rightvertexindex;\r\n\r\n //看看我们是否需要增加 leftvertexindex 或减少 rightvertexindex :\r\n while (true)\r\n {\r\n let nextleftvertexindex = newleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n if (vertices2d[nextleftvertexindex].y !== yCoordinate) break;\r\n newleftvertexindex = nextleftvertexindex;\r\n }\r\n //减少 rightvertexindex\r\n let nextrightvertexindex = newrightvertexindex - 1;\r\n if (nextrightvertexindex < 0)\r\n nextrightvertexindex = numvertices - 1;\r\n if (vertices2d[nextrightvertexindex].y === yCoordinate)\r\n newrightvertexindex = nextrightvertexindex;\r\n\r\n if (\r\n newleftvertexindex !== activepolygon.leftvertexindex //有向上更新\r\n && newleftvertexindex === newrightvertexindex //指向同一个点\r\n )\r\n {\r\n\r\n // We have increased leftvertexindex or decreased rightvertexindex, and now they point to the same vertex\r\n // This means that this is the bottom point of the polygon. We'll remove it:\r\n //我们增加了leftvertexindex或减少了rightvertexindex,现在它们指向同一个顶点\r\n //这意味着这是多边形的底点。 我们将删除它:\r\n activePolygons.splice(activePolygonIndex, 1);\r\n --activePolygonIndex;\r\n } else\r\n {\r\n activepolygon.leftvertexindex = newleftvertexindex;\r\n activepolygon.rightvertexindex = newrightvertexindex;\r\n activepolygon.topleft = vertices2d[newleftvertexindex];\r\n activepolygon.topright = vertices2d[newrightvertexindex];\r\n let nextleftvertexindex = newleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n activepolygon.bottomleft = vertices2d[nextleftvertexindex];\r\n let nextrightvertexindex = newrightvertexindex - 1;\r\n if (nextrightvertexindex < 0) nextrightvertexindex = numvertices - 1;\r\n activepolygon.bottomright = vertices2d[nextrightvertexindex];\r\n }\r\n }\r\n\r\n let nextYCoordinate: number; // number y\r\n if (yindex >= yCoordinates.length - 1)\r\n {\r\n // last row, all polygons must be finished here:\r\n // 最后一行,所有多边形必须在这里完成:\r\n activePolygons = [];\r\n }\r\n else // yindex < ycoordinates.length-1\r\n {\r\n nextYCoordinate = Number(yCoordinates[yindex + 1]);\r\n let middleYCoordinate = 0.5 * (yCoordinate + nextYCoordinate);\r\n // update activepolygons by adding any polygons that start here:\r\n // 添加从这里开始的多边形 到 activePolygons\r\n let startingPolygonIndexes = topY2PolygonIndexes[yCoordinateStr];\r\n for (let polygonindex_key in startingPolygonIndexes)\r\n {\r\n let polygonindex = startingPolygonIndexes[polygonindex_key];\r\n let vertices2d = polygonVertices2d[polygonindex];\r\n let numvertices = vertices2d.length;\r\n let topVertexIndex = polygonTopVertexIndexes[polygonindex];\r\n // the top of the polygon may be a horizontal line. In that case topvertexindex can point to any point on this line.\r\n // Find the left and right topmost vertices which have the current y coordinate:\r\n // 顶部可以是一条直线,寻找最左边的点和最右边的点\r\n let topleftvertexindex = topVertexIndex;\r\n while (true)\r\n {\r\n let i = topleftvertexindex + 1;\r\n if (i >= numvertices) i = 0;\r\n if (vertices2d[i].y !== yCoordinate) break;\r\n if (i === topVertexIndex) break; // should not happen, but just to prevent endless loops\r\n topleftvertexindex = i;\r\n }\r\n let toprightvertexindex = topVertexIndex;\r\n while (true)\r\n {\r\n let i = toprightvertexindex - 1;\r\n if (i < 0) i = numvertices - 1;\r\n if (vertices2d[i].y !== yCoordinate) break;\r\n if (i === topleftvertexindex) break; // should not happen, but just to prevent endless loops\r\n toprightvertexindex = i;\r\n }\r\n\r\n let nextleftvertexindex = topleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n let nextrightvertexindex = toprightvertexindex - 1;\r\n if (nextrightvertexindex < 0) nextrightvertexindex = numvertices - 1;\r\n let newactivepolygon: ActivePolygon = {\r\n polygonindex: polygonindex,\r\n leftvertexindex: topleftvertexindex,\r\n rightvertexindex: toprightvertexindex,\r\n topleft: vertices2d[topleftvertexindex],\r\n topright: vertices2d[toprightvertexindex],\r\n bottomleft: vertices2d[nextleftvertexindex],\r\n bottomright: vertices2d[nextrightvertexindex]\r\n };\r\n\r\n //二分插入\r\n insertSorted(activePolygons, newactivepolygon, function (el1: ActivePolygon, el2: ActivePolygon)\r\n {\r\n let x1 = interpolateBetween2DPointsForY(\r\n el1.topleft,\r\n el1.bottomleft,\r\n middleYCoordinate\r\n );\r\n let x2 = interpolateBetween2DPointsForY(\r\n el2.topleft,\r\n el2.bottomleft,\r\n middleYCoordinate\r\n );\r\n if (x1 > x2) return 1;\r\n if (x1 < x2) return -1;\r\n return 0;\r\n });\r\n }\r\n }\r\n\r\n //#region\r\n // if( (yindex === ycoordinates.length-1) || (nextycoordinate - ycoordinate > EPS) )\r\n // if(true)\r\n // {\r\n\r\n let newOutPolygonRow: OutPolygon[] = []; //输出多边形\r\n\r\n // Build the output polygons for the next row in newOutPolygonRow:\r\n //现在 activepolygons 是最新的\r\n //为 newOutPolygonRow 中的下一行构建输出多边形:\r\n for (let activepolygonKey in activePolygons)\r\n {\r\n let activepolygon = activePolygons[activepolygonKey];\r\n\r\n let x = interpolateBetween2DPointsForY(\r\n activepolygon.topleft,\r\n activepolygon.bottomleft,\r\n yCoordinate\r\n );\r\n let topleft = new Vector2D(x, yCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topright,\r\n activepolygon.bottomright,\r\n yCoordinate\r\n );\r\n let topright = new Vector2D(x, yCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topleft,\r\n activepolygon.bottomleft,\r\n nextYCoordinate\r\n );\r\n let bottomleft = new Vector2D(x, nextYCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topright,\r\n activepolygon.bottomright,\r\n nextYCoordinate\r\n );\r\n let bottomright = new Vector2D(x, nextYCoordinate);\r\n let outPolygon = {\r\n topleft: topleft,\r\n topright: topright,\r\n bottomleft: bottomleft,\r\n bottomright: bottomright,\r\n leftline: Line2D.fromPoints(topleft, bottomleft),\r\n rightline: Line2D.fromPoints(bottomright, topright)\r\n };\r\n\r\n if (newOutPolygonRow.length > 0)\r\n {\r\n let prevoutpolygon =\r\n newOutPolygonRow[newOutPolygonRow.length - 1];\r\n let d1 = outPolygon.topleft.distanceTo(prevoutpolygon.topright);\r\n let d2 = outPolygon.bottomleft.distanceTo(\r\n prevoutpolygon.bottomright\r\n );\r\n if (d1 < EPS && d2 < EPS)\r\n {\r\n // we can join this polygon with the one to the left:\r\n outPolygon.topleft = prevoutpolygon.topleft;\r\n outPolygon.leftline = prevoutpolygon.leftline;\r\n outPolygon.bottomleft = prevoutpolygon.bottomleft;\r\n newOutPolygonRow.splice(newOutPolygonRow.length - 1, 1);\r\n }\r\n }\r\n\r\n newOutPolygonRow.push(outPolygon);\r\n }\r\n\r\n if (yindex > 0)\r\n {\r\n // try to match the new polygons against the previous row:\r\n //尝试将新多边形与上一行匹配:\r\n let prevContinuedIndexes: { [key: number]: boolean; } = {};\r\n let matchedIndexes: { [key: number]: boolean; } = {};\r\n for (let i = 0; i < newOutPolygonRow.length; i++)\r\n {\r\n let thispolygon = newOutPolygonRow[i];\r\n for (let ii = 0; ii < prevOutPolygonRow.length; ii++)\r\n {\r\n if (!matchedIndexes[ii])\r\n {\r\n // not already processed?\r\n // We have a match if the sidelines are equal or if the top coordinates\r\n // are on the sidelines of the previous polygon\r\n let prevpolygon = prevOutPolygonRow[ii];\r\n if (prevpolygon.bottomleft.distanceTo(thispolygon.topleft) < EPS)\r\n {\r\n if (prevpolygon.bottomright.distanceTo(thispolygon.topright) < EPS)\r\n {\r\n // Yes, the top of this polygon matches the bottom of the previous:\r\n matchedIndexes[ii] = true;\r\n // Now check if the joined polygon would remain convex:\r\n let d1 = thispolygon.leftline.direction().x - prevpolygon.leftline.direction().x;\r\n let d2 = thispolygon.rightline.direction().x - prevpolygon.rightline.direction().x;\r\n let leftlinecontinues = Math.abs(d1) < EPS;\r\n let rightlinecontinues = Math.abs(d2) < EPS;\r\n let leftlineisconvex = leftlinecontinues || d1 >= 0;\r\n let rightlineisconvex = rightlinecontinues || d2 >= 0;\r\n if (leftlineisconvex && rightlineisconvex)\r\n {\r\n // yes, both sides have convex corners:\r\n // This polygon will continue the previous polygon\r\n thispolygon.outpolygon = prevpolygon.outpolygon;\r\n thispolygon.leftlinecontinues = leftlinecontinues;\r\n thispolygon.rightlinecontinues = rightlinecontinues;\r\n prevContinuedIndexes[ii] = true;\r\n }\r\n break;\r\n }\r\n }\r\n } // if(!prevcontinuedindexes[ii])\r\n } // for ii\r\n } // for i\r\n for (let ii = 0; ii < prevOutPolygonRow.length; ii++)\r\n {\r\n if (!prevContinuedIndexes[ii])\r\n {\r\n // polygon ends here\r\n // Finish the polygon with the last point(s):\r\n let prevpolygon = prevOutPolygonRow[ii];\r\n prevpolygon.outpolygon.rightpoints.push(prevpolygon.bottomright);\r\n if (prevpolygon.bottomright.distanceTo(prevpolygon.bottomleft) > EPS)\r\n {\r\n // polygon ends with a horizontal line:\r\n prevpolygon.outpolygon.leftpoints.push(prevpolygon.bottomleft);\r\n }\r\n // reverse the left half so we get a counterclockwise circle:\r\n prevpolygon.outpolygon.leftpoints.reverse();\r\n let points2d = prevpolygon.outpolygon.rightpoints.concat(prevpolygon.outpolygon.leftpoints);\r\n\r\n let vertices = points2d.map(v => new Vertex3D(orthobasis.to3D(v)));\r\n let polygon = new Polygon(vertices, plane);\r\n destpolygons.push(polygon);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < newOutPolygonRow.length; i++)\r\n {\r\n let thispolygon = newOutPolygonRow[i];\r\n if (!thispolygon.outpolygon)\r\n {\r\n // polygon starts here:\r\n thispolygon.outpolygon = {\r\n leftpoints: [],\r\n rightpoints: []\r\n };\r\n thispolygon.outpolygon.leftpoints.push(thispolygon.topleft);\r\n if (thispolygon.topleft.distanceTo(thispolygon.topright) > EPS)\r\n {\r\n // we have a horizontal line at the top:\r\n thispolygon.outpolygon.rightpoints.push(thispolygon.topright);\r\n }\r\n }\r\n else\r\n {\r\n // continuation of a previous row\r\n if (!thispolygon.leftlinecontinues)\r\n {\r\n thispolygon.outpolygon.leftpoints.push(thispolygon.topleft);\r\n }\r\n if (!thispolygon.rightlinecontinues)\r\n {\r\n thispolygon.outpolygon.rightpoints.push(thispolygon.topright);\r\n }\r\n }\r\n }\r\n\r\n prevOutPolygonRow = newOutPolygonRow;\r\n // }\r\n //#endregion\r\n } // for yindex\r\n}\r\n","import { CSG } from \"../CSG\";\r\nimport { FuzzyCSGFactory } from \"../FuzzyFactory3d\";\r\nimport { Polygon } from \"../math/Polygon3\";\r\nimport { reTesselateCoplanarPolygons } from \"../math/reTesselateCoplanarPolygons\";\r\n\r\nexport function reTesselate(csg: CSG): CSG\r\n{\r\n if (csg.isRetesselated) return csg;\r\n\r\n let polygonsPerPlane: { [key: number]: Polygon[]; } = {};\r\n let isCanonicalized = csg.isCanonicalized;\r\n let fuzzyfactory = new FuzzyCSGFactory();\r\n\r\n for (let polygon of csg.polygons)\r\n {\r\n let plane = polygon.plane;\r\n if (!isCanonicalized)\r\n {\r\n // in order to identify polygons having the same plane, we need to canonicalize the planes\r\n // We don't have to do a full canonizalization (including vertices), to save time only do the planes and the shared data:\r\n plane = fuzzyfactory.getPlane(plane);\r\n }\r\n let tag = plane.getTag();\r\n if (!(tag in polygonsPerPlane)) polygonsPerPlane[tag] = [polygon];\r\n else polygonsPerPlane[tag].push(polygon);\r\n }\r\n\r\n let destpolygons: Polygon[] = [];\r\n for (let planetag in polygonsPerPlane)\r\n {\r\n let sourcepolygons = polygonsPerPlane[planetag];\r\n reTesselateCoplanarPolygons(sourcepolygons, destpolygons);\r\n }\r\n let resultCSG = new CSG(destpolygons);\r\n resultCSG.isRetesselated = true;\r\n return resultCSG;\r\n};\r\n","import { Matrix4 } from \"three\";\r\nimport { IsMirror } from \"./math/IsMirrot\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\nimport { Tree } from \"./trees\";\r\nimport { canonicalizeCSG } from \"./utils/canonicalize\";\r\nimport { bounds } from \"./utils/csgMeasurements\";\r\nimport { reTesselate } from \"./utils/retesellate\";\r\n\r\n/** Class CSG\r\n * Holds a binary space partition tree representing a 3D solid. Two solids can\r\n * be combined using the `union()`, `subtract()`, and `intersect()` methods.\r\n * @constructor\r\n */\r\nexport class CSG\r\n{\r\n /** # 是否已精简重复点 */\r\n isCanonicalized: boolean = false;\r\n /** # 是否已合并轮廓 */\r\n isRetesselated: boolean = false;\r\n cachedBoundingBox: Vector3D[];\r\n constructor(public polygons: Polygon[] = [])\r\n {\r\n }\r\n /**\r\n * Return a new CSG solid representing the space in either this solid or\r\n * in the given solids. Neither this solid nor the given solids are modified.\r\n * @param {CSG[]} csg - list of CSG objects\r\n * @returns {CSG} new CSG object\r\n * @example\r\n * let C = A.union(B)\r\n * @example\r\n * +-------+ +-------+\r\n * | | | |\r\n * | A | | |\r\n * | +--+----+ = | +----+\r\n * +----+--+ | +----+ |\r\n * | B | | |\r\n * | | | |\r\n * +-------+ +-------+\r\n */\r\n union(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n {\r\n csgs = csg.slice(0);\r\n csgs.push(this);\r\n }\r\n else csgs = [this, csg];\r\n\r\n let i: number;\r\n // combine csg pairs in a way that forms a balanced binary tree pattern\r\n for (i = 1; i < csgs.length; i += 2)\r\n {\r\n csgs.push(csgs[i - 1].unionSub(csgs[i]));\r\n }\r\n return csgs[i - 1].reTesselated().canonicalized();\r\n }\r\n\r\n unionSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n if (!this.mayOverlap(csg))\r\n return this.unionForNonIntersecting(csg);\r\n\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.clipTo(b);\r\n\r\n // b.clipTo(a, true); // ERROR: this doesn't work\r\n b.clipTo(a);\r\n b.invert();\r\n b.clipTo(a);\r\n b.invert();\r\n\r\n let newpolygons = [...a.allPolygons(), ...b.allPolygons()];\r\n let resultCSG = new CSG(newpolygons);\r\n if (retesselate) resultCSG = resultCSG.reTesselated();\r\n if (canonicalize) resultCSG = resultCSG.canonicalized();\r\n return resultCSG;\r\n }\r\n\r\n // Like union, but when we know that the two solids are not intersecting\r\n // Do not use if you are not completely sure that the solids do not intersect!\r\n unionForNonIntersecting(csg: CSG): CSG\r\n {\r\n let newpolygons = [...this.polygons, ...csg.polygons];\r\n let result = new CSG(newpolygons);\r\n result.isCanonicalized = this.isCanonicalized && csg.isCanonicalized;\r\n result.isRetesselated = this.isRetesselated && csg.isRetesselated;\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid representing space in this solid but\r\n * not in the given solids. Neither this solid nor the given solids are modified.\r\n * @returns new CSG object\r\n * @example\r\n * let C = A.subtract(B)\r\n * @example\r\n * +-------+ +-------+\r\n * | | | |\r\n * | A | | |\r\n * | +--+----+ = | +--+\r\n * +----+--+ | +----+\r\n * | B |\r\n * | |\r\n * +-------+\r\n */\r\n subtract(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n csgs = csg;\r\n else\r\n csgs = [csg];\r\n let result: CSG = this;\r\n for (let i = 0; i < csgs.length; i++)\r\n {\r\n let islast = i === csgs.length - 1;\r\n result = result.subtractSub(csgs[i], islast, islast);\r\n }\r\n return result;\r\n }\r\n\r\n subtractSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.invert();\r\n a.clipTo(b);\r\n b.clipTo(a, true);\r\n a.addPolygons(b.allPolygons());\r\n a.invert();\r\n let result = new CSG(a.allPolygons());\r\n // if (retesselate) result = result.reTesselated();\r\n // if (canonicalize) result = result.canonicalized();\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid representing space in both this solid and\r\n * in the given solids. Neither this solid nor the given solids are modified.\r\n * let C = A.intersect(B)\r\n * @returns new CSG object\r\n * @example\r\n * +-------+\r\n * | |\r\n * | A |\r\n * | +--+----+ = +--+\r\n * +----+--+ | +--+\r\n * | B |\r\n * | |\r\n * +-------+\r\n */\r\n intersect(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n csgs = csg;\r\n else\r\n csgs = [csg];\r\n let result: CSG = this;\r\n for (let i = 0; i < csgs.length; i++)\r\n {\r\n let islast = i === csgs.length - 1;\r\n result = result.intersectSub(csgs[i], islast, islast);\r\n }\r\n return result;\r\n }\r\n\r\n intersectSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.invert();\r\n b.clipTo(a);\r\n b.invert();\r\n a.clipTo(b);\r\n b.clipTo(a);\r\n a.addPolygons(b.allPolygons());\r\n a.invert();\r\n let result = new CSG(a.allPolygons());\r\n // if (retesselate) result = result.reTesselated();\r\n // if (canonicalize) result = result.canonicalized();\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid with solid and empty space switched.\r\n * This solid is not modified.\r\n */\r\n invert(): CSG\r\n {\r\n let flippedpolygons = this.polygons.map(p => p.flipped());\r\n return new CSG(flippedpolygons);\r\n }\r\n\r\n // Affine transformation of CSG object. Returns a new CSG object\r\n transform1(matrix4x4: Matrix4)\r\n {\r\n let newpolygons = this.polygons.map(p =>\r\n {\r\n return p.transform(matrix4x4);\r\n });\r\n let result = new CSG(newpolygons);\r\n result.isCanonicalized = this.isCanonicalized;\r\n result.isRetesselated = this.isRetesselated;\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid that is transformed using the given Matrix.\r\n * Several matrix transformations can be combined before transforming this solid.\r\n * @param {CSG.Matrix4x4} matrix4x4 - matrix to be applied\r\n * @returns {CSG} new CSG object\r\n * @example\r\n * var m = new CSG.Matrix4x4()\r\n * m = m.multiply(CSG.Matrix4x4.rotationX(40))\r\n * m = m.multiply(CSG.Matrix4x4.translation([-.5, 0, 0]))\r\n * let B = A.transform(m)\r\n */\r\n transform(matrix4x4: Matrix4): this\r\n {\r\n let ismirror = IsMirror(matrix4x4);\r\n let transformedvertices = {};\r\n let transformedplanes = {};\r\n let newpolygons = this.polygons.map(p =>\r\n {\r\n let newplane: Plane;\r\n let plane = p.plane;\r\n let planetag = plane.getTag();\r\n if (planetag in transformedplanes)\r\n {\r\n newplane = transformedplanes[planetag];\r\n } else\r\n {\r\n newplane = plane.transform(matrix4x4);\r\n transformedplanes[planetag] = newplane;\r\n }\r\n let newvertices = p.vertices.map(v =>\r\n {\r\n let newvertex: Vertex3D;\r\n let vertextag = v.getTag();\r\n if (vertextag in transformedvertices)\r\n {\r\n newvertex = transformedvertices[vertextag];\r\n }\r\n else\r\n {\r\n newvertex = v.transform(matrix4x4);\r\n transformedvertices[vertextag] = newvertex;\r\n }\r\n return newvertex;\r\n });\r\n if (ismirror) newvertices.reverse();\r\n return new Polygon(newvertices, newplane);\r\n });\r\n let result = new CSG(newpolygons);\r\n result.isRetesselated = this.isRetesselated;\r\n result.isCanonicalized = this.isCanonicalized;\r\n return result as this;\r\n }\r\n canonicalized()\r\n {\r\n if (this.isCanonicalized) return this;\r\n return canonicalizeCSG(this);\r\n }\r\n reTesselated()\r\n {\r\n if (this.isRetesselated) return this;\r\n return reTesselate(this);\r\n }\r\n\r\n //如果两个实体有可能重叠,返回true\r\n mayOverlap(csg: CSG): boolean\r\n {\r\n if (this.polygons.length === 0 || csg.polygons.length === 0)\r\n return false;\r\n\r\n let mybounds = bounds(this);\r\n let otherbounds = bounds(csg);\r\n if (mybounds[1].x < otherbounds[0].x) return false;\r\n if (mybounds[0].x > otherbounds[1].x) return false;\r\n if (mybounds[1].y < otherbounds[0].y) return false;\r\n if (mybounds[0].y > otherbounds[1].y) return false;\r\n if (mybounds[1].z < otherbounds[0].z) return false;\r\n if (mybounds[0].z > otherbounds[1].z) return false;\r\n return true;\r\n }\r\n\r\n toTriangles(): Polygon[]\r\n {\r\n let polygons: Polygon[] = [];\r\n for (let poly of this.polygons)\r\n {\r\n let firstVertex = poly.vertices[0];\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n polygons.push(\r\n new Polygon(\r\n [\r\n firstVertex,\r\n poly.vertices[i + 1],\r\n poly.vertices[i + 2]\r\n ],\r\n poly.plane\r\n )\r\n );\r\n }\r\n }\r\n return polygons;\r\n }\r\n}\r\n","import { BufferGeometry, Face3, Geometry, Vector2, Vector3 } from \"three\";\r\nimport { equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { CSG } from \"./CSG\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Vector2D } from \"./math/Vector2\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\n\r\nexport function Geometry2CSG(geometry: Geometry | BufferGeometry): CSG\r\n{\r\n if (geometry instanceof BufferGeometry)\r\n geometry = new Geometry().fromBufferGeometry(geometry);\r\n\r\n let polygons: Polygon[] = [];\r\n for (let i = 0; i < geometry.faces.length; i++)\r\n {\r\n let face = geometry.faces[i];\r\n let faceVertexUvs = geometry.faceVertexUvs[0][i];\r\n let vertices: Vertex3D[] = [];\r\n\r\n if (face instanceof Face3)\r\n {\r\n let uv = faceVertexUvs ? faceVertexUvs[0].clone() : null;\r\n let vertex1 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.a]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex1);\r\n\r\n uv = faceVertexUvs ? faceVertexUvs[1].clone() : null;\r\n let vertex2 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.b]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex2);\r\n\r\n uv = faceVertexUvs ? faceVertexUvs[2].clone() : null;\r\n let vertex3 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.c]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex3);\r\n }\r\n\r\n let polygon = new Polygon(vertices);\r\n let normal = Vector3DToVector3(polygon.plane.normal);\r\n if (!isNaN(polygon.plane.w) && !equalv3(normal, new Vector3()))\r\n polygons.push(polygon);\r\n }\r\n\r\n return new CSG(polygons);\r\n}\r\n\r\nexport function CSG2Geometry(csg: CSG): Geometry\r\n{\r\n let geo = new Geometry;\r\n let uvs: Vector2[][] = geo.faceVertexUvs[0];\r\n\r\n for (let poly of csg.polygons)\r\n {\r\n let normal = Vector3DToVector3(poly.plane.normal);\r\n if (equalv3(normal, ZeroVec)) continue;\r\n for (let v of poly.vertices)\r\n {\r\n v.tag = geo.vertices.length;\r\n geo.vertices.push(Vector3DToVector3(v.pos));\r\n }\r\n\r\n let firstVertex = poly.vertices[0];\r\n\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n let [a, b, c] = [\r\n firstVertex.tag,\r\n poly.vertices[i + 1].tag,\r\n poly.vertices[i + 2].tag\r\n ];\r\n let f = new Face3(a, b, c, normal);\r\n\r\n geo.faces.push(f);\r\n uvs.push([\r\n Vector2DToVector2(firstVertex.uv),\r\n Vector2DToVector2(poly.vertices[i + 1].uv),\r\n Vector2DToVector2(poly.vertices[i + 2].uv)\r\n ]);\r\n }\r\n }\r\n return geo;\r\n}\r\n\r\nfunction Vector3ToVector3D(v: Vector3): Vector3D\r\n{\r\n return new Vector3D(v.x, v.y, v.z);\r\n}\r\n\r\nexport function Vector3DToVector3(v: Vector3D): Vector3\r\n{\r\n return new Vector3(v.x, v.y, v.z);\r\n}\r\nfunction Vector2DToVector2(v: Vector2D): Vector2\r\n{\r\n return new Vector2(v.x, v.y);\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ToFixed } from \"../Common/Utils\";\r\nimport { CSG } from \"../csg/core/CSG\";\r\nimport { Polygon } from \"../csg/core/math/Polygon3\";\r\nimport { Vec3 } from \"./IVec3\";\r\n\r\n/**\r\n * 解决 THREEBSP(CSG) 产生的结果没有办法得到分裂的个数.\r\n * 本类分析了THREEBSP的组合情况.\r\n * \r\n * Example:\r\n * \r\n * let topology = new BSPGroupParse(csg);\r\n * topology.parse();\r\n */\r\nexport class BSPGroupParse\r\n{\r\n constructor(bsp?: CSG, public fractionDigits = 1)\r\n {\r\n if (bsp)\r\n for (let poly of bsp.polygons)\r\n this.Add(poly);\r\n }\r\n Add(poly: Polygon)\r\n {\r\n let strs = poly.vertices.map(p => this.GenerateP(p.pos));\r\n let str0 = strs[0];\r\n let s0 = this.Get(str0);\r\n for (let i = 1; i < strs.length; i++)\r\n {\r\n let stri = strs[i];\r\n s0.add(stri);\r\n this.Get(stri).add(str0);\r\n }\r\n }\r\n\r\n /**\r\n * 返回组合点\r\n */\r\n Parse(): Vector3[][]\r\n {\r\n let set = new Set([...this.map.keys()]);\r\n let res: Vector3[][] = [];\r\n while (set.size > 0)\r\n {\r\n let fp = set[Symbol.iterator]().next().value;\r\n set.delete(fp);\r\n let cset = new Set();\r\n cset.add(fp);\r\n this.GetPts(fp, cset, set);\r\n let pts = [...cset].map(str =>\r\n {\r\n let v3 = this.vecMap.get(str);\r\n return new Vector3(v3.x, v3.y, v3.z);\r\n });\r\n res.push(pts);\r\n }\r\n return res;\r\n }\r\n private map = new Map>();\r\n private Get(vstr: string): Set\r\n {\r\n if (!this.map.has(vstr))\r\n {\r\n let s = new Set();\r\n this.map.set(vstr, s);\r\n return s;\r\n }\r\n return this.map.get(vstr);\r\n }\r\n private GetPts(p: string, cset: Set, oset: Set)\r\n {\r\n let strs = this.map.get(p);\r\n for (let str of strs)\r\n {\r\n if (!cset.has(str))\r\n {\r\n cset.add(str);\r\n oset.delete(str);\r\n this.GetPts(str, cset, oset);\r\n }\r\n }\r\n }\r\n private vecMap = new Map();\r\n private GenerateP(v: Vec3)\r\n {\r\n let str = [v.x, v.y, v.z].map(n => ToFixed(n, this.fractionDigits)).join(\",\");\r\n this.vecMap.set(str, v);\r\n return str;\r\n }\r\n}\r\n","import { BufferGeometry, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { equalv3 } from \"./GeUtils\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\n\r\nexport function GenerateExtrudeEdgeGeometry(contourPoints: Vector3[][], height: number): BufferGeometry\r\n{\r\n let pts: Vector3[] = [];\r\n for (let cs of contourPoints)\r\n pts.push(...GenerateExtrudeEdgeGeometryPoints(cs, height));\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return geo;\r\n}\r\n\r\nfunction GenerateExtrudeEdgeGeometryPoints(contourPoints: Vector3[], height: number): Vector3[]\r\n{\r\n if (contourPoints.length < 3) return [];\r\n if (equalv3(contourPoints[0], arrayLast(contourPoints)))\r\n contourPoints.pop();\r\n let pts: Vector3[] = [];\r\n let hpts = contourPoints.map(p => new Vector3(p.x, p.y, height));\r\n let count = contourPoints.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n pts.push(contourPoints[i], contourPoints[FixIndex(i + 1, count)], hpts[i], hpts[FixIndex(i + 1, count)], contourPoints[i], hpts[i]);\r\n }\r\n return pts;\r\n}\r\n\r\nexport function GenerateBoxEdgeGeometry(length: number, width: number, height: number): BufferGeometry\r\n{\r\n let pts = [new Vector3(), new Vector3(length), new Vector3(length, width), new Vector3(0, width)];\r\n return GenerateExtrudeEdgeGeometry([pts], height);\r\n}\r\n","import { arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { Status } from \"../../Common/Status\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\n\r\nexport function SimplifyPolyline(polyline: Polyline)\r\n{\r\n let curves = polyline.Explode();\r\n\r\n let oldCount = curves.length;\r\n curves = arrayRemoveDuplicateBySort(curves, (c1, c2) =>\r\n {\r\n return c1.Join(c2) !== Status.False;\r\n });\r\n\r\n if (oldCount === curves.length) return;\r\n\r\n polyline.Erase();\r\n\r\n if (curves.length === 1)\r\n return curves[0];\r\n else\r\n {\r\n let pl = new Polyline;\r\n for (let cu of curves)\r\n pl.Join(cu);\r\n return pl;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { equaln, isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { Vec3 } from \"../../Geometry/IVec3\";\r\nimport { IntersectOption } from \"../IntersectWith\";\r\n\r\n/**\r\n * V型刀走刀数据,第一刀直接扎进去,最后一刀提刀\r\n * @param polyline\r\n * @param feedingDepth 走刀深度\r\n * @param knifAngle 通常为60度.按弧度表示\r\n */\r\nexport function VKnifToolPath(polyline: Polyline, feedingDepth: number, knifAngle: number): { pt: Vec3, bul: number; }[]\r\n{\r\n let x = feedingDepth * Math.tan(knifAngle);\r\n let cus = polyline.Explode();\r\n arrayRemoveIf(cus, c => c.Length < 0.01);\r\n\r\n let offsetx = [x, -x];\r\n\r\n let ptsbul: { pt: Vec3, bul: number; }[] = [];\r\n\r\n let isClose = polyline.IsClose;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let nextIndex = FixIndex(i + 1, cus.length);\r\n let c1 = cus[i];\r\n let c2 = cus[nextIndex];\r\n\r\n let d = { pt: c1.StartPoint, bul: 0 };\r\n\r\n let curP = c1.EndPoint;\r\n\r\n if (c1 instanceof Arc)\r\n {\r\n d.bul = c1.Bul;\r\n c1 = new Line(curP.clone().sub(c1.GetFistDeriv(1).multiplyScalar(100)), curP);\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(c2.StartPoint, c2.StartPoint.add(c2.GetFistDeriv(0).multiplyScalar(100)));\r\n\r\n ptsbul.push(d);\r\n\r\n if (!isClose && i === cus.length - 1)//最后一条\r\n {\r\n ptsbul.push({ pt: c1.EndPoint, bul: 0 });\r\n break;\r\n }\r\n\r\n //圆弧与直线相切,此时不要提刀\r\n if (isParallelTo(c1.GetFistDeriv(0), c2.GetFistDeriv(0))) continue;\r\n\r\n //提刀\r\n for (let x of offsetx)\r\n {\r\n let co1 = c1.GetOffsetCurves(x)[0];\r\n let co2 = c2.GetOffsetCurves(x)[0];\r\n\r\n if (!co1 || !co2) continue;\r\n\r\n let ipts = co1.IntersectWith(co2, IntersectOption.ExtendBoth);\r\n\r\n if (ipts.length === 0) continue;\r\n\r\n if (co1.PtOnCurve(ipts[0])) continue;\r\n\r\n //抬刀路径\r\n ptsbul.push({ pt: curP, bul: 0 });\r\n ptsbul.push({ pt: ipts[0].setZ(feedingDepth), bul: 0 });\r\n }\r\n }\r\n\r\n if (isClose)\r\n {\r\n //第一刀\r\n ptsbul.unshift(ptsbul[ptsbul.length - 1]);//, ptsbul[ptsbul.length - 2]\r\n }\r\n return ptsbul;\r\n}\r\n\r\n\r\nexport function VData2Curve(data: { pt: Vec3, bul: number; }[])\r\n{\r\n let curves: Curve[] = [];\r\n for (let i = 0; i < data.length - 1; i++)\r\n {\r\n let p1 = new Vector3(data[i].pt.x, data[i].pt.y, data[i].pt.z);\r\n let p2 = new Vector3(data[i + 1].pt.x, data[i + 1].pt.y, data[i + 1].pt.z);\r\n if (equaln(data[i].bul, 0))\r\n {\r\n curves.push(new Line(p1, p2));\r\n }\r\n else\r\n {\r\n curves.push(new Arc().ParseFromBul(p1, p2, data[i].bul));\r\n }\r\n }\r\n return curves;\r\n}\r\n","export enum Intent\r\n{\r\n NONE = \"none\",\r\n PRIMARY = \"primary\",\r\n SUCCESS = \"success\",\r\n WARNING = \"warning\",\r\n DANGER = \"danger\",\r\n}\r\n\r\nexport interface IToasterOption\r\n{\r\n message: string | string[],\r\n timeout: number;\r\n intent: Intent;\r\n key?: string;\r\n}\r\n\r\n\r\ntype ToasterFunction = (option: IToasterOption) => void;\r\n\r\nexport const ToasterInjectFunctions: ToasterFunction[] = [];\r\n\r\nexport function Toaster(option: IToasterOption): void\r\n{\r\n for (let f of ToasterInjectFunctions)\r\n f(option);\r\n}\r\n","import { Factory } from '../CADFactory';\r\nimport { Entity } from '../Entity/Entity';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { CADFiler } from '../CADFiler';\r\n\r\n@Factory\r\nexport class Hole extends Entity\r\n{\r\n @AutoRecord FId: ObjectId;\r\n @AutoRecord MId: ObjectId;\r\n protected _Height: number;\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this._Height !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n if (ver <= 4)\r\n {\r\n //临时兼容旧图纸排钻,更新旧图纸后去掉兼容代码\r\n file['readIndex']--;\r\n }\r\n else\r\n {\r\n this._Height = file.Read();\r\n this.FId = file.ReadSoftObjectId();\r\n this.MId = file.ReadSoftObjectId();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(5);//ver\r\n file.Write(this._Height);\r\n file.WriteSoftObjectId(this.FId);\r\n file.WriteSoftObjectId(this.MId);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, CylinderBufferGeometry, Float32BufferAttribute, LineSegments, Matrix4, Mesh, Object3D, Shape as TShape, Vector3, Matrix3 } from \"three\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory, CADFactory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Hole } from \"./Hole\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Circle } from \"../Entity/Circle\";\r\n\r\nexport enum GangDrillType\r\n{\r\n /**偏心轮 */\r\n Pxl = 0,\r\n /**连接杆 */\r\n Ljg = 1,\r\n /**预埋件 */\r\n Ymj = 2,\r\n /**层板钉 */\r\n Nail = 3,\r\n /** 木销 */\r\n Wood = 4,\r\n /** 通孔 */\r\n TK = 5,\r\n WoodPXL = 6,\r\n}\r\n\r\nlet TempCircle1 = new Circle();\r\nlet TempCircle2 = new Circle();\r\n\r\n@Factory\r\nexport class CylinderHole extends Hole\r\n{\r\n private _Radius: number = 1;\r\n private type: GangDrillType = GangDrillType.Pxl;\r\n constructor()\r\n {\r\n super();\r\n this._Color = 1;\r\n }\r\n static CreateCylHole(radius: number, height: number, type: GangDrillType)\r\n {\r\n let drill = new CylinderHole();\r\n drill.Height = height;\r\n drill._Radius = radius;\r\n drill.type = type;\r\n return drill;\r\n }\r\n get Type()\r\n {\r\n return this.type;\r\n }\r\n set Type(t: GangDrillType)\r\n {\r\n if (this.type !== t)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.type = t;\r\n }\r\n }\r\n\r\n set Radius(r: number)\r\n {\r\n if (r !== this._Radius)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._MeshGeometry = null;\r\n this._EdgeGeometry = null;\r\n this._Radius = r;\r\n this.Update();\r\n }\r\n }\r\n get Height()\r\n {\r\n return super.Height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this._Height !== v)\r\n {\r\n this._MeshGeometry = null;\r\n this._EdgeGeometry = null;\r\n super.Height = v;\r\n }\r\n }\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3(new Vector3(-this._Radius, -this._Radius, 0), new Vector3(this._Radius, this._Radius, this._Height));\r\n return box.applyMatrix4(this.OCS);\r\n }\r\n private _MeshGeometry: CylinderBufferGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n this._MeshGeometry = FastDrillingMeshGeometry(this.Radius, this.Height);\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this._EdgeGeometry = FastDrillingEdgeGeometry(this._Radius, this.Height);\r\n return this._EdgeGeometry;\r\n }\r\n GetGripPoints()\r\n {\r\n let cir = new Circle(new Vector3(), this._Radius);\r\n let pts = cir.GetGripPoints();\r\n pts.push(...pts.map(p => p.clone().add(new Vector3(0, 0, this.Height))));\r\n return pts.map(p => p.applyMatrix4(this.OCS));\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n TempCircle1.Radius = this.Radius;\r\n TempCircle1.OCS = this._Matrix;\r\n TempCircle2.Radius = this.Radius;\r\n TempCircle2.OCS = this._Matrix;\r\n TempCircle2.Position = TempCircle2.Position.add(this.Normal.multiplyScalar(this.Height));\r\n\r\n for (let c of [TempCircle2, TempCircle1])\r\n {\r\n pts.push(...c.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n InitDrawObject(renderType: RenderType)\r\n {\r\n return this.GetObject3DByRenderType(renderType);\r\n }\r\n private GetObject3DByRenderType(renderType: RenderType)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n else\r\n return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n obj.add(this.GetObject3DByRenderType(type));\r\n }\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D)\r\n {\r\n if (type === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._Radius = file.Read();\r\n if (ver <= 4)\r\n {\r\n //临时兼容旧排钻\r\n this._Height = file.Read();\r\n this.type = file.Read();\r\n this.FId = file.ReadSoftObjectId();\r\n this.MId = file.ReadSoftObjectId();\r\n }\r\n else\r\n {\r\n this.type = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(5);//ver\r\n file.Write(this._Radius);\r\n file.Write(this.type);\r\n }\r\n}\r\n\r\nlet cache = new Map();\r\nlet ro = new Matrix4();\r\nro.makeRotationX(Math.PI / 2);\r\nexport function FastDrillingMeshGeometry(radius: number, height: number)\r\n{\r\n let key = `${radius},${height}`;\r\n if (cache.has(key))\r\n return cache.get(key);\r\n let geo = new CylinderBufferGeometry(radius, radius, height, 8, 1);\r\n geo.applyMatrix4(ro);\r\n geo.translate(0, 0, height / 2);\r\n cache.set(key, geo);\r\n return geo;\r\n}\r\n\r\nlet cache2 = new Map();\r\nexport function FastDrillingEdgeGeometry(radius: number, height: number): BufferGeometry\r\n{\r\n let key = `${radius},${height}`;\r\n if (cache2.has(key))\r\n return cache2.get(key);\r\n\r\n let sp = new TShape();\r\n sp.ellipse(0, 0, radius, radius, 0, 2 * Math.PI, false, 0);\r\n\r\n let pts = sp.getPoints(4);\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = pts[i];\r\n let np = pts[FixIndex(i + 1, pts.length)];\r\n coords.push(p.x, p.y, 0, np.x, np.y, 0);//bottom\r\n coords.push(p.x, p.y, height, np.x, np.y, height);//top\r\n coords.push(p.x, p.y, 0, p.x, p.y, height);//edge\r\n }\r\n\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n cache2.set(key, geo);\r\n return geo;\r\n}\r\n\r\nCADFactory.RegisterObjectAlias(CylinderHole, \"GangDrill\");\r\n","import { IBaseOption } from \"./BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\n\r\nexport enum EWineRackType\r\n{\r\n Oblique = 0,\r\n Upright = 1,\r\n}\r\n\r\nexport enum EWRackArrayType\r\n{\r\n ByWidth = 0,\r\n ByCount = 1,\r\n Fixed = 2, //固定\r\n}\r\n\r\n/**铺满方式 */\r\nexport enum EFullType\r\n{\r\n ByHeight = 0,\r\n ByWidth = 1,\r\n Symmetry = 2,\r\n}\r\n\r\n/**高度优先时靠左还是靠右 */\r\nexport enum EFullDir\r\n{\r\n Left = 0,\r\n Right = 1,\r\n}\r\n\r\nexport interface IWineRackOption extends IBaseOption\r\n{\r\n type: EWineRackType;\r\n arrayType: EWRackArrayType;\r\n fullType: EFullType;\r\n isFull: boolean;\r\n fullDir: EFullDir;\r\n isLock: boolean;\r\n heightCount: number;\r\n widthCount: number;\r\n isTotalDepth: boolean;\r\n depth: number; //格子深\r\n calcDepth: string;\r\n gripWidth: number; //格子宽度\r\n boardThick: number;\r\n grooveWidthAdd: number;\r\n leftEdge: number;\r\n rightEdge: number;\r\n topEdge: number;\r\n bottomEdge: number;\r\n frontCut: number;\r\n leftCut: number;\r\n rightCut: number;\r\n topCut: number;\r\n grooveLengthAdd: number;\r\n isDrawLy: boolean;\r\n isDrawVer: boolean;\r\n brThick2: number; //补板厚\r\n}\r\n\r\nexport interface IR2WROption\r\n{\r\n depth: number;\r\n addLen: number;\r\n knifeRadius: number;\r\n [EBoardKeyList.UpSealed]: number;\r\n [EBoardKeyList.DownSealed]: number;\r\n [EBoardKeyList.LeftSealed]: number;\r\n [EBoardKeyList.RightSealed]: number;\r\n}\r\n","import { LinesType, FaceDirection, ComposingType, IBaseOption } from \"./BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\n\r\nexport const DRILL_KEYS = [\"downDrill\", \"rightDrill\", \"upDrill\", \"leftDrill\"];\r\n\r\nexport interface IBoardFindOption extends IBaseOption\r\n{\r\n condition: IFindCondition;\r\n compareType: ICompareType;\r\n tolerance: ITolerance;\r\n layer: string;\r\n [EBoardKeyList.Height]: string;\r\n [EBoardKeyList.Width]: string;\r\n [EBoardKeyList.Thick]: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n brName: string; //板名\r\n [EBoardKeyList.BrMat]: string; //板材\r\n [EBoardKeyList.Mat]: string;\r\n [EBoardKeyList.Color]: string;\r\n [EBoardKeyList.Lines]: LinesType;\r\n [EBoardKeyList.BigHole]: FaceDirection;\r\n [EBoardKeyList.DrillType]: string;\r\n [EBoardKeyList.ComposingFace]: ComposingType;\r\n [EBoardKeyList.UpSealed]: string;\r\n [EBoardKeyList.DownSealed]: string;\r\n [EBoardKeyList.LeftSealed]: string;\r\n [EBoardKeyList.RightSealed]: string;\r\n highDrill: string[];\r\n upDownDrill: [boolean, boolean];\r\n isClose: boolean;\r\n remarks: [string, string][];\r\n isChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: string;\r\n}\r\nexport interface IFindCondition\r\n{\r\n layer: boolean;\r\n [EBoardKeyList.Height]: boolean;\r\n [EBoardKeyList.Width]: boolean;\r\n [EBoardKeyList.Thick]: boolean;\r\n useWood: boolean;\r\n useDrill: boolean;\r\n useNail: boolean;\r\n useDoor: boolean;\r\n useDim: boolean;\r\n useSpecial: boolean;\r\n useModeling: boolean;\r\n [EBoardKeyList.RoomName]: boolean;\r\n [EBoardKeyList.CabinetName]: boolean;\r\n brName: boolean;\r\n [EBoardKeyList.Mat]: boolean;\r\n [EBoardKeyList.Lines]: boolean;\r\n [EBoardKeyList.BigHole]: boolean;\r\n [EBoardKeyList.DrillType]: boolean;\r\n useKeyWord: boolean;\r\n [EBoardKeyList.ComposingFace]: boolean;\r\n [EBoardKeyList.UpSealed]: boolean;\r\n [EBoardKeyList.DownSealed]: boolean;\r\n [EBoardKeyList.LeftSealed]: boolean;\r\n [EBoardKeyList.RightSealed]: boolean;\r\n upDrill: boolean;\r\n downDrill: boolean;\r\n leftDrill: boolean;\r\n rightDrill: boolean;\r\n useZhengFanDrill: boolean;\r\n useChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: boolean;\r\n}\r\n\r\nexport interface ICompareType\r\n{\r\n [EBoardKeyList.Height]: ECompareType;\r\n [EBoardKeyList.Width]: ECompareType;\r\n [EBoardKeyList.Thick]: ECompareType;\r\n [EBoardKeyList.RoomName]: ECompareType;\r\n [EBoardKeyList.CabinetName]: ECompareType;\r\n brName: ECompareType;\r\n [EBoardKeyList.BrMat]: ECompareType;\r\n [EBoardKeyList.Mat]: ECompareType;\r\n [EBoardKeyList.Color]: ECompareType;\r\n [EBoardKeyList.Lines]: ECompareType;\r\n [EBoardKeyList.BigHole]: ECompareType;\r\n [EBoardKeyList.DrillType]: ECompareType;\r\n [EBoardKeyList.ComposingFace]: ECompareType;\r\n [EBoardKeyList.KnifeRad]: ECompareType;\r\n}\r\nexport interface ITolerance\r\n{\r\n [EBoardKeyList.Height]: string;\r\n [EBoardKeyList.Width]: string;\r\n [EBoardKeyList.Thick]: string;\r\n [EBoardKeyList.KnifeRad]: string;\r\n}\r\n\r\nexport enum EFindType\r\n{\r\n Find = 0,\r\n Modify = 1,\r\n FindMaxSize = 2,\r\n FindSplite = 3,\r\n GetOption = 4,\r\n RemoveModeling = 5,\r\n RemoveSpecialShape = 6,\r\n RemoveModelingAndSpecial = 7,\r\n ModifyHardware = 8,\r\n FindMinSize = 9,\r\n}\r\n\r\nexport enum ECompareType\r\n{\r\n Equal = \"=\",\r\n UnEqual = \"!=\",\r\n Greater = \">=\",\r\n Less = \"<=\"\r\n}\r\n","import { IBaseOption } from \"./BoardInterface\";\r\n\r\nexport enum ELatticeArrayType\r\n{\r\n ByWidth = 0,\r\n ByCount = 1,\r\n}\r\n\r\nexport interface ILatticeOption extends IBaseOption\r\n{\r\n arrayType: ELatticeArrayType;\r\n gripWidth: number;\r\n gripDepth: number;\r\n widthCount: number;\r\n depthCount: number;\r\n knifeRad: number,\r\n thickness: number,\r\n arcLen: number;\r\n downDist: number;\r\n space: number; //四周间隙\r\n grooveAddWidth: number; //齿加宽\r\n upSealed: number;\r\n downSealed: number;\r\n leftSealed: number;\r\n rightSealed: number;\r\n isAuto: boolean; //自动识别弧长\r\n isChange: boolean; //左右侧板跟随变化\r\n isOpenCut: boolean;\r\n upCut: number;\r\n downCut: number;\r\n}\r\n","import { INeedUpdateParams } from \"../Components/Template/TemplateComponent\";\r\nimport { IBaseOption } from \"./BoardInterface\";\r\n\r\nexport interface IDoorAndDrawerConfigOption extends IBaseOption\r\n{\r\n col: number;\r\n row: number;\r\n isAllSelect: boolean; //是否行列全选\r\n topOffset: number; //上留空\r\n bottomOffset: number; //下留空\r\n doorPosType: DoorPosType;\r\n offset: number; //内偏移\r\n topExt: number;\r\n bottomExt: number;\r\n leftExt: number;\r\n rightExt: number;\r\n topSpace: number; //间隙\r\n bottomSpace: number;\r\n leftSpace: number;\r\n rightSpace: number;\r\n midSpace: number;\r\n thickness: number; //立板厚度\r\n depth: number; //立板深度\r\n isAuto: boolean; //智能识别\r\n boardName: string; //柜名\r\n handleAngle: number; //拉手\r\n handleHorPos: HandleHorPos; //水平位置距离\r\n horSpacing: number;\r\n handleVePos: HandleVePos; // 垂直位置距离\r\n veSpacing: number;\r\n upOffsetExpr: string;\r\n downOffsetExpr: string;\r\n}\r\n\r\n/**\r\n * 门板数据接口\r\n */\r\nexport interface IDoorConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n doorThickness: number; //门板厚度\r\n topBrSeal: number; //层板封边\r\n bottomBrSeal: number;\r\n leftBrSeal: number;\r\n rightBrSeal: number;\r\n topDoorSeal: number; //门板封边\r\n bottomDoorSeal: number;\r\n leftDoorSeal: number;\r\n rightDoorSeal: number;\r\n hingeCount: number; //铰链\r\n hindeTopDist: number;\r\n hindeBottomDist: number;\r\n}\r\n\r\n/**\r\n * 抽屉数据接口\r\n */\r\nexport interface IDrawerConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n drawerTotalDepth: number; //抽屉总深\r\n trackDepth: number; //轨道深度\r\n isAutoSelectTrack: boolean;\r\n isLockTopOffset: boolean;\r\n isLockBottomOffset: boolean;\r\n}\r\n\r\n//门板位置类型\r\nexport enum DoorPosType\r\n{\r\n Out = 0, //外盖\r\n In = 1,\r\n}\r\n\r\nexport enum HandleHorPos\r\n{\r\n Left = 0,\r\n Right = 1,\r\n Mid = 2,\r\n}\r\nexport enum HandleVePos\r\n{\r\n Top = 0,\r\n Bottom = 1,\r\n Mid = 2,\r\n}\r\n//门板开门类型\r\nexport enum DoorOpenDir\r\n{\r\n Left = \"lf\",\r\n Right = \"rt\",\r\n Top = \"tp\",\r\n Bottom = \"bm\",\r\n None = \"none\",\r\n}\r\n\r\n//抽屉门板信息\r\nexport interface IDrawerInfo extends IBaseOption\r\n{\r\n row: number,\r\n col: number,\r\n divWidth: number, //预览UI尺寸\r\n divHeight: number,\r\n showWidth: string, //UI展示数据\r\n showHeight: string,\r\n width: number, //门板计算尺寸\r\n height: number,\r\n isLockWidth: boolean,\r\n isLockHeight: boolean,\r\n isSelect: boolean;\r\n tempInfo: ISelectTempInfo;\r\n marginRight?: number;\r\n}\r\n\r\nexport interface IDoorInfo extends IDrawerInfo\r\n{\r\n openDir: DoorOpenDir,\r\n\r\n isDrawLayer: boolean;\r\n isDrawVer: boolean;\r\n}\r\n\r\nexport interface IDrawerDoorTempInfo\r\n{\r\n name: string;\r\n id: string;\r\n logo?: string;\r\n props?: INeedUpdateParams[];\r\n title?: string;\r\n isHandle?: boolean;\r\n tagName?: string;\r\n isKuGan?: boolean;\r\n}\r\n\r\n/**选择的模板信息,temp-抽屉或门板,handletemp-拉手模板,其他是铰链模板 */\r\nexport interface ISelectTempInfo\r\n{\r\n temp: IDrawerDoorTempInfo;\r\n handleTemp: IDrawerDoorTempInfo;\r\n hingeTemp?: IDrawerDoorTempInfo;\r\n [key: string]: IDrawerDoorTempInfo;\r\n}\r\n\r\n/**抽屉一定要有的参数 */\r\nexport const DrawerTempParName = [\"ZYS\", \"YYS\", \"SYS\", \"XYS\"];\r\n/**禁止改的属性 */\r\nexport const DisableChangeParName = [\"L\", \"W\", \"H\", \"ZYS\", \"YYS\", \"SYS\", \"XYS\", \"ZG\", \"YG\", \"SG\", \"XG\"];\r\n\r\n/**门板需要的参数 */\r\nexport const DoorNeedParamNames = [\"L\", \"W\", \"H\", \"PX\", \"PY\", \"PZ\", \"RX\", \"RY\", \"RZ\", \"SG\", \"XG\", \"ZG\", \"YG\", \"XBH\", \"BH\"];\r\n","import { IBaseOption } from \"../../Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\n\r\nexport interface IHardwareOption extends IBaseOption\r\n{\r\n name: string;\r\n unit: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n costExpr: string;\r\n actualExpr: string;\r\n model: string;\r\n factory: string;\r\n brand: string;\r\n spec: string;\r\n comments: string;\r\n isHole: boolean;\r\n}\r\n\r\nexport interface ICylMetalsOption extends IHardwareOption\r\n{\r\n rad: number;\r\n height: number;\r\n count: string;\r\n}\r\n\r\nexport interface IExtMetalsOption extends IHardwareOption\r\n{\r\n thickness: number;\r\n knifeRad: number;\r\n addLen: number;\r\n isHole: boolean;\r\n count: string;\r\n}\r\n\r\nexport enum EMetalsType\r\n{\r\n Metals = \"五金\",\r\n Comp = \"组件\",\r\n}\r\n\r\nexport interface ICompHardwareOption extends IHardwareOption\r\n{\r\n type: EMetalsType;\r\n isSplite: boolean;\r\n isSplitePrice: boolean;\r\n color: string;\r\n [EBoardKeyList.Mat]: string;\r\n count: string;\r\n}\r\n\r\nexport interface IToplineOption extends IHardwareOption\r\n{\r\n addLen: string;\r\n}\r\n","import { LayerBoardOption, BrRelativePos, VerticalBoardOption, BehindBoardOption, BehindHeightPositon, TBBoardOption, LayerNailOption, SingleBoardOption, ClosingStripOption, StripType, LinesType, FaceDirection, ComposingType, IBoardBatchCurtailOption, CurtailType, BoardProcessOption, SideBoardOption, BoardType } from \"../UI/Store/BoardInterface\";\r\nimport { IWineRackOption, EWineRackType, EWRackArrayType, EFullType, EFullDir } from \"../UI/Store/WineRackInterface\";\r\nimport { IBoardFindOption, ECompareType } from \"../UI/Store/BoardFindInterface\";\r\nimport { ILatticeOption, ELatticeArrayType } from \"../UI/Store/LatticeInterface\";\r\nimport { HandleVePos, DoorPosType, HandleHorPos, IDrawerConfigOption, IDoorConfigOption } from \"../UI/Store/DoorInterface\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { ICylMetalsOption, IExtMetalsOption, ICompHardwareOption, EMetalsType, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { Curve2RecOption } from \"../Add-on/twoD2threeD/Modals/Curve2RecModal\";\r\nimport { IUpdateBoardInfosOption } from \"../UI/Components/Board/UpdateBoardInfointerface\";\r\nimport { IRec2BrOption, IRect2Br2Option } from \"../Add-on/twoD2threeD/R2bInterface\";\r\n\r\nexport const DefaultLayerBoardConfig: LayerBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"层板\",\r\n frontShrink: 0,\r\n leftShrink: 0,\r\n rightShrink: 0,\r\n calcHeight: \"W\",\r\n isTotalLength: true,\r\n boardRelative: BrRelativePos.Div,\r\n thickness: 18,\r\n count: 1,\r\n spaceSize: 300,\r\n isActive: false,\r\n calcSpaceSize: \"0\",\r\n calcFrontShrink: \"0\",\r\n calcLeftShrink: \"0\",\r\n calcRightShrink: \"0\",\r\n};\r\nObject.freeze(DefaultLayerBoardConfig);\r\n\r\nexport const DefaultVerticalBoardConfig: VerticalBoardOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"立板\",\r\n frontShrink: 0,\r\n bottomShrink: 0,\r\n calcWidth: \"W\",\r\n calcHeight: \"H\",\r\n isTotalLength: true,\r\n isTotalWidth: true,\r\n boardRelative: BrRelativePos.Div,\r\n thickness: 18,\r\n count: 1,\r\n spaceSize: 0,\r\n calcSpaceSize: \"0\",\r\n calcBottomShrink: \"0\",\r\n calcFrontShrink: \"0\",\r\n};\r\nObject.freeze(DefaultVerticalBoardConfig);\r\n\r\nexport const DefaultBehindBoardConfig: BehindBoardOption = {\r\n version: 2,\r\n type: BoardType.Behind,\r\n name: \"背板\",\r\n leftExt: 0,\r\n rightExt: 0,\r\n topExt: 0,\r\n bottomExt: 0,\r\n thickness: 18,\r\n boardPosition: BehindHeightPositon.AllHeight,\r\n calcHeight: \"H\",\r\n moveDist: 0,\r\n boardRelative: BrRelativePos.Back,\r\n spaceSize: 0,\r\n count: 1,\r\n calcSpaceSize: \"0\",\r\n calcMoveDist: \"0\",\r\n};\r\nObject.freeze(DefaultBehindBoardConfig);\r\n\r\nexport const DefaultWineRackConfig: IWineRackOption = {\r\n version: 1,\r\n type: EWineRackType.Oblique,\r\n arrayType: EWRackArrayType.ByWidth,\r\n fullType: EFullType.ByWidth,\r\n isFull: false,\r\n isLock: false,\r\n fullDir: EFullDir.Left,\r\n heightCount: 3.5,\r\n widthCount: 3.5,\r\n isTotalDepth: true,\r\n depth: 0,\r\n gripWidth: 100,\r\n calcDepth: \"W\",\r\n boardThick: 18,\r\n grooveWidthAdd: 0,\r\n leftEdge: 1,\r\n rightEdge: 1,\r\n topEdge: 1,\r\n bottomEdge: 1,\r\n frontCut: 0,\r\n leftCut: 0,\r\n rightCut: 0,\r\n topCut: 0,\r\n grooveLengthAdd: 3,\r\n isDrawLy: false,\r\n isDrawVer: false,\r\n brThick2: 18,\r\n};\r\nObject.freeze(DefaultWineRackConfig);\r\n\r\nexport const DefaultTopBoardOption: TBBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"顶板\",\r\n isDraw: true,\r\n thickness: 18,\r\n frontDist: 0,\r\n behindDistance: 0,\r\n isWrapSide: false,\r\n useLFData: true,\r\n leftExt: 0,\r\n rightExt: 0,\r\n offset: 0,\r\n};\r\nObject.freeze(DefaultTopBoardOption);\r\n\r\nexport const DefaultBottomBoardOption: TBBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"底板\",\r\n isDraw: true,\r\n thickness: 18,\r\n frontDist: 0,\r\n behindDistance: 0,\r\n isWrapSide: false,\r\n useLFData: true,\r\n leftExt: 0,\r\n rightExt: 0,\r\n offset: 80,\r\n footThickness: 18,\r\n isDrawFooter: true,\r\n footBehindShrink: 0,\r\n isDrawBackFooter: false,\r\n isDrawStrengthenStrip: false,\r\n footerOffset: 0,\r\n divCount: 1,\r\n};\r\nObject.freeze(DefaultBottomBoardOption);\r\n\r\nexport const DefaultSideBoardOption: SideBoardOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"\",\r\n height: 2000,\r\n width: 600,\r\n thickness: 18,\r\n spaceSize: 1200,\r\n leftShrink: 0,\r\n rightShrink: 0,\r\n};\r\nObject.freeze(DefaultSideBoardOption);\r\n\r\nexport const DefaultSingleBoardOption: SingleBoardOption = {\r\n version: 1,\r\n name: \"层板\",\r\n type: BoardType.Layer,\r\n height: 1200,\r\n width: 600,\r\n thickness: 18,\r\n rotateX: 0,\r\n rotateY: 0,\r\n rotateZ: 0\r\n};\r\nObject.freeze(DefaultSingleBoardOption);\r\n\r\nexport const DefaultClosingStripOption: ClosingStripOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"收口条\",\r\n striptype: StripType.H,\r\n boardRelative: BrRelativePos.Left,\r\n width: 54,\r\n thickness: 18,\r\n frontShrink: 0,\r\n isDrawFuZhu: true,\r\n fzWidth: 80,\r\n fzThickness: 18,\r\n};\r\nObject.freeze(DefaultClosingStripOption);\r\n\r\nexport const DefaultBoardFindOption: IBoardFindOption = {\r\n version: 5,\r\n condition: {\r\n layer: false,\r\n height: false,\r\n width: false,\r\n thickness: false,\r\n useWood: false,\r\n useDrill: false,\r\n useNail: false,\r\n useDoor: false,\r\n useDim: false,\r\n useSpecial: false,\r\n useModeling: false,\r\n roomName: false,\r\n cabinetName: false,\r\n brName: false,\r\n material: false,\r\n lines: false,\r\n bigHoleDir: false,\r\n drillType: false,\r\n useKeyWord: false,\r\n composingFace: false,\r\n sealedUp: false,\r\n sealedDown: false,\r\n sealedLeft: false,\r\n sealedRight: false,\r\n upDrill: false,\r\n downDrill: false,\r\n leftDrill: false,\r\n rightDrill: false,\r\n useZhengFanDrill: false,\r\n useChaidan: false,\r\n [EBoardKeyList.KnifeRad]: false,\r\n },\r\n compareType: {\r\n height: ECompareType.Equal,\r\n width: ECompareType.Equal,\r\n thickness: ECompareType.Equal,\r\n roomName: ECompareType.Equal,\r\n cabinetName: ECompareType.Equal,\r\n brName: ECompareType.Equal,\r\n [EBoardKeyList.Mat]: ECompareType.Equal,\r\n [EBoardKeyList.Color]: ECompareType.Equal,\r\n [EBoardKeyList.BrMat]: ECompareType.Equal,\r\n lines: ECompareType.Equal,\r\n bigHoleDir: ECompareType.Equal,\r\n drillType: ECompareType.Equal,\r\n composingFace: ECompareType.Equal,\r\n [EBoardKeyList.KnifeRad]: ECompareType.Equal,\r\n\r\n },\r\n tolerance: {\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n },\r\n layer: \"0\",\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n brName: \"\",\r\n [EBoardKeyList.BrMat]: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n drillType: \"\",\r\n composingFace: ComposingType.Positive,\r\n sealedUp: \"\",\r\n sealedDown: \"\",\r\n sealedLeft: \"\",\r\n sealedRight: \"\",\r\n highDrill: [],\r\n upDownDrill: [true, true],\r\n isClose: false,\r\n remarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n isChaidan: false,\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n};\r\nObject.freeze(DefaultBoardFindOption);\r\n\r\nexport const DefaultLatticOption: ILatticeOption = {\r\n version: 1,\r\n arrayType: ELatticeArrayType.ByWidth,\r\n gripWidth: 100,\r\n gripDepth: 100,\r\n widthCount: 3,\r\n depthCount: 4,\r\n knifeRad: 3,\r\n thickness: 18,\r\n arcLen: 50,\r\n downDist: 0,\r\n space: 0.2,\r\n grooveAddWidth: 0.2,\r\n upSealed: 1,\r\n downSealed: 1,\r\n leftSealed: 1,\r\n rightSealed: 1,\r\n isAuto: true,\r\n isChange: true,\r\n isOpenCut: false,\r\n upCut: 0,\r\n downCut: 4,\r\n};\r\nObject.freeze(DefaultLatticOption);\r\n\r\nexport const DefaultDoorOption: IDoorConfigOption = {\r\n version: 3,\r\n col: 2,\r\n row: 1,\r\n isAllSelect: true,\r\n topOffset: 0,\r\n bottomOffset: 0,\r\n doorPosType: DoorPosType.Out,\r\n offset: 0,\r\n topExt: 18,\r\n bottomExt: 18,\r\n leftExt: 18,\r\n rightExt: 18,\r\n topSpace: 2,\r\n bottomSpace: 2,\r\n leftSpace: 2,\r\n rightSpace: 2,\r\n midSpace: 2,\r\n thickness: 18,\r\n depth: 0,\r\n isAuto: true,\r\n boardName: \"\",\r\n doorThickness: 18,\r\n topBrSeal: 1,\r\n bottomBrSeal: 1,\r\n leftBrSeal: 1,\r\n rightBrSeal: 1,\r\n topDoorSeal: 1,\r\n bottomDoorSeal: 1,\r\n leftDoorSeal: 1,\r\n rightDoorSeal: 1,\r\n handleAngle: 0,\r\n handleHorPos: HandleHorPos.Right,\r\n horSpacing: 50,\r\n handleVePos: HandleVePos.Mid,\r\n veSpacing: 10,\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n downOffsetExpr: \"0\",\r\n upOffsetExpr: \"0\",\r\n};\r\nObject.freeze(DefaultDoorOption);\r\n\r\nexport const DefaultDrawerOption: IDrawerConfigOption = {\r\n version: 4,\r\n col: 1,\r\n row: 1,\r\n isAllSelect: true,\r\n topOffset: 0,\r\n bottomOffset: 0,\r\n doorPosType: DoorPosType.Out,\r\n offset: 0,\r\n topExt: 18,\r\n bottomExt: 18,\r\n leftExt: 18,\r\n rightExt: 18,\r\n topSpace: 2,\r\n bottomSpace: 2,\r\n leftSpace: 2,\r\n rightSpace: 2,\r\n midSpace: 2,\r\n thickness: 18,\r\n depth: 0,\r\n isAuto: true,\r\n boardName: \"\",\r\n handleAngle: 90,\r\n handleHorPos: HandleHorPos.Mid,\r\n horSpacing: 10,\r\n handleVePos: HandleVePos.Mid,\r\n veSpacing: 10,\r\n drawerTotalDepth: 0,\r\n trackDepth: 0,\r\n isAutoSelectTrack: true,\r\n isLockTopOffset: false,\r\n isLockBottomOffset: false,\r\n downOffsetExpr: \"0\",\r\n upOffsetExpr: \"0\",\r\n};\r\nObject.freeze(DefaultDrawerOption);\r\n\r\nexport const DefaultBoardBatchCurtailOption: IBoardBatchCurtailOption = {\r\n version: 1,\r\n type: CurtailType.Total,\r\n front: 0,\r\n back: 0,\r\n left: 0,\r\n right: 0,\r\n moveBrs: false,\r\n};\r\nObject.freeze(DefaultBoardBatchCurtailOption);\r\n\r\nexport const DefaultLatticeConfig: ILatticeOption = {\r\n arrayType: ELatticeArrayType.ByWidth,\r\n gripWidth: 100,\r\n gripDepth: 100,\r\n widthCount: 3,\r\n depthCount: 4,\r\n knifeRad: 3,\r\n thickness: 18,\r\n arcLen: 50,\r\n downDist: 0,\r\n space: 0.5,\r\n grooveAddWidth: 0,\r\n upSealed: 1,\r\n downSealed: 0,\r\n leftSealed: 0,\r\n rightSealed: 0,\r\n isAuto: true,\r\n isChange: true,\r\n isOpenCut: false,\r\n upCut: 0,\r\n downCut: 4,\r\n};\r\nObject.freeze(DefaultLatticeConfig);\r\n\r\nexport const DefaultNailOption: LayerNailOption = {\r\n version: 1,\r\n isDraw: true,\r\n addCount: 0,\r\n dist: 50,\r\n isGroup: false,\r\n isInBack: false,\r\n front: 50,\r\n behind: 50,\r\n count: 2,\r\n rad: 2.5,\r\n length: 34,\r\n depth: 11\r\n};\r\nObject.freeze(DefaultNailOption);\r\n\r\nexport const DefaultCylinederMetalsOption: ICylMetalsOption = {\r\n version: 2,\r\n rad: 50,\r\n height: 200,\r\n name: \"圆柱体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*R*R*3.14\",\r\n actualExpr: \"L*R*R*3.14*3\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n comments: \"\",\r\n isHole: true,\r\n};\r\nObject.freeze(DefaultCylinederMetalsOption);\r\nexport const DefaultExtruderMetalsOption: IExtMetalsOption = {\r\n version: 1,\r\n thickness: 100,\r\n knifeRad: 0,\r\n isHole: true,\r\n addLen: 0,\r\n name: \"拉伸实体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*W*H*100\",\r\n actualExpr: \"L*W*H*200\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n comments: \"\",\r\n};\r\nObject.freeze(DefaultExtruderMetalsOption);\r\nexport const DefaultCompositeMetalsOption: ICompHardwareOption = {\r\n version: 2,\r\n type: EMetalsType.Metals,\r\n isSplite: false,\r\n isSplitePrice: false,\r\n name: \"复合实体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*W*H*100\",\r\n actualExpr: \"L*W*H*300\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n color: \"\",\r\n material: \"\",\r\n comments: \"\",\r\n isHole: true,\r\n};\r\nObject.freeze(DefaultCompositeMetalsOption);\r\nexport const DefaultToplineMetalsOption: IToplineOption = {\r\n version: 3,\r\n name: \"顶线\",\r\n unit: \"毫米\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"\",\r\n actualExpr: \"\",\r\n model: \"\",\r\n factory: \"\",\r\n brand: \"\",\r\n spec: \"\",\r\n comments: \"\",\r\n addLen: \"0\",\r\n isHole: false,\r\n};\r\nObject.freeze(DefaultToplineMetalsOption);\r\n\r\nexport const DefaultBoardProcessOption: BoardProcessOption = {\r\n version: 3,\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n boardName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n drillType: \"\",\r\n composingFace: ComposingType.Arbitrary,\r\n highSealed: [],\r\n sealedUp: \"1\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n spliteHeight: \"\",\r\n spliteWidth: \"\",\r\n spliteThickness: \"\",\r\n highDrill: [],\r\n frontDrill: true,\r\n backDrill: true,\r\n remarks: [],\r\n useBoardProcessOption: true,\r\n};\r\nObject.freeze(DefaultBoardProcessOption);\r\n\r\nexport const DefaultCurve2RecOption: Curve2RecOption = {\r\n version: 1,\r\n isSaveMax: false,\r\n isSaveSmall: true,\r\n width: 90,\r\n isAnaly: true,\r\n gap: 3\r\n};\r\nObject.freeze(DefaultCurve2RecOption);\r\n\r\nexport const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {\r\n [EBoardKeyList.RoomName]: \"\",\r\n [EBoardKeyList.CabinetName]: \"\",\r\n [EBoardKeyList.Lines]: LinesType.Positive,\r\n [EBoardKeyList.BigHole]: FaceDirection.Front,\r\n [EBoardKeyList.DrillType]: \"\",\r\n [EBoardKeyList.ComposingFace]: ComposingType.Arbitrary,\r\n upDownDrill: [true, true],\r\n [EBoardKeyList.UpSealed]: \"1\",//封边上下左右\r\n [EBoardKeyList.DownSealed]: \"1\",\r\n [EBoardKeyList.LeftSealed]: \"1\",\r\n [EBoardKeyList.RightSealed]: \"1\",\r\n [EBoardKeyList.KnifeRad]: \"3\",\r\n remarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n [EBoardKeyList.BrMat]: \"\",\r\n [EBoardKeyList.Mat]: \"\",\r\n [EBoardKeyList.Color]: \"\",\r\n grooveAddDepth: \"0\",\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n highDrill: [],\r\n condition: {\r\n [EBoardKeyList.RoomName]: false,\r\n [EBoardKeyList.CabinetName]: false,\r\n [EBoardKeyList.Lines]: true,\r\n [EBoardKeyList.BigHole]: true,\r\n [EBoardKeyList.DrillType]: true,\r\n [EBoardKeyList.ComposingFace]: true,\r\n [EBoardKeyList.UpSealed]: true,\r\n [EBoardKeyList.DownSealed]: true,\r\n [EBoardKeyList.LeftSealed]: true,\r\n [EBoardKeyList.RightSealed]: true,\r\n useZhengFanDrill: true,\r\n remarks: true,\r\n [EBoardKeyList.KnifeRad]: true,\r\n [EBoardKeyList.Mat]: true,\r\n grooveAddDepth: true,\r\n grooveAddLength: true,\r\n grooveAddWidth: true,\r\n upDrill: true,\r\n downDrill: true,\r\n leftDrill: true,\r\n rightDrill: true,\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption = {\r\n count: 1,\r\n isHor: false,\r\n depth: 0,\r\n isDefault: true,\r\n leftDist: 0,\r\n rightDist: 0,\r\n};\r\nObject.freeze(DefaultKuGanOption);\r\n\r\nexport const DefaultR2bOption: IRec2BrOption = {\r\n version: 2,\r\n cabinetDeep: 400,\r\n cabinetBrThick: 18,\r\n cabinetCurtail: 0,\r\n backBrThick: 18,\r\n backBrBiggerThanHeight: 200,\r\n backBrBiggerThanWidth: 200,\r\n backBrFrontMove: 0,\r\n backBrLeftExtend: 0,\r\n backBrRightExtend: 0,\r\n backBrUpExtend: 0,\r\n backBrDownExtend: 0,\r\n verticalBrShrink: 0,\r\n layerBrShrink: 0,\r\n topBrShrink: 0,\r\n bottomBrShrink: 0,\r\n groundLineBrShrink: 0,\r\n farLeftVerticalBrName: \"左侧板\",\r\n farRightVerticalBrName: \"右侧板\",\r\n topMostLayerBrName: \"顶板\",\r\n bottomMostLayerBrName: \"底板\",\r\n bottomMostBackBrName: \"地脚线\",\r\n stripeBrName: \"收口条\",\r\n cabinetName: \"\",\r\n isfarLeftVerticalBrName: true,//最左侧立板名称\r\n isfarRightVerticalBrName: true,\r\n istopMostLayerBrName: true,\r\n isbottomMostLayerBrName: true,\r\n isbottomMostBackBrName: true,\r\n isstripeBrName: true,\r\n iscabinetName: false,//修改柜名\r\n isMultiBackBr: false,\r\n grooveOption: {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n },\r\n roomName: \"\",\r\n boardMatName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n drillType: \"\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n sealedUp: \"1\",\r\n backBrUseTemplate: false,\r\n backBrTemplate: null,\r\n remarks: Array.from({ length: 12 }, () => [\"\", \"\"]),\r\n maxThickness: 20,\r\n useBrName: true,\r\n configName: \"\",\r\n backBrName: \"背板\",\r\n behindIsRelative: false,\r\n footerThickness: 18,\r\n};\r\nObject.freeze(DefaultR2bOption);\r\nexport const DefaultR2b2Option: IRect2Br2Option = {\r\n version: 1,\r\n depthExpr: \"W\",\r\n drillType: \"\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n sealedUp: \"1\",\r\n remarks: Array.from({ length: 12 }, () => [\"\", \"\"]),\r\n maxThickness: 20,\r\n layerShrink: 0,\r\n vertialShrink: 0,\r\n};\r\nObject.freeze(DefaultR2b2Option);\r\n","export function equaln(v1: number, v2: number, fuzz = 1e-5)\r\n{\r\n return Math.abs(v1 - v2) <= fuzz;\r\n}\r\n\r\nexport function FixIndex(index: number, arr: Array | number)\r\n{\r\n let count = (arr instanceof Array) ? arr.length : arr;\r\n if (index < 0)\r\n return count + index;\r\n else if (index >= count)\r\n return index - count;\r\n else\r\n return index;\r\n}\r\n\r\n/**\r\n * @param compart 如果t2大于t1那么返回t2\r\n * @returns 索引\r\n */\r\nexport function Max(arr: T[], compart: (t1: T, t2: T) => boolean): number\r\n{\r\n let best: T = arr[0];\r\n let bestIndex = 0;\r\n for (let i = 1; i < arr.length; i++)\r\n {\r\n let t1 = arr[i];\r\n if (compart(best, t1))\r\n {\r\n best = t1;\r\n bestIndex = i;\r\n }\r\n }\r\n return bestIndex;\r\n}\r\n","import { Face3, Geometry, Line3, Matrix4, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector3, equalv3 } from \"./GeUtils\";\r\nimport { PlaneExt } from \"./Plane\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\n\r\n/**\r\n * 使用轮廓和扫描路径构建扫描几何体,实现衣柜中的顶线或者地脚线之类的实体.\r\n * 该几何体需要轮廓和路径的起始截面垂直,否则构造的实体将会错误.\r\n */\r\nexport class SweepGeometry extends Geometry\r\n{\r\n edgePts: number[] = [];\r\n constructor(contour: Polyline, path: Curve)\r\n {\r\n super();\r\n\r\n this.AddShape(contour, path);\r\n this.computeVertexNormals();\r\n this.computeFaceNormals();\r\n }\r\n\r\n AddShape(contour: Polyline, path: Curve)\r\n {\r\n //路径点表\r\n let pathPts2d = path.Shape.getPoints(8);\r\n let pathPts = pathPts2d.map(AsVector3);\r\n arrayRemoveDuplicateBySort(pathPts, equalv3);\r\n for (let p of pathPts)\r\n p.applyMatrix4(path.OCS);\r\n\r\n let shapePts2d = contour.Shape.getPoints(3);\r\n if (!ShapeUtils.isClockWise(shapePts2d)) shapePts2d.reverse();\r\n\r\n //轮廓点表\r\n let shapePts3d = shapePts2d.map(AsVector3);\r\n\r\n for (let p of shapePts3d)\r\n p.applyMatrix4(contour.OCS);\r\n\r\n let isClosePath = path.IsClose;\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[0], pathPts[pathPts.length - 2], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[0], undefined, pathPts[1]));\r\n //遍历所有的路径节点进行顶点投射\r\n for (let i = 1; i < pathPts.length; i++)\r\n {\r\n if (i === pathPts.length - 1)\r\n {\r\n if (isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n private BuildSideFaces(shapePts2d: Vector2[], pathPts2d: Vector2[], pathPts: Vector3[], verts: Vector3[][])\r\n {\r\n let addCount = 0; //补充个数\r\n shapePts2d[0][\"_mask_\"] = true;\r\n for (let p of shapePts2d) if (p[\"_mask_\"]) addCount++;\r\n let sumCount = addCount + shapePts2d.length; //实际个数\r\n const f4 = (a: number, b: number, c: number, d: number, uvs: Vector2[]) =>\r\n {\r\n let f1 = new Face3(a, b, c);\r\n let f2 = new Face3(b, d, c);\r\n this.faces.push(f1, f2);\r\n this.faceVertexUvs[0].push([uvs[0].clone(), uvs[1].clone(), uvs[2].clone()], [uvs[1].clone(), uvs[3].clone(), uvs[2].clone()]);\r\n };\r\n let vs: number[] = [0]; //vs 对应 y轴\r\n for (let i = 1; i < shapePts2d.length; i++)\r\n vs.push((vs[i - 1] + shapePts2d[i].distanceTo(shapePts2d[i - 1]) * 1e-3));\r\n\r\n let lastStartX = 0;\r\n for (let pathIndex = 0; pathIndex < verts.length; pathIndex++)\r\n {\r\n let pts = verts[pathIndex];\r\n let pts2 = verts[FixIndex(pathIndex + 1, verts)];\r\n\r\n let startIndex = this.vertices.length;\r\n let pBase = pts[0];\r\n let p1 = pathPts[pathIndex];\r\n let p2 = pathPts[FixIndex(pathIndex + 1, pathPts.length)];\r\n let p1Dir = p2.clone().sub(p1).normalize();\r\n\r\n let tempStartX = 0;\r\n\r\n for (let contourIndex = 0; contourIndex < shapePts2d.length; contourIndex++)\r\n {\r\n let p1 = pts[contourIndex];\r\n let p2 = pts2[contourIndex];\r\n let p2d = shapePts2d[contourIndex];\r\n\r\n if (pathIndex !== verts.length - 1)\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.edgePts.push(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z);\r\n\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.vertices.push(p1); //补点\r\n\r\n if (pathIndex !== verts.length - 1)\r\n {\r\n let curIndex = this.vertices.length;\r\n let nextIndex = startIndex + FixIndex(curIndex - startIndex + 1, sumCount);\r\n let curIndex2 = curIndex + sumCount;\r\n let nextIndex2 = nextIndex + sumCount;\r\n\r\n let x1 = lastStartX + p1.clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n let x2 = lastStartX + pts[FixIndex(contourIndex + 1, shapePts2d)].clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n\r\n let x3 = lastStartX + p2.clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n let x4 = lastStartX + pts2[FixIndex(contourIndex + 1, shapePts2d)].clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n\r\n if (contourIndex === 0)\r\n tempStartX = x3;\r\n\r\n let v1 = vs[contourIndex];\r\n let v2 = vs[FixIndex(contourIndex + 1, vs)];\r\n let uvs = [\r\n new Vector2(v1, x1),\r\n new Vector2(v2, x2),\r\n new Vector2(v1, x3),\r\n new Vector2(v2, x4),\r\n ];\r\n f4(curIndex, nextIndex, curIndex2, nextIndex2, uvs);\r\n }\r\n this.vertices.push(p1);\r\n }\r\n lastStartX = tempStartX;\r\n\r\n if (pathPts2d[FixIndex(pathIndex + 1, verts)][\"_mask_\"])\r\n {\r\n for (let contourIndex = 0; contourIndex < shapePts2d.length; contourIndex++)\r\n {\r\n let p1 = pts2[contourIndex];\r\n let p2d = shapePts2d[contourIndex];\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.vertices.push(p1); //补点\r\n this.vertices.push(p1);\r\n\r\n let p2 = pts2[FixIndex(contourIndex + 1, pts2)];\r\n this.edgePts.push(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private BuildLid(shapePts2d: Vector2[], verts: Vector3[][])\r\n {\r\n //轮廓三角网格索引\r\n let faces = ShapeUtils.triangulateShape(shapePts2d, []);\r\n for (let v of shapePts2d) v.multiplyScalar(1e-3);//作为uvs\r\n let lastIndex = this.vertices.length;\r\n this.vertices.push(...verts[0].map(p => p.clone()));\r\n this.vertices.push(...verts[verts.length - 1].map(p => p.clone()));\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n this.faces.push(new Face3(lastIndex + a, lastIndex + b, lastIndex + c));\r\n let uvs = faces[i].map(index => shapePts2d[index].clone());\r\n this.faceVertexUvs[0].push(uvs);\r\n this.faces.push(new Face3(lastIndex + verts[0].length + c, lastIndex + verts[0].length + b, lastIndex + verts[0].length + a));\r\n this.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n\r\n //构建线框\r\n for (let i = 0; i < shapePts2d.length; i++)\r\n {\r\n let nextIndex = FixIndex(i + 1, shapePts2d);\r\n\r\n let pts1 = verts[0];\r\n let p0 = pts1[i];\r\n let p1 = pts1[nextIndex];\r\n this.edgePts.push(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z);\r\n\r\n let pts2 = verts[verts.length - 1];\r\n p0 = pts2[i];\r\n p1 = pts2[nextIndex];\r\n this.edgePts.push(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 将轮廓变换到`路径上某个点`.\r\n *\r\n * @param {Vector3[]} contourPts 原始的轮廓点(在世界坐标系)\r\n * @param {Vector3} normal 路径法向量\r\n * @param {Vector3} curP 路径上当前点\r\n * @param {Vector3} [preP] 路径的前一个点\r\n * @param {Vector3} [nextP] 路径下一个点\r\n * @returns 变换后的轮廓点表\r\n */\r\nfunction ProjectionToPlane(contourPts: Vector3[], normal: Vector3, curP: Vector3, preP?: Vector3, nextP?: Vector3): Vector3[]\r\n{\r\n let pts: Vector3[];\r\n if (!preP && nextP)\r\n {\r\n let mat = ContourTransfromToPath(curP, normal, nextP.clone().sub(curP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n }\r\n else if (!nextP && preP)\r\n {\r\n let mat = ContourTransfromToPath(curP, normal, curP.clone().sub(preP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n }\r\n else if (nextP && preP)\r\n {\r\n let dir = curP.clone().sub(preP).normalize();\r\n let v2 = nextP.clone().sub(curP).normalize();\r\n //角平分线向量\r\n let v = dir.clone().sub(v2);\r\n //v1v2pm向量\r\n let nv1v2 = dir.clone().cross(v2);\r\n let norm = nv1v2.cross(v);\r\n\r\n //角平分线的平面\r\n let plane = new PlaneExt(norm, curP);\r\n\r\n let mat = ContourTransfromToPath(preP, normal, dir);\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n pts = pts.map(p => plane.intersectLine(new Line3(p, p.clone().add(dir)), new Vector3(), true));\r\n }\r\n return pts;\r\n}\r\n\r\n/**\r\n * 计算轮廓变换到`路径上某个点`的矩阵\r\n *\r\n * @param {Vector3} pt 路径上的点\r\n * @param {Vector3} norm 曲线法向量\r\n * @param {Vector3} dir 点前进的方向.\r\n * @returns {Matrix4}\r\n */\r\nfunction ContourTransfromToPath(pt: Vector3, norm: Vector3, dir: Vector3): Matrix4\r\n{\r\n let vy = norm;\r\n let vz = dir.normalize();\r\n let vx = vz.clone().cross(vy);\r\n\r\n let mat = new Matrix4();\r\n mat.makeBasis(vx, vy, vz);\r\n mat.setPosition(pt);\r\n return mat;\r\n}\r\n","import { BufferGeometry, CatmullRomCurve3, Line, MathUtils, Matrix3, Object3D, Shape, Vector3 } from 'three';\r\nimport { arrayLast } from '../Common/ArrayExt';\r\nimport { ColorMaterial } from '../Common/ColorPalette';\r\nimport { Pts2Polyline } from '../Common/CurveUtils';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../Geometry/BufferGeometryUtils';\r\nimport { equalv3 } from '../Geometry/GeUtils';\r\nimport { RenderType } from '../GraphicsSystem/RenderType';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Curve } from './Entity/Curve';\r\n\r\n@Factory\r\nexport class Spline extends Curve\r\n{\r\n private _PointList: Vector3[];\r\n private _ClosedMark: boolean = false;\r\n constructor(points?: Vector3[])\r\n {\r\n super();\r\n this._PointList = points || [];\r\n }\r\n\r\n get Shape()\r\n {\r\n return new Shape();\r\n }\r\n get Curve3()\r\n {\r\n return new CatmullRomCurve3(this.Points);\r\n }\r\n\r\n get Length()\r\n {\r\n return this.Curve3.getLength();\r\n }\r\n\r\n get Points()\r\n {\r\n return this._PointList;\r\n }\r\n set Points(v: Vector3[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._PointList = v.map(p => p.clone().applyMatrix4(this.OCSInv));\r\n this.Update();\r\n }\r\n //闭合标志\r\n get CloseMark(): boolean\r\n {\r\n return this._ClosedMark;\r\n }\r\n //曲线是否闭合\r\n get IsClose(): boolean\r\n {\r\n return this.CloseMark || (equalv3(this.StartPoint, this.EndPoint, 1e-4)) && this.EndParam > 1;\r\n }\r\n set CloseMark(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = v;\r\n this.Update();\r\n }\r\n get StartPoint()\r\n {\r\n return this._PointList[0];\r\n }\r\n get EndPoint()\r\n {\r\n return arrayLast(this._PointList);\r\n }\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return this._PointList.length - 1;\r\n }\r\n GetGripPoints()\r\n {\r\n return this._PointList.map(p => p.clone().applyMatrix4(this.OCS));\r\n }\r\n GetStretchPoints()\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n this._PointList[index].add(vec);\r\n }\r\n this.Update();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n this._PointList[index].add(vec);\r\n }\r\n this.Update();\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let geometry = new BufferGeometry().setFromPoints(this.Curve3.getPoints(60));\r\n return new Line(geometry, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let spl = en as Line;\r\n if (this.CloseMark && !equalv3(this._PointList[0], arrayLast(this._PointList)))\r\n this._PointList.push(this._PointList[0].clone());\r\n let curve = this.Curve3;\r\n\r\n let pts = curve.getPoints(this.Points.length * 10);\r\n if (!BufferGeometryUtils.UpdatePts(spl.geometry as BufferGeometry, pts))\r\n {\r\n spl.geometry.dispose();\r\n spl.geometry = BufferGeometryUtils.CreateFromPts(pts);\r\n }\r\n }\r\n Convert2Polyline(count = 0)\r\n {\r\n let curve3 = this.Curve3;\r\n\r\n //修正个数\r\n if (!count) count = Math.floor(curve3.getLength() / 30);\r\n count = MathUtils.clamp(count, this._PointList.length * 5, this._PointList.length * 20);\r\n\r\n if ((count & 1) === 1)\r\n count++;\r\n\r\n let pts = curve3.getPoints(count);\r\n\r\n let isClose = this.IsClose;\r\n if (isClose) pts.pop();\r\n\r\n let pl = Pts2Polyline(pts, isClose);\r\n pl.CloseMark = isClose;\r\n pl.ApplyMatrix(this.OCS);\r\n return pl;\r\n\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n let count = file.Read();\r\n this._PointList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this._PointList.push(new Vector3().fromArray(file.Read()));\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.Write(this._PointList.length);\r\n this._PointList.forEach(p => file.Write(p.toArray()));\r\n }\r\n}\r\n","import { Vector3, Matrix4 } from 'three';\r\n\r\n// Quote from:\r\n// https://github.com/Mugen87/yume/blob/master/src/javascript/engine/etc/OBB.js\r\n// 即obb.js(本项目中已存在)\r\n\r\n// Reference material:\r\n//https://stackoverflow.com/questions/28499800/oriented-box-intersection-in-threejs\r\n//http://www.cnblogs.com/iamzhanglei/archive/2012/06/07/2539751.html\r\n//https://github.com/Mugen87/yume/blob/master/src/javascript/engine/etc/OBB.js\r\n\r\nexport class OBB\r\n{\r\n _EPSILON = 1e-3;\r\n\r\n public center: Vector3;\r\n\r\n constructor(public ocs: Matrix4, public halfSizes: Vector3)\r\n {\r\n this.center = halfSizes.clone().applyMatrix4(ocs);\r\n }\r\n\r\n intersectsOBB(obb: OBB, is2D?: boolean, ucsInv?: Matrix4): boolean\r\n {\r\n let newCenter: Vector3;\r\n let newObbCenter: Vector3;\r\n let cs: Matrix4;\r\n let obbcs: Matrix4;\r\n if (is2D)\r\n {\r\n let mtx1 = new Matrix4().multiplyMatrices(ucsInv, this.ocs);\r\n let mtx2 = new Matrix4().multiplyMatrices(ucsInv, obb.ocs);\r\n cs = mtx1;\r\n obbcs = mtx2;\r\n cs.elements[14] = 0;\r\n obbcs.elements[14] = 0;\r\n newCenter = this.halfSizes.clone().applyMatrix4(cs);\r\n newObbCenter = obb.halfSizes.clone().applyMatrix4(obbcs);\r\n }\r\n let xAxisA = new Vector3();\r\n let yAxisA = new Vector3();\r\n let zAxisA = new Vector3();\r\n\r\n let xAxisB = new Vector3();\r\n let yAxisB = new Vector3();\r\n let zAxisB = new Vector3();\r\n\r\n let translation = new Vector3();\r\n\r\n let vector = new Vector3();\r\n\r\n let axisA: Vector3[] = [];\r\n let axisB: Vector3[] = [];\r\n let rotationMatrix = [[], [], []];\r\n let rotationMatrixAbs = [[], [], []];\r\n\r\n let halfSizeA: number, halfSizeB: number;\r\n let t: number, i: number;\r\n\r\n // extract each axis\r\n (cs ?? this.ocs).extractBasis(xAxisA, yAxisA, zAxisA);\r\n (obbcs ?? obb.ocs).extractBasis(xAxisB, yAxisB, zAxisB);\r\n\r\n // push basis vectors into arrays, so you can access them via indices\r\n axisA.push(xAxisA, yAxisA, zAxisA);\r\n axisB.push(xAxisB, yAxisB, zAxisB);\r\n\r\n // get displacement vector\r\n vector.subVectors(newObbCenter ?? obb.center, newCenter ?? this.center);\r\n\r\n // express the translation vector in the coordinate frame of the current\r\n // OBB (this)\r\n for (i = 0; i < 3; i++)\r\n {\r\n translation.setComponent(i, vector.dot(axisA[i]));\r\n }\r\n\r\n // generate a rotation matrix that transforms from world space to the\r\n // OBB's coordinate space\r\n for (i = 0; i < 3; i++)\r\n {\r\n for (let j = 0; j < 3; j++)\r\n {\r\n rotationMatrix[i][j] = axisA[i].dot(axisB[j]);\r\n rotationMatrixAbs[i][j] = Math.abs(rotationMatrix[i][j]) + this._EPSILON;\r\n }\r\n }\r\n\r\n // test the three major axes of this OBB\r\n for (i = 0; i < 3; i++)\r\n {\r\n vector.set(rotationMatrixAbs[i][0], rotationMatrixAbs[i][1], rotationMatrixAbs[i][2]);\r\n\r\n halfSizeA = this.halfSizes.getComponent(i);\r\n halfSizeB = obb.halfSizes.dot(vector);\r\n\r\n if (Math.abs(translation.getComponent(i)) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n // test the three major axes of other OBB\r\n for (i = 0; i < 3; i++)\r\n {\r\n vector.set(rotationMatrixAbs[0][i], rotationMatrixAbs[1][i], rotationMatrixAbs[2][i]);\r\n\r\n halfSizeA = this.halfSizes.dot(vector);\r\n halfSizeB = obb.halfSizes.getComponent(i);\r\n\r\n vector.set(rotationMatrix[0][i], rotationMatrix[1][i], rotationMatrix[2][i]);\r\n t = translation.dot(vector);\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n // test the 9 different cross-axes\r\n\r\n // A.x B.x\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][0] + this.halfSizes.z * rotationMatrixAbs[1][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[0][2] + obb.halfSizes.z * rotationMatrixAbs[0][1];\r\n\r\n t = translation.z * rotationMatrix[1][0] - translation.y * rotationMatrix[2][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.x < cross> B.y\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][1] + this.halfSizes.z * rotationMatrixAbs[1][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[0][2] + obb.halfSizes.z * rotationMatrixAbs[0][0];\r\n\r\n t = translation.z * rotationMatrix[1][1] - translation.y * rotationMatrix[2][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.x B.z\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][2] + this.halfSizes.z * rotationMatrixAbs[1][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[0][1] + obb.halfSizes.y * rotationMatrixAbs[0][0];\r\n\r\n t = translation.z * rotationMatrix[1][2] - translation.y * rotationMatrix[2][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.x\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][0] + this.halfSizes.z * rotationMatrixAbs[0][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[1][2] + obb.halfSizes.z * rotationMatrixAbs[1][1];\r\n\r\n t = translation.x * rotationMatrix[2][0] - translation.z * rotationMatrix[0][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.y\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][1] + this.halfSizes.z * rotationMatrixAbs[0][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[1][2] + obb.halfSizes.z * rotationMatrixAbs[1][0];\r\n\r\n t = translation.x * rotationMatrix[2][1] - translation.z * rotationMatrix[0][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.z\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][2] + this.halfSizes.z * rotationMatrixAbs[0][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[1][1] + obb.halfSizes.y * rotationMatrixAbs[1][0];\r\n\r\n t = translation.x * rotationMatrix[2][2] - translation.z * rotationMatrix[0][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.x\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][0] + this.halfSizes.y * rotationMatrixAbs[0][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[2][2] + obb.halfSizes.z * rotationMatrixAbs[2][1];\r\n\r\n t = translation.y * rotationMatrix[0][0] - translation.x * rotationMatrix[1][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.y\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][1] + this.halfSizes.y * rotationMatrixAbs[0][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[2][2] + obb.halfSizes.z * rotationMatrixAbs[2][0];\r\n\r\n t = translation.y * rotationMatrix[0][1] - translation.x * rotationMatrix[1][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.z\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][2] + this.halfSizes.y * rotationMatrixAbs[0][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[2][1] + obb.halfSizes.y * rotationMatrixAbs[2][0];\r\n\r\n t = translation.y * rotationMatrix[0][2] - translation.x * rotationMatrix[1][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // no separating axis exists, so the two OBB don't intersect\r\n return true;\r\n }\r\n\r\n // setFromObject(obj: THREE.Mesh): OBB;\r\n // setFromAABB(aabb: THREE.Box3): OBB;\r\n\r\n // setFromSphere(sphere: THREE.Shape): OBB;\r\n\r\n // closestPoint(point: THREE.Vector3): THREE.Vector3\r\n // isPointContained(point: THREE.Vector3): boolean\r\n // isAABBContained(aabb: THREE.Box3): boolean\r\n // isLineContained(line: THREE.Line3): boolean\r\n // isTriangleContained(tarianlg: THREE.Triangle): boolean\r\n // intersectsAABB(box: THREE.Box3): boolean\r\n // intersectsSphere(sphere: THREE.Sphere): boolean\r\n // intersectsOBB(box: OBB): boolean;\r\n // intersectsPlane(plane: Plane): boolean\r\n // intersectsRay(ray: Ray): boolean\r\n // intersectRay(ray: Ray): Vector3\r\n // intersectSphere(sphere: Sphere): Vector3\r\n // size(optionalTarget: Vector3): Vector3\r\n\r\n // translate(offset: Vector3): OBB\r\n\r\n // copy(obb: OBB): OBB\r\n // clone(obb: OBB): OBB\r\n\r\n}\r\n","import { BoxBufferGeometry, BufferGeometry, Float32BufferAttribute, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, Line3, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { Log } from \"../../Common/Log\";\r\nimport { tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equalv3, isParallelTo, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { SweepGeometry } from '../../Geometry/SweepGeometry';\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from '../Entity/Polyline';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Spline } from \"../Spline\";\r\nimport { FixIndex } from './../../Common/Utils';\r\nimport { OBB } from './../../Geometry/OBB/obb';\r\nimport { PlaneExt } from './../../Geometry/Plane';\r\n\r\n@Factory\r\nexport class SweepSolid extends Entity\r\n{\r\n static UseRectFakerContour = false;\r\n\r\n private _Contour: Polyline;\r\n private _PathCurve: Curve;\r\n constructor(contour?: Polyline, pathCurve?: Curve)\r\n {\r\n super();\r\n this._Contour = contour;\r\n this._PathCurve = pathCurve;\r\n\r\n if (this._Contour && this._Contour.Id)\r\n this._Contour = this._Contour.Clone();\r\n\r\n if (this._Contour && this._PathCurve)\r\n {\r\n this.TransfromPathToWCS();\r\n this.OCS = this._PathCurve.OCS;\r\n this._SpaceOCS.copy(this._PathCurve.OCS);\r\n this._PathCurve.ApplyMatrix(this._PathCurve.OCSInv);\r\n }\r\n }\r\n\r\n Explode()\r\n {\r\n return [this._Contour.Clone(), this._PathCurve.Clone()];\r\n }\r\n\r\n get Contour()\r\n {\r\n return this._Contour;\r\n }\r\n get Path()\r\n {\r\n return this._PathCurve;\r\n }\r\n Reverse()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._PathCurve.Reverse();\r\n this.Update();\r\n }\r\n /**保持路径左下角在0点 */\r\n private PathTo0()\r\n {\r\n let min = this._PathCurve.BoundingBox.min;\r\n this._PathCurve.Position = this._PathCurve.Position.sub(min);\r\n this.OCS = this.OCS.multiply(MoveMatrix(min));\r\n }\r\n /**\r\n * 将轮廓变换到wcs空间,当用户选定某个与扫描线起点相切的轮廓时.\r\n */\r\n private TransfromPathToWCS()\r\n {\r\n if (equalv3(this._Contour.Normal, new Vector3(0, 0, 1)))\r\n return;\r\n\r\n let fDir = this._PathCurve.GetFistDeriv(0);\r\n if (isParallelTo(fDir, this._Contour.Normal))\r\n {\r\n //构建回家的矩阵\r\n let toWcsMat4Inv = new Matrix4();\r\n let zv = fDir.normalize();\r\n let yv = this._PathCurve.Normal;\r\n let xv = zv.clone().cross(yv);\r\n\r\n toWcsMat4Inv.makeBasis(xv, yv, zv);\r\n toWcsMat4Inv.setPosition(this._PathCurve.StartPoint);\r\n\r\n let toWcsMat4 = new Matrix4().getInverse(toWcsMat4Inv);\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n\r\n let z = this._Contour.StartPoint.z;\r\n if (IsPointInPolyLine(this._Contour, new Vector3(0, 0, z)))\r\n {\r\n let z = this._Contour.StartPoint.z;\r\n this._Contour.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -z)));\r\n return;\r\n }\r\n else\r\n this._Contour.ApplyMatrix(toWcsMat4Inv);\r\n }\r\n\r\n let lDir = this._PathCurve.GetFistDeriv(this._PathCurve.EndParam);\r\n if (isParallelTo(lDir, this._Contour.Normal))\r\n {\r\n //再次构建回家的矩阵\r\n let toWcsMat4Inv = new Matrix4();\r\n let zv = lDir.negate().normalize();\r\n let yv = this._PathCurve.Normal;\r\n let xv = zv.clone().cross(yv);\r\n\r\n toWcsMat4Inv.makeBasis(xv, yv, zv);\r\n toWcsMat4Inv.setPosition(this._PathCurve.EndPoint);\r\n\r\n let toWcsMat4 = new Matrix4().getInverse(toWcsMat4Inv);\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n\r\n let z = this._Contour.StartPoint.z;\r\n if (IsPointInPolyLine(this._Contour, new Vector3(0, 0, z)))\r\n {\r\n let z = this._Contour.StartPoint.z;\r\n this._Contour.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -z)));\r\n\r\n this._PathCurve.Reverse();\r\n return;\r\n }\r\n else\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n }\r\n Log(\"错误:提供的轮廓没有和路径垂直!\");\r\n }\r\n private _MeshGeometry: SweepGeometry;\r\n private _lineGeo: LineGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n try\r\n {\r\n let contour = this._Contour;\r\n if (SweepSolid.UseRectFakerContour && contour.EndParam > 10)\r\n {\r\n let box = contour.BoundingBox;\r\n contour = new Polyline().RectangleFrom2Pt(box.min, box.max);\r\n }\r\n\r\n this._MeshGeometry = new SweepGeometry(contour, this._PathCurve);\r\n this._EdgeGeometry = new BufferGeometry().setAttribute('position', new Float32BufferAttribute(this._MeshGeometry.edgePts, 3));\r\n this.getLineGeo(this._MeshGeometry.edgePts);\r\n this._MeshGeometry.edgePts = undefined;\r\n return this._MeshGeometry;\r\n }\r\n catch (error)\r\n {\r\n return new BoxBufferGeometry(1000, 1000, 1000);\r\n }\r\n }\r\n getLineGeo(pts: number[])\r\n {\r\n this._lineGeo = new LineGeometry();\r\n let lineSegments = new Float32Array(pts);\r\n var instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n this._lineGeo.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n this._lineGeo.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n }\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Edge)\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n return new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n else if (renderType === RenderType.Print)\r\n {\r\n let mat2 = ColorMaterial.GetPrintConceptualMaterial();\r\n let meshGeo = this.MeshGeometry;\r\n let mesh = new Mesh(meshGeo, mat2);\r\n let line = new Line2(this._lineGeo, ColorMaterial.PrintLineMatrial);\r\n return new Object3D().add(line, mesh);\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(this._PathCurve.DrawObject);\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, this.MeshMaterial),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Edge)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n Object3DRemoveAll(obj);\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n Object3DRemoveAll(obj);\r\n obj.add((this._PathCurve.DrawObject));\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n Object3DRemoveAll(obj);\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, this.MeshMaterial),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D)\r\n {\r\n if (type === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Physical2)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n if (!this.MeshGeometry.boundingBox)\r\n this.MeshGeometry.computeBoundingBox();\r\n\r\n return this.MeshGeometry.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\r\n get OBB(): OBB\r\n {\r\n let box = this.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n return new OBB(MoveMatrix(box.min), size.multiplyScalar(0.5));\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetEndPoint();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this._PathCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n if (snapMode === ObjectSnapMode.Mid)\r\n return [...pts, ...this.GetMidPoints()];\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n let pts = this._PathCurve.GetGripPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n GetStretchPoints()\r\n {\r\n let pts = this._PathCurve.GetStretchPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n private UpdateEndMtx(dir: Vector3, pos: Vector3)\r\n {\r\n let y = this.Normal;\r\n let roMat = new Matrix4().extractRotation(this.OCS);\r\n let z = dir.applyMatrix4(roMat);\r\n let x = z.clone().cross(y);\r\n tempMatrix1.makeBasis(x, y, z);\r\n tempMatrix1.setPosition(pos.applyMatrix4(this.OCS));\r\n }\r\n private GetEndPoint()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n let cus: Curve[];\r\n if (this._PathCurve instanceof Polyline)\r\n cus = this._PathCurve.Explode() as Curve[];\r\n else\r\n cus = [this._PathCurve];\r\n\r\n let roMat = new Matrix4().extractRotation(this.OCS);\r\n\r\n const pts: Vector3[] = [];\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let l1 = cus[i];\r\n let l2: Curve;\r\n if (this._PathCurve.IsClose)\r\n {\r\n l2 = cus[FixIndex(i + 1, cus.length)];\r\n }\r\n else\r\n {\r\n l2 = cus[i + 1];\r\n if (i === 0)\r\n {\r\n this.UpdateEndMtx(l1.GetFistDeriv(0).normalize(), l1.StartPoint);\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n }\r\n\r\n let p = l1.EndPoint;\r\n let d1 = l1.GetFistDeriv(1).normalize();\r\n this.UpdateEndMtx(d1.clone(), p);\r\n\r\n if (l2)\r\n {\r\n let d2 = l2.GetFistDeriv(0).normalize().applyMatrix4(roMat);\r\n d1.applyMatrix4(roMat);\r\n d2.add(d1).normalize();\r\n if (isParallelTo(d1, d2))\r\n {\r\n if (l1 instanceof Line && l2 instanceof Line)\r\n {\r\n }\r\n else\r\n {\r\n let ps = conPts.map(p => p.clone().applyMatrix4(tempMatrix1));\r\n pts.push(...ps);\r\n }\r\n continue;\r\n }\r\n p.copy(l1.EndPoint);\r\n //角平分线的平面;\r\n let plane = new PlaneExt(d2, p.applyMatrix4(this.OCS));\r\n let ps = conPts.map(p => p.clone().applyMatrix4(tempMatrix1));\r\n pts.push(...ps.map(p => plane.intersectLine(new Line3(p.clone().sub(d1.clone().multiplyScalar(-100)), p.clone().add(d1)), new Vector3(), true)));\r\n }\r\n else\r\n {\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n }\r\n return pts;\r\n }\r\n private GetMidPoints()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n const pts: Vector3[] = [];\r\n\r\n for (let i = 0.5; i < this._PathCurve.EndParam; i++)\r\n {\r\n let p = this._PathCurve.GetPointAtParam(i);\r\n let d1 = this._PathCurve.GetFistDeriv(i).normalize();\r\n this.UpdateEndMtx(d1, p);\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n return pts;\r\n\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this.IfPathIsLineThenZ0Vector(vec);\r\n\r\n this._PathCurve.MoveGripPoints(indexList,\r\n vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n this.Update();\r\n }\r\n\r\n //如果路径是直线,我们在这里避免vec传递z轴信息\r\n private IfPathIsLineThenZ0Vector(vec: Vector3)\r\n {\r\n if (this._PathCurve instanceof Line)\r\n {\r\n let ocsinv = this._PathCurve.OCSInv.setPosition(0, 0, 0);\r\n vec.applyMatrix4(ocsinv).setZ(0);\r\n vec.applyMatrix4(this._PathCurve.OCSNoClone);\r\n }\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this.IfPathIsLineThenZ0Vector(vec);\r\n\r\n this._PathCurve.MoveStretchPoints(indexList,\r\n vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._Contour = file.ReadObject() as Polyline;\r\n this._PathCurve = file.ReadObject() as Curve;\r\n\r\n if (this._Contour instanceof Spline || this._PathCurve instanceof Spline)\r\n {\r\n this._isErase = true;\r\n Log(\"放样实体是样条线生成的,自动删除它!\");\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.WriteObject(this._Contour);\r\n file.WriteObject(this._PathCurve);\r\n }\r\n}\r\n","import { Matrix4 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { GetPointAtCurveDir } from \"../../Common/CurveUtils\";\r\nimport { DefaultToplineMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { equaln, isPerpendicularityTo, rotatePoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { IToplineOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { SweepSolid } from '../3DSolid/SweepSolid';\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\n\r\n@Factory\r\nexport class HardwareTopline extends SweepSolid\r\n{\r\n @AutoRecord HardwareOption: IToplineOption = { ...DefaultToplineMetalsOption };\r\n @AutoRecord DataList: [string, string][] = [];\r\n private _contourRotation = 0;\r\n get ContourRotation()\r\n {\r\n return this._contourRotation;\r\n }\r\n private _ContourWidth: number;\r\n private get Contours()\r\n {\r\n let c = this.Path;\r\n let conBox = this.Contour.BoundingBox;\r\n let cMin = conBox.min;\r\n let cMax = conBox.max;\r\n let y = ZAxis;\r\n let z = c.GetFistDeriv(0).normalize();\r\n let x = z.clone().cross(y);\r\n let mat = new Matrix4().makeBasis(x, y, z);\r\n mat.setPosition(c.StartPoint);\r\n [cMin, cMax].forEach(p => p.applyMatrix4(mat).setZ(0));\r\n\r\n let firstCurve: Curve;\r\n if (c instanceof Polyline)\r\n firstCurve = c.GetCurveAtParam(0);\r\n else\r\n firstCurve = c;\r\n\r\n let closePt = firstCurve.GetClosestPointTo(cMin, false);\r\n let offset = cMin.distanceTo(closePt);\r\n let dir = GetPointAtCurveDir(firstCurve, cMin);\r\n let cus = this.Path.GetOffsetCurves(offset * dir);\r\n let l1 = cus[0] ?? this.Path.Clone();\r\n\r\n closePt = firstCurve.GetClosestPointTo(cMax, false);\r\n let offset2 = cMax.distanceTo(closePt);\r\n dir = GetPointAtCurveDir(firstCurve, cMax);\r\n cus = this.Path.GetOffsetCurves(offset2 * dir);\r\n let l2 = cus[0] ?? this.Path.Clone();\r\n\r\n this._ContourWidth = offset + offset2;\r\n return [l1, l2];\r\n }\r\n /**\r\n *延伸取最大最小轮廓每段首尾到前面线段,取最长线段作为分段长\r\n *\r\n */\r\n get Segmentations()\r\n {\r\n const [l1, l2] = this.Contours;\r\n if (!(l1 instanceof Polyline))\r\n return [l1];\r\n\r\n let cus1 = l1.Explode() as Curve[];\r\n let cus2 = l2.Explode() as Curve[];\r\n\r\n [cus1, cus2] = cus1.length < cus2.length ? [cus2, cus1] : [cus1, cus2];\r\n\r\n let sgs: Curve[] = [];\r\n\r\n const AddSgs = (c1: Curve, c2: Curve) =>\r\n {\r\n sgs.push(c1.Length > c2.Length ? c1 : c2);\r\n };\r\n\r\n const ExtendCurve = (c: Curve, refC: Curve, isPre) =>\r\n {\r\n let pts = c.IntersectWith2(refC, IntersectOption.ExtendBoth).filter(r =>\r\n {\r\n if (isPre)\r\n return r.thisParam < 0;\r\n else\r\n return r.thisParam > 1;\r\n });\r\n if (isPre)\r\n {\r\n pts.sort((r1, r2) => r2.thisParam - r1.thisParam);\r\n if (pts.length > 0 && pts[0].thisParam < 0)\r\n c.Extend(pts[0].thisParam);\r\n }\r\n else\r\n {\r\n pts.sort((r1, r2) => r1.thisParam - r2.thisParam);\r\n if (pts.length > 0 && pts[0].thisParam > 1)\r\n c.Extend(pts[0].thisParam);\r\n }\r\n };\r\n const IsNoRelativeCurve = (c1: Curve, c2: Curve) =>\r\n {\r\n if ((c1 instanceof Line) !== (c2 instanceof Line))\r\n return true;\r\n\r\n let midPt = c1.GetPointAtParam(0.5);\r\n let closePt = c2.GetClosestPointTo(midPt, false);\r\n return !closePt || !equaln(midPt.distanceTo(closePt), this._ContourWidth, 1e-3);\r\n };\r\n\r\n const HasRelativeCurveAndChange = (target: Curve, cs: Curve[], isChange = false) =>\r\n {\r\n let index = cs.findIndex(c => !IsNoRelativeCurve(c, target));\r\n if (index !== -1)\r\n {\r\n if (isChange && l1.IsClose)\r\n cs.unshift(...cs.splice(index));\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n\r\n if (cus1.length !== cus2.length)\r\n arrayRemoveIf(cus2, c => !HasRelativeCurveAndChange(c, cus1));\r\n\r\n for (let i = 0; i < cus1.length; i++)\r\n {\r\n let c1 = cus1[i];\r\n let c2 = cus2[i];\r\n\r\n if (cus1.length !== cus2.length)\r\n {\r\n if (IsNoRelativeCurve(c1, c2))\r\n {\r\n sgs.push(c1);\r\n cus1.splice(i, 1);\r\n i--;\r\n continue;\r\n }\r\n }\r\n else\r\n {\r\n //第一段验证是否是关联段,不关联重置数组顺序\r\n if (i === 0)\r\n {\r\n if (IsNoRelativeCurve(c1, c2))\r\n {\r\n if (!HasRelativeCurveAndChange(c1, cus2, true))\r\n {\r\n console.error(\"错误\");\r\n return cus1;\r\n }\r\n i--;\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n let nextC1: Curve;\r\n\r\n if (l1.IsClose)\r\n {\r\n nextC1 = cus1[FixIndex(i + 1, cus1.length)];\r\n }\r\n else\r\n {\r\n if (i < cus1.length - 1)\r\n {\r\n nextC1 = cus1[i + 1];\r\n }\r\n }\r\n\r\n if (nextC1)\r\n {\r\n let derv = c1.GetFistDeriv(0).normalize();\r\n let derv2 = nextC1.GetFistDeriv(0).normalize();\r\n\r\n if (isPerpendicularityTo(derv, derv2) && isPerpendicularityTo(derv, c1.StartPoint.sub(c2.StartPoint).normalize()))\r\n {\r\n AddSgs(c1, c2);\r\n continue;\r\n }\r\n }\r\n\r\n let nextDerv1 = c1.GetFistDeriv(1).normalize();\r\n let nextDerv2 = c2.GetFistDeriv(1).normalize();\r\n let preDerv1 = c1.GetFistDeriv(0).normalize();\r\n let preDerv2 = c2.GetFistDeriv(0).normalize();\r\n [nextDerv1, nextDerv2, preDerv1, preDerv2].forEach(d => rotatePoint(d, Math.PI / 2));\r\n\r\n let preRefLine1 = new Line(c1.StartPoint, c1.StartPoint.add(preDerv1));\r\n let preRefLine2 = new Line(c2.StartPoint, c2.StartPoint.add(preDerv2));\r\n\r\n let nextRefLine1 = new Line(c1.EndPoint, c1.EndPoint.add(nextDerv1));\r\n let nextRefLine2 = new Line(c2.EndPoint, c2.EndPoint.add(nextDerv2));\r\n\r\n ExtendCurve(c1, nextRefLine2, false);\r\n ExtendCurve(c2, nextRefLine1, false);\r\n\r\n ExtendCurve(c1, preRefLine2, true);\r\n ExtendCurve(c2, preRefLine1, true);\r\n\r\n AddSgs(c1, c2);\r\n }\r\n\r\n return sgs;\r\n }\r\n get MaxLength()\r\n {\r\n return this.Segmentations.reduce((len, c) => len + c.Length, 0);\r\n }\r\n set ContourRotation(ro: number)\r\n {\r\n if (ro === this._contourRotation)\r\n return;\r\n let diffRo = ro - this._contourRotation;\r\n this._contourRotation = ro;\r\n let mat = new Matrix4().makeRotationZ(diffRo);\r\n this.Contour.ApplyMatrix(mat);\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n\r\n this._contourRotation = file.Read();\r\n\r\n this.HardwareOption.addLen = file.Read();\r\n this.HardwareOption.name = file.Read();\r\n this.HardwareOption.roomName = file.Read();\r\n this.HardwareOption.cabinetName = file.Read();\r\n this.HardwareOption.costExpr = file.Read();\r\n this.HardwareOption.actualExpr = file.Read();\r\n this.HardwareOption.model = file.Read();\r\n this.HardwareOption.factory = file.Read();\r\n this.HardwareOption.brand = file.Read();\r\n this.HardwareOption.spec = file.Read();\r\n this.HardwareOption.comments = file.Read();\r\n\r\n let count = file.Read();\r\n this.DataList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n this.DataList.push(d);\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n\r\n file.Write(this._contourRotation);\r\n\r\n file.Write(this.HardwareOption.addLen);\r\n file.Write(this.HardwareOption.name);\r\n file.Write(this.HardwareOption.roomName);\r\n file.Write(this.HardwareOption.cabinetName);\r\n file.Write(this.HardwareOption.costExpr);\r\n file.Write(this.HardwareOption.actualExpr);\r\n file.Write(this.HardwareOption.model);\r\n file.Write(this.HardwareOption.factory);\r\n file.Write(this.HardwareOption.brand);\r\n file.Write(this.HardwareOption.spec);\r\n file.Write(this.HardwareOption.comments);\r\n\r\n file.Write(this.DataList.length);\r\n for (let data of this.DataList)\r\n {\r\n file.Write(data[0]);\r\n file.Write(data[1]);\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ParseExpr, safeEval } from \"../../Common/eval\";\r\nimport { Intent, Toaster } from \"../../Common/Toaster\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Hole } from \"../../DatabaseServices/3DSolid/Hole\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { GroupRecord } from \"../../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\n\r\nexport interface ICountType\r\n{\r\n name?: string;\r\n count: number;\r\n entity?: T;\r\n count2?: number | string;\r\n unit?: string;\r\n length?: number;\r\n}\r\nexport type GetCountOption = { sealGruopKey: (block: Board) => string; };\r\nclass LookOverBoardInfosTool\r\n{\r\n private drillTypeMap: Map = new Map();\r\n private sealMap: Map = new Map();\r\n private boardMap = new Map();\r\n GetCount(brs: (Board | IHardwareType)[], options: GetCountOption = null)\r\n {\r\n let drillCount: ICountType[] = [];\r\n let sealCount: ICountType[] = [];\r\n let hardwareCount: ICountType[] = [];\r\n let areaCount: ICountType[] = [];\r\n\r\n this.drillTypeMap.clear();\r\n this.sealMap.clear();\r\n this.Update(brs, options);\r\n if (this.drillTypeMap.size > 0)\r\n for (let [k, v] of this.drillTypeMap)\r\n {\r\n if (v[0] instanceof Hole)\r\n if (k === \"木销\")\r\n drillCount.push({ name: k, count: v.length });\r\n else if (k === \"层板钉\")\r\n drillCount.push({ name: k, count: v.length });\r\n else\r\n drillCount.push({ name: k, count: v.length });\r\n else\r\n {\r\n this.ParseHardwareCount(k, v as IHardwareType[], hardwareCount);\r\n }\r\n }\r\n hardwareCount.sort((h1, h2) => h1.name.localeCompare(h2.name));\r\n //加入封边信息\r\n for (let [k, v] of this.sealMap)\r\n {\r\n sealCount.push({ name: k, count: v / 1000, unit: \"米\" });\r\n }\r\n\r\n for (let [k, bs] of this.boardMap)\r\n {\r\n areaCount.push({\r\n entity: bs[0],\r\n count: bs.length,\r\n count2: this.GetBoardsArea(bs)\r\n });\r\n }\r\n\r\n return { drillCount, hardwareCount, sealCount, areaCount };\r\n };\r\n private Update(ens: (Board | IHardwareType)[], options: GetCountOption = null)\r\n {\r\n //计算排钻个数\r\n const addDrillToMap = (spiteName: string, d: Hole | IHardwareType) =>\r\n {\r\n if (!this.drillTypeMap.has(spiteName))\r\n this.drillTypeMap.set(spiteName, [d]);\r\n else\r\n {\r\n let ds = this.drillTypeMap.get(spiteName);\r\n if (!ds.includes(d))\r\n ds.push(d);\r\n }\r\n };\r\n\r\n const brsProps: Board[] = [];\r\n const hardwares: IHardwareType[] = [];\r\n\r\n for (let e of ens)\r\n {\r\n if (e instanceof Board)\r\n brsProps.push(e);\r\n else\r\n hardwares.push(e);\r\n }\r\n for (let h of hardwares)\r\n {\r\n let { name, unit, factory, spec, model, brand } = h.HardwareOption;\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(h, spec)},${model},${brand}`, h);\r\n }\r\n\r\n this.UpdateBoardMap(brsProps);\r\n\r\n for (let b of brsProps)\r\n {\r\n let dlist = b.DrillList;\r\n if (equaln(b.ContourCurve.Area, 0))\r\n {\r\n Toaster({\r\n message: `${b.BoardProcessOption.roomName} ${b.BoardProcessOption.cabinetName} ${b.Name}轮廓有有问题,请检查`,\r\n timeout: 3000,\r\n intent: Intent.DANGER,\r\n });\r\n continue;\r\n }\r\n\r\n for (let [id, idList] of dlist)\r\n {\r\n for (let ids of idList)\r\n {\r\n findHole:\r\n for (let objId of ids)\r\n {\r\n let gd = objId.Object;\r\n if (!gd?.IsErase)\r\n {\r\n if (gd instanceof CylinderHole)\r\n switch (gd.Type)\r\n {\r\n case GangDrillType.Ljg:\r\n case GangDrillType.Pxl:\r\n case GangDrillType.Ymj:\r\n case GangDrillType.Ljg:\r\n case GangDrillType.TK:\r\n let spiteName = (gd.GroupId?.Object as GroupRecord)?.Name ?? \"未命名\";\r\n //读取拆单名\r\n addDrillToMap(spiteName, gd);\r\n break findHole;\r\n case GangDrillType.Wood:\r\n case GangDrillType.WoodPXL:\r\n addDrillToMap(\"木销\", gd);\r\n break findHole;\r\n }\r\n else\r\n {\r\n //TODO:统计自定义排钻\r\n if (gd instanceof ExtrudeHole)\r\n {\r\n if (gd?.GroupId?.Object)\r\n {\r\n let name = (gd.GroupId.Object as GroupRecord).Name;\r\n let ents = (gd.GroupId.Object as GroupRecord).Entitys;\r\n addDrillToMap(name, ents[0].Object as Hole);\r\n }\r\n else\r\n {\r\n Toaster({ message: `柜名:${b.BoardProcessOption.cabinetName} 板名:${b.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // 被复制的层板钉暂未加入LayerNails数组 等做好关联后解除注释\r\n if (b.LayerNails.length > 0)\r\n for (let objId of b.LayerNails)\r\n {\r\n if (!objId?.IsErase)\r\n addDrillToMap(\"层板钉\", objId.Object as CylinderHole);\r\n }\r\n\r\n //分析五金\r\n for (const mId of b.RelativeHardware)\r\n {\r\n let metal = mId?.Object as IHardwareType;\r\n if (metal && !metal.IsErase && metal.HardwareOption)\r\n {\r\n let { name, unit, factory, spec, model, brand } = metal.HardwareOption;\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(metal, spec)},${model},${brand}`, metal);\r\n }\r\n }\r\n\r\n //封边\r\n let sealData = Production.GetBoardSealingData(b);\r\n let color = b.BoardProcessOption[EBoardKeyList.Color];\r\n\r\n for (let data of sealData)\r\n {\r\n if (equaln(0, data.size)) continue;\r\n let k = `${data.size}-${FixedNotZero(b.Thickness, 2)}-${color}`;\r\n if (options)\r\n {\r\n k += options.sealGruopKey(b);\r\n }\r\n let len = this.sealMap.get(k);\r\n if (!len)\r\n this.sealMap.set(k, data.length);\r\n else\r\n this.sealMap.set(k, len += data.length);\r\n }\r\n }\r\n };\r\n ParseSpec(en: IHardwareType | Vector3, spec: string, len?: number)\r\n {\r\n let size = en instanceof Vector3 ? en : en.BoundingBoxInOCS.getSize(new Vector3);\r\n return ParseExpr(spec, { L: len ?? size.x, W: size.y, H: size.z }) || \"[ 无 ]\";\r\n }\r\n ParseHardwareCount(k: string, v: IHardwareType[], hardwareCount: ICountType[])\r\n {\r\n if (v.length > 0)\r\n {\r\n if (!(v[0] instanceof HardwareTopline))\r\n {\r\n let count2 = v.reduce((v: number, d: HardwareCompositeEntity) =>\r\n {\r\n let size = d.BoundingBoxInOCS.getSize(new Vector3);\r\n let c = safeEval(d.HardwareOption.count, { L: size.x, W: size.y, H: size.z }) ?? 0;\r\n return v + c;\r\n }, 0);\r\n hardwareCount.push({ name: k.split(\",\")[0], count: v.length, entity: v[0], count2: FixedNotZero(count2, 2) });\r\n }\r\n else\r\n {\r\n let map = new Map();\r\n let name = k.split(\",\")[0];\r\n let addLen = (v[0] as HardwareTopline).HardwareOption.addLen;\r\n for (let d of v)\r\n {\r\n let e = d as HardwareTopline;\r\n let cus = e.Segmentations;\r\n for (let cu of cus)\r\n {\r\n let len = parseFloat(FixedNotZero(cu.Length, 2));\r\n if (map.has(len))\r\n {\r\n map.set(len, map.get(len) + 1);\r\n }\r\n else\r\n {\r\n map.set(len, 1);\r\n }\r\n }\r\n }\r\n\r\n for (let [len, count] of map)\r\n {\r\n let count2 = parseFloat(FixedNotZero(len + parseFloat(addLen), 2));\r\n hardwareCount.push({ name, count, entity: v[0], count2, length: count2 });\r\n }\r\n }\r\n }\r\n }\r\n private UpdateBoardMap(brs: Board[])\r\n {\r\n this.boardMap.clear();\r\n for (let b of brs)\r\n {\r\n let thickness = this.GetBoardThickness(b);\r\n let brMat = b.BoardProcessOption[EBoardKeyList.BrMat];\r\n let mat = b.BoardProcessOption[EBoardKeyList.Mat];\r\n let color = b.BoardProcessOption[EBoardKeyList.Color];\r\n let key = `${thickness}-${brMat}-${mat}-${color}`;\r\n let list = this.boardMap.get(key);\r\n if (!list)\r\n {\r\n list = [];\r\n this.boardMap.set(key, list);\r\n }\r\n list.push(b);\r\n }\r\n }\r\n GetBoardThickness(br: Board)\r\n {\r\n let size = Production.GetSpiteSize(br);\r\n if (size)\r\n return FixedNotZero(size.spliteThickness, 2);\r\n else\r\n return FixedNotZero(br.Thickness, 2);\r\n }\r\n GetBoardsArea(brs: Board[])\r\n {\r\n return brs.reduce((area, b) =>\r\n {\r\n let size = Production.GetSpiteSize(b);\r\n let ar: number;\r\n if (size)\r\n ar = size.spliteHeight * size.spliteWidth / 1e6;\r\n else\r\n ar = b.Width * b.Height / 1e6;\r\n ar = parseFloat(ar.toFixed(3));\r\n return area + ar;\r\n }, 0).toFixed(2);\r\n }\r\n}\r\n\r\nexport const lookOverBoardInfosTool = new LookOverBoardInfosTool();\r\n","import { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { safeEval } from \"../Common/eval\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { FixIndex, LINK_FUZZ } from \"../Common/Utils\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { angle, equaln, equalv3, isParallelTo, SelectNearP, XAxis } from \"../Geometry/GeUtils\";\r\nimport { Production } from \"../Production/Product\";\r\nimport { IHighSealedItem } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectOption } from \"./IntersectWith\";\r\n\r\n/**\r\n *曲线列表分段\r\n * @l-arc-l,l-arc-arc-l,l-arc-l-arc-l....\r\n */\r\nexport function ParagraphCulist(cus: Curve[])\r\n{\r\n let newCulist: Curve[][] = [];\r\n let usedCu: WeakSet = new WeakSet();\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (cu: Curve, originCu: Curve, cuList: Curve[], isBack: boolean) =>\r\n {\r\n const cuIsLine = cu instanceof Line;\r\n const originCuIsLine = originCu instanceof Line;\r\n\r\n if (usedCu.has(cu))\r\n return false;\r\n\r\n if (originCuIsLine !== cuIsLine)\r\n {\r\n if (originCuIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(1)))\r\n return false;\r\n }\r\n }\r\n\r\n if (cuIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(1), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n }\r\n }\r\n else if (cuIsLine)\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(cu.GetFistDeriv(0).normalize(), originCu.GetFistDeriv(0).normalize()))\r\n return false;\r\n let pts = [originCu.StartPoint, originCu.EndPoint];\r\n let pts2 = [cu.StartPoint, cu.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))\r\n return false;\r\n }\r\n if (isBack)\r\n cuList.push(cu);\r\n else\r\n cuList.unshift(cu);\r\n usedCu.add(cu);\r\n return true;\r\n };\r\n let caclCus = cus.slice().filter(c => !equaln(c.Length, 0));\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let originCu = caclCus.shift();\r\n if (usedCu.has(originCu))\r\n continue;\r\n\r\n let originCus = [originCu];\r\n usedCu.add(originCu);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], originCu, originCus, true))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === cus.length - 1)\r\n {\r\n originCu = originCus[0];\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], originCu, originCus, false))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n }\r\n newCulist.push(originCus);\r\n }\r\n cus.length = 0;\r\n //同组多条曲线连接为多段线\r\n for (let g of newCulist)\r\n {\r\n if (g.length === 1)\r\n cus.push(g[0]);\r\n else\r\n {\r\n let pl = new Polyline();\r\n for (let c of g)\r\n {\r\n pl.Join(c);\r\n }\r\n cus.push(pl);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n *计算封边\r\n */\r\nexport function CalcEdgeSealing(cus: Curve[])\r\n{\r\n if (cus.length <= 1)\r\n return;\r\n let oldLine: Curve;\r\n let firstLine = cus[0].Clone();\r\n let oldLen = cus.length;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let frontLine = cus[i];\r\n let laterIndex = FixIndex(i + 1, cus);\r\n let laterLine = cus[laterIndex];\r\n if (!frontLine || !laterLine || cus.length < 2)\r\n {\r\n return false;\r\n }\r\n\r\n let dist = frontLine.EndPoint.distanceToSquared(laterLine.StartPoint);\r\n if (dist < LINK_FUZZ ** 2)\r\n {\r\n if (frontLine instanceof Line && laterLine instanceof Line)\r\n {\r\n if (frontLine.PtOnCurve(laterLine.EndPoint))\r\n {\r\n cus.splice(laterIndex, 1);\r\n if (laterIndex === 0)\r\n firstLine = cus[0].Clone();\r\n i -= 2;\r\n }\r\n else if (laterLine.PtOnCurve(frontLine.StartPoint))\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n }\r\n }\r\n continue;\r\n }\r\n\r\n let refLine = oldLine ?? frontLine;\r\n let refLine2 = i === cus.length - 1 ? firstLine : laterLine;\r\n let iPts = refLine.IntersectWith(refLine2, IntersectOption.ExtendBoth);\r\n let tPts = iPts.filter(p =>\r\n refLine.PtOnCurve(p)\r\n && refLine2.PtOnCurve(p)\r\n );\r\n\r\n let iPt = SelectNearP(tPts.length > 0 ? tPts : iPts, refLine.EndPoint);\r\n if (!iPt)\r\n {\r\n //没交点,如果删过线,则尝试继续连接\r\n if (cus.length !== oldLen && cus.length > 2)\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n continue;\r\n }\r\n else\r\n return false;\r\n }\r\n let par = refLine.GetParamAtPoint(iPt);\r\n //前面线的点无效直接删除\r\n if (par < 1e-6)\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n }\r\n else\r\n frontLine.EndPoint = iPt;\r\n oldLine = null;\r\n par = laterLine.GetParamAtPoint(iPt);\r\n\r\n //后面线点无效,如果是起始线,则删除,否则缓存原始线,继续尝试连接\r\n if (par > 1 - 1e-6)\r\n {\r\n if (laterIndex === 0)\r\n {\r\n cus.shift();\r\n firstLine = cus[0].Clone();\r\n i -= 2;\r\n continue;\r\n }\r\n else\r\n oldLine = laterLine.Clone();\r\n }\r\n\r\n laterLine.StartPoint = iPt;\r\n }\r\n return true;\r\n}\r\n\r\nexport function GetBoardHighSeal(br: Board, sealcus: Curve[])\r\n{\r\n let highSeals = br.BoardProcessOption.highSealed.slice().filter(d => d.size !== null && d.size !== undefined);\r\n let sealDown = parseFloat(br.BoardProcessOption[EBoardKeyList.DownSealed]);\r\n let sealUp = parseFloat(br.BoardProcessOption[EBoardKeyList.UpSealed]);\r\n let sealLeft = parseFloat(br.BoardProcessOption[EBoardKeyList.LeftSealed]);\r\n let sealRight = parseFloat(br.BoardProcessOption[EBoardKeyList.RightSealed]);\r\n\r\n //若未设置高级封边,把上下左右封边存入高级封边\r\n if (sealcus.length !== highSeals.length || !br.IsSpecialShape)\r\n {\r\n highSeals.length = 0;\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n for (let c of sealcus)\r\n {\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n highSeals.push({ size: sealDown });\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n highSeals.push({ size: sealRight });\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n highSeals.push({ size: sealUp });\r\n else\r\n highSeals.push({ size: sealLeft });\r\n }\r\n }\r\n\r\n return highSeals;\r\n}\r\n\r\n/**偏移前后曲线起点没改变 */\r\nexport function OffsetOutlineSpNotChange(oldcu: Curve, newCu: Curve)\r\n{\r\n if (!newCu)\r\n return false;\r\n let sDerv = oldcu.GetFistDeriv(0).normalize();\r\n let eDerv = oldcu.GetFistDeriv(oldcu.EndParam).normalize().negate();\r\n sDerv.add(eDerv).normalize();\r\n let mDerv = newCu.StartPoint.sub(oldcu.StartPoint).normalize();\r\n return oldcu.EndParam === newCu?.EndParam && isParallelTo(mDerv, sDerv);\r\n}\r\n\r\n/**\r\n * 获取板件封边轮廓线段数组\r\n * 消除共线的数据,不改变轮廓方向\r\n * isOffset-是否偏移轮廓用于查看\r\n * */\r\nexport function GetBoardSealingCurves(br: Board, isOffset = false): Curve[]\r\n{\r\n let cu: ExtureContourCurve = Production.GetSpliteOutlineBySpliteSize(br);\r\n if (cu)\r\n return cu.Explode();\r\n\r\n let cus: Curve[] = [];\r\n cu = Production.GetSpliteOutline(br, false);\r\n if (!cu)\r\n {\r\n Toaster({\r\n message: \"获取封边错误\",\r\n timeout: 3000,\r\n intent: Intent.DANGER\r\n });\r\n return [];\r\n }\r\n if (isOffset)\r\n {\r\n let dir = Math.sign(cu.Area2);\r\n let newCu = cu.GetOffsetCurves(-1 * dir)[0] as ExtureContourCurve;\r\n if (OffsetOutlineSpNotChange(cu, newCu))\r\n cu = newCu;\r\n }\r\n if (cu instanceof Circle)\r\n return [cu.Clone()];\r\n else\r\n {\r\n cus = cu.Explode() as Curve[];\r\n if (br.IsSpecialShape)\r\n ParagraphCulist(cus);\r\n return cus;\r\n }\r\n}\r\n\r\n/**\r\n * 获取板件轮廓\r\n * 结果轮廓拆单用,统一逆时针数据\r\n * hasSealing 轮廓是否包含封边\r\n * 用户计算拆单侧孔面id\r\n */\r\nexport function GetSealedBoardContour(br: Board, hasSealing: boolean): Polyline | Circle | undefined\r\n{\r\n if (equaln(br.ContourCurve.Area, 0))\r\n return;\r\n\r\n let offsetCus: Curve[] = [];\r\n let cus = GetBoardSealingCurves(br);\r\n let highSeals = GetBoardHighSeal(br, cus);\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n\r\n if (hasSealing)\r\n {\r\n for (let c of cus)\r\n {\r\n if (c instanceof Polyline)\r\n offsetCus.push(...c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n else\r\n {\r\n\r\n if (cus[0] instanceof Circle)\r\n dir = 1;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cs: Curve[];\r\n if (!highSeals[i].size)\r\n cs = [cus[i].Clone()];\r\n else\r\n cs = cus[i].GetOffsetCurves(-highSeals[i].size * dir);\r\n\r\n for (let c of cs)\r\n {\r\n if (c instanceof Polyline)\r\n offsetCus.push(...c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n }\r\n if (offsetCus.length === 1 && offsetCus[0] instanceof Circle)\r\n return offsetCus[0] as Circle;\r\n\r\n if (!CalcEdgeSealing(offsetCus)) return;\r\n let pl = Polyline.FastCombine(offsetCus, LINK_FUZZ);\r\n if (pl && dir < 0)\r\n pl.Reverse();\r\n return pl;\r\n}\r\n\r\n\r\nexport function ParagraphSealinglist(hightSeal: IHighSealedItem[], cus: Curve[])\r\n{\r\n if (hightSeal.length !== cus.length) return hightSeal;\r\n\r\n let usedCu: WeakSet = new WeakSet();\r\n let newHighSeal: IHighSealedItem[] = [];\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (cu: Curve, originCu: Curve, isBack: boolean) =>\r\n {\r\n const cuIsLine = cu instanceof Line;\r\n const originCuIsLine = originCu instanceof Line;\r\n\r\n if (usedCu.has(cu))\r\n return false;\r\n\r\n if (originCuIsLine !== cuIsLine)\r\n {\r\n if (originCuIsLine &&\r\n !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0))\r\n && !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(1))\r\n )\r\n {\r\n return false;\r\n }\r\n\r\n if (cuIsLine\r\n && !isParallelTo(originCu.GetFistDeriv(1), cu.GetFistDeriv(0))\r\n && !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)\r\n ))\r\n {\r\n return false;\r\n }\r\n }\r\n else if (cuIsLine)\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(cu.GetFistDeriv(0).normalize(), originCu.GetFistDeriv(0).normalize()))\r\n return false;\r\n let pts = [originCu.StartPoint, originCu.EndPoint];\r\n let pts2 = [cu.StartPoint, cu.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))\r\n return false;\r\n }\r\n if (isBack)\r\n hightSeal.shift();\r\n else\r\n hightSeal.pop();\r\n usedCu.add(cu);\r\n return true;\r\n };\r\n let caclCus = cus.slice();\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let originCu = caclCus.shift();\r\n if (usedCu.has(originCu))\r\n continue;\r\n let oldCu = originCu;\r\n let originSeal = hightSeal.shift();\r\n newHighSeal.push(originSeal);\r\n usedCu.add(originCu);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], originCu, true))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === cus.length - 1)\r\n {\r\n originCu = oldCu;\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], originCu, false))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n }\r\n }\r\n\r\n return newHighSeal;\r\n}\r\n\r\n/**处理常规板件封边数据和上下左右封边值 */\r\nexport function HandleRectBoardSealingData(br: Board, edges: IHighSealedItem[], cus?: Curve[])\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n if (!cus)\r\n cus = br.ContourCurve.Explode() as Curve[];\r\n\r\n let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight);\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth);\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness);\r\n\r\n if ((spliteHeight && spliteWidth && spliteThickness) || !br.IsSpecialShape && cus.length == 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = cus[i].GetFistDeriv(0);\r\n if (isParallelTo(derv, XAxis))\r\n {\r\n if (derv.x * dir > 0)\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = edges[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = edges[i].size.toString();\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = edges[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = edges[i].size.toString();\r\n }\r\n }\r\n\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { GetMirrorMat } from \"../../Common/Matrix4Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\r\nimport { equaln, equalv3, ZAxis } from \"../GeUtils\";\r\nimport { Face } from \"./Face\";\r\nimport { MergeCurvelist } from \"../../Common/CurveUtils\";\r\n\r\n\r\nexport const CanDrawHoleFuzz = 1e-2;\r\n\r\nexport enum BoardFaceType\r\n{\r\n Side = 0,\r\n NoSide = 1\r\n}\r\nexport class BoardGetFace\r\n{\r\n Faces: Face[] = [];\r\n constructor(public Board: Board)\r\n {\r\n this.ParseFaces();\r\n }\r\n ParseFaces()\r\n {\r\n //正反面\r\n this.GetTopAndBottomFace();\r\n //侧面\r\n this.GetSideFaces();\r\n }\r\n GetTopAndBottomFace(isEdgeFace = false)\r\n {\r\n let curve = this.Board.ContourCurve;\r\n let reg: Region;\r\n if (this.Board.IsSpecialShape)\r\n reg = Region.CreateFromCurves([curve]);\r\n\r\n let thickness = this.Board.Thickness;\r\n let ocs = this.Board.OCS;\r\n const opt = this.Board.BoardProcessOption;\r\n //正反面\r\n if (opt.frontDrill || isEdgeFace)\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n region: reg,\r\n isRect: this.Board.IsRect,\r\n localBoard: this.Board,\r\n matrix4: ocs.clone().multiply(\r\n new Matrix4().setPosition(new Vector3(0, 0, thickness))),\r\n length: this.Board.Width,\r\n width: this.Board.Height\r\n }));\r\n\r\n if (opt.backDrill || isEdgeFace)\r\n {\r\n let mat = GetMirrorMat(ZAxis).setPosition(new Vector3());\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n localBoard: this.Board,\r\n isRect: this.Board.IsRect,\r\n region: reg ? reg.Clone() : undefined,\r\n matrix4: new Matrix4().multiplyMatrices(ocs.clone(), mat),\r\n length: this.Board.Width,\r\n width: this.Board.Height\r\n }));\r\n }\r\n }\r\n GetSideFaces()\r\n {\r\n let con = this.Board.ContourCurve.Clone();\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const highDrill = this.Board.BoardProcessOption.highDrill.slice();\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let length = cu.Length;\r\n if ((highDrill.length > 0 && highDrill[i] === DrillType.None)\r\n || equaln(length, 0)\r\n || cu instanceof Arc)\r\n continue;\r\n let mtx = GetSideFaceMtx(cu, inverseZ);\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: this.Board,\r\n matrix4: new Matrix4().multiplyMatrices(this.Board.OCS.clone(), mtx),\r\n length,\r\n width: this.Board.Thickness,\r\n drillType: highDrill.length > 0 && highDrill[i]\r\n }));\r\n }\r\n }\r\n IntersectFace(br: BoardGetFace, bInsEqual: boolean = false): Face[]\r\n {\r\n let collisionFaces: Face[] = [];\r\n\r\n for (let f1 of this.Faces)\r\n {\r\n for (let f2 of br.Faces)\r\n {\r\n //都是正面,或者不允许侧面同侧面并且2板件类型不一样就跳过\r\n if (f1.type === f2.type\r\n && (f1.type === BoardFaceType.NoSide || !bInsEqual || br.Board.BoardType !== this.Board.BoardType)\r\n )\r\n continue;\r\n //不共面\r\n if (!MatrixIsCoplane2(f1.OCS, f2.OCS, CanDrawHoleFuzz))\r\n continue;\r\n collisionFaces.push(...f1.Intersect(f2));\r\n }\r\n }\r\n return collisionFaces;\r\n }\r\n static GetAllSidesFaces(br: Board, isMergeFace = false)\r\n {\r\n let faces: Face[] = [];\r\n let con = br.ContourCurve;\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n if (isMergeFace)\r\n MergeCurvelist(cus);\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let length = cu.Length;\r\n let mtx = GetSideFaceMtx(cu, inverseZ);\r\n faces.push(new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: br,\r\n matrix4: new Matrix4().multiplyMatrices(br.OCS.clone(), mtx),\r\n length,\r\n width: br.Thickness,\r\n }));\r\n }\r\n return faces;\r\n }\r\n}\r\n\r\n//坐标系共面且法线相反\r\nexport function MatrixIsCoplane2(matrixFrom: Matrix4, matrixTo: Matrix4, fuzz = 1e-5): boolean\r\n{\r\n let nor1 = new Vector3().setFromMatrixColumn(matrixFrom, 2);\r\n let nor2 = new Vector3().setFromMatrixColumn(matrixTo, 2);\r\n\r\n //法线共面\r\n if (!equalv3(nor1, nor2.negate(), fuzz))\r\n return false;\r\n\r\n //高共面\r\n let pt = new Vector3().setFromMatrixPosition(matrixTo);\r\n //变换到自身对象坐标系.\r\n pt.applyMatrix4(new Matrix4().getInverse(matrixFrom));\r\n\r\n return equaln(pt.z, 0, fuzz);\r\n}\r\nexport function GetSideFaceMtx(cu: Curve, inverseZ = false): Matrix4\r\n{\r\n let x = cu.GetFistDeriv(0).normalize();\r\n let y = ZAxis;\r\n let z = x.clone().cross(y);\r\n if (inverseZ) z.negate();\r\n\r\n let basePt: Vector3;\r\n if ((equaln(x.x, 0) && x.y > 0) || x.x < 0)\r\n {\r\n x.negate();\r\n basePt = cu.EndPoint;\r\n }\r\n else\r\n basePt = cu.StartPoint;\r\n //构建面矩阵\r\n return new Matrix4()\r\n .makeBasis(x, y, z)\r\n .setPosition(basePt);\r\n}\r\n","export const ReportFunctionList: ((msg: string) => void)[] = [];\r\n\r\nexport function SendReport(msg: string)\r\n{\r\n for (let f of ReportFunctionList)\r\n f(msg);\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\n\r\nexport const ShowObjectsFunctionList: ((ens: (Entity[]) | Object3D[]) => void)[] = [];\r\n\r\nexport function ShowSelectObjects(ens: (Entity[]) | Object3D[])\r\n{\r\n for (let f of ShowObjectsFunctionList)\r\n f(ens);\r\n}\r\n","\r\nexport function IsDev()\r\n{\r\n return window.location.hostname === \"localhost\";\r\n}\r\n\r\nexport function IsTest()\r\n{\r\n return window.location.hostname === \"localhost\" || window.location.hostname === \"t.cfcad.cn\";\r\n}\r\n","import { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { angle, equaln, isParallelTo, rotatePoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Hole } from \"../../DatabaseServices/3DSolid/Hole\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { userConfig } from \"../../Editor/UserConfig\";\r\n\r\nexport const SCALAR = 0.1;\r\n\r\nexport function CyHoleInBoard(cys: CylinderHole[], br: Board, ocs: Matrix4)\r\n{\r\n if (cys.length === 1 && cys[0].Type === GangDrillType.Ymj)\r\n return true;\r\n\r\n const outline = br.ContourCurve;\r\n let box = new Box3();\r\n let pxl: CylinderHole;\r\n let ljg: CylinderHole;\r\n let ymj: CylinderHole;\r\n let wood: CylinderHole;\r\n let woodPXL: CylinderHole;\r\n let pxl2: CylinderHole;\r\n for (let cy of cys)\r\n {\r\n box.union(cy.BoundingBox);\r\n if (cy.Type === GangDrillType.Pxl)\r\n {\r\n if (pxl)\r\n pxl2 = cy;\r\n else\r\n pxl = cy;\r\n }\r\n else if (cy.Type === GangDrillType.Ljg)\r\n ljg = cy;\r\n else if (cy.Type === GangDrillType.Wood)\r\n wood = cy;\r\n else if (cy.Type === GangDrillType.WoodPXL)\r\n woodPXL = cy;\r\n else\r\n ymj = cy;\r\n }\r\n box.applyMatrix4(ocs);\r\n\r\n let outlineBox = outline.BoundingBox;\r\n outlineBox.max.setZ(br.Thickness);\r\n\r\n if (!box.intersectsBox(outlineBox))\r\n return false;\r\n\r\n let nor = new Vector3();\r\n\r\n if (ljg)\r\n nor.copy(ljg.Normal);\r\n else if (ymj)\r\n nor.copy(ymj.Normal);\r\n else\r\n if (wood)\r\n nor.copy(wood.Normal);\r\n\r\n nor.applyMatrix4(ocs.clone().setPosition(new Vector3));\r\n\r\n if (isParallelTo(nor, ZAxis))\r\n {\r\n if (ymj)\r\n {\r\n let center = ymj.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, ymj.Radius - SCALAR);\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n }\r\n }\r\n else\r\n {\r\n if (pxl)\r\n {\r\n let plxs = [pxl];\r\n if (pxl2)\r\n plxs.push(pxl2);\r\n if (plxs.every(cy =>\r\n {\r\n let center = cy.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, pxl.Radius - SCALAR);\r\n if (userConfig.forceFilterPxl)\r\n return outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center);\r\n }))\r\n return false;\r\n }\r\n if (woodPXL)\r\n {\r\n let center = woodPXL.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, woodPXL.Radius - SCALAR);\r\n if (outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center))\r\n return false;\r\n }\r\n\r\n if (ljg)\r\n {\r\n let c1 = ljg.Position.applyMatrix4(ocs).setZ(0);\r\n let minPt = c1.clone().add(nor.clone().multiplyScalar(ljg.Height / 2));\r\n let c2 = c1.clone().add(nor.clone().multiplyScalar(ljg.Height - SCALAR));\r\n c1.add(nor.clone().multiplyScalar(SCALAR));\r\n\r\n rotatePoint(nor, Math.PI / 2);\r\n c1.add(nor.multiplyScalar(ljg.Radius));\r\n c2.add(nor.negate());\r\n\r\n let rect = new Polyline().RectangleFrom2Pt(c1, c2);\r\n\r\n let intPtsLen = outline.IntersectWith(rect, 0).length;\r\n if (intPtsLen > 2 || (intPtsLen === 0 && !outline.PtInCurve(minPt)))\r\n return false;\r\n }\r\n\r\n if (wood)\r\n {\r\n let c1 = wood.Position.applyMatrix4(ocs).setZ(0);\r\n let c2 = c1.clone().add(nor.clone().multiplyScalar(wood.Height));\r\n\r\n rotatePoint(nor, Math.PI / 2);\r\n let dir = nor.multiplyScalar(wood.Radius);\r\n let p1 = c1.clone().add(dir);\r\n let p2 = c2.clone().add(dir);\r\n let p3 = c1.clone().add(dir.negate());\r\n let p4 = c2.clone().add(dir);\r\n let l1 = new Line(p1, p2);\r\n let l2 = new Line(p3, p4);\r\n if (l1.IntersectWith(outline, 0).length !== 1 || l2.IntersectWith(outline, 0).length !== 1)\r\n return false;\r\n }\r\n\r\n }\r\n return true;\r\n}\r\n\r\nexport interface IRectHoleOption\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\n\r\nexport const TempRectHoleOption: IRectHoleOption = {\r\n up: \"\",\r\n down: \"\",\r\n left: \"\",\r\n right: \"\",\r\n};\r\n\r\n/**分析上下左右排钻 */\r\nexport function InitRectBoardHoleOption(br: Board, option: IRectHoleOption)\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n let hightDrill = br.BoardProcessOption.highDrill;\r\n let cus = br.ContourCurve.Explode() as Curve[];\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n option.down = hightDrill[i];\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n option.right = hightDrill[i];\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n option.up = hightDrill[i];\r\n else\r\n option.left = hightDrill[i];\r\n }\r\n}\r\nexport function ExtureHoleInBoard(holes: ExtrudeHole[], board: Board, ocs: Matrix4)\r\n{\r\n //TODO:自定义排钻判断\r\n return true;\r\n}\r\nexport function HoleInBoard(holes: Hole[], br: Board, ocs?: Matrix4)\r\n{\r\n if (holes.length === 0) return false;\r\n\r\n if (holes[0] instanceof CylinderHole)\r\n {\r\n return CyHoleInBoard(holes as CylinderHole[], br, ocs ?? br.OCSInv);\r\n }\r\n else\r\n {\r\n return ExtureHoleInBoard(holes as ExtrudeHole[], br, ocs ?? br.OCSInv);\r\n }\r\n}\r\n\r\n/**上下左右排钻写入板件 */\r\nexport function SetRectHighHole(br: Board, option: IRectHoleOption)\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n let highDrill = br.BoardProcessOption.highDrill;\r\n let cus = br.ContourCurve.Explode() as Curve[];\r\n highDrill.length = 0;\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n highDrill.push(option.down);\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n highDrill.push(option.right);\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n highDrill.push(option.up);\r\n else\r\n highDrill.push(option.left);\r\n }\r\n let types = new Set(highDrill);\r\n if (types.size === 1 && highDrill[0] !== DrillType.None)\r\n br.BoardProcessOption[EBoardKeyList.DrillType] = highDrill[0];\r\n else if (types.size > 1)\r\n br.BoardProcessOption[EBoardKeyList.DrillType] = DrillType.More;\r\n};\r\n","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { lookOverBoardInfosTool } from \"../Add-on/LookOverBoardInfos/LookOverBoardInfosTool\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\r\nimport { Vector2ApplyMatrix4 } from \"../Common/Matrix4Utils\";\r\nimport { FixedNotZero, LINK_FUZZ } from \"../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Hole } from \"../DatabaseServices/3DSolid/Hole\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board, IModeling, I2DModeingItem, IKnifeInfo } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { HardwareCompositeEntity } from \"../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { userConfig } from \"../Editor/UserConfig\";\r\nimport { Vec2 } from \"../Geometry/CheckIntersect\";\r\nimport { angleTo, AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, XAxis, equalv2, IsBetweenA2B, isIntersect2 } from \"../Geometry/GeUtils\";\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, GetSealedBoardContour as GetSealedBoardContour } from \"../GraphicsSystem/CalcEdgeSealing\";\r\nimport { FeedingToolPath, GetModelingFromCustomDrill } from \"../GraphicsSystem/ToolPath/FeedingToolPath\";\r\nimport { EMetalsType, IHardwareOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { BoardOpenDir, FaceDirection, IHighSealedItem } from \"../UI/Store/BoardInterface\";\r\nimport { Entity } from './../DatabaseServices/Entity/Entity';\r\nimport { ICompHardwareOption } from './../UI/Components/RightPanel/RightPanelInterface';\r\nimport { CanDrawHoleFuzz } from \"../Geometry/DrillParse/BoardGetFace\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { SendReport } from \"../Common/Report\";\r\nimport { ShowSelectObjects } from \"../Common/ShowSelectObjects\";\r\nimport { IsDev } from \"../Common/Deving\";\r\nimport { SCALAR } from \"../Add-on/DrawDrilling/HoleUtils\";\r\nimport { Shape } from \"../DatabaseServices/Shape\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\n\r\n\r\n/**轮廓数据 */\r\nexport interface IContourData\r\n{\r\n pts: Vec2[];\r\n buls: number[];\r\n}\r\nexport interface I3DContourData\r\n{\r\n pts: Vector3[];\r\n buls: number[];\r\n}\r\nexport type IHardwareType = HardwareTopline | HardwareCompositeEntity;\r\n\r\nexport interface ISealingData extends IHighSealedItem\r\n{\r\n length: number;\r\n type?: string;\r\n shop?: string;\r\n}\r\nexport interface IModelingData\r\n{\r\n feeding: IContourData[];\r\n thickness: number;\r\n dir: FaceDirection | number;\r\n knifeRadius: number;\r\n origin: IOriginModelingData;\r\n}\r\n\r\nexport enum DrillingFace\r\n{\r\n //正反面时,使用Front和Back\r\n Front = 0,\r\n Back = 1,\r\n}\r\n\r\nexport interface IDrillingOption\r\n{\r\n position: Vector3;\r\n radius: number;\r\n type: GangDrillType;\r\n depth: number;\r\n face: DrillingFace;\r\n endPt?: Vector3;\r\n angle?: number;\r\n}\r\n\r\nexport interface IBoardHoleInfo\r\n{\r\n frontBackHoles: IDrillingOption[];\r\n sideHoles: IDrillingOption[];\r\n}\r\n\r\ninterface IBoardProdInfo\r\n{\r\n id: number;\r\n name: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n [EBoardKeyList.Mat]: string;\r\n [EBoardKeyList.BrMat]: string;\r\n [EBoardKeyList.Color]: string;\r\n [EBoardKeyList.Lines]: number;\r\n [EBoardKeyList.DrillType]: string;\r\n spliteHeight: string;\r\n spliteThickness: string;\r\n spliteWidth: string;\r\n\r\n isRect: boolean;\r\n remarks: [string, string][];\r\n kaiLiaoWidth: number;\r\n kaiLiaoHeight: number;\r\n openDir: BoardOpenDir;\r\n}\r\n\r\nexport interface I2DModeling\r\n{\r\n path: IContourData;\r\n dir: FaceDirection;\r\n items: I2DModeingItem[];\r\n}\r\nexport interface I3DModeling\r\n{\r\n path: I3DContourData;\r\n dir: FaceDirection;\r\n knife: IKnifeInfo;\r\n}\r\n\r\n/**拆单数据 */\r\nexport interface ISpliteOrderData\r\n{\r\n info: IBoardProdInfo; //板件基本信息\r\n outline: IContourData; //拆单轮廓信息\r\n sealing: ISealingData[]; //封边信息\r\n modeling: IModelingData[]; //造型信息\r\n holes: IBoardHoleInfo; //孔信息\r\n sideModeling: IModelingData[]; //侧面造型信息\r\n offsetTanslation: Vector3;\r\n originOutlin: IContourData; //不扣封边拆单原始轮廓\r\n metalsData?: { metals: number, comp: number; }; //板件五金\r\n boardContour: IContourData; //板件轮廓\r\n modeling2D: I2DModeling[];\r\n modeling3D: I3DModeling[];\r\n}\r\n\r\nexport interface IBoardMetalsData\r\n{\r\n metals: ISpliteHardwareData[];\r\n comp: ISpliteHardwareData[];\r\n}\r\n\r\nexport interface ISpliteHardwareData\r\n{\r\n metalsOption: IHardwareOption;\r\n dataList: [string, string][];\r\n children: ISpliteHardwareData[];\r\n length?: number;\r\n size: Vector3;\r\n}\r\n\r\nexport interface IOriginModelingData\r\n{\r\n outline: IContourData,\r\n holes: IContourData[];\r\n thickness?: number;\r\n dir?: FaceDirection | number;\r\n knifeRadius?: number;\r\n addLen?: number;\r\n addWidth?: number;\r\n addDepth?: number;\r\n}\r\n\r\ninterface IChaiDanFeedingData extends IOriginModelingData\r\n{\r\n boardContour: IContourData;\r\n}\r\n\r\nexport namespace Production\r\n{\r\n /**获取板件拆单数据 */\r\n export function GetBoardSplitOrderData(br: Board): ISpliteOrderData | undefined\r\n {\r\n let sealedContour = GetSealedBoardContour(br, true);\r\n if (!sealedContour || equaln(sealedContour.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br], br.Name + \" 轮廓错误\");\r\n return undefined;\r\n }\r\n let outline = GetSealedBoardContour(br, false);\r\n\r\n if (!outline || equaln(outline.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \"扣除封边轮廓有误,请检查后重新拆单\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br], br.Name + \"扣除封边轮廓有误\");\r\n return;\r\n }\r\n\r\n let offsetTanslation = outline.BoundingBox.min;\r\n outline.Position = outline.Position.sub(offsetTanslation);\r\n let outlinePtsBul = ConverToPolylineAndSplitArc(outline);\r\n //外轮廓去掉最后的闭合点\r\n outlinePtsBul.pts.pop();\r\n outlinePtsBul.buls.pop();\r\n let size = outline.BoundingBox.getSize(new Vector3);\r\n\r\n //不扣除封边的轮廓信息\r\n let originOutlinePtsBul = ConverToPolylineAndSplitArc(sealedContour);\r\n originOutlinePtsBul.pts.pop();\r\n originOutlinePtsBul.buls.pop();\r\n\r\n let { modeling, sideModeling } = GetBoardModelingData(br, offsetTanslation);\r\n\r\n let boardContour: IContourData;\r\n if (GetSpiteSize(br))\r\n boardContour = ConverToPolylineAndSplitArc(br.ContourCurve);\r\n\r\n return {\r\n info: GetBoardInfo(br, size),\r\n originOutlin: originOutlinePtsBul,\r\n outline: outlinePtsBul,\r\n sealing: GetBoardSealingData(br),\r\n modeling,\r\n holes: GetBoardHolesData(br, offsetTanslation, sealedContour),\r\n sideModeling,\r\n offsetTanslation,\r\n metalsData: GetBoardMetals(br),\r\n boardContour,\r\n modeling2D: Get2DModeing(br, offsetTanslation),\r\n modeling3D: Get3DModeing(br, offsetTanslation),\r\n };\r\n }\r\n export function GetBoardInfo(br: Board, size: Vector3): IBoardProdInfo\r\n {\r\n let data = br.BoardProcessOption;\r\n\r\n let spliteSize = Production.GetSpiteSize(br);\r\n let isRect = !!spliteSize || !br.IsSpecialShape;\r\n\r\n return {\r\n id: br.Id.Index,\r\n name: br.Name,\r\n [EBoardKeyList.RoomName]: data[EBoardKeyList.RoomName],\r\n [EBoardKeyList.CabinetName]: data[EBoardKeyList.CabinetName],\r\n [EBoardKeyList.Mat]: data[EBoardKeyList.Mat],\r\n [EBoardKeyList.BrMat]: data[EBoardKeyList.BrMat],\r\n [EBoardKeyList.Color]: data[EBoardKeyList.Color],\r\n [EBoardKeyList.Lines]: data[EBoardKeyList.Lines],\r\n [EBoardKeyList.DrillType]: data[EBoardKeyList.DrillType],\r\n spliteHeight: spliteSize ? spliteSize.spliteHeight.toString() : \"\",\r\n spliteThickness: spliteSize ? spliteSize.spliteThickness.toString() : \"\",\r\n spliteWidth: spliteSize ? spliteSize.spliteWidth.toString() : \"\",\r\n isRect,\r\n remarks: data.remarks.slice(),\r\n kaiLiaoWidth: size.x,\r\n kaiLiaoHeight: size.y,\r\n openDir: br.OpenDir,\r\n };\r\n }\r\n\r\n /**\r\n * 转换成多段线并且将圆弧打断(大于1/4的话)\r\n */\r\n export function ConverToPolylineAndSplitArc(cu: Polyline | Circle, isOutline = true, isSplite = true): IContourData\r\n {\r\n let ptsBuls: { pts: Vector2[]; buls: number[]; };\r\n if (cu instanceof Circle)\r\n {\r\n let pl = ConverCircleToPolyline(cu);\r\n ptsBuls = pl.PtsBuls;\r\n }\r\n else\r\n {\r\n if (isOutline && cu.IsClose && cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n if (isSplite)\r\n ptsBuls = SplitePolylineAtArc(cu);\r\n else\r\n ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.OCS;\r\n if (!equaln(ocs.elements[0], 1)\r\n || !equaln(ocs.elements[9], 0)\r\n || !equaln(ocs.elements[10], 0)\r\n )\r\n {\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n {\r\n Vector2ApplyMatrix4(ocs, ptsBuls.pts[i]);\r\n ptsBuls.buls[i] *= cu.Normal.z;\r\n }\r\n }\r\n return ptsBuls;\r\n }\r\n\r\n export function ConverCircleToPolyline(cir: Circle): Polyline\r\n {\r\n let arcs = cir.GetSplitCurves([0, 0.25, 0.5, 0.75]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCS;\r\n for (let arc of arcs)\r\n pl.Join(arc);\r\n return pl;\r\n }\r\n\r\n const SPLITBUL = Math.tan(Math.PI / 8);\r\n function GetSpliteCount(allAngle: number)\r\n {\r\n return Math.ceil(Math.abs(allAngle) / Math.PI * 2);\r\n }\r\n\r\n /** 打断多段线超过1/4圆的圆弧*/\r\n export function SplitePolylineAtArc(cu: Polyline, isSplite = true): { pts: Vector2[], buls: number[]; }\r\n {\r\n let ptsBuls = cu.PtsBuls;\r\n let ocsInv = cu.OCSInv;\r\n\r\n let result: { pts: Vector2[], buls: number[]; } = { pts: [], buls: [] };\r\n\r\n if (ptsBuls.pts.length === 0)\r\n return result;\r\n\r\n for (let i = 0; i < ptsBuls.buls.length - 1; i++)\r\n {\r\n let bul = ptsBuls.buls[i];\r\n if (Math.abs(bul) > SPLITBUL + 1e-8 && isSplite)\r\n {\r\n let allAngle = Math.atan(bul) * 4;\r\n let splitCount = GetSpliteCount(allAngle);\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let paramDiv = 1 / splitCount;\r\n let newBul = Math.tan((allAngle / splitCount) / 4);\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let param = i * paramDiv;\r\n let p = arc.GetPointAtParam(param).applyMatrix4(ocsInv);\r\n let p2 = AsVector2(p);\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(p2, arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(p2);\r\n result.buls.push(newBul);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(ptsBuls.pts[i], arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(ptsBuls.pts[i]);\r\n result.buls.push(ptsBuls.buls[i]);\r\n }\r\n }\r\n }\r\n\r\n result.pts.push(arrayLast(ptsBuls.pts));\r\n result.buls.push(arrayLast(ptsBuls.buls));\r\n\r\n //测试是否存在无效的边(0长度边)\r\n // for (let i = 1; i < result.pts.length; i++)\r\n // {\r\n // if (equalv2(result.pts[i], result.pts[i - 1], 0.01))\r\n // alert(\"存在无效的边\");\r\n // }\r\n\r\n return result;\r\n }\r\n export function SplitetArc(arc: Arc, hasEnd = false): { pts: Vector3[], buls: number[]; }\r\n {\r\n let result: { pts: Vector3[], buls: number[]; } = { pts: [], buls: [] };\r\n let bul = arc.Bul;\r\n\r\n if (Math.abs(bul) > SPLITBUL + 1e-8)\r\n {\r\n let allAngle = Math.atan(bul) * 4;\r\n let splitCount = GetSpliteCount(allAngle);\r\n\r\n let paramDiv = 1 / splitCount;\r\n let newBul = Math.tan((allAngle / splitCount) / 4);\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let param = i * paramDiv;\r\n let p = arc.GetPointAtParam(param);\r\n\r\n result.pts.push(p);\r\n result.buls.push(newBul);\r\n }\r\n }\r\n else\r\n {\r\n result.pts.push(arc.StartPoint);\r\n result.buls.push(bul);\r\n }\r\n\r\n if (hasEnd)\r\n {\r\n result.pts.push(arc.EndPoint);\r\n result.buls.push(0);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 获取封边数据\r\n * 封边数据未统一逆时针顺序,用于拆单\r\n * */\r\n export function GetBoardSealingData(br: Board): ISealingData[]\r\n {\r\n let sealCus = GetBoardSealingCurves(br);\r\n let highSeal = GetBoardHighSeal(br, sealCus);\r\n\r\n let sealData: ISealingData[] = [];\r\n\r\n for (let i = 0; i < sealCus.length; i++)\r\n {\r\n let sealCu = sealCus[i];\r\n let data = highSeal[i];\r\n let cus: Curve[] = [];\r\n if (sealCu instanceof Polyline)\r\n cus.push(...sealCu.Explode());\r\n else\r\n cus.push(sealCu);\r\n\r\n for (let cu of cus)\r\n {\r\n if (cu instanceof Line)\r\n {\r\n sealData.push(Object.assign({}, data, { length: cu.Length }));\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n let splitCount = GetSpliteCount(cu.AllAngle);\r\n let len = 2 * Math.PI * cu.Radius / 4;\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let arcLen = i !== splitCount - 1 ? len : cu.Length - (splitCount - 1) * len;\r\n if (!equaln(arcLen, 0))\r\n sealData.push(Object.assign({}, data, { length: arcLen }));\r\n }\r\n }\r\n else if (cu instanceof Circle)\r\n {\r\n let length = 2 * Math.PI * cu.Radius / 4;\r\n sealData.push(...Array.from({ length: 4 }, () =>\r\n {\r\n return { ...data, length };\r\n }));\r\n }\r\n }\r\n }\r\n if (br.ContourCurve instanceof Polyline && br.ContourCurve.Area2 < 0)\r\n sealData.reverse();\r\n return sealData;\r\n }\r\n\r\n export function GetMetalTotalEntitys(md: HardwareCompositeEntity, isHole = false, filter?: (e: Entity) => boolean)\r\n {\r\n let holes: Entity[] = [];\r\n if (isHole && !md.HardwareOption.isHole) return [];\r\n\r\n for (let e of md.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n if (!isHole || md.HardwareOption.isHole)\r\n holes.push(...GetMetalTotalEntitys(e, isHole, filter).map(h => h.ApplyMatrix(md.OCS)));\r\n }\r\n else\r\n {\r\n if (!filter || filter(e))\r\n {\r\n holes.push(e.Clone().ApplyMatrix(md.OCS));\r\n }\r\n }\r\n }\r\n return holes;\r\n }\r\n export function GetOriginBoardModelingData(br: Board)\r\n {\r\n const getModelings = (ms: IModeling[]): IOriginModelingData[] =>\r\n {\r\n let data: IOriginModelingData[] = [];\r\n\r\n for (let m of ms)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n\r\n data.push({\r\n outline: ConverToPolylineAndSplitArc(cu.Clone(), false, false),\r\n holes: m.shape.Holes.map(h => ConverToPolylineAndSplitArc(h.Curve.Clone(), false, false)),\r\n thickness: m.thickness + (m.addDepth ?? 0),\r\n dir: m.dir,\r\n knifeRadius: m.knifeRadius,\r\n });\r\n\r\n }\r\n return data;\r\n };\r\n\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n\r\n let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling]);\r\n\r\n let sideModeling = getModelings(allModeling.sideModeling);\r\n\r\n return { modeling, sideModeling };\r\n }\r\n export function GetBoardModelingData(br: Board, offsetTanslation: Vector3)\r\n {\r\n const tool = FeedingToolPath.GetInstance() as FeedingToolPath;\r\n const tMtx = MoveMatrix(offsetTanslation.clone().negate());\r\n const getModelings = (ms: IModeling[], isSide: boolean): IModelingData[] =>\r\n {\r\n let data: IModelingData[] = [];\r\n\r\n for (let m of ms)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n let paths = tool.GetModelFeedPath(br, m);\r\n if (!isSide)\r\n paths.forEach(path => path.ApplyMatrix(tMtx));\r\n\r\n let feeding = paths.map((c: ExtureContourCurve) => ConverToPolylineAndSplitArc(c, false));\r\n if (feeding.length > 0)\r\n data.push({\r\n feeding,\r\n thickness: m.thickness + (m.addDepth ?? 0),\r\n dir: m.dir,\r\n knifeRadius: m.knifeRadius,\r\n origin: {\r\n outline: ConverToPolylineAndSplitArc(cu.Clone(), false, false),\r\n holes: m.shape.Holes.map(h => ConverToPolylineAndSplitArc(h.Curve.Clone(), false, false)),\r\n addLen: m.addLen,\r\n addWidth: m.addWidth,\r\n addDepth: m.addDepth,\r\n }\r\n });\r\n else\r\n {\r\n Toaster({\r\n message: \"板件有造型或者自定义排钻无法加工,请运行造型检测命令确认\",\r\n timeout: 5000,\r\n intent: Intent.DANGER,\r\n key: \"造型加工错误\"\r\n });\r\n }\r\n }\r\n return data;\r\n };\r\n\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n\r\n let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling], false).filter(f => f.feeding.length > 0);\r\n\r\n let sideModeling = getModelings(allModeling.sideModeling, true).filter(f => f.feeding.length > 0);\r\n\r\n return { modeling, sideModeling };\r\n }\r\n\r\n /**获取板件的轮廓\r\n *有拆单尺寸返回矩形\r\n *用于拆单的轮廓统一逆时针 */\r\n export function GetSpliteOutline(br: Board, isSplite: boolean): ExtureContourCurve | undefined\r\n {\r\n let con: ExtureContourCurve = GetSpliteOutlineBySpliteSize(br);\r\n if (con)\r\n return con;\r\n\r\n con = br.ContourCurve;\r\n if (con instanceof Circle)\r\n {\r\n return con;\r\n }\r\n let cus = con.Explode();\r\n MergeCurvelist(cus);\r\n let pl = Polyline.FastCombine(cus, LINK_FUZZ);\r\n if (pl && isSplite && pl.Area2 < 0)\r\n pl.Reverse();\r\n return pl;\r\n }\r\n export function GetSpiteSize(br: Board)\r\n {\r\n let param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight, param);\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param);\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param);\r\n if (spliteHeight && spliteWidth && spliteThickness)\r\n return {\r\n spliteHeight, spliteWidth, spliteThickness\r\n };\r\n else\r\n return;\r\n }\r\n\r\n export function GetSpliteOutlineBySpliteSize(br: Board)\r\n {\r\n let size = GetSpiteSize(br);\r\n\r\n if (size)\r\n return new Polyline().RectangleFrom2Pt(new Vector3, new Vector3(size.spliteWidth, size.spliteHeight));\r\n return null;\r\n }\r\n\r\n /**孔信息,侧孔的z 均为 从上到下距离 */\r\n export function GetBoardHolesData(br: Board, offsetTanslation: Vector3, sealedContour: ExtureContourCurve): IBoardHoleInfo\r\n {\r\n let data: IBoardHoleInfo = {\r\n frontBackHoles: [],\r\n sideHoles: []\r\n };\r\n let brNormal = br.Normal;\r\n\r\n // 性能优化的解析板件网洞类\r\n // new ParseBoardHoleData(br, offsetTanslation, sealedContour);\r\n\r\n for (let [, driss] of br.DrillList)\r\n {\r\n for (let dris of driss)\r\n {\r\n for (let dId of dris)\r\n {\r\n if (!dId || dId.IsErase)\r\n continue;\r\n let d = dId.Object as CylinderHole;\r\n if (d instanceof ExtrudeHole)\r\n ParseExtrudeHoles(d, br, offsetTanslation, data, sealedContour);\r\n else\r\n ParseCylHoles(d, br, offsetTanslation, data, sealedContour);\r\n }\r\n }\r\n }\r\n\r\n if (br.RelativeHardware)\r\n {\r\n for (let dId of br.RelativeHardware)\r\n {\r\n if (dId.IsErase) continue;\r\n let d = dId.Object;\r\n let holes: Hole[] = [];\r\n if (d instanceof HardwareCompositeEntity)\r\n {\r\n holes.push(...GetMetalTotalEntitys(d, true, (e) => e instanceof Hole) as Hole[]);\r\n }\r\n for (let h of holes)\r\n {\r\n if (h instanceof ExtrudeHole)\r\n ParseExtrudeHoles(h, br, offsetTanslation, data, sealedContour, true);\r\n else\r\n ParseCylHoles(h as CylinderHole, br, offsetTanslation, data, sealedContour);\r\n }\r\n }\r\n }\r\n\r\n let modelings = br.BoardModeling;\r\n for (let nid of br.LayerNails)\r\n {\r\n if (!nid || !nid.Object || nid.IsErase)\r\n continue;\r\n let nail = nid.Object as CylinderHole;\r\n if (!isParallelTo(nail.Normal, brNormal)) continue;\r\n\r\n let sp = nail.Position.applyMatrix4(br.OCSInv);\r\n let nor = nail.Normal.multiplyScalar(nail.Height);\r\n let ep = nail.Position.add(nor).applyMatrix4(br.OCSInv);\r\n let [z0, z1] = sp.z < ep.z ? [sp.z, ep.z] : [ep.z, sp.z];\r\n\r\n if (\r\n Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6\r\n && br.ContourCurve.PtInCurve(sp.setZ(0))\r\n && modelings.every(m => !m.shape.Outline.Curve.PtInCurve(sp))\r\n )\r\n {\r\n let face = !equalv3(nail.Normal, brNormal, 1e-3) ? DrillingFace.Front : DrillingFace.Back;\r\n let depth = Math.min(z1, br.Thickness) - Math.max(z0, 0);\r\n\r\n data.frontBackHoles.push({\r\n type: nail.Type,\r\n position: sp.sub(offsetTanslation),\r\n radius: nail.Radius,\r\n depth,\r\n face,\r\n });\r\n }\r\n }\r\n\r\n for (let m of modelings)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n {\r\n let center = cu.Center.setZ(0).sub(offsetTanslation);\r\n data.frontBackHoles.push(\r\n {\r\n type: GangDrillType.Pxl,\r\n position: center,\r\n radius: cu.Radius,\r\n depth: m.thickness,\r\n face: m.dir as number\r\n }\r\n );\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n /**拆单那边需要把侧孔 z 坐标转换为从上到下 */\r\n function InvertPosition(pos: Vector3, thickness: number)\r\n {\r\n pos.z = thickness - pos.z;\r\n }\r\n function HoleInBoard(center: Vector3, radius: number, outline: ExtureContourCurve, isYMJ = false)\r\n {\r\n let cir = new Circle(center, radius - SCALAR);\r\n if (isYMJ)\r\n {\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n }\r\n else\r\n {\r\n if (userConfig.forceFilterPxl)\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0).length > 1 || outline.PtInCurve(center);\r\n }\r\n }\r\n /**分析常规排钻 */\r\n function ParseCylHoles(d: CylinderHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtureContourCurve)\r\n {\r\n let processData = br.BoardProcessOption;\r\n let brNormal = br.Normal;\r\n let roMat = new Matrix4().extractRotation(br.OCSInv);\r\n let position = d.Position.applyMatrix4(br.OCSInv);\r\n let holes = data.frontBackHoles;\r\n let face: number;\r\n let isPush = false;\r\n let endPt: Vector3;\r\n let depth = d.Height;\r\n let diffMat = br.OCSInv.multiply(d.OCS);\r\n let x = new Vector3().setFromMatrixColumn(diffMat, 0);\r\n let angle = angleTo(XAxis, x);\r\n\r\n let nor = d.Normal.applyMatrix4(roMat);\r\n let pos2 = position.clone().add(nor.multiplyScalar(depth));\r\n\r\n if (d.Type === GangDrillType.Pxl || d.Type === GangDrillType.WoodPXL)\r\n {\r\n if (isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, 1e-6)\r\n || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, 1e-6)\r\n || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz)\r\n || !HoleInBoard(position.clone().setZ(0), d.Radius, outline)) return;\r\n\r\n position.sub(offsetTanslation);\r\n face = processData[EBoardKeyList.BigHole];\r\n isPush = true;\r\n }\r\n }\r\n else if (d.Type === GangDrillType.Ljg || d.Type === GangDrillType.Wood)\r\n {\r\n if (!isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n let z = position.z;\r\n if (!IsBetweenA2B(z, -d.Radius, br.Thickness + d.Radius, 1e-6)) return;\r\n let line = new Line(position.clone().setZ(0), position.clone().setZ(0).add(d.Normal.multiplyScalar(d.Height).applyMatrix4(roMat)));\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt) return;\r\n position = pt.clone().setZ(z);\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (outline.PtInCurve(p))\r\n {\r\n endPt = p.setZ(z);\r\n break;\r\n }\r\n }\r\n if (!endPt)\r\n {\r\n console.warn(\"排钻位置有问题\");\r\n return;\r\n }\r\n holes = data.sideHoles;\r\n face = Math.floor(outline.GetParamAtPoint(pt));\r\n isPush = true;\r\n depth = position.distanceTo(endPt);\r\n angle = undefined;\r\n\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n }\r\n else if (d.Type === GangDrillType.Wood)\r\n {\r\n if (!outline.PtInCurve(position.clone().setZ(0))) return;\r\n face = position.z > 0 ? FaceDirection.Front : FaceDirection.Back;\r\n holes = data.frontBackHoles;\r\n if (position.z > 0)\r\n {\r\n let z1 = position.z - d.Height;\r\n if (z1 > 0 && z1 < br.Thickness)\r\n {\r\n depth = br.Thickness - z1;\r\n isPush = true;\r\n }\r\n }\r\n else\r\n {\r\n let z1 = position.z + d.Height;\r\n if (z1 > 0 && z1 < br.Thickness)\r\n {\r\n depth = z1;\r\n isPush = true;\r\n }\r\n }\r\n position.sub(offsetTanslation);\r\n }\r\n }\r\n else\r\n {\r\n if (isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, CanDrawHoleFuzz)\r\n || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, CanDrawHoleFuzz)\r\n || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz)\r\n || !HoleInBoard(position.clone().setZ(0), d.Radius, outline, true)) return;\r\n\r\n position.sub(offsetTanslation);\r\n holes = data.frontBackHoles;\r\n face = !equalv3(d.Normal, brNormal, 1e-3) ? 0 : 1;\r\n isPush = true;\r\n }\r\n }\r\n isPush && holes.push({\r\n type: d.Type,\r\n position,\r\n radius: d.Radius,\r\n depth,\r\n face,\r\n endPt,\r\n angle\r\n });\r\n }\r\n\r\n /**分析自定义圆柱排钻 */\r\n function ParseExtrudeHoles(d: ExtrudeHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtureContourCurve, isCheckGroove = false)\r\n {\r\n if (!d.isHole)\r\n return;\r\n\r\n let brNormal = br.Normal;\r\n let cir = d.ContourCurve;\r\n if (cir instanceof Circle)\r\n {\r\n let diffMtx = br.OCSInv.multiply(d.OCS);\r\n let nor = d.Normal;\r\n let sp = cir.Center.applyMatrix4(diffMtx);\r\n let ep = cir.Center.add(new Vector3(0, 0, d.Height)).applyMatrix4(diffMtx);\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n //#I2DPFO 在挖穿造型内的五金不加工\r\n const grooves = br.Grooves.filter(g => equaln(g.Thickness, br.Thickness));\r\n const groovesOutlines = isCheckGroove ? grooves.map(g => g.ContourCurve.Clone().ApplyMatrix(g.OCS).ApplyMatrix(br.OCSInv).Z0()) : [];\r\n\r\n if (isParallelTo(nor, brNormal, CanDrawHoleFuzz))\r\n {\r\n let z0 = Math.min(sp.z, ep.z);\r\n let z1 = Math.max(sp.z, ep.z);\r\n let p = sp.clone().setZ(0).sub(offsetTanslation);\r\n\r\n if (Math.max(z0, 0) < Math.min(z1, br.Thickness) - CanDrawHoleFuzz && outline.PtInCurve(p) && groovesOutlines.every(g => !g.PtInCurve(p)))\r\n {\r\n let depth = z0 < CanDrawHoleFuzz ? z1 : br.Thickness - z0;\r\n let angle = angleTo(XAxis, x);\r\n if (equaln(angle, Math.PI))\r\n angle = 0;\r\n if (depth > CanDrawHoleFuzz)\r\n data.frontBackHoles.push({\r\n type: d.isThrough ? GangDrillType.TK : GangDrillType.Ymj,\r\n position: z0 < CanDrawHoleFuzz ? p : p.setZ(br.Thickness),\r\n radius: cir.Radius,\r\n depth,\r\n face: z0 < CanDrawHoleFuzz ? DrillingFace.Back : DrillingFace.Front,\r\n angle: angle,\r\n });\r\n }\r\n }\r\n else\r\n {\r\n let oldZ = sp.z;\r\n let [minX, maxX] = sp.x < ep.x ? [sp.x, ep.x] : [ep.x, sp.x];\r\n let [minY, maxY] = sp.y < ep.y ? [sp.y, ep.y] : [ep.y, sp.y];\r\n\r\n\r\n if (sp.z > -cir.Radius\r\n && sp.z < br.Thickness + cir.Radius\r\n && Math.max(minX, 0) < Math.min(br.Width, maxX) + 1e-6\r\n && Math.max(minY, 0) < Math.min(br.Height, maxY) + 1e-6\r\n )\r\n {\r\n sp.setZ(0);\r\n ep.setZ(0);\r\n let line = new Line(sp, ep);\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt)\r\n {\r\n console.error(\"排钻嵌在板件内部\");\r\n return;\r\n }\r\n let position = pt.clone().setZ(oldZ);\r\n let endPt: Vector3;\r\n let face = Math.floor(outline.GetParamAtPoint(pt));\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (!equalv3(p.setZ(oldZ), position) && outline.PtInCurve(p))\r\n {\r\n endPt = p.setZ(oldZ);\r\n break;\r\n }\r\n }\r\n if (!endPt)\r\n return;\r\n let depth = position.distanceTo(endPt);\r\n\r\n if (equaln(depth, 0, CanDrawHoleFuzz))\r\n return;\r\n\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n\r\n data.sideHoles.push({\r\n type: GangDrillType.Ljg,\r\n endPt,\r\n position,\r\n radius: cir.Radius,\r\n depth,\r\n face,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n function GetBoardMetals(br: Board)\r\n {\r\n let mids = br.RelativeHardware;\r\n let metalsData = {\r\n metals: 0,\r\n comp: 0\r\n };\r\n for (let id of mids)\r\n {\r\n if (!id || id.IsErase) continue;\r\n\r\n let metals = id.Object as HardwareCompositeEntity;\r\n if (!metals.HardwareOption)\r\n continue;\r\n if (metals.HardwareOption.type === EMetalsType.Metals)\r\n {\r\n metalsData.metals++;\r\n }\r\n else\r\n {\r\n metalsData.comp++;\r\n }\r\n }\r\n return metalsData;\r\n }\r\n\r\n export function GetHardwareCompositeData(en: HardwareCompositeEntity): ISpliteHardwareData\r\n {\r\n let size = en.BoundingBoxInOCS.getSize(new Vector3);\r\n let data = { ...en.HardwareOption } as ICompHardwareOption;\r\n const actualVal = safeEval(data.actualExpr, { L: size.x, W: size.y, H: size.z });\r\n data.actualExpr = actualVal ? actualVal.toString() : data.actualExpr;\r\n data.spec = ParseExpr(data.spec, { L: size.x, W: size.y, H: size.z });\r\n data.count = (safeEval(data.count, { L: size.x, W: size.y, H: size.z }) || 0).toString();\r\n\r\n let metalData = {\r\n metalsOption: data,\r\n dataList: en.DataList,\r\n children: [],\r\n size: size\r\n };\r\n if (en instanceof HardwareCompositeEntity && (en.HardwareOption.isSplite || en.HardwareOption.isSplitePrice))\r\n {\r\n if (en.Entitys.every(e => !(e instanceof HardwareCompositeEntity || e instanceof HardwareTopline)))\r\n return metalData;\r\n for (let e of en.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n let d = GetHardwareCompositeData(e);\r\n metalData.children.push(d);\r\n }\r\n else if (e instanceof HardwareTopline)\r\n {\r\n metalData.children.push(...GetHardwareToplineData(e));\r\n }\r\n }\r\n }\r\n\r\n return metalData;\r\n }\r\n\r\n export function GetHardwareToplineData(en: HardwareTopline)\r\n {\r\n let data = { ...en.HardwareOption } as IToplineOption;\r\n let datas: ISpliteHardwareData[] = [];\r\n let map = new Map();\r\n let addLen = en.HardwareOption.addLen;\r\n let cus = en.Segmentations;\r\n let size = en.BoundingBoxInOCS.getSize(new Vector3);\r\n for (let cu of cus)\r\n {\r\n let len = parseFloat(FixedNotZero(cu.Length, 2));\r\n if (map.has(len))\r\n {\r\n map.set(len, map.get(len) + 1);\r\n }\r\n else\r\n {\r\n map.set(len, 1);\r\n }\r\n }\r\n for (let [len, count] of map)\r\n {\r\n let totalLength = parseFloat(FixedNotZero(len + parseFloat(addLen), 2));\r\n let width = parseFloat(FixedNotZero(size.y, 2));\r\n let height = parseFloat(FixedNotZero(size.z, 2));\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d = { ...en.HardwareOption };\r\n const actualVal = safeEval(data.actualExpr, { L: totalLength, W: width, H: height });\r\n d.actualExpr = actualVal ? actualVal.toString() : d.actualExpr;\r\n d.spec = ParseExpr(data.spec, { L: totalLength, W: width, H: height });\r\n datas.push({\r\n metalsOption: d,\r\n dataList: en.DataList,\r\n length: totalLength,\r\n children: [],\r\n size\r\n });\r\n }\r\n }\r\n return datas;\r\n }\r\n\r\n /**获取排钻数量 */\r\n export function GetTotalDrillCount(brs: (Board | IHardwareType)[])\r\n {\r\n return lookOverBoardInfosTool.GetCount(brs);\r\n }\r\n\r\n export function GetCabSize(brList: Board[]): Map\r\n {\r\n let brMap: Map = new Map();\r\n //根据柜名房名分类\r\n for (let b of brList)\r\n {\r\n let k = b.BoardProcessOption[EBoardKeyList.RoomName] + '-' + b.BoardProcessOption[EBoardKeyList.CabinetName];\r\n if (brMap.has(k))\r\n brMap.get(k).push(b);\r\n else\r\n brMap.set(k, [b]);\r\n }\r\n\r\n let sizeData: Map = new Map();\r\n\r\n for (let [k, brs] of brMap)\r\n {\r\n let ocsInv = brs[0].SpaceOCSInv;\r\n let box = new Box3();\r\n let size = new Vector3();\r\n for (let b of brs)\r\n {\r\n sizeData.set(b, size);\r\n box.union(b.GetBoundingBoxInMtx(ocsInv));\r\n }\r\n box.getSize(size);\r\n }\r\n return sizeData;\r\n }\r\n export function Data2Polyline(data: IContourData, isClose = true)\r\n {\r\n let pl = new Polyline(data.pts.map((p, i) => ({ pt: new Vector2(p.x, p.y), bul: data.buls[i] })));\r\n if (isClose)\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n export function Report(ens: Entity[], msg: string)\r\n {\r\n if (IsDev()) return;\r\n ShowSelectObjects(ens);\r\n SendReport(msg);\r\n\r\n }\r\n export function Get2DModeing(br: Board, offset: Vector3)\r\n {\r\n let res: I2DModeling[] = [];\r\n let tmtx = MoveMatrix(offset.clone().negate());\r\n for (let m of br.Modeling2D)\r\n {\r\n let path = m.path.Clone().ApplyMatrix(tmtx) as Polyline;\r\n res.push({\r\n path: ConverToPolylineAndSplitArc(path),\r\n dir: m.dir,\r\n items: m.items.map(item => ({ ...item }))\r\n });\r\n }\r\n return res;\r\n }\r\n export function Get3DModeing(br: Board, offset: Vector3)\r\n {\r\n let res: I3DModeling[] = [];\r\n for (let m of br.Modeling3D)\r\n {\r\n let d: I3DModeling = {\r\n path: { pts: [], buls: [] },\r\n knife: { ...m.knife },\r\n dir: m.dir\r\n };\r\n for (let i = 0; i < m.path.length - 1; i++)\r\n {\r\n let d1 = m.path[i];\r\n let d2 = m.path[i + 1];\r\n if (equaln(d1.bul, 0))\r\n {\r\n let p = d1.pt.clone();\r\n InvertPosition(p, br.Thickness);\r\n p.sub(offset);\r\n d.path.pts.push(p);\r\n d.path.buls.push(0);\r\n }\r\n else\r\n {\r\n let arc = new Arc().ParseFromBul(d1.pt.clone().sub(offset), d2.pt.clone().sub(offset), d1.bul);\r\n let r = SplitetArc(arc, false);\r\n r.pts.forEach(p => InvertPosition(p, br.Thickness));\r\n d.path.pts.push(...r.pts);\r\n d.path.buls.push(...r.buls);\r\n }\r\n if (i === m.path.length - 2)\r\n {\r\n let p = d2.pt.clone();\r\n InvertPosition(p, br.Thickness);\r\n p.sub(offset);\r\n d.path.pts.push(p);\r\n d.path.buls.push(0);\r\n }\r\n }\r\n res.push(d);\r\n }\r\n return res;\r\n }\r\n export function GetChaiDanFeedingPath(data: IChaiDanFeedingData)\r\n {\r\n const { thickness, boardContour, dir, addLen, addWidth, addDepth, knifeRadius } = data;\r\n let brContour = Data2Polyline(boardContour);\r\n const tool = FeedingToolPath.GetInstance() as FeedingToolPath;\r\n const outline = Contour.CreateContour(Data2Polyline(data.outline));\r\n const holes = data.holes.map(h => Contour.CreateContour(Data2Polyline(h)));\r\n let shape = new Shape(outline, holes);\r\n\r\n const paths = tool.GetModelFeedPath({ Thickness: thickness, ContourCurve: brContour }, {\r\n shape,\r\n thickness,\r\n dir, knifeRadius, addLen, addWidth, addDepth\r\n });\r\n\r\n return paths.map((c: ExtureContourCurve) => ConverToPolylineAndSplitArc(c, false));\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\n/**\r\n * 简化优化版本的曲线求交, 优化版本可以参考(算法导论33.2 确定任意一对线段是否相交 p599)\r\n */\r\nexport class CurveIntersection\r\n{\r\n //用来缓存的曲线包围盒\r\n protected boxMap: Map = new Map();\r\n\r\n /**\r\n * 交点数据集,key 为曲线 value 为和它相交的(曲线和交点的Map)\r\n */\r\n intersect: Map> = new Map();\r\n intersect2: Map = new Map();\r\n\r\n /**\r\n * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来\r\n * @memberof CurveIntersection\r\n */\r\n constructor(cus: Curve[], parseIntersectionParam = false, intType = IntersectOption.OnBothOperands, protected fuzz = 1e-6)\r\n {\r\n this.GenBox(cus);\r\n //按x排序\r\n this.SortCurve(cus);\r\n\r\n let count = cus.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let c1 = cus[i];\r\n let c1d = this.GetIntersect(c1);\r\n\r\n let c1b = this.boxMap.get(c1);\r\n for (let j = i + 1; j < count; j++)\r\n {\r\n let c2 = cus[j];\r\n\r\n //过滤掉不需要计算的曲线\r\n let c2b = this.boxMap.get(c2);\r\n\r\n if (c2b.min.x - c1b.max.x > fuzz)\r\n break;\r\n if (c2b.min.y - c1b.max.y > fuzz)\r\n continue;\r\n\r\n let ints = this.IntersectWith2(c1, c2, intType);\r\n if (ints.length > 0)\r\n {\r\n let pts = ints.map(i => i.pt);\r\n c1d.set(c2, pts);\r\n this.GetIntersect(c2).set(c1, pts);\r\n\r\n if (parseIntersectionParam)\r\n {\r\n this.AppendIntersectionParams(c1, ints.map(i => i.thisParam));\r\n this.AppendIntersectionParams(c2, ints.map(i => i.argParam));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected IntersectWith2(c1: Curve, c2: Curve, intType: IntersectOption)\r\n {\r\n return c1.IntersectWith2(c2, intType);\r\n }\r\n\r\n protected AppendIntersectionParams(curve: Curve, params: number[])\r\n {\r\n let arr = this.intersect2.get(curve);\r\n if (!arr)\r\n {\r\n arr = [];\r\n this.intersect2.set(curve, arr);\r\n }\r\n arr.push(...params);\r\n }\r\n\r\n protected GenBox(cus: Curve[])\r\n {\r\n for (let c of cus)\r\n this.boxMap.set(c, c.BoundingBox);\r\n }\r\n\r\n protected SortCurve(cus: Curve[])\r\n {\r\n cus.sort((c1, c2) =>\r\n {\r\n return this.boxMap.get(c1).min.x - this.boxMap.get(c2).min.x;\r\n });\r\n }\r\n\r\n GetIntersect(cu: Curve): Map\r\n {\r\n if (this.intersect.has(cu))\r\n return this.intersect.get(cu);\r\n\r\n let m = new Map();\r\n this.intersect.set(cu, m);\r\n return m;\r\n }\r\n}\r\n\r\nexport class CurveIntersection2 extends CurveIntersection\r\n{\r\n /**\r\n * Curve2Polyline使用这个时,为了避免多余的交点导致曲线切割过度,过滤掉无关的点\r\n */\r\n protected IntersectWith2(c1: Curve, c2: Curve, intType: IntersectOption)\r\n {\r\n let pts = c1.IntersectWith2(c2, intType);\r\n return pts.filter(p =>\r\n {\r\n let inC1 = c1.ParamOnCurve(p.thisParam) || c1.StartPoint.distanceTo(p.pt) < this.fuzz || c1.EndPoint.distanceTo(p.pt) < this.fuzz;\r\n if (!inC1) return false;\r\n let inC2 = c2.ParamOnCurve(p.argParam) || c2.StartPoint.distanceTo(p.pt) < this.fuzz || c2.EndPoint.distanceTo(p.pt) < this.fuzz;\r\n return inC2;\r\n });\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Polyline } from \"../api\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\nimport { CurveIntersection2 } from \"./CurveIntersection\";\r\nimport { RegionParse } from \"./RegionParse\";\r\n\r\n/**\r\n * 某些时候我们不能创建轮廓,此时我们使用类似c2r的方法来构建一个外部轮廓.\r\n */\r\nexport function CreateContour2(curves: Curve[], fuzz = 1e-4): Contour | undefined\r\n{\r\n for (let c of curves)\r\n if (c instanceof Circle)\r\n return Contour.CreateContour(c);\r\n\r\n let extendsMinDistSq = fuzz * fuzz;\r\n\r\n let intersect = new CurveIntersection2(curves, false, IntersectOption.ExtendBoth, fuzz);\r\n\r\n let curves2: Curve[] = [];\r\n\r\n //延伸+打断\r\n for (let [cu, pmap] of intersect.intersect)\r\n {\r\n let sp = cu.StartPoint;\r\n let ep = cu.EndPoint;\r\n\r\n let epExtend: Vector3;\r\n let epDist = Infinity;\r\n let spExtend: Vector3;\r\n let spDist = Infinity;\r\n\r\n let isClose = cu.IsClose;\r\n\r\n let ipts: Vector3[] = [];\r\n for (let [, pts] of pmap)\r\n {\r\n ipts.push(...pts);\r\n\r\n if (!isClose)\r\n for (let p of pts)\r\n {\r\n let d = p.distanceToSquared(ep);\r\n if (d < epDist)\r\n {\r\n epDist = d;\r\n epExtend = p;\r\n }\r\n d = p.distanceToSquared(sp);\r\n if (d < spDist)\r\n {\r\n spDist = d;\r\n spExtend = p;\r\n }\r\n }\r\n }\r\n\r\n if (!isClose)\r\n {\r\n //延伸\r\n if (epDist > 0 && epDist < extendsMinDistSq)\r\n {\r\n let param = cu.GetParamAtPoint(epExtend);\r\n if (param > cu.EndParam)\r\n cu.Extend(param);\r\n }\r\n if (spDist > 0 && spDist < extendsMinDistSq)\r\n {\r\n let param = cu.GetParamAtPoint(spExtend);\r\n if (param < 0)\r\n cu.Extend(param);\r\n }\r\n }\r\n\r\n //打断\r\n let curves: Curve[];\r\n if (ipts.length > 0)\r\n curves = cu.GetSplitCurvesByPts(ipts);\r\n else\r\n curves = [cu];\r\n\r\n let tempCus: Curve[] = [];\r\n for (let c of curves)\r\n {\r\n if (c instanceof Polyline)\r\n tempCus.push(...c.Explode());\r\n else\r\n tempCus.push(c);\r\n }\r\n\r\n curves2.push(...tempCus);\r\n }\r\n\r\n let parse = new RegionParse(curves2);\r\n\r\n for (let rs of parse.RegionsOutline)\r\n {\r\n let curves = rs.map(r => r.curve);\r\n return Contour.CreateContour(curves, false);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, Shape as TShape, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../Common/ArrayExt\";\r\nimport { curveLinkGroup } from \"../Common/CurveUtils\";\r\nimport { clamp, FixIndex } from \"../Common/Utils\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid, ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { IntersectOption, IntersectResult } from \"../GraphicsSystem/IntersectWith\";\r\nimport { LinesType } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectsBox } from \"./Box\";\r\nimport { CreateContour2 } from \"./CreateContour2\";\r\nimport { FastOffset } from \"./FastOffset\";\r\nimport { AsVector2, equaln, equalv2, equalv3, IdentityMtx4 } from \"./GeUtils\";\r\nimport { RegionParse } from \"./RegionParse\";\r\n\r\nexport enum DepthType\r\n{\r\n Front = 1,\r\n Back = 2,\r\n All = 3,\r\n}\r\n\r\nexport const ExtrudeBuildConfig = { bevel: false };\r\n\r\n/**\r\n * 槽的几何数据,包括槽的墙面和槽的盖子\r\n */\r\nexport class Groove\r\n{\r\n contourWall: ExtudeWall;//槽轮廓的墙\r\n holeWalls: ExtudeWall[] = [];//槽的网洞的墙\r\n private lid: CurveTapeShape;//槽的盖子\r\n constructor(contour: Contour,\r\n holes: Contour[],\r\n public depthType: DepthType,\r\n public depth: number,\r\n public allDepth: number,\r\n private box = contour.BoundingBox\r\n )\r\n {\r\n this.contourWall = new ExtudeWall(contour.Curve, depthType, depth, allDepth, DirectionType.Inner);\r\n for (let h of holes)\r\n this.holeWalls.push(new ExtudeWall(h.Curve, depthType, depth, allDepth, DirectionType.Outer));\r\n\r\n this.lid = new CurveTapeShape(contour, holes);\r\n }\r\n\r\n /**\r\n * @param groove this - groove\r\n * @param [eachOther=true] 相互裁剪\r\n */\r\n ClipTo(groove: Groove, eachOther = true)\r\n {\r\n //相同深度和面不用操作\r\n if (groove.depthType === this.depthType && groove.depth === this.depth) return;\r\n\r\n if (!IntersectsBox(this.box, groove.box)) return;\r\n\r\n this.ClipLid(groove);\r\n groove.ClipLid(this);\r\n\r\n //一正一反,不交集\r\n if (this.depthType + groove.depthType === 3 && this.depth + groove.depth < this.allDepth)\r\n return;\r\n\r\n this.contourWall.ClipTo(groove, true);\r\n for (let wall of this.holeWalls)\r\n wall.ClipTo(groove, true);\r\n\r\n if (eachOther)\r\n {\r\n groove.contourWall.ClipTo(this, false);\r\n for (let wall of groove.holeWalls)\r\n wall.ClipTo(this, false);\r\n }\r\n }\r\n\r\n private ClipLid(groove: Groove)\r\n {\r\n if (this.depthType === DepthType.All) return;\r\n if (groove.depthType === DepthType.All) return;\r\n\r\n if (this.depthType === groove.depthType)\r\n {\r\n if (groove.depth > this.depth)\r\n this.lid.ClipTo(groove.lid, true);\r\n else\r\n this.lid.SplitTo(groove.lid);\r\n }\r\n else\r\n {\r\n if (this.depth + groove.depth >= this.allDepth)\r\n this.lid.ClipTo(groove.lid, true);\r\n else\r\n this.lid.SplitTo(groove.lid);\r\n }\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild, rotateUv: boolean)\r\n {\r\n this.contourWall.Draw(verticesArray, uvArray, edgeBuild);\r\n for (let wall of this.holeWalls)\r\n wall.Draw(verticesArray, uvArray, edgeBuild);\r\n\r\n if (this.depthType === DepthType.All) return;\r\n\r\n let isFront = this.depthType === DepthType.Front;\r\n this.lid.Draw(verticesArray, uvArray, isFront, isFront ? this.allDepth - this.depth : this.depth, rotateUv, this.allDepth);\r\n }\r\n}\r\n\r\nfunction GetShape(cu: ExtureContourCurve): TShape\r\n{\r\n if (cu instanceof Circle)\r\n {\r\n let sp = new TShape();\r\n let cen = cu.Center;\r\n sp.ellipse(cen.x, cen.y, cu.Radius, cu.Radius, 0, 2 * Math.PI, false, 0);\r\n return sp;\r\n }\r\n else\r\n {\r\n if (cu.OCSNoClone !== IdentityMtx4)\r\n cu.UpdateMatrixTo(IdentityMtx4);\r\n return cu.Shape;\r\n }\r\n}\r\n\r\nfunction CreateTape(faceType: DepthType, startParam: number, endParam: number, depth: number, allDepth: number): Tape\r\n{\r\n if (faceType === DepthType.Front)\r\n return new Tape(startParam, endParam, allDepth - depth, allDepth);\r\n else\r\n return new Tape(startParam, endParam, 0, depth);\r\n}\r\n\r\n//朝向类型\r\nenum DirectionType\r\n{\r\n Outer = 0,//外墙\r\n Inner = 1 //内墙\r\n}\r\n\r\n//轮廓树节点,用于重新确认外墙和网洞的关系\r\nexport class ContourTreeNode\r\n{\r\n parent: ContourTreeNode;//当存在Parent时,表示它是一个洞\r\n constructor(public contour: Contour, public children: ContourTreeNode[] = []) { }\r\n\r\n SetParent(node: ContourTreeNode)\r\n {\r\n this.parent = node;\r\n node.children.push(this);\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean, allDepth: number)//, depth = 1\r\n {\r\n // TestDraw(this.contour.Curve, depth);\r\n let pts = this.contour.Curve.GetStretchPoints();\r\n\r\n let isFace: boolean;\r\n let ptsChoking: Vector3[];\r\n if (ExtrudeBuildConfig.bevel)\r\n {\r\n //进行内缩,使得可以正常倒角\r\n isFace = (z === 0 || z === 18);//是正反面\r\n if (isFace)\r\n {\r\n ptsChoking = FastOffset(pts, 1, true);\r\n [pts, ptsChoking] = [ptsChoking, pts];\r\n }\r\n }\r\n\r\n let vertices = [...pts];\r\n let holes = this.children.map(h =>\r\n {\r\n // TestDraw(h.contour.Curve, depth + 1);\r\n let pts = h.contour.Curve.GetStretchPoints();\r\n vertices.push(...pts);\r\n return pts;\r\n });\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, holes);\r\n\r\n for (let f of faces)\r\n {\r\n if (front)\r\n {\r\n AddVertice(vertices[f[0]]);\r\n AddVertice(vertices[f[1]]);\r\n AddVertice(vertices[f[2]]);\r\n }\r\n else\r\n {\r\n AddVertice(vertices[f[0]]);\r\n AddVertice(vertices[f[2]]);\r\n AddVertice(vertices[f[1]]);\r\n }\r\n }\r\n\r\n function AddVertice(v: Vector3, inz = z)\r\n {\r\n verticesArray.push(v.x, v.y, inz);\r\n if (rotateUv)\r\n uvArray.push(v.y * 1e-3, v.x * 1e-3);\r\n else\r\n uvArray.push(v.x * 1e-3, v.y * 1e-3);\r\n }\r\n\r\n for (let hole of this.children)\r\n {\r\n for (let h of hole.children)\r\n {\r\n h.Draw(verticesArray, uvArray, front, z, rotateUv, allDepth);//, depth + 2\r\n }\r\n }\r\n\r\n if (!ExtrudeBuildConfig.bevel || !isFace) return;//如果不倒角 就不执行下面的代码\r\n\r\n let z2 = front ? z - 1 : z + 1;\r\n\r\n //构建倒角边\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p1 = pts[i];\r\n let nextIndex = FixIndex(i + 1, pts);\r\n let p2 = pts[nextIndex];\r\n\r\n let p3 = ptsChoking[i];\r\n let p4 = ptsChoking[nextIndex];\r\n\r\n if (front)\r\n {\r\n AddVertice(p3, z2);\r\n AddVertice(p4, z2);\r\n AddVertice(p1);\r\n\r\n AddVertice(p1);\r\n AddVertice(p4, z2);\r\n AddVertice(p2);\r\n }\r\n else\r\n {\r\n AddVertice(p3, z2);\r\n AddVertice(p1);\r\n AddVertice(p4, z2);\r\n\r\n AddVertice(p1);\r\n AddVertice(p2);\r\n AddVertice(p4, z2);\r\n }\r\n }\r\n }\r\n\r\n static ParseContourTree(contourNodes: ContourTreeNode[]): void\r\n {\r\n contourNodes.sort((c1, c2) => c1.contour.Curve.Area - c2.contour.Curve.Area);\r\n for (let i = 0; i < contourNodes.length; i++)\r\n {\r\n const node1 = contourNodes[i];\r\n let p = node1.contour.Curve.StartPoint;\r\n for (let j = i + 1; j < contourNodes.length; j++)\r\n {\r\n const node2 = contourNodes[j];\r\n if (node2.contour.BoundingBox.intersectsBox(node1.contour.BoundingBox)\r\n && node2.contour.Curve.PtInCurve(p))\r\n {\r\n node1.SetParent(node2);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass EdgeGeometryBuild\r\n{\r\n lineVerticesArray: number[] = [];\r\n\r\n frontLines: Line[] = [];\r\n backLines: Line[] = [];\r\n constructor(public allDepth: number) { }\r\n AddLidLine(p1: Vector3, p2: Vector3, depth: number)\r\n {\r\n if (depth === 0)\r\n {\r\n p1 = p1.clone().setZ(0);\r\n p2 = p2.clone().setZ(0);\r\n let line = new Line(p1, p2);\r\n this.backLines.push(line);\r\n }\r\n else if (depth === this.allDepth)\r\n {\r\n p1 = p1.clone().setZ(0);\r\n p2 = p2.clone().setZ(0);\r\n let line = new Line(p1, p2);\r\n this.frontLines.push(line);\r\n }\r\n }\r\n\r\n BuildLid(verticesArray: number[], uvArray: number[], rotateUv: boolean)\r\n {\r\n let arr = [this.backLines, this.frontLines];\r\n\r\n for (let index = 0; index < 2; index++)\r\n {\r\n let lines = arr[index];\r\n let parse = new RegionParse(lines, 2);\r\n let contourNodes: ContourTreeNode[] = [];\r\n for (let routes of parse.RegionsOutline)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false) ?? CreateContour2(cs);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"未能构建盖子\");\r\n }\r\n\r\n ContourTreeNode.ParseContourTree(contourNodes);\r\n\r\n for (let j = contourNodes.length; j--;)\r\n {\r\n let node = contourNodes[j];\r\n if (node.parent) continue;\r\n\r\n node.Draw(verticesArray, uvArray, index === 1, this.allDepth * index, rotateUv, this.allDepth);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 胶带\r\n */\r\nclass Tape\r\n{\r\n constructor(\r\n public start: number,\r\n public end: number,\r\n\r\n public bottom: number,\r\n public top: number\r\n )\r\n {\r\n\r\n }\r\n\r\n //用于测试\r\n get Curve()\r\n {\r\n return new Polyline().RectangleFrom2Pt(new Vector3(this.start, this.bottom), new Vector3(this.end, this.top));\r\n }\r\n\r\n Clip(t: this): Tape[]\r\n {\r\n let yr = IntersectRange(this.bottom, this.top, t.bottom, t.top, 1e5);\r\n if (yr === undefined) return [this];\r\n\r\n let xr = IntersectRange(this.start, this.end, t.start, t.end, 1e5);\r\n if (xr === undefined) return [this];\r\n\r\n let rem = SubtractRange(this.start, this.end, t.start, t.end, 1e5).map(r =>\r\n {\r\n return new Tape(r[0], r[1], this.bottom, this.top);\r\n });\r\n\r\n let remR = SubtractRange(this.bottom, this.top, t.bottom, t.top, 1e5);\r\n for (let hr of remR)\r\n {\r\n rem.push(new Tape(xr[0], xr[1], hr[0], hr[1]));\r\n }\r\n return rem;\r\n }\r\n\r\n Split(xlst: number[]): Tape[]\r\n {\r\n let ret: Tape[] = [];\r\n let pre = this.start;\r\n for (let x of xlst)\r\n {\r\n if (x > pre)\r\n {\r\n if (x >= this.end) x = this.end;\r\n if (equaln(pre, x)) continue;\r\n ret.push(new Tape(pre, x, this.bottom, this.top));\r\n pre = x;\r\n if (x === this.end) break;\r\n }\r\n }\r\n return ret;\r\n }\r\n}\r\n\r\n/**\r\n * 二维形状,内部用曲线胶带表示(用来计算盖子差集算法)\r\n */\r\nexport class CurveTapeShape\r\n{\r\n children: CurveTapeShape[] = [];\r\n contour: CurveTape;\r\n holes: CurveTape[];\r\n constructor(contour: Contour, holes: Contour[])\r\n {\r\n this.contour = new CurveTape(contour, DirectionType.Outer);\r\n this.holes = holes.map(h => new CurveTape(h, DirectionType.Inner));\r\n }\r\n\r\n CloneNew()\r\n {\r\n let s = new CurveTapeShape(this.contour.contour, this.holes.map(h => h.contour));\r\n return s;\r\n }\r\n\r\n /**\r\n * 删除包含,同向\r\n */\r\n ClipTo(s: CurveTapeShape, append: boolean = false)\r\n {\r\n for (let c of [this.contour, ... this.holes])\r\n if (c.tapes.length > 0)\r\n c.ClipTo(s);\r\n\r\n if (append)\r\n {\r\n let sn = s.CloneNew();\r\n sn.ReverseClipTo(this);\r\n this.children.push(sn);\r\n }\r\n }\r\n\r\n //合理打断(以保证三维网格对齐(否则圆弧点将无法正确的对齐))\r\n SplitTo(s: CurveTapeShape)\r\n {\r\n for (let c of [this.contour, ...this.holes])\r\n {\r\n for (let c2 of [s.contour, ...s.holes])\r\n {\r\n let int = GetIntersection(c.contour.Curve, c2.contour.Curve);\r\n c.splitParams.push(...int.map(i => i.thisParam));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 只保留被包含部分\r\n */\r\n private ReverseClipTo(s: CurveTapeShape): this\r\n {\r\n for (let c of [this.contour, ... this.holes])\r\n if (c.tapes.length > 0)\r\n c.ReverseClipTo(s);\r\n\r\n return this;\r\n }\r\n\r\n ChildrenClip()\r\n {\r\n for (let i = 0; i < this.children.length; i++)\r\n {\r\n let s1 = this.children[i];\r\n for (let j = i + 1; j < this.children.length; j++)\r\n {\r\n let s2 = this.children[j];\r\n\r\n s1.ClipTo(s2, false);\r\n s2.ClipTo(s1, false);\r\n }\r\n }\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean, allDepth: number)\r\n {\r\n this.ChildrenClip();\r\n\r\n let polylines: Polyline[] = this.contour.Curves;\r\n\r\n for (let h of this.holes)\r\n polylines.push(...h.Curves);\r\n\r\n for (let s of this.children)\r\n {\r\n polylines.push(...s.contour.Curves);\r\n for (let h of s.holes)\r\n polylines.push(...h.Curves);\r\n }\r\n\r\n // TestDraw(polylines, z);\r\n let groups = curveLinkGroup(polylines);\r\n let contourNodes: ContourTreeNode[] = [];\r\n for (let cus of groups)\r\n {\r\n let c = Contour.CreateContour(cus, false);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"出错\");\r\n }\r\n\r\n ContourTreeNode.ParseContourTree(contourNodes);\r\n\r\n for (let j = contourNodes.length; j--;)\r\n {\r\n let node = contourNodes[j];\r\n // TestDraw(s.contour.Curve.Clone(), z);\r\n if (node.parent) continue;\r\n\r\n node.Draw(verticesArray, uvArray, front, z, rotateUv, allDepth);\r\n }\r\n }\r\n}\r\n\r\nconst SplitLength = 4;\r\nconst MinSplitCount = 12;\r\nconst MaxSplitCount = 360;\r\nfunction SplitCurveParams(cu: ExtureContourCurve): number[]\r\n{\r\n let xparams: number[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), MinSplitCount, MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n xparams.push(i / splitCount);\r\n }\r\n else\r\n //分段1\r\n for (let i = 0; i < cu.EndParam; i++)\r\n {\r\n xparams.push(i);\r\n if (cu.GetBuilgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), MinSplitCount, MaxSplitCount);\r\n if (splitCount === 0) continue;\r\n\r\n let a = Math.PI * 2 / splitCount;\r\n let params: number[] = [];\r\n for (let j = 0; j < splitCount; j++)\r\n {\r\n let param = arc.GetParamAtAngle(a * j);\r\n if (arc.ParamOnCurve(param))\r\n params.push(param);\r\n }\r\n arraySortByNumber(params);\r\n if (params.length === 0) continue;\r\n\r\n for (let p of params)\r\n {\r\n if (p > 1e-5 && p < 9.99999)\r\n xparams.push(p + i);\r\n }\r\n }\r\n }\r\n xparams.push(cu.EndParam);\r\n return xparams;\r\n}\r\n\r\n/**\r\n * 曲线胶带(一维)\r\n */\r\nclass CurveTape\r\n{\r\n tapes: Range[];\r\n splitParams: number[] = [];\r\n constructor(public contour: Contour, public wallType: DirectionType)\r\n {\r\n this.tapes = [[0, this.contour.Curve.EndParam]];\r\n }\r\n\r\n get Curves(): Polyline[]\r\n {\r\n let xparams: number[] = SplitCurveParams(this.contour.Curve);\r\n if (this.splitParams.length > 0)\r\n {\r\n xparams.push(...this.splitParams);\r\n arraySortByNumber(xparams);\r\n arrayRemoveDuplicateBySort(xparams, (p1, p2) => equaln(p1, p2));\r\n }\r\n\r\n let polylines: Polyline[] = [];\r\n\r\n function TD(p: Vector3): PolylineProps\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n }\r\n\r\n const addPolyline = (t: Range) =>\r\n {\r\n let pts = [TD(this.contour.Curve.GetPointAtParam(t[0]))];\r\n for (let x of xparams)\r\n {\r\n if (x <= t[0]) continue;\r\n if (x >= t[1]) break;\r\n\r\n pts.push(TD(this.contour.Curve.GetPointAtParam(x)));\r\n }\r\n pts.push(TD(this.contour.Curve.GetPointAtParam(t[1])));\r\n\r\n let pl = new Polyline(pts);\r\n polylines.push(pl);\r\n };\r\n\r\n for (let t of this.tapes)\r\n {\r\n if (t[0] > t[1])\r\n {\r\n addPolyline([0, t[1]]);\r\n addPolyline([t[0], this.contour.Curve.EndParam]);\r\n }\r\n else\r\n addPolyline(t);\r\n }\r\n return polylines;\r\n }\r\n\r\n /**\r\n * 分析与另一个形状的包含关系\r\n */\r\n Parse(s: CurveTapeShape): CurveParamRangeRelation\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.contour.Curve, s.contour.contour.Curve);\r\n if (this.wallType === DirectionType.Inner)\r\n [res1.syntropy, res1.reverse] = [res1.reverse, res1.syntropy];\r\n if (res1.container.length > 0)\r\n {\r\n for (let h of s.holes)\r\n {\r\n let [res2] = ParseCurveParamRangeRelation(this.contour.Curve, h.contour.Curve);\r\n if (this.wallType === DirectionType.Outer)\r\n [res2.syntropy, res2.reverse] = [res2.reverse, res2.syntropy];\r\n\r\n res1.syntropy.push(...res2.syntropy);\r\n res1.reverse.push(...res2.reverse);\r\n\r\n res1.container = SubtractRanges(res1.container, res2.container, this.contour.Curve.EndParam);\r\n res1.container = SubtractRanges(res1.container, res2.syntropy, this.contour.Curve.EndParam);\r\n res1.container = SubtractRanges(res1.container, res2.reverse, this.contour.Curve.EndParam);\r\n }\r\n }\r\n return res1;\r\n }\r\n\r\n /**\r\n * 删除包含,同向面\r\n */\r\n ClipTo(s: CurveTapeShape): this\r\n {\r\n let d = this.Parse(s);\r\n\r\n this.tapes = SubtractRanges(this.tapes, d.container, this.contour.Curve.EndParam);\r\n this.tapes = SubtractRanges(this.tapes, d.syntropy, this.contour.Curve.EndParam);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 保留被包含的部分\r\n */\r\n ReverseClipTo(s: CurveTapeShape): this\r\n {\r\n this.tapes = this.Parse(s).container;\r\n return this;\r\n }\r\n}\r\n\r\nclass ExtudeWall\r\n{\r\n //胶带(立面)\r\n private Tape: Tape[];\r\n constructor(public curve: ExtureContourCurve,\r\n public depthType: DepthType,\r\n public depth: number,\r\n public allDepth: number,\r\n public wallType: DirectionType\r\n )\r\n {\r\n //一整段\r\n this.Tape = [CreateTape(depthType, 0, this.curve.EndParam, depth, allDepth)];\r\n }\r\n\r\n /**\r\n * 减去在另一个groove内的部分\r\n * @param groove this - groove\r\n * @param [clipSyntropy=false] 删除同向的面\r\n */\r\n ClipTo(groove: Groove, clipSyntropy = false)\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.curve, groove.contourWall.curve);\r\n if (this.wallType !== groove.contourWall.wallType)\r\n [res1.syntropy, res1.reverse] = [res1.reverse, res1.syntropy];\r\n if (res1.container.length > 0)\r\n {\r\n for (let h of groove.holeWalls)\r\n {\r\n let [resh1] = ParseCurveParamRangeRelation(this.curve, h.curve);\r\n\r\n //翻转\r\n if (this.wallType !== h.wallType)\r\n [resh1.syntropy, resh1.reverse] = [resh1.reverse, resh1.syntropy];\r\n\r\n //删除在网洞内的\r\n let subParams: [number, number][];\r\n if (clipSyntropy)\r\n subParams = resh1.container;//删除共面,\r\n else\r\n subParams = [...resh1.container, ...resh1.syntropy];//保留共面部分\r\n\r\n for (let i of subParams)\r\n {\r\n let rems: [number, number][] = [];\r\n for (let r of res1.container)\r\n rems.push(...SubtractRange(r[0], r[1], i[0], i[1], this.curve.EndParam));\r\n res1.container = rems;\r\n }\r\n }\r\n }\r\n\r\n let params = [...res1.container, ...res1.reverse];\r\n if (clipSyntropy)\r\n params.push(...res1.syntropy);\r\n\r\n for (let c of params)\r\n this.ClipFromParam(c[0], c[1], groove.depthType, groove.depth);\r\n }\r\n\r\n ClipReverse(wall: this)\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.curve, wall.curve);\r\n for (let c of res1.syntropy)\r\n this.ClipFromParam(c[0], c[1], wall.depthType, wall.depth);\r\n }\r\n\r\n /**\r\n * 当起始参数大于终止参数时,裁剪的区域经过终点\r\n *\r\n * @param startParam 起始参数\r\n * @param endParam 终止参数\r\n * @param faceType 裁剪面朝向\r\n * @param depth 裁剪面的深度\r\n */\r\n ClipFromParam(startParam: number, endParam: number, faceType: DepthType, depth: number)\r\n {\r\n if (equaln(startParam, endParam)) return;\r\n if (startParam > endParam)\r\n {\r\n this.ClipFromParam(startParam, this.curve.EndParam, faceType, depth);\r\n this.ClipFromParam(0, endParam, faceType, depth);\r\n return this;\r\n }\r\n\r\n let subTape = CreateTape(faceType, startParam, endParam, depth, this.allDepth);\r\n let taps: Tape[] = [];\r\n for (let t of this.Tape)\r\n taps.push(...t.Clip(subTape));\r\n\r\n this.Tape = taps;\r\n return this;\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild)\r\n {\r\n let xparams = SplitCurveParams(this.curve);\r\n\r\n let isOuter = this.wallType === DirectionType.Outer;\r\n let allDepth = this.allDepth;\r\n\r\n function AddVertice(v: Vector3)\r\n {\r\n verticesArray.push(v.x);\r\n verticesArray.push(v.y);\r\n\r\n if (isOuter && ExtrudeBuildConfig.bevel)//如果倒角,则执行下面的代码\r\n {\r\n if (v.z === 0)\r\n verticesArray.push(1);\r\n else if (v.z === allDepth)\r\n verticesArray.push(allDepth - 1);\r\n else\r\n verticesArray.push(v.z);\r\n }\r\n else\r\n verticesArray.push(v.z);\r\n }\r\n\r\n let tapes: Tape[] = [];\r\n this.Tape.sort((t1, t2) => t1.start - t2.start);\r\n for (let tape of this.Tape)\r\n tapes.push(...tape.Split(xparams));\r\n for (let i = 0; i < tapes.length; i++)\r\n {\r\n let preIndex = FixIndex(i - 1, tapes);\r\n let nextIndex = FixIndex(i + 1, tapes);\r\n\r\n let tape = tapes[i];\r\n let preTape = tapes[preIndex];\r\n let nextTape = tapes[nextIndex];\r\n\r\n let p1 = this.curve.GetPointAtParam(tape.start).setZ(tape.bottom);\r\n let p2 = this.curve.GetPointAtParam(tape.end).setZ(tape.bottom);\r\n let vs = [p1, p2, p2.clone().setZ(tape.top), p1.clone().setZ(tape.top), p1];\r\n edgeBuild.AddLidLine(p1, p2, tape.bottom);\r\n edgeBuild.AddLidLine(p1, p2, tape.top);\r\n\r\n //#region 构造线框\r\n {\r\n let leftRanges: Range[];\r\n let rightRange: Range[];\r\n\r\n const IsInteger = (n: number) => equaln(n, Math.round(n), 1e-8);\r\n\r\n if (!IsInteger(tape.start) && equaln(tape.start, preTape.end))\r\n leftRanges = SubtractRange(tape.bottom, tape.top, preTape.bottom, preTape.top, this.allDepth);\r\n else\r\n leftRanges = [[tape.bottom, tape.top]];\r\n\r\n if (equaln(tape.end, nextTape.start))\r\n rightRange = SubtractRange(tape.bottom, tape.top, nextTape.bottom, nextTape.top, this.allDepth);\r\n else\r\n rightRange = [[tape.bottom, tape.top]];\r\n\r\n //上下两条线\r\n edgeBuild.lineVerticesArray.push(\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n\r\n p1.x, p1.y, tape.top,\r\n p2.x, p2.y, tape.top,\r\n );\r\n\r\n //左右线\r\n for (let range of leftRanges)\r\n {\r\n edgeBuild.lineVerticesArray.push(\r\n p1.x, p1.y, range[0],\r\n p1.x, p1.y, range[1]);\r\n }\r\n for (let range of rightRange)\r\n {\r\n edgeBuild.lineVerticesArray.push(\r\n p2.x, p2.y, range[0],\r\n p2.x, p2.y, range[1]);\r\n }\r\n }\r\n //#endregion\r\n\r\n //和X平行平行\r\n let isXPar = (vs[0].y + vs[1].y + vs[2].y) < 0.01;\r\n\r\n function AddUv(p: Vector3)\r\n {\r\n if (isXPar)\r\n uvArray.push((p.z - 1) * 1e-3, p.y * 1e-3);\r\n else\r\n uvArray.push((p.z - 1) * 1e-3, p.x * 1e-3);\r\n }\r\n if (this.wallType === DirectionType.Outer)\r\n {\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[1]);\r\n AddUv(vs[1]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n AddVertice(vs[3]);\r\n AddUv(vs[3]);\r\n }\r\n else\r\n {\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n AddVertice(vs[1]);\r\n AddUv(vs[1]);\r\n\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[3]);\r\n AddUv(vs[3]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 曲线参数范围关系(包含,分离,同向共线,反向共线)\r\n * 用来表示某一曲线在另一个曲线内的关系\r\n */\r\ninterface CurveParamRangeRelation\r\n{\r\n outer: Range[];//外部\r\n container: Range[];//被包含\r\n syntropy: Range[];//同向\r\n reverse: Range[];//反向\r\n}\r\n\r\nfunction CloneCurveRange(r: CurveParamRangeRelation): CurveParamRangeRelation\r\n{\r\n return {\r\n outer: r.outer.slice(),\r\n container: r.container.slice(),\r\n syntropy: r.syntropy.slice(),\r\n reverse: r.reverse.slice(),\r\n };\r\n}\r\n\r\ninterface CurveSegs\r\n{\r\n outer: Curve[];//外部\r\n container: Curve[];//被包含\r\n syntropy: Curve[];//同向\r\n reverse: Curve[];//反向\r\n}\r\n\r\nfunction binarySearch(ar: number[], el: number): number\r\n{\r\n let m = 0;\r\n let n = ar.length - 1;\r\n while (m <= n)\r\n {\r\n let k = (n + m) >> 1;\r\n let cmp = (el - ar[k]);\r\n if (cmp > 1e8)\r\n m = k + 1;\r\n else if (cmp < -1e8)\r\n n = k - 1;\r\n else\r\n return k;\r\n }\r\n return -m - 1;\r\n}\r\n\r\nfunction CurveSplit(cu: Curve, range: CurveParamRangeRelation): CurveSegs\r\n{\r\n let segs = { outer: [], container: [], syntropy: [], reverse: [] };\r\n\r\n let ranges: Range[] = [...range.outer, ...range.container, ...range.syntropy, ...range.reverse];\r\n\r\n ranges.sort((r1, r2) => r1[0] - r2[0]);\r\n\r\n let params: number[] = ranges.flat();\r\n arrayRemoveDuplicateBySort(params, (p1, p2) => equaln(p1, p2));\r\n let cus = cu.GetSplitCurves(params);\r\n\r\n for (let key in range)\r\n {\r\n for (let r of range[key])\r\n {\r\n let i = binarySearch(params, r[0]);\r\n segs[key].push(cus[i]);\r\n }\r\n }\r\n\r\n return segs;\r\n}\r\n\r\n/**\r\n * 分析两个曲线关系(包含,分离,同向共线,反向共线)(用参数范围表示)\r\n */\r\nfunction ParseCurveParamRangeRelation(cu1: ExtureContourCurve, cu2: ExtureContourCurve, reverseParse = false): [CurveParamRangeRelation, CurveParamRangeRelation]\r\n{\r\n let ins = GetIntersection(cu1, cu2);\r\n\r\n let c1Res: CurveParamRangeRelation = { container: [], syntropy: [], reverse: [], outer: [] };\r\n let c2Res: CurveParamRangeRelation = { container: [], syntropy: [], reverse: [], outer: [] };\r\n if (ins.length === 0)\r\n {\r\n if (cu1 instanceof Circle && cu2 instanceof Circle && equaln(cu1.Radius, cu2.Radius, 1e-4) && equalv2(cu1.Center, cu2.Center, 1e-4))\r\n {\r\n c1Res.syntropy.push([0, 1]);\r\n c2Res.syntropy.push([0, 1]);\r\n return [c1Res, c2Res];\r\n }\r\n\r\n if (cu2.PtInCurve(cu1.StartPoint))\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (cu1.PtInCurve(cu2.StartPoint))\r\n c2Res.container.push([0, cu2.EndParam]);\r\n else\r\n c2Res.outer.push([0, cu2.EndParam]);\r\n\r\n return [c1Res, c2Res];\r\n }\r\n\r\n type CurveSeg = {\r\n startParam: number;\r\n endParam: number;\r\n startPoint: Vector3;\r\n endPoint: Vector3;\r\n used?: boolean;\r\n };\r\n\r\n //解析出线段列表\r\n let c1Curves: CurveSeg[] = [];\r\n let c2Curves: CurveSeg[] = [];\r\n\r\n ins.sort((a1, a2) => a1.thisParam - a2.thisParam);\r\n //点重复->下方ins会sort,导致交点对应不上,导致错误\r\n arrayRemoveDuplicateBySort(ins, (i1, i2) => equalv3(i1.pt, i2.pt, 1e-4));\r\n if (ins.length > 1 && equalv3(ins[0].pt, ins[ins.length - 1].pt, 1e-4)) ins.pop();\r\n for (let i = 0; i < ins.length; i++)\r\n {\r\n let n1 = ins[i];\r\n let n2 = ins[FixIndex(i + 1, ins)];\r\n c1Curves.push({ startParam: n1.thisParam, endParam: n2.thisParam, startPoint: n1.pt, endPoint: n2.pt });\r\n }\r\n ins.sort((a1, a2) => a1.argParam - a2.argParam);\r\n for (let i = 0; i < ins.length; i++)\r\n {\r\n let n1 = ins[i];\r\n let n2 = ins[FixIndex(i + 1, ins)];\r\n c2Curves.push({ startParam: n1.argParam, endParam: n2.argParam, startPoint: n1.pt, endPoint: n2.pt });\r\n }\r\n\r\n //分析共边关系和包含关系\r\n for (let c of c1Curves)\r\n {\r\n let c1MidPoint = CenterPoint(cu1, c.startParam, c.endParam);\r\n for (let c2 of c2Curves)\r\n {\r\n if (c2.used)\r\n continue;\r\n\r\n let c2MidPoint = CenterPoint(cu2, c2.startParam, c2.endParam);\r\n if (!equalv3(c1MidPoint, c2MidPoint, 1e-4))\r\n continue;\r\n\r\n c.used = true;\r\n if (c.startPoint === c2.startPoint\r\n && c.endPoint === c2.endPoint)\r\n {\r\n c1Res.syntropy.push([c.startParam, c.endParam]);\r\n c2Res.syntropy.push([c2.startParam, c2.endParam]);\r\n c2.used = true;\r\n break;\r\n }\r\n else if (c.startPoint === c2.endPoint\r\n && c.endPoint === c2.startPoint)\r\n {\r\n c1Res.reverse.push([c.startParam, c.endParam]);\r\n c2Res.reverse.push([c2.startParam, c2.endParam]);\r\n c2.used = true;\r\n break;\r\n }\r\n else\r\n c.used = false;\r\n }\r\n\r\n if (!c.used)\r\n {\r\n if (cu2.PtInCurve(c1MidPoint))\r\n c1Res.container.push([c.startParam, c.endParam]);\r\n else\r\n c1Res.outer.push([c.startParam, c.endParam]);\r\n }\r\n }\r\n\r\n //只分析包含关系\r\n if (reverseParse)\r\n for (let c of c2Curves)\r\n {\r\n if (c.used) continue;\r\n let p = CenterPoint(cu2, c.startParam, c.endParam);\r\n if (cu1.PtInCurve(p))\r\n c2Res.container.push([c.startParam, c.endParam]);\r\n else\r\n c2Res.outer.push([c.startParam, c.endParam]);\r\n }\r\n return [c1Res, c2Res];\r\n}\r\n\r\nfunction CenterPoint(cu: ExtureContourCurve, start: number, end: number)\r\n{\r\n let lenStart = cu.GetDistAtParam(start);\r\n let lenEnd = cu.GetDistAtParam(end);\r\n if (end > start)\r\n return cu.GetPointAtDistance((lenEnd + lenStart) * 0.5);\r\n\r\n let lenAll = cu.Length;\r\n let lenDiv = ((lenAll - lenStart) + lenEnd) * 0.5;\r\n\r\n if (lenStart + lenDiv >= lenAll)\r\n return cu.GetPointAtDistance(lenStart + lenDiv - lenAll);\r\n else\r\n return cu.GetPointAtDistance(lenStart + lenDiv);\r\n}\r\n\r\n//求参数并集部分,交集部分,差集部分\r\n\r\n//求 ab 和 cd 的并集部分\r\nfunction UnionRange(a: number, b: number, c: number, d: number, end: number): [number, number][]\r\n{\r\n let b1 = b < a ? b + end : b;\r\n let d1 = d < c ? d + end : d;\r\n let a1 = a;\r\n let c1 = c;\r\n\r\n if (c < a)\r\n [a1, b1, c1, d1] = [c1, d1, a1, b1];\r\n\r\n if (c1 > b1)\r\n return [[a, b], [c, d]];\r\n\r\n let e = Math.max(b1, d1);\r\n if (e >= end)\r\n {\r\n e -= end;\r\n if (e > a1)\r\n return [[0, end]];\r\n }\r\n\r\n return [[a1, e]];\r\n}\r\n\r\n// //0-1\r\n// UnionRange(0.5, 0.3, 0.3, 0.5, 1);//?\r\n\r\n// //0-1\r\n// UnionRange(0.4, 0.3, 0.3, 0.5, 1);//?\r\n\r\n// //[ [ 0.8, 0.1 ], [ 0.3, 0.5 ] ]\r\n// UnionRange(0.8, 0.1, 0.3, 0.5, 1);//?\r\n\r\n// //[ 0.3, 0.10000000000000009 ] ] \r\n// UnionRange(0.8, 0.1, 0.3, 0.9, 1);//?\r\n\r\nfunction SubtractRange(a: number, b: number, c: number, d: number, end: number): Range[]\r\n{\r\n if (a < 0 || b < 0) return [];\r\n\r\n if (a > b)\r\n return [...SubtractRange(a, end, c, d, end), ...SubtractRange(0, b, c, d, end)];\r\n if (c > d)\r\n {\r\n let arr = SubtractRange(a, b, c, end, end);\r\n let rem: [number, number][] = [];\r\n for (let s of arr)\r\n rem.push(...SubtractRange(s[0], s[1], 0, d, end));\r\n return rem;\r\n }\r\n\r\n if (c >= b || d <= a)\r\n return [[a, b]];\r\n\r\n if (c <= a)// c1 a1 b1\r\n {\r\n if (d >= b) return [];\r\n return [[d, b]];\r\n }\r\n\r\n if (d < b)\r\n return [[a, c], [d, b]];\r\n return [[a, c]];\r\n}\r\n\r\nfunction SubtractRange2(r: Range, sr: Range, end: number): Range[]\r\n{\r\n return SubtractRange(r[0], r[1], sr[0], sr[1], end);\r\n}\r\n\r\ntype Range = [number, number];\r\nfunction SubtractRanges(ranges: Range[], subRanges: Range[], end: number): Range[]\r\n{\r\n let rets: Range[] = ranges;\r\n for (let sr of subRanges)\r\n {\r\n let temps: Range[] = [];\r\n for (let r of rets)\r\n temps.push(...SubtractRange2(r, sr, end));\r\n\r\n rets = temps;\r\n }\r\n return rets;\r\n}\r\n\r\nfunction IntersectRange(a: number, b: number, c: number, d: number, end: number): Range\r\n{\r\n let b1 = b < a ? b + end : b;\r\n let d1 = d < c ? d + end : d;\r\n let a1 = a;\r\n let c1 = c;\r\n\r\n if (c < a)\r\n [a1, b1, c1, d1] = [c1, d1, a1, b1];\r\n\r\n if (c1 > b1)\r\n return;\r\n\r\n return [c1, Math.min(b1, d1)];\r\n}\r\n\r\nconst alMatrix4 = new Matrix4;\r\n\r\nexport class ExtrudeGeometryBuilder\r\n{\r\n verticesArray: number[] = [];//用于构建三维网格\r\n uvArray: number[] = [];//uv\r\n\r\n edgeAndLidBuilder: EdgeGeometryBuild;\r\n\r\n constructor(private br: ExtrudeSolid)\r\n {\r\n this.GenerateMeshData(br);\r\n }\r\n\r\n protected GenerateMeshData(br: ExtrudeSolid)\r\n {\r\n this.edgeAndLidBuilder = new EdgeGeometryBuild(this.br.Thickness);\r\n let rotateUv = (br instanceof Board && br.BoardProcessOption.lines === LinesType.Reverse);\r\n //计算墙(创建轮廓取出,为了得到正确的轮廓曲线(逆时针之类的))\r\n let outerWall = new ExtudeWall(Contour.CreateContour(br.ContourCurve.Clone()).Curve, DepthType.All, br.Thickness, br.Thickness, DirectionType.Outer);\r\n let grooves = this.ParseGrooves();\r\n for (let i = 0; i < grooves.length; i++)\r\n {\r\n let s1 = grooves[i];\r\n outerWall.ClipTo(s1, false);\r\n s1.contourWall.ClipReverse(outerWall);\r\n for (let j = i + 1; j < grooves.length; j++)\r\n {\r\n let s2 = grooves[j];\r\n s1.ClipTo(s2, true);\r\n }\r\n\r\n s1.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder, rotateUv);\r\n }\r\n outerWall.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder);\r\n\r\n //这里构建盖子\r\n this.edgeAndLidBuilder.BuildLid(this.verticesArray, this.uvArray, rotateUv);\r\n\r\n intCache.clear();\r\n }\r\n\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n let geo = new BufferGeometry();\r\n geo.setAttribute('position', new Float32BufferAttribute(this.verticesArray, 3));\r\n geo.setAttribute('uv', new Float32BufferAttribute(this.uvArray, 2));\r\n geo.computeVertexNormals();\r\n return geo;\r\n }\r\n\r\n get EdgeGeometry(): BufferGeometry\r\n {\r\n let geo = new BufferGeometry();\r\n geo.setAttribute('position', new Float32BufferAttribute(this.edgeAndLidBuilder.lineVerticesArray, 3));\r\n return geo;\r\n }\r\n\r\n protected ParseGrooves()\r\n {\r\n let br = this.br;\r\n const brOcsInv = br.OCSInv;\r\n let grooves: Groove[] = [];\r\n for (let groove of br.Grooves)\r\n {\r\n //判断槽正反面\r\n let type: DepthType;\r\n if (equaln(groove.Thickness, br.Thickness))\r\n type = DepthType.All;\r\n else\r\n {\r\n if (equaln(groove.Position.applyMatrix4(brOcsInv).z, 0))\r\n type = DepthType.Back;\r\n else\r\n type = DepthType.Front;\r\n }\r\n alMatrix4.multiplyMatrices(brOcsInv, groove.OCSNoClone);\r\n //槽轮廓\r\n let grooveContourCurve = groove.ContourCurve.Clone();\r\n grooveContourCurve.ApplyMatrix(alMatrix4);\r\n grooveContourCurve.Z0();\r\n if (grooveContourCurve instanceof Polyline) grooveContourCurve.UpdateMatrixTo(IdentityMtx4);//不可能改变这个\r\n let grooveContour = Contour.CreateContour(grooveContourCurve);\r\n\r\n let grooveHoleContours: Contour[] = [];\r\n //孤岛\r\n for (let grooveChild of groove.Grooves)\r\n {\r\n let grooveChildContourCurve = grooveChild.ContourCurve.Clone();\r\n alMatrix4.multiplyMatrices(brOcsInv, grooveChild.OCSNoClone);\r\n grooveChildContourCurve.ApplyMatrix(alMatrix4).Z0();\r\n if (grooveChildContourCurve instanceof Polyline) grooveChildContourCurve.UpdateMatrixTo(IdentityMtx4);\r\n let grooveChildContour = Contour.CreateContour(grooveChildContourCurve);\r\n grooveHoleContours.push(grooveChildContour);\r\n }\r\n\r\n grooves.push(new Groove(grooveContour, grooveHoleContours, type, groove.Thickness, br.Thickness));\r\n }\r\n\r\n return grooves;\r\n }\r\n}\r\n\r\nlet intCache = new Map>();\r\nfunction GetIntersection(cu1: Curve, cu2: Curve): IntersectResult[]\r\n{\r\n let m = intCache.get(cu1);\r\n if (m)\r\n {\r\n let r = m.get(cu2);\r\n if (r) return r;\r\n }\r\n else\r\n m = new Map();\r\n\r\n intCache.set(cu1, m);\r\n let r = cu1.IntersectWith2(cu2, IntersectOption.OnBothOperands);\r\n\r\n let cu1EndParam = cu1.EndParam;\r\n let cu2EndParam = cu2.EndParam;\r\n for (let d of r)\r\n {\r\n d.thisParam = MathUtils.clamp(d.thisParam, 0, cu1EndParam);\r\n d.argParam = MathUtils.clamp(d.argParam, 0, cu2EndParam);\r\n }\r\n\r\n m.set(cu2, r);\r\n\r\n let r2: IntersectResult[] = r.map(r =>\r\n {\r\n return { thisParam: r.argParam, argParam: r.thisParam, pt: r.pt };\r\n });\r\n\r\n let m2 = intCache.get(cu2);\r\n if (!m2)\r\n {\r\n m2 = new Map();\r\n intCache.set(cu2, m2);\r\n }\r\n m2.set(cu1, r2);\r\n\r\n return r;\r\n}\r\n","import { BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Path, UVGenerator, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayClone, arrayLast, arrayRemoveIf, arrayRemoveOnce, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { equalCurve, PolylineSpliteRect } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { matrixSetVector, Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { CSG } from \"../../csg/core/CSG\";\r\nimport { Geometry2CSG } from \"../../csg/core/Geometry2CSG\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { boardUVGenerator } from \"../../Geometry/BoardUVGenerator\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { BSPGroupParse } from \"../../Geometry/BSPGroupParse\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/ExtrudeEdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, IdentityMtx4, isIntersect, isParallelTo, isPerpendicularityTo, MoveMatrix, XAxis, YAxis, ZAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { OBB } from \"../../Geometry/OBB/obb\";\r\nimport { ScaleUV, ScaleUV2 } from \"../../Geometry/UVUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { BlockTableRecord } from \"../BlockTableRecord\";\r\nimport { CADFactory, Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Contour } from \"../Contour\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\r\nimport { Shape } from \"../Shape\";\r\nimport { ShapeManager } from \"../ShapeManager\";\r\nimport { Spline } from \"../Spline\";\r\nimport { Board } from \"./Board\";\r\nimport { Circle } from \"./Circle\";\r\nimport { DragPointType } from \"./DragPointType\";\r\nimport { Ellipse } from \"./Ellipse\";\r\nimport { Entity } from \"./Entity\";\r\nimport { ExtrudeConfig } from \"./ExtrudeConfig\";\r\nimport { Line } from \"./Line\";\r\nimport { Polyline } from \"./Polyline\";\r\nimport { Region } from \"./Region\";\r\n\r\nexport type ExtureContourCurve = Polyline | Circle;\r\nexport type ExtureContour = Polyline | Circle | ExtrudeSolid | Region;\r\n\r\n@Factory\r\nexport class ExtrudeSolid extends Entity\r\n{\r\n /*\r\n ------------\r\n | |\r\n | |\r\n | | height\r\n | |\r\n | |\r\n ----width---\r\n */\r\n\r\n protected height: number = 1;//y\r\n protected width: number = 1;//x\r\n\r\n /**\r\n * 拉伸实体的厚度\r\n * 我们允许它是一个负数,但是这个时候这个实体已经是一个无效的拉伸实体了.\r\n * 允许负数,用来校验凹槽的合理性.\r\n */\r\n protected thickness: number = 1;\r\n\r\n protected isRect = true;\r\n\r\n IsKnife = false;\r\n\r\n RelevanceMeats: ObjectId[];\r\n RelevanceKnifs: ObjectId[];\r\n __OriginalId__: ObjectId;\r\n __OriginalEnt__: this;\r\n /**\r\n * 拉伸形状\r\n * 出于优化考虑,可能未初始化\r\n * 形状位于WCS 0点位置,不随OCS变化而变化\r\n */\r\n protected contourCurve: ExtureContourCurve;\r\n\r\n /**\r\n * 正面和反面的凹槽造型\r\n */\r\n protected grooves: ExtrudeSolid[] = [];\r\n\r\n protected knifeRadius: number = 3;\r\n protected groovesAddLength: number = 0;\r\n protected groovesAddWidth: number = 0;\r\n protected groovesAddDepth: number = 0;\r\n __TempIndexVersion__: { Index: number, Version: number; };\r\n constructor()\r\n {\r\n super();\r\n this.RelevanceKnifs = this.CreateProxyArray((v) =>\r\n {\r\n //可以更新自己,但是不建议,建议手动更新\r\n });\r\n this.RelevanceMeats = this.CreateProxyArray((v) =>\r\n {\r\n //可以更新肉,简单是不建议,建议手动更新\r\n });\r\n }\r\n\r\n get KnifeRadius()\r\n {\r\n return this.knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this.knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.knifeRadius = v;\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCS);\r\n }\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(), new Vector3(this.width, this.height, this.thickness));\r\n }\r\n\r\n get OBB(): OBB\r\n {\r\n return new OBB(this.OCS, new Vector3(this.width, this.height, this.thickness).multiplyScalar(0.5));\r\n }\r\n\r\n get GroovesAddLength()\r\n {\r\n return this.groovesAddLength;\r\n }\r\n\r\n set GroovesAddLength(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddLength))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddLength = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get GroovesAddWidth()\r\n {\r\n return this.groovesAddWidth;\r\n }\r\n\r\n set GroovesAddWidth(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddWidth))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddWidth = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get GroovesAddDepth()\r\n {\r\n return this.groovesAddDepth;\r\n }\r\n\r\n set GroovesAddDepth(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddDepth))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddDepth = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n\r\n Clone()\r\n {\r\n let en = super.Clone();\r\n return en;\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n //暂时关闭更新,避免内部实体还没有更新位置时,先更新了实体的Geometry,导致后续没有进行更新\r\n let updateBak = this.AutoUpdate;\r\n this.AutoUpdate = false;\r\n super.ApplyMatrix(m);\r\n for (let g of this.grooves)\r\n g.ApplyMatrix(m);\r\n\r\n //由于修改矩阵会导致矩阵错误\r\n this.csg = undefined;\r\n this.AutoUpdate = updateBak;\r\n if (!equaln(m.getMaxScaleOnAxis(), 1))\r\n this.Update(UpdateDraw.Geometry);\r\n else if (this.AutoUpdate)\r\n this.DeferUpdate();\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let cu = this.ContourCurve;\r\n cu.ApplyMatrix(this.OCS);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n return this;\r\n }\r\n get Position(): Vector3\r\n {\r\n return super.Position;\r\n }\r\n set Position(p: Vector3)\r\n {\r\n let v = p.clone().sub(this.Position);\r\n if (equalv3(v, ZeroVec)) return;\r\n super.Position = p;\r\n\r\n let m = MoveMatrix(v);\r\n for (let g of this.grooves)\r\n g.ApplyMatrix(m);\r\n\r\n //由于修改矩阵会导致bsp错误\r\n this.csg = undefined;\r\n }\r\n\r\n get Width()\r\n {\r\n return this.width;\r\n }\r\n get Height()\r\n {\r\n return this.height;\r\n }\r\n\r\n get Thickness()\r\n {\r\n return this.thickness;\r\n }\r\n set Thickness(thickness: number)\r\n {\r\n if (!equaln(thickness, this.thickness, 1e-3))\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (this.grooves.length > 0)\r\n {\r\n let inv = this.OCSInv;\r\n let v = this.Normal.multiplyScalar(thickness - this.thickness);\r\n let m = new Matrix4().setPosition(v);\r\n\r\n for (let g of this.grooves)\r\n {\r\n let p = g.Position.applyMatrix4(inv);\r\n\r\n if (equaln(g.thickness, this.thickness))\r\n g.Thickness = thickness;\r\n else if (!equaln(p.z, 0))\r\n g.ApplyMatrix(m);\r\n }\r\n }\r\n\r\n this.thickness = thickness;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n\r\n get Grooves()\r\n {\r\n return this.grooves;\r\n }\r\n\r\n /**\r\n * 返回未拷贝的轮廓曲线\r\n */\r\n get ContourCurve()\r\n {\r\n if (!this.contourCurve)\r\n this.GeneralRectContour();\r\n return this.contourCurve;\r\n }\r\n\r\n set ContourCurve(cu: ExtureContourCurve)\r\n {\r\n this.SetContourCurve(cu);\r\n }\r\n\r\n /**\r\n * 生成矩形轮廓(强制)\r\n */\r\n GeneralRectContour()\r\n {\r\n if (!this.contourCurve || !(this.contourCurve instanceof Polyline))\r\n this.contourCurve = new Polyline();\r\n\r\n this.contourCurve.Rectangle(this.width, this.height);\r\n this.contourCurve.OCS = IdentityMtx4;\r\n this.ContourCurve = this.contourCurve;\r\n }\r\n\r\n /**\r\n * 转换成矩形拉伸实体\r\n */\r\n ConverToRectSolid(width = this.width, height = this.height, thickness = this.thickness)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.height = height;\r\n this.width = width;\r\n this.thickness = thickness;\r\n\r\n this.isRect = true;\r\n\r\n this.GeneralRectContour();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 更新拉伸实体的轮廓\r\n * @param curve 曲线已经存在WCS坐标系\r\n */\r\n SetContourCurve(curve: ExtureContourCurve)\r\n {\r\n if (!curve.IsClose) return;\r\n\r\n let area = curve.Area;\r\n if (!area || equaln(area, 0)) return;\r\n\r\n if (curve instanceof Spline || curve instanceof Ellipse)\r\n curve = curve.Convert2Polyline();\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n curve.CloseMark = true;\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n\r\n //如果曲线被旋转了,那么修正它的旋转矩阵,避免纹路错误\r\n let ocs = curve.OCS;\r\n let isMirror = equaln(ocs.elements[10], -1, 1e-4);\r\n let isRotate = !equaln(ocs.elements[0], 1);\r\n if (isMirror || isRotate)// || ocs.elements[9] || ocs.elements[10]\r\n {\r\n for (let p of pts)\r\n {\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n if (isMirror)\r\n p.bul *= -1;\r\n }\r\n curve.OCS = IdentityMtx4;\r\n }\r\n }\r\n else\r\n {\r\n curve.OCS = new Matrix4().setPosition(curve.Position);\r\n }\r\n curve.ClearDraw();\r\n\r\n this.WriteAllObjectRecord();\r\n this.contourCurve = curve;\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 在不改变Normal和实体显示的情况下,修改X轴的指向\r\n * @param xAxis\r\n */\r\n SetXAxis(xAxis: Vector3): this\r\n {\r\n let m = this.OCSInv.setPosition(ZeroVec);\r\n let x = xAxis.applyMatrix4(m).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n m.copy(this._Matrix).setPosition(ZeroVec);\r\n x.applyMatrix4(m);\r\n let z = this.Normal;\r\n let y = z.cross(x);\r\n\r\n this._Matrix.elements[0] = x.x;\r\n this._Matrix.elements[1] = x.y;\r\n this._Matrix.elements[2] = x.z;\r\n\r\n this._Matrix.elements[4] = y.x;\r\n this._Matrix.elements[5] = y.y;\r\n this._Matrix.elements[6] = y.z;\r\n\r\n m.makeRotationZ(-a);\r\n this.contourCurve.ApplyMatrix(m);\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateMatrixTo(m.identity());\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 检验轮廓曲线,通常当轮廓曲线被修改时,都需要检验轮廓曲线,并更新实体大小和轮廓位置.\r\n * >计算轮廓大小\r\n * >判断是否矩形\r\n * >修正轮廓基点\r\n */\r\n CheckContourCurve()\r\n {\r\n let box = this.ContourCurve.BoundingBox;\r\n let size = box.getSize(new Vector3());\r\n this.width = size.x;\r\n this.height = size.y;\r\n if (equaln(size.x, 0) || equaln(size.y, 0))\r\n Log(`注意!!该板件尺寸为0!`);\r\n this.isRect = equaln(this.width * this.height, this.ContourCurve.Area, 0.1);\r\n\r\n //修正轮廓基点\r\n if (!equalv3(box.min, ZeroVec))\r\n {\r\n this.contourCurve.Position =\r\n this.contourCurve.Position.sub(box.min);\r\n\r\n let v = box.min.applyMatrix4(this.OCS.setPosition(ZeroVec));\r\n this._Matrix.setPosition(this.Position.add(v));\r\n }\r\n }\r\n get IsRect()\r\n {\r\n return this.isRect;\r\n }\r\n\r\n /**\r\n * 这个拉伸实体的面域形状\r\n */\r\n get Shape()\r\n {\r\n let contour = Contour.CreateContour(this.ContourCurve.Clone(), false);\r\n\r\n let holes: Contour[] = [];\r\n\r\n for (let g of this.grooves)\r\n {\r\n if (equaln(g.thickness, this.thickness))\r\n holes.push(Contour.CreateContour(g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCS)), false));\r\n }\r\n return new Shape(contour, holes);\r\n }\r\n\r\n /**\r\n * 实体合并(不会删除target)\r\n */\r\n Join(target: this): Status\r\n {\r\n let [n, tn] = [this.Normal, target.Normal];\r\n\r\n if (!isParallelTo(n, tn))\r\n return Status.False;\r\n\r\n let isEqualNorm = equalv3(n, tn);\r\n\r\n let targetZMin = target.Position.applyMatrix4(this.OCSInv).z;\r\n let targetZMax = targetZMin + target.Thickness * (isEqualNorm ? 1 : -1);\r\n [targetZMin, targetZMax] = arraySortByNumber([targetZMin, targetZMax]);\r\n\r\n const MergeRelevance = () =>\r\n {\r\n if (!this.Id || !target.Id) return;\r\n for (let kf of target.RelevanceKnifs)\r\n {\r\n let kfBr = kf.Object as ExtrudeSolid;\r\n if (!kfBr) continue;\r\n if (!kfBr.RelevanceMeats.includes(this.Id))\r\n kfBr.RelevanceMeats.push(this.Id);\r\n\r\n if (!this.RelevanceKnifs.includes(kf))\r\n this.RelevanceKnifs.push(kf);\r\n }\r\n for (let meat of target.RelevanceMeats)\r\n {\r\n let meatBr = meat.Object as ExtrudeSolid;\r\n if (!meatBr) continue;\r\n if (!meatBr.RelevanceKnifs.includes(this.Id))\r\n meatBr.RelevanceKnifs.push(this.Id);\r\n\r\n if (!this.RelevanceMeats.includes(meat))\r\n this.RelevanceMeats.push(meat);\r\n }\r\n };\r\n\r\n if (equaln(this.thickness, target.thickness)\r\n && equaln(0, targetZMin))\r\n {\r\n let matrixToLocal = this.OCSInv.multiply(target.OCS);\r\n\r\n let thisShape = this.Shape;\r\n let targetShape = target.Shape.ApplyMatrix(matrixToLocal).Z0();\r\n let unionShapes = thisShape.UnionBoolOperation(targetShape, true);\r\n if (unionShapes.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n // [ + ] 产生网洞.\r\n for (let hole of unionShapes[0].Holes)\r\n {\r\n let g = new ExtrudeSolid();\r\n g.thickness = this.thickness;\r\n g.ContourCurve = hole.Curve;\r\n g.ApplyMatrix(this.OCS);\r\n\r\n this.AppendGroove(g);\r\n }\r\n\r\n this.ContourCurve = unionShapes[0].Outline.Curve;\r\n\r\n this.grooves.push(...target.grooves.map(g => g.Clone()));\r\n MergeRelevance();\r\n this.GrooveCheckMerge();\r\n this.Update();\r\n\r\n return Status.True;\r\n }\r\n }\r\n else\r\n {\r\n if (!isIntersect(0, this.thickness, targetZMin, targetZMax, 1e-5))\r\n return Status.False;\r\n\r\n let matrixToLocal = this.OCSInv.multiply(target.OCS);\r\n\r\n let thisCurve = this.ContourCurve;\r\n let targetCurve = target.ContourCurve.Clone().ApplyMatrix(matrixToLocal);\r\n targetCurve.Position = targetCurve.Position.setZ(0);\r\n if (equalCurve(thisCurve, targetCurve))\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (targetZMin < 0)\r\n this.Position = this.Position.add(n.multiplyScalar(targetZMin));\r\n\r\n this.Thickness = Math.max(this.Thickness, targetZMax) - Math.min(0, targetZMin);\r\n\r\n this.grooves.push(...target.grooves.map(g => g.Clone()));\r\n\r\n MergeRelevance();\r\n\r\n this.GrooveCheckMerge();\r\n this.Update();\r\n\r\n return Status.True;\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n get Volume()\r\n {\r\n let sum = this.ContourCurve.Area * this.thickness;\r\n for (let g of this.grooves)\r\n sum -= g.Volume;\r\n return sum;\r\n }\r\n\r\n /**\r\n * 被切割\r\n * @param extrudes 切割刀\r\n * @param [output=undefined] 如果实体被分裂,那么输出分裂的其他实体(如果为空,则尝试入当前实体的容器中)\r\n * @param [checkIntersect=true] 检查相交,性能优化\r\n * @returns 切割是否成功\r\n */\r\n Subtract(extrudes: ExtrudeSolid[], output: ExtrudeSolid[] = undefined, checkIntersect = true): boolean\r\n {\r\n if (checkIntersect)\r\n {\r\n let box = this.BoundingBox;\r\n extrudes = extrudes.filter(e => box.intersectsBox(e.BoundingBox));\r\n }\r\n\r\n //清除原先的关联关系\r\n if (this.Id)\r\n {\r\n let ids = new Set();\r\n for (let e of extrudes)\r\n {\r\n if (!e.Id) continue;\r\n arrayRemoveOnce(e.RelevanceMeats, this.Id);\r\n ids.add(e.Id.Index);\r\n }\r\n arrayRemoveIf(this.RelevanceKnifs, id => ids.has(id.Index));\r\n }\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let br of extrudes)\r\n {\r\n let gs = this.ConverToLocalGroove(br);\r\n grooves.push(...gs);\r\n }\r\n\r\n let area1 = this.ContourCurve.Area;\r\n let sum1 = this.Volume;\r\n this.AppendGrooves(grooves, output);\r\n let sum2 = this.Volume;\r\n let area2 = this.ContourCurve.Area;\r\n if (!equaln(sum1, sum2) || !equaln(area1, area2))\r\n {\r\n if (!this.ReadFileIng && this instanceof Board)\r\n {\r\n if (this.Id)\r\n Log(`${this.Name}(${this.Id.Index})被切割成功!`);\r\n else if (this.__OriginalId__)\r\n Log(`${this.Name}(${this.__OriginalId__.Index})关联切割成功更新槽!`);\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n RelevanceSubtract(knif: ExtrudeSolid, check = false)\r\n {\r\n if (!this.Id || !knif.Id) return;\r\n\r\n //判断是否已经存在\r\n if (check)\r\n {\r\n let index = this.RelevanceKnifs.findIndex(id => id.Index === knif.Id.Index);\r\n if (index !== -1) return;\r\n }\r\n\r\n this.RelevanceKnifs.push(knif.Id);\r\n knif.RelevanceMeats.push(this.Id);\r\n }\r\n\r\n /**\r\n * 当实体被分裂后,加入新图纸时,需要修复关联拉槽\r\n */\r\n RepairRelevance()\r\n {\r\n if (!this.Id)\r\n {\r\n console.error(\"不能修复未加入到图纸的板件!\");\r\n return;\r\n }\r\n\r\n for (let id of this.RelevanceKnifs)\r\n {\r\n if (id && !id.IsErase)\r\n {\r\n let br = id.Object as ExtrudeSolid;\r\n br.RelevanceMeats.push(this.Id);\r\n }\r\n }\r\n for (let id of this.RelevanceMeats)\r\n {\r\n if (id && !id.IsErase)\r\n {\r\n let br = id.Object as ExtrudeSolid;\r\n br.RelevanceKnifs.push(this.Id);\r\n }\r\n }\r\n }\r\n\r\n AppendGroove(groove: ExtrudeSolid)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.push(groove);\r\n }\r\n\r\n /** 添加槽进板件,并且自动分裂.\r\n * 通常槽已经校验过准确性,所以不在校验\r\n */\r\n AppendGrooves(grooves: ExtrudeSolid[], output: ExtrudeSolid[] = undefined)\r\n {\r\n if (grooves.length === 0) return;\r\n this.WriteAllObjectRecord();\r\n this.grooves.push(...grooves);\r\n this.GrooveCheckAllAutoSplit(output);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n\r\n contour.Position = contour.Position.add(this.Normal.multiplyScalar(this.thickness));\r\n pts.push(\r\n ...contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n let ps = this.contourCurve.GetStretchPoints();\r\n for (let p of ps)\r\n {\r\n let l = new Line(p, p.clone().setZ(this.thickness));\r\n l.ApplyMatrix(this.OCS);\r\n pts.push(\r\n ...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n }\r\n for (let g of this.grooves)\r\n pts.push(...g.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n //#region Stretch\r\n\r\n protected GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts: number[] = [this.ContourCurve.GetDragPointCount(dragType) * 2];\r\n for (let g of this.grooves)\r\n {\r\n let c = g.ContourCurve.GetDragPointCount(dragType) * 2;\r\n for (let g1 of g.grooves)\r\n c += g1.contourCurve.GetDragPointCount(dragType) * 2;\r\n\r\n counts.push(c);\r\n }\r\n return counts;\r\n }\r\n GetGripOrStretchPoints(dragType: DragPointType)\r\n {\r\n let isGrip = dragType === DragPointType.Grip;\r\n\r\n let pts = isGrip ? this.ContourCurve.GetGripPoints() : this.ContourCurve.GetStretchPoints();\r\n let v = new Vector3(0, 0, this.thickness);\r\n pts.push(...pts.map(p => p.clone().add(v)));\r\n pts.forEach(p => { p.applyMatrix4(this.OCS); });\r\n\r\n for (let g of this.grooves)\r\n {\r\n let gpts = g.GetGripOrStretchPoints(dragType);\r\n pts.push(...gpts);\r\n }\r\n return pts;\r\n }\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let counts = this.GetStrectchPointCountList(dragType);\r\n if (dragType === DragPointType.Stretch && indexList.length === arraySum(counts))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n arraySortByNumber(indexList);\r\n\r\n let updateBak = this.AutoUpdate;\r\n this.AutoUpdate = false;\r\n\r\n if (this.grooves.length === 0)\r\n {\r\n this.MoveGripOrStretchPointsOnly(indexList, vec, dragType);\r\n }\r\n else\r\n {\r\n let i = 0;\r\n let icount = indexList.length;\r\n let offset = 0;\r\n\r\n let grooveIndex = -1;\r\n for (let count of counts)\r\n {\r\n offset += count;\r\n let ilist = [];\r\n for (; i < icount; i++)\r\n {\r\n if (indexList[i] < offset)\r\n ilist.push(indexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n\r\n if (ilist.length > 0)\r\n {\r\n if (grooveIndex === -1)\r\n this.MoveGripOrStretchPointsOnly(ilist, vec, dragType);\r\n else\r\n this.grooves[grooveIndex].MoveGripOrStretchPoints(ilist, vec, dragType);\r\n }\r\n grooveIndex++;\r\n }\r\n }\r\n\r\n if (this.objectId)\r\n {\r\n this.CheckContourCurve();\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (splitEntitys.length > 0 && this.Owner)\r\n {\r\n let ms = this.Owner.Object as BlockTableRecord;\r\n for (let e of splitEntitys)\r\n ms.Append(e);\r\n }\r\n }\r\n this.AutoUpdate = updateBak;\r\n this.Update();\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n\r\n\r\n GetStretchPoints()\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n\r\n /**\r\n * 只对自身的轮廓和厚度进行拉伸,忽略子实体\r\n */\r\n MoveGripOrStretchPointsOnly(indexList: Array, vec: Vector3, dragType: DragPointType)\r\n {\r\n let stretchCount = this.ContourCurve.GetDragPointCount(dragType);\r\n\r\n if (dragType === DragPointType.Stretch)\r\n {\r\n //Move\r\n if (indexList.length === stretchCount * 2)\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n //判断是否拉伸厚度\r\n if (this.IsStretchThickness(indexList))\r\n {\r\n let isFront = indexList[0] < stretchCount;\r\n\r\n if (indexList.every(v => v < stretchCount === isFront))\r\n {\r\n //Change thickness\r\n let lvec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n if (isFront)\r\n {\r\n // if (lvec.z >= this.thickness) return;\r\n this.thickness -= lvec.z;\r\n //移动位置而不改变内部拉槽\r\n let v = this.Normal.multiplyScalar(lvec.z);\r\n this._Matrix.elements[12] += v.x;\r\n this._Matrix.elements[13] += v.y;\r\n this._Matrix.elements[14] += v.z;\r\n }\r\n else\r\n {\r\n // if (-lvec.z > this.thickness) return;\r\n this.thickness += lvec.z;\r\n }\r\n return;\r\n }\r\n }\r\n\r\n indexList = arrayClone(indexList);\r\n }\r\n\r\n //修正点的索引\r\n for (let i = 0; i < indexList.length; i++)\r\n {\r\n let index = indexList[i];\r\n if (index >= stretchCount)\r\n {\r\n index -= stretchCount;\r\n indexList[i] = index;\r\n }\r\n }\r\n\r\n indexList = [...new Set(indexList)];\r\n\r\n let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n\r\n if (dragType === DragPointType.Grip)\r\n {\r\n if (this.ContourCurve instanceof Polyline\r\n && indexList.length === 1\r\n && indexList[0] % 2 === 1)\r\n {\r\n let param = indexList[0] / 2;\r\n if (this.ContourCurve.GetBuilgeAt(Math.floor(param)) === 0)\r\n {\r\n let der = this.ContourCurve.GetFistDeriv(param).normalize();\r\n [der.x, der.y] = [der.y, -der.x];\r\n let d = localVec.dot(der);\r\n localVec.copy(der).multiplyScalar(d);\r\n }\r\n }\r\n this.ContourCurve.MoveGripPoints(indexList, localVec);\r\n }\r\n else\r\n this.ContourCurve.MoveStretchPoints(indexList, localVec);\r\n }\r\n\r\n IsStretchThickness(indexs: number[])\r\n {\r\n let count = this.ContourCurve.GetStretchPoints().length;\r\n if (indexs.length === count)\r\n {\r\n let isF = indexs[0] < count;\r\n return indexs.every(i => isF === (i < count));\r\n }\r\n return false;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region groove(凹槽(造型))操作\r\n\r\n /*\r\n\r\n 添加凹槽一般会经过以下几个步骤\r\n\r\n 1.凹槽转换成和本实体法线平行的凹槽实体\r\n ->调用第二步\r\n\r\n 2.校验凹槽的Z轴位置是否存在交集\r\n ->{不存在Z轴交集} 或 {交集异常(凹槽被本实体包含不见光)} 的凹槽被移除\r\n ->凹槽的Z轴位置和厚度被更新\r\n\r\n 3.凹槽合并\r\n\r\n 4.修正轮廓.\r\n ->{本实体}轮廓被修正(当实体被凹槽破坏形状时)\r\n -->修正成功后,凹槽被移除\r\n -->本实体可能分裂\r\n\r\n ->{凹槽}轮廓被修正({凹槽的轮廓}被约束在{实体轮廓}内部)\r\n -->凹槽可能分裂\r\n\r\n */\r\n\r\n\r\n /**\r\n * 当调用Draw时,可以生成bsp信息\r\n */\r\n private csg: CSG;\r\n get CSG()\r\n {\r\n if (this.csg)\r\n return this.csg;\r\n\r\n this.csg = Geometry2CSG(this.MeshGeometry);\r\n return this.csg;\r\n }\r\n\r\n /**\r\n * (步骤1.2.)\r\n * 将目标拉伸实体转换成在板件内部可用的凹槽实体\r\n * @param target 该对象可能被修改(内部不拷贝该实体)\r\n * @param useClone 转换后的实体是目标实体拷贝后修改的\r\n */\r\n ConverToLocalGroove(target: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n if (!this.OBB.intersectsOBB(target.OBB)) return [];\r\n\r\n let n1 = this.Normal;\r\n let n2 = target.Normal;\r\n if (isParallelTo(n1, n2))\r\n {\r\n target = target.Clone().ClearDraw();\r\n if (!equalv3(n1, n2, 1e-6))\r\n {\r\n let mtx = target._Matrix;\r\n matrixSetVector(mtx, 2, n1);\r\n let p = n1.setFromMatrixColumn(mtx, 3);\r\n p.add(n2.multiplyScalar(target.thickness));\r\n matrixSetVector(mtx, 3, p);\r\n }\r\n if (this.GrooveCheckPosition(target) !== Status.True)\r\n return [];\r\n\r\n return [target];\r\n }\r\n else\r\n {\r\n //当切割刀是矩形板,并且没有槽的时候,如果轴对齐,我们可以直接用aabb进行求交\r\n if (target.isRect && target.grooves.length === 0)\r\n {\r\n let diffMtx = target.OCS.premultiply(this.OCSInv);\r\n let box = target.BoundingBoxInOCS.applyMatrix4(diffMtx);\r\n let size = box.getSize(new Vector3);\r\n\r\n //轴对齐\r\n if (equaln(size.x * size.y * size.z, target.Width * target.Height * target.Thickness, 1))\r\n {\r\n let ibox = this.BoundingBoxInOCS.intersect(box);\r\n if (!(ibox.getSize(size).toArray().every(x => x > 1))) return [];\r\n\r\n //构造新槽(因为我们当前的槽加长是根据槽的长短边进行加长的,所以我们可以这么构建)\r\n let g2 = new ExtrudeSolid().ConverToRectSolid(size.x, size.y, size.z);\r\n g2.Position = ibox.min;\r\n g2.ApplyMatrix(this._Matrix);\r\n g2.groovesAddDepth = target.groovesAddDepth;\r\n g2.groovesAddLength = target.groovesAddLength;\r\n g2.groovesAddWidth = target.groovesAddWidth;\r\n g2.knifeRadius = target.knifeRadius;\r\n return [g2];\r\n }\r\n }\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n let project = ProjectBoard(target, this);\r\n if (!project)\r\n {\r\n let yv = n2;\r\n let zv = n1;\r\n let xv = yv.clone().cross(zv);\r\n yv.copy(zv).cross(xv);\r\n let m = new Matrix4().makeBasis(xv, yv, zv).copyPosition(this.OCS);\r\n let mi = new Matrix4().getInverse(m).multiply(this.OCS);\r\n\r\n let interBSP = this.CSG.intersect(target.CSG.transform1(this.OCSInv.multiply(target.OCS)));\r\n let topology = new BSPGroupParse(interBSP);\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let pts of topology.Parse())\r\n {\r\n for (let p of pts)\r\n p.applyMatrix4(mi);\r\n let box = new Box3Ext().setFromPoints(pts);\r\n if (!box.isSolid(0.1))\r\n continue;\r\n let size = box.getSize(new Vector3());\r\n\r\n let ext = new ExtrudeSolid();\r\n ext.groovesAddDepth = target.groovesAddDepth;\r\n ext.groovesAddLength = target.groovesAddLength;\r\n ext.groovesAddWidth = target.groovesAddWidth;\r\n ext.knifeRadius = target.knifeRadius;\r\n ext.ConverToRectSolid(size.x, size.y, size.z);\r\n ext.OCS = m.clone().setPosition(box.min.applyMatrix4(m));\r\n\r\n grooves.push(ext);\r\n }\r\n return grooves;\r\n }\r\n // project.ApplyMatrix(target.OCSInv);\r\n project.Z0();\r\n let c1 = Contour.CreateContour(project);\r\n let c2 = Contour.CreateContour(target.ContourCurve);\r\n //投影轮廓列表\r\n let contours = c1.IntersectionBoolOperation(c2);\r\n let outlines: ExtureContourCurve[] = [];\r\n for (let c of contours)\r\n {\r\n if (c.Curve instanceof Polyline)\r\n outlines.push(...PolylineSpliteRect(c.Curve));\r\n else\r\n outlines.push(c.Curve);\r\n }\r\n let xv = n1;\r\n let zv = n2;\r\n let yv = zv.clone().cross(xv);\r\n\r\n //把<投影轮廓>对齐到肉的侧面坐标系上\r\n let projection2SideMatrix4 = new Matrix4().makeBasis(xv, yv, zv);\r\n for (let c of outlines)\r\n {\r\n let g = target.Clone().ClearDraw();\r\n let gs = [g];\r\n g.ContourCurve = c;\r\n g.GrooveCheckAll(gs);\r\n\r\n for (let g1 of gs)\r\n {\r\n //按g1的位置设置\r\n projection2SideMatrix4.setPosition(g1.Position);\r\n\r\n //投影到肉的侧面坐标系,求槽在肉里面的长度(x)和厚度(z)\r\n let alm = new Matrix4().getInverse(projection2SideMatrix4).multiply(g1.OCS);\r\n g1.ContourCurve.ApplyMatrix(alm);//破坏它\r\n let box = g1.ContourCurve.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x, 0, 1e-2) || equaln(size.y, 0, 1e-2)) continue;\r\n\r\n //构造新槽\r\n let g2 = new ExtrudeSolid().ConverToRectSolid(size.y, g1.Thickness, size.x);\r\n g2.groovesAddDepth = target.groovesAddDepth;\r\n g2.groovesAddLength = target.groovesAddLength;\r\n g2.groovesAddWidth = target.groovesAddWidth;\r\n g2.knifeRadius = target.knifeRadius;\r\n g2.ApplyMatrix(OverturnMatrix);//翻转到和原先的投影曲线(肉侧面)一样的状态\r\n g2.ApplyMatrix(MoveMatrix(box.min));//和投影曲线重叠\r\n g2.ApplyMatrix(projection2SideMatrix4);//按照矩形还原回去\r\n\r\n grooves.push(g2);\r\n }\r\n }\r\n return grooves;\r\n }\r\n }\r\n\r\n /**\r\n * (步骤2)\r\n * 更新凹槽位置和厚度(校验凹槽的Z轴位置是否存在交集)\r\n */\r\n GrooveCheckPosition(target: ExtrudeSolid): Status\r\n {\r\n if (target.Width < 1e-2 || target.Height < 1e-2 || target.Thickness < 1e-2)\r\n return Status.False;\r\n\r\n let tp = target.Position.applyMatrix4(this.OCSInv);\r\n\r\n let minZ = tp.z;\r\n let maxZ = tp.z + target.thickness;\r\n if (minZ <= 1e-2)//背面\r\n {\r\n target.Thickness = Math.min(maxZ, this.thickness);\r\n if (!(equaln(minZ, 0)))\r\n target.ApplyMatrix(\r\n MoveMatrix(this.Normal.multiplyScalar(-minZ))\r\n );\r\n }\r\n else if (maxZ >= (this.thickness - 1e-3) && minZ > 0)//正面\r\n target.Thickness = this.thickness - minZ;\r\n else\r\n return Status.False;\r\n\r\n if (equaln(target.thickness, this.thickness, 1e-3))\r\n target.thickness = this.thickness;\r\n\r\n return target.thickness > 1e-3 ? Status.True : Status.False;\r\n }\r\n\r\n /**\r\n * (步骤3)\r\n * 计算凹槽合并\r\n */\r\n GrooveCheckMerge()\r\n {\r\n let gs: ExtrudeSolid[] = [];\r\n while (this.grooves.length > 0)\r\n {\r\n let g = this.grooves.pop();\r\n while (this.grooves.length > 0)\r\n {\r\n //剩余的 无法合并的板件\r\n let remGs = this.grooves.filter(gn =>\r\n {\r\n if (equaln(g.knifeRadius, gn.knifeRadius))\r\n return g.Join(gn) === Status.False;\r\n else\r\n return true;\r\n });\r\n if (remGs.length === this.grooves.length)\r\n break;\r\n this.grooves = remGs;\r\n }\r\n gs.push(g);\r\n }\r\n\r\n if (gs.length !== this.grooves.length)\r\n {\r\n this.grooves = gs;\r\n for (let g of this.grooves)\r\n g.CheckContourCurve();\r\n }\r\n }\r\n\r\n /**\r\n * (步骤4.1)\r\n * 计算凹槽轮廓(可能分裂)\r\n * @param target 不拷贝修改\r\n * @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个)\r\n */\r\n GrooveCheckContour(target: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n let matrixToTarget = target.OCSInv.multiply(this.OCS);\r\n matrixToTarget.elements[14] = 0;//z->0\r\n\r\n let thisShape = this.Shape.ApplyMatrix(matrixToTarget);\r\n let targetShape = new Shape(Contour.CreateContour([target.ContourCurve.Clone()], false));\r\n\r\n let inters = thisShape.IntersectionBoolOperation(targetShape);\r\n\r\n if (inters.length === 1)\r\n {\r\n target.ContourCurve = inters[0].Outline.Curve;\r\n let grooves = [target];\r\n target.GrooveCheckAll(grooves);\r\n return grooves;\r\n }\r\n else\r\n {\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let contour of inters)\r\n {\r\n let ext = target.Clone().ClearDraw();\r\n ext.ContourCurve = contour.Outline.Curve;\r\n ext.GrooveCheckAll(grooves);\r\n grooves.push(ext);\r\n }\r\n return grooves;\r\n }\r\n }\r\n /**\r\n * (步骤4.2)\r\n * 计算本实体被全身度的凹槽差集后正确的实体轮廓,和有可能的分裂实体\r\n * @param splitEntitys 分裂出来的实体\r\n * @returns [Status] Status : 消失不见\r\n */\r\n ContourCheckSubtract(splitEntitys: this[]): boolean\r\n {\r\n let shapeManager = new ShapeManager();\r\n shapeManager.AppendShapeList(\r\n new Shape(Contour.CreateContour(this.ContourCurve.Clone(), false))\r\n );\r\n let subtractShape = new ShapeManager();\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n arrayRemoveIf(this.grooves, groove =>\r\n {\r\n if (equaln(groove.thickness, this.thickness))\r\n {\r\n let grooveCurve = groove.ContourCurve.Clone();\r\n let matrixToLocal = this.OCSInv.multiply(groove.OCS);\r\n grooveCurve.ApplyMatrix(matrixToLocal);\r\n\r\n subtractShape.AppendShapeList(\r\n new Shape(Contour.CreateContour([grooveCurve], false))\r\n );\r\n\r\n grooves.push(groove);\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n shapeManager.SubstactBoolOperation(subtractShape);\r\n let shapes = shapeManager.ShapeList;\r\n\r\n //不做任何改变\r\n if (shapeManager.ShapeCount === 1 && shapes[0].Holes.length === grooves.length)\r\n {\r\n this.grooves.push(...grooves);\r\n return true;\r\n }\r\n\r\n //分裂\r\n for (let i = 1; i < shapeManager.ShapeCount; i++)\r\n {\r\n let ext = this.Clone();\r\n let shape = shapes[i];\r\n for (let hole of shape.Holes)\r\n {\r\n let groove = new ExtrudeSolid();\r\n groove.OCS = this.OCS;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n ext.grooves.push(groove);\r\n }\r\n ext.ContourCurve = shape.Outline.Curve;\r\n ext.GrooveCheckAll(splitEntitys);\r\n ext.Update();\r\n splitEntitys.push(ext);\r\n }\r\n\r\n if (shapes.length > 0)\r\n {\r\n let shape = shapes[0];\r\n for (let hole of shape.Holes)\r\n {\r\n let groove = new ExtrudeSolid();\r\n groove.OCS = this.OCS;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n this.grooves.push(groove);\r\n }\r\n\r\n if (!equaln(this.contourCurve.Area, shape.Outline.Area))\r\n this.ContourCurve = shape.Outline.Curve;\r\n\r\n return true;\r\n }\r\n else\r\n return false;\r\n }\r\n\r\n IsLazyGrooveCheck: boolean;\r\n IsNeedGrooveCheck: boolean;\r\n /**\r\n * 无法知道修改了轮廓是否为更新到内部凹槽.\r\n * 无法知道修改了内部凹槽之后是否会更新到轮廓.\r\n * 所以默认全部校验内部的凹槽\r\n */\r\n GrooveCheckAll(splitEntitys: this[])\r\n {\r\n if (ExtrudeConfig.DisableCheckGroove) return;\r\n\r\n if (this.IsLazyGrooveCheck)\r\n {\r\n this.IsNeedGrooveCheck = true;\r\n return;\r\n }\r\n this.IsNeedGrooveCheck = false;\r\n this.WriteAllObjectRecord();\r\n\r\n //校验Z轴位置\r\n arrayRemoveIf(this.grooves, g =>\r\n {\r\n return this.GrooveCheckPosition(g) === Status.False;\r\n });\r\n\r\n //清除全深洞的子槽\r\n for (let g of this.grooves)\r\n {\r\n if (equaln(g.thickness, this.thickness, 1e-3))\r\n {\r\n /*\r\n 此刻我们直接将它的子槽清空,虽然子槽可能将这个槽分裂成2个,\r\n 但是这样的情况只能在造型应用中才会产生\r\n */\r\n g.grooves.length = 0;\r\n }\r\n else\r\n arrayRemoveIf(g.grooves, subg => !equaln(g.thickness, subg.thickness, 1e-3));\r\n }\r\n\r\n //合并\r\n this.GrooveCheckMerge();\r\n //修改本实体轮廓\r\n if (this.grooves.some(g => equaln(g.thickness, this.thickness, 1e-3)))\r\n {\r\n if (!this.ContourCheckSubtract(splitEntitys))\r\n {\r\n this.Erase();\r\n return;\r\n }\r\n }\r\n\r\n //修正凹槽轮廓\r\n let splitGrooves: ExtrudeSolid[] = [];\r\n let thisArea = this.contourCurve.Area;\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let g = this.grooves[i];\r\n if (equaln(g.thickness, this.thickness, 1e-3))\r\n splitGrooves.push(g);\r\n else\r\n {\r\n let gs = this.GrooveCheckContour(g);\r\n if (gs.length === 1)\r\n {\r\n let gg = gs[0];\r\n if (gg.grooves.length === 0 && equaln(gg.contourCurve.Area, thisArea))\r\n {\r\n //判断正反面\r\n let p = gg.Position.applyMatrix4(this.OCSInv);\r\n if (equaln(p.z, 0))\r\n {\r\n this.thickness -= gg.thickness;\r\n let n = this.Normal;\r\n n.multiplyScalar(gg.thickness);\r\n this._Matrix.elements[12] += n.x;\r\n this._Matrix.elements[13] += n.y;\r\n this._Matrix.elements[14] += n.z;\r\n }\r\n else\r\n {\r\n this.thickness -= gg.thickness;\r\n }\r\n this.grooves.splice(i, 1);\r\n this.GrooveCheckAll(splitEntitys);\r\n return;\r\n }\r\n }\r\n splitGrooves.push(...gs);\r\n }\r\n }\r\n\r\n this.grooves = splitGrooves;\r\n\r\n this.Update();\r\n }\r\n\r\n /** 校验内部槽并且自动分裂 */\r\n GrooveCheckAllAutoSplit(output: ExtrudeSolid[] = undefined)\r\n {\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (output)\r\n output.push(...splitEntitys);\r\n else if (this._Owner)\r\n {\r\n let record = this._Owner.Object as BlockTableRecord;\r\n for (let e of splitEntitys)\r\n {\r\n record.Add(e);\r\n e.RepairRelevance();\r\n }\r\n this.HandleSpliteEntitys(splitEntitys);\r\n }\r\n }\r\n HandleSpliteEntitys(splitEntitys: this[]) { }\r\n LazyGrooveCheckAll()\r\n {\r\n if (this.IsNeedGrooveCheck)\r\n this.GrooveCheckAllAutoSplit();\r\n this.IsLazyGrooveCheck = false;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Draw\r\n GetPrintObject3D()\r\n {\r\n let geometry = new LineGeometry();\r\n let lineSegments = new Float32Array(this.EdgeGeometry.attributes.position.array);\r\n let instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n geometry.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n geometry.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n let line = new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetPrintConceptualMaterial());\r\n return [line, mesh];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(...FastWireframe(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new Object3D().add(...this.GetPrintObject3D());\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n get UCGenerator(): UVGenerator\r\n {\r\n return boardUVGenerator;\r\n }\r\n\r\n __CacheKnifVersion__: { [key: number]: number; };\r\n get NeedUpdateRelevanceGroove()\r\n {\r\n if (!this.__CacheKnifVersion__) return true;\r\n\r\n for (let k of this.RelevanceKnifs)\r\n {\r\n if (!k || !k.Object) continue;\r\n\r\n if (this.__CacheKnifVersion__[k.Index] !== ((k.Object)).__UpdateVersion__)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //缓存当前被关联切割后的体积,如果体积有变化,证明多了拉槽或者少了拉槽\r\n __CacheVolume__: number;\r\n //每当我们去计算关联拉槽的时候,总会有这个分裂的图形数组,如果我们需要,我们也可以复用它去拆单,或者去排钻\r\n __CacheSplitExtrudes: this[];\r\n\r\n /**\r\n * 计算关联拉槽,更新绘制对象(MeshGeometry和EdgeGeometry)\r\n */\r\n private CalcRelevanceGroove()\r\n {\r\n //避免Jig实体更新,导致性能暴跌.\r\n if (!this.Id) return;\r\n\r\n this.__CacheKnifVersion__ = {};\r\n\r\n let knifs: ExtrudeSolid[] = [];\r\n this.GetRelevanceKnifes(knifs);\r\n\r\n if (knifs.length > 0)\r\n {\r\n for (let k of knifs) //复合实体(五金)的子实体没有id\r\n this.__CacheKnifVersion__[k.Id?.Index ?? k.__TempIndexVersion__?.Index] = k.__TempIndexVersion__?.Version ?? k.__UpdateVersion__;\r\n\r\n let tempExtrude = this.Clone();\r\n tempExtrude.RelevanceKnifs.length = 0;//避免递归\r\n if (!this.ReadFileIng)\r\n tempExtrude.__OriginalId__ = this.Id;//在读取文件时不打印日志\r\n let output: ExtrudeSolid[] = [tempExtrude];\r\n let ok = tempExtrude.Subtract(knifs, output);\r\n this.__CacheSplitExtrudes = output as this[];\r\n if (ok)\r\n {\r\n this.__CacheVolume__ = tempExtrude.Volume;\r\n let meshs: BufferGeometry[] = [];\r\n let edges: BufferGeometry[] = [];\r\n let inv = this.OCSInv;\r\n let diff = new Matrix4;\r\n for (let e2 of output)\r\n {\r\n diff.multiplyMatrices(inv, e2._Matrix);\r\n meshs.push(e2.MeshGeometry.applyMatrix4(diff));\r\n edges.push(e2.EdgeGeometry.applyMatrix4(diff));\r\n this.__CacheVolume__ += e2.Volume;\r\n\r\n }\r\n if (output.length === 1)\r\n {\r\n this._MeshGeometry = tempExtrude.MeshGeometry;\r\n this._EdgeGeometry = tempExtrude.EdgeGeometry;\r\n }\r\n else\r\n {\r\n this._MeshGeometry = BufferGeometryUtils.MergeBufferGeometries(meshs);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n this._EdgeGeometry = BufferGeometryUtils.MergeBufferGeometries(edges);\r\n }\r\n\r\n //我们加入一些拓展信息,以便排钻能够使用(或者其他的,比如发送到效果图?,BBS)(布局视口会直接添加实体到场景,所以我们只在这里设置OriginEntity)\r\n for (let i = 0; i < this.__CacheSplitExtrudes.length; i++)\r\n {\r\n this.__CacheSplitExtrudes[i].objectId = new ObjectId(this.Id.Index * -100 - i);\r\n this.__CacheSplitExtrudes[i].__OriginalEnt__ = this;\r\n }\r\n }\r\n else\r\n {\r\n let id = this.Id ?? this.__OriginalId__;\r\n if (\r\n !this.ReadFileIng &&\r\n id &&\r\n this instanceof Board &&\r\n this.__CacheVolume__ !== undefined &&\r\n !equaln(this.__CacheVolume__, this.Volume)\r\n )\r\n Log(`${this.Name}(${id.Index})关联槽已逃离!`);\r\n this.__CacheVolume__ = undefined;\r\n\r\n this.__CacheSplitExtrudes = [this];\r\n }\r\n }\r\n else\r\n {\r\n if (\r\n !this.ReadFileIng &&\r\n this.Id &&\r\n this instanceof Board &&\r\n this.__CacheVolume__ !== undefined &&\r\n !equaln(this.__CacheVolume__, this.Volume)\r\n )\r\n Log(`${this.Name}(${this.Id.Index})关联槽已逃离或者被清除!`);\r\n\r\n this.__CacheSplitExtrudes = [this];\r\n this.__CacheVolume__ = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * 如果实体被切割,那么将返回分裂的实体数组,否则返回自身\r\n */\r\n get SplitExtrudes(): this[]\r\n {\r\n if (this.NeedUpdateRelevanceGroove)\r\n this.Update(UpdateDraw.Geometry);//我们先直接更新绘制\r\n if (this.NeedUpdateRelevanceGroove)//如果更新失败,那么我们更新这个槽(似乎也证明了我们没有绘制实体)\r\n this.CalcRelevanceGroove();//注意,这也将更新绘制的实体(EdgeGeo,MeshGeo)(如果拆单也用这个,可能会带来性能损耗)\r\n\r\n return this.__CacheSplitExtrudes;\r\n }\r\n\r\n protected GetRelevanceKnifes(knifs: ExtrudeSolid[])\r\n {\r\n for (let e of this.RelevanceKnifs)\r\n {\r\n if (!e.IsErase)\r\n knifs.push(e.Object as ExtrudeSolid);\r\n else if (this.__CacheKnifVersion__)\r\n this.__CacheKnifVersion__[e.Index] = (e?.Object)?.__UpdateVersion__;\r\n }\r\n }\r\n\r\n ClearRelevance(en?: ExtrudeSolid)\r\n {\r\n if (en)\r\n {\r\n let oldLen = this.RelevanceKnifs.length;\r\n arrayRemoveIf(this.RelevanceKnifs, id => !id?.Object || id.Index === en.Id.Index);\r\n if (this.RelevanceKnifs.length !== oldLen)\r\n arrayRemoveIf(en.RelevanceMeats, id => !id?.Object || id.Index === this.Id.Index);\r\n\r\n oldLen = this.RelevanceMeats.length;\r\n arrayRemoveIf(this.RelevanceMeats, id => !id?.Object || id.Index === en.Id.Index);\r\n if (oldLen !== this.RelevanceMeats.length)\r\n arrayRemoveIf(en.RelevanceKnifs, id => !id?.Object || id.Index === this.Id.Index);\r\n }\r\n else\r\n {\r\n for (let id of this.RelevanceKnifs)\r\n {\r\n let en = id.Object as ExtrudeSolid;\r\n if (en)\r\n arrayRemoveIf(en.RelevanceMeats, i => !i?.Object || i.Index === this.Id.Index);\r\n }\r\n\r\n for (let id of this.RelevanceMeats)\r\n {\r\n let en = id.Object as ExtrudeSolid;\r\n if (en)\r\n {\r\n arrayRemoveIf(en.RelevanceKnifs, i => !i?.Object || i.Index === this.Id.Index);\r\n en.Update();\r\n }\r\n }\r\n this.RelevanceMeats.length = 0;\r\n this.RelevanceKnifs.length = 0;\r\n }\r\n this.Update();\r\n }\r\n\r\n private _MeshGeometry: BufferGeometry;\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n if (this.thickness <= 0)\r\n return new BufferGeometry();\r\n\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n let grooves = this.Grooves;\r\n if (grooves.every(g => equaln(g.thickness, this.thickness)) || grooves.length === 0)\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n let holes: Contour[] = [];\r\n\r\n let ocsInv = this.OCSInv;\r\n let alMatrix4 = new Matrix4();\r\n for (let g of grooves)\r\n {\r\n alMatrix4.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let gContour = g.ContourCurve.Clone();\r\n gContour.ApplyMatrix(alMatrix4);\r\n holes.push(Contour.CreateContour(gContour));\r\n }\r\n\r\n let shape = new Shape(Contour.CreateContour(contour), holes);\r\n\r\n let extrudeSettings: ExtrudeGeometryOptions = {\r\n steps: 1,\r\n bevelEnabled: false,\r\n depth: this.Thickness,\r\n UVGenerator: this.UCGenerator,\r\n };\r\n let geo = new ExtrudeGeometry(shape.Shape, extrudeSettings);\r\n geo.applyMatrix4(contour.OCSNoClone);\r\n this.UpdateUV(geo, contour.OCSNoClone);\r\n let bgeo = new BufferGeometry().fromGeometry(geo);\r\n bgeo[\"IsMesh\"] = true;\r\n this._MeshGeometry = bgeo;\r\n return bgeo;\r\n }\r\n\r\n let builder = new ExtrudeGeometryBuilder(this);\r\n\r\n this._MeshGeometry = builder.MeshGeometry;\r\n this._EdgeGeometry = builder.EdgeGeometry;\r\n this.UpdateUV(null, null);\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: EdgesGeometry | BufferGeometry;\r\n protected get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n if (this.grooves.every(g => equaln(g.thickness, this.thickness)) || this.grooves.length === 0)\r\n {\r\n let pts = [this.ContourCurve.Shape.getPoints(6).map(AsVector3)];\r\n let ocsInv = this.OCSInv;\r\n let alMatrix4 = new Matrix4();\r\n for (let g of this.grooves)\r\n {\r\n alMatrix4.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let gContour = g.ContourCurve.Clone();\r\n gContour.ApplyMatrix(alMatrix4);\r\n\r\n if (gContour instanceof Polyline)\r\n gContour.UpdateMatrixTo(this.contourCurve.OCS);\r\n\r\n if (gContour instanceof Circle)\r\n {\r\n let sp = new Path();\r\n let cen = gContour.Center.applyMatrix4(this.contourCurve.OCSInv);\r\n sp.ellipse(cen.x, cen.y, gContour.Radius, gContour.Radius, 0, 2 * Math.PI, false, 0);\r\n pts.push(sp.getPoints(6).map(AsVector3));\r\n }\r\n else\r\n pts.push(gContour.Shape.getPoints(6).map(AsVector3));\r\n }\r\n let geo = GenerateExtrudeEdgeGeometry(pts, this.thickness).applyMatrix4(this.contourCurve.OCSNoClone);\r\n this._EdgeGeometry = geo;\r\n return geo;\r\n }\r\n\r\n if (this._MeshGeometry)\r\n {\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n UpdateUV(geo: Geometry, ocs: Matrix4, isRev = false)\r\n {\r\n let mat: PhysicalMaterialRecord;\r\n if (this.Material && this.Material.Object)\r\n mat = this.Material.Object as PhysicalMaterialRecord;\r\n else\r\n mat = this.Db?.DefaultMaterial;\r\n\r\n if (mat && mat.IsFull)\r\n {\r\n if (geo)\r\n ScaleUV2(geo, ocs, this.width, this.height, isRev);\r\n else\r\n this.UpdateBufferGeometryUvs(isRev);\r\n }\r\n else\r\n {\r\n if (geo)\r\n ScaleUV(geo);\r\n }\r\n }\r\n UpdateBufferGeometryUvs(isRev: boolean)\r\n {\r\n let uvs = this._MeshGeometry.attributes.uv;\r\n for (let i = 0; i < uvs.count; i++)\r\n {\r\n let x = uvs.getX(i) * 1e3;\r\n let y = uvs.getY(i) * 1e3;\r\n if (isRev)\r\n uvs.setXY(i, x / this.height, y / this.width);\r\n else\r\n uvs.setXY(i, x / this.width, y / this.height);\r\n }\r\n }\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n //如果是Jig实体,那么就算它有关联切割,我们也不更新实体(因为似乎没必要?)\r\n if (this.Id && this.RelevanceKnifs.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this.csg = undefined;\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry.dispose();\r\n this._EdgeGeometry = undefined;\r\n if (this._MeshGeometry)\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n obj.add(...FastWireframe(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return obj.add(\r\n ...this.GetPrintObject3D()\r\n );\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return obj.add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n\r\n UpdateJigMaterial(color = 8)\r\n {\r\n\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n /**\r\n * 简化的文件读取和写入,只写入必要的数据,没有id,没有其他版本号\r\n */\r\n ReadFileLite(file: CADFiler)\r\n {\r\n this.ReadFileOnly(file);\r\n this._Matrix.fromArray(file.Read());\r\n }\r\n WriteFileLite(file: CADFiler)\r\n {\r\n this.WriteFileOnly(file);\r\n file.Write(this._Matrix.toArray());\r\n }\r\n\r\n private ReadFileOnly(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.height = Number(file.Read());\r\n this.width = Number(file.Read());\r\n this.thickness = Number(file.Read());\r\n this.isRect = file.Read();\r\n this.contourCurve = file.ReadObject() as ExtureContourCurve;\r\n\r\n let grooveCount = file.Read();\r\n this.grooves.length = 0;\r\n for (let i = 0; i < grooveCount; i++)\r\n {\r\n if (this.grooves[i] === undefined)\r\n this.grooves[i] = new ExtrudeSolid();\r\n\r\n this.grooves[i].ReadFileLite(file);\r\n }\r\n\r\n this.knifeRadius = file.Read();\r\n this.groovesAddLength = file.Read();\r\n if (ver > 1)\r\n {\r\n this.groovesAddWidth = file.Read();\r\n this.groovesAddDepth = file.Read();\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this.RelevanceMeats.length = 0;\r\n this.RelevanceKnifs.length = 0;\r\n\r\n let count = file.Read() as number;\r\n for (let index = 0; index < count; index++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this.RelevanceMeats.push(id);\r\n }\r\n\r\n count = file.Read() as number;\r\n for (let index = 0; index < count; index++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this.RelevanceKnifs.push(id);\r\n }\r\n }\r\n }\r\n private WriteFileOnly(file: CADFiler)\r\n {\r\n file.Write(3);\r\n file.Write(this.height);\r\n file.Write(this.width);\r\n file.Write(this.thickness);\r\n file.Write(this.isRect);\r\n file.WriteObject(this.ContourCurve);\r\n\r\n file.Write(this.grooves.length);\r\n for (let groove of this.grooves)\r\n groove.WriteFileLite(file);\r\n\r\n file.Write(this.knifeRadius);\r\n file.Write(this.groovesAddLength);\r\n file.Write(this.groovesAddWidth);\r\n file.Write(this.groovesAddDepth);\r\n\r\n //3\r\n file.Write(this.RelevanceMeats.length);\r\n for (let id of this.RelevanceMeats)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this.RelevanceKnifs.length);\r\n for (let id of this.RelevanceKnifs)\r\n file.WriteSoftObjectId(id);\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n this.ReadFileOnly(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n this.WriteFileOnly(file);\r\n }\r\n //#endregion\r\n}\r\n\r\nexport function FastMeshGeometry(width: number, height: number, thickness: number)\r\n{\r\n let geo = new BoxGeometry(width, height, thickness);\r\n geo.translate(width * 0.5, height * 0.5, thickness * 0.5);\r\n return geo;\r\n}\r\n\r\n\r\nCADFactory.RegisterObjectAlias(ExtrudeSolid, \"ExtureSolid\");\r\n\r\nfunction ProjectBoard(knifBoard: ExtrudeSolid, projectBoard: ExtrudeSolid)\r\n{\r\n let n1 = knifBoard.Normal;\r\n let n2 = projectBoard.Normal;\r\n if (!isPerpendicularityTo(n1, n2)) return;\r\n\r\n let p1 = projectBoard.Position;\r\n let p2 = n2.clone().multiplyScalar(projectBoard.Thickness).add(p1);\r\n\r\n let ocsInv = knifBoard.OCSInv;\r\n p1.applyMatrix4(ocsInv).setZ(0);\r\n p2.applyMatrix4(ocsInv).setZ(0);\r\n\r\n let dir = new Vector3().crossVectors(n1, n2).applyMatrix4(ocsInv.clone().setPosition(ZeroVec));\r\n\r\n let lineLength = projectBoard.Width + projectBoard.Height;//两边之和大于第三边\r\n let pts = [\r\n dir.clone().multiplyScalar(lineLength).add(p1),\r\n dir.clone().multiplyScalar(-lineLength).add(p1),\r\n dir.clone().multiplyScalar(-lineLength).add(p2),\r\n dir.clone().multiplyScalar(lineLength).add(p2),\r\n ];\r\n\r\n let pl = new Polyline(pts.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n }));\r\n pl.CloseMark = true;\r\n\r\n // pl.ApplyMatrix(knifBoard.OCS);\r\n return pl;\r\n}\r\n\r\n//用于翻转绘制出来的槽\r\nconst OverturnMatrix = new Matrix4().makeBasis(YAxis, ZAxis, XAxis);\r\n","import { Matrix3, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DragPointType } from \"./DragPointType\";\r\nimport { Entity } from \"./Entity\";\r\nimport { ExtrudeSolid } from \"./Extrude\";\r\n\r\n\r\n@Factory\r\nexport class CompositeEntity extends Entity\r\n{\r\n constructor()\r\n {\r\n super();\r\n }\r\n //如果你需要修改内部实体,则需要写入记录\r\n @AutoRecord Entitys: Entity[] = [];\r\n\r\n //#region 绘制\r\n // OnlyRenderType = true; //我们现在不需要这样,因为我们每个绘制类型的Object的子实体都有子实体的渲染类型(唯一的缺点可能是渲染速度变慢了?)\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n Explode()\r\n {\r\n return this.Entitys.map(e =>\r\n {\r\n let cloneE = e.Clone();\r\n cloneE.Material = e.Material;\r\n return cloneE.ApplyMatrix(this.OCS);\r\n });\r\n }\r\n Traverse(callback: (arg0: Entity) => void)\r\n {\r\n callback(this);\r\n for (let en of this.Entitys)\r\n {\r\n if (en instanceof CompositeEntity)\r\n en.Traverse(callback);\r\n else\r\n callback(en);\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3Ext();\r\n for (let e of this.Entitys)\r\n box.union(e.BoundingBox);\r\n return box.applyMatrix4(this.OCS);\r\n }\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n /**\r\n * 如果复合实体里面有圆,并且使用了拉伸夹点功能,在UpdateDrawObject时,会因为无法得到Jig对象而导致的错误.\r\n * 索性我们去掉Jig实体的功能.\r\n */\r\n if (renderType === RenderType.Jig) return;\r\n\r\n let object = new Object3D();\r\n this.UpdateDrawObject(renderType, object);\r\n return object;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n Object3DRemoveAll(obj);\r\n for (let e of this.Entitys)\r\n {\r\n e.IsEmbedEntity = true;\r\n\r\n // //内嵌实体在某些时候可能被清理,修复它\r\n // if (e.DrawObject.children.length === 0)\r\n // e.ClearDraw();\r\n let o = e.GetDrawObjectFromRenderType(renderType);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, e, renderType);\r\n }\r\n }\r\n }\r\n\r\n get ColorIndex(): number\r\n {\r\n return super.ColorIndex;\r\n }\r\n\r\n set ColorIndex(color: number)\r\n {\r\n if (color !== this._Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Color = color;\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n // if (e instanceof CompositeEntity) //有点奇怪\r\n // e._Color = color;\r\n // else\r\n e.ColorIndex = color;\r\n });\r\n }\r\n }\r\n get Material()\r\n {\r\n return super.Material;\r\n }\r\n set Material(id)\r\n {\r\n super.Material = id;\r\n for (let e of this.Entitys)\r\n e.Material = id;\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n this.UpdateDrawObject(renderType, obj);\r\n }\r\n\r\n RestoreJigMaterial()\r\n {\r\n //我们不做任何事情,避免更新材质引起的重绘,因为我们没有实现Jig材质,所以我们也不需要还原它\r\n }\r\n\r\n //#endregion\r\n\r\n //#region 交互操作\r\n\r\n /**\r\n *\r\n * @param snapMode 捕捉模式(单一)\r\n * @param pickPoint const\r\n * @param lastPoint const\r\n * @param viewXform const 最近点捕捉需要这个变量\r\n * @returns object snap points\r\n */\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n for (let e of this.Entitys)\r\n {\r\n pts.push(...e.Clone().ApplyMatrix(this.OCS).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n *\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\r\n * @memberof Entity\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n\r\n private GetGripOrStretchPoints(type: DragPointType)\r\n {\r\n let pts: Vector3[] = [];\r\n for (let e of this.Entitys)\r\n pts.push(... (type === DragPointType.Grip ? e.GetGripPoints() : e.GetStretchPoints()));\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n\r\n private GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts: number[] = this.Entitys.map(e =>\r\n {\r\n return (dragType === DragPointType.Grip ? e.GetGripPoints() : e.GetStretchPoints()).length;\r\n });\r\n return counts;\r\n }\r\n\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let counts = this.GetStrectchPointCountList(dragType);\r\n if (dragType === DragPointType.Stretch && indexList.length === arraySum(counts))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n arraySortByNumber(indexList);\r\n let i = 0;\r\n let j = 0;\r\n let icount = indexList.length;\r\n let offset = 0;\r\n for (let count of counts)\r\n {\r\n offset += count;\r\n let ilist = [];\r\n for (; i < icount; i++)\r\n {\r\n if (indexList[i] < offset)\r\n ilist.push(indexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n\r\n let ent = this.Entitys[j];\r\n dragType === DragPointType.Grip ? ent.MoveGripPoints(ilist, vec) : ent.MoveStretchPoints(ilist, vec);\r\n if (ent instanceof ExtrudeSolid)//取消优化判断this.Objectid,因为这个实体可能被复合在另一个实体中,导致这个id是不存在的,所以我们无法判断它在拽拖.\r\n ent.CheckContourCurve();\r\n ent.Update();\r\n j++;\r\n }\r\n this.__UpdateVersion__++;\r\n\r\n //如何绘制对象是克隆的,那么我们将重绘它(避免无法更新)\r\n //我们也不大需要下面的判断,我们如果持续的更新它,其实并不会有多大的问题,因为我们总是从缓存里面拿绘制对象\r\n // if (this._drawObject && this._drawObject.children[0]?.userData.IsClone)\r\n this.Update();\r\n }\r\n CloneDrawObject(from: this)\r\n {\r\n for (let [type, obj] of from._CacheDrawObject)\r\n {\r\n let oldUserDaata = obj.userData;\r\n obj.userData = {};\r\n let newObj = obj.clone(true);\r\n obj.userData = oldUserDaata;\r\n obj.userData.IsClone = true;\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n newObj.userData.IsClone = true;\r\n\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n //#endregion\r\n\r\n //#region 文件序列化\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let v = file.Read();\r\n super._ReadFile(file);\r\n let count = file.Read();\r\n this.Entitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let ent = file.ReadObject() as Entity;\r\n if (ent)\r\n this.Entitys.push(ent);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.Entitys.length);\r\n for (let e of this.Entitys)\r\n file.WriteObject(e);\r\n }\r\n //#endregion\r\n}\r\n","import { CompositeEntity } from \"../Entity/CompositeEntity\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { ICompHardwareOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DefaultCompositeMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\n\r\n@Factory\r\nexport class HardwareCompositeEntity extends CompositeEntity\r\n{\r\n @AutoRecord HardwareOption: ICompHardwareOption = { ...DefaultCompositeMetalsOption };\r\n @AutoRecord DataList: [string, string][] = [];\r\n @AutoRecord RelevanceBoards: ObjectId[] = [];\r\n constructor()\r\n {\r\n super();\r\n }\r\n GetAllEntity(isHole: boolean = false, filter?: (e: Entity) => boolean)\r\n {\r\n let holes: Entity[] = [];\r\n for (let e of this.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n if (!isHole || e.HardwareOption.isHole)\r\n holes.push(...e.GetAllEntity(isHole, filter).map(h => h.ApplyMatrix(this.OCS)));\r\n }\r\n else\r\n {\r\n if (!filter || filter(e))\r\n {\r\n holes.push(e.Clone().ApplyMatrix(this.OCS));\r\n }\r\n }\r\n }\r\n return holes;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let v = file.Read();\r\n\r\n this.HardwareOption.type = file.Read();\r\n this.HardwareOption.isSplite = file.Read();\r\n this.HardwareOption.isSplitePrice = file.Read();\r\n this.HardwareOption.color = file.Read();\r\n this.HardwareOption.material = file.Read();\r\n this.HardwareOption.name = file.Read();\r\n this.HardwareOption.roomName = file.Read();\r\n this.HardwareOption.cabinetName = file.Read();\r\n this.HardwareOption.costExpr = file.Read();\r\n this.HardwareOption.actualExpr = file.Read();\r\n this.HardwareOption.model = file.Read();\r\n this.HardwareOption.factory = file.Read();\r\n this.HardwareOption.brand = file.Read();\r\n this.HardwareOption.spec = file.Read();\r\n this.HardwareOption.count = file.Read();\r\n this.HardwareOption.comments = file.Read();\r\n this.HardwareOption.unit = file.Read();\r\n\r\n let count = file.Read();\r\n this.DataList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n this.DataList.push(d);\r\n }\r\n\r\n if (v > 1)\r\n this.HardwareOption.isHole = file.Read();\r\n\r\n if (v >= 3)\r\n {\r\n let count = file.Read();\r\n this.RelevanceBoards.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n this.RelevanceBoards.push(file.ReadSoftObjectId());\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n\r\n file.Write(this.HardwareOption.type);\r\n file.Write(this.HardwareOption.isSplite);\r\n file.Write(this.HardwareOption.isSplitePrice);\r\n file.Write(this.HardwareOption.color);\r\n file.Write(this.HardwareOption.material);\r\n file.Write(this.HardwareOption.name);\r\n file.Write(this.HardwareOption.roomName);\r\n file.Write(this.HardwareOption.cabinetName);\r\n file.Write(this.HardwareOption.costExpr);\r\n file.Write(this.HardwareOption.actualExpr);\r\n file.Write(this.HardwareOption.model);\r\n file.Write(this.HardwareOption.factory);\r\n file.Write(this.HardwareOption.brand);\r\n file.Write(this.HardwareOption.spec);\r\n file.Write(this.HardwareOption.count);\r\n file.Write(this.HardwareOption.comments);\r\n file.Write(this.HardwareOption.unit);\r\n\r\n file.Write(this.DataList.length);\r\n for (let data of this.DataList)\r\n {\r\n file.Write(data[0]);\r\n file.Write(data[1]);\r\n }\r\n\r\n file.Write(this.HardwareOption.isHole);\r\n file.Write(this.RelevanceBoards.length);\r\n for (let id of this.RelevanceBoards)\r\n file.WriteSoftObjectId(id);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { LinesType } from \"../UI/Store/BoardInterface\";\r\n\r\nexport class PointShapeUtils\r\n{\r\n //方形点表\r\n static SquarePts(size: number)\r\n {\r\n return [\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n new Vector3(size, size),\r\n new Vector3(-size, size),\r\n new Vector3(-size, -size),\r\n ];\r\n }\r\n //方形外圈十字直线点表\r\n static OutsideLinePts(squareSize: number, lineLength: number)\r\n {\r\n return [\r\n //-X\r\n new Vector3(-squareSize, 0),\r\n new Vector3(-lineLength, 0),\r\n //X\r\n new Vector3(squareSize, 0),\r\n new Vector3(lineLength, 0),\r\n //Y\r\n new Vector3(0, squareSize),\r\n new Vector3(0, lineLength),\r\n\r\n //-Y\r\n new Vector3(0, -squareSize),\r\n new Vector3(0, -lineLength),\r\n ];\r\n }\r\n //十字直线点表\r\n static CrossLinePts(lineLength: number)\r\n {\r\n return [\r\n new Vector3(0, -lineLength),\r\n new Vector3(0, lineLength),\r\n\r\n new Vector3(lineLength, 0),\r\n new Vector3(-lineLength, 0),\r\n ];\r\n }\r\n static CrossLine3DPts(lineLength: number)\r\n {\r\n return [\r\n [new Vector3(lineLength, 0),\r\n new Vector3(-lineLength / 2, 0)],\r\n [new Vector3(0, -lineLength / 2),\r\n new Vector3(0, lineLength)],\r\n [new Vector3(0, 0, -lineLength / 2),\r\n new Vector3(0, 0, lineLength)],\r\n ];\r\n }\r\n\r\n static TrianglePts(size: number)\r\n {\r\n return [\r\n new Vector3(size, -size),\r\n new Vector3(0, size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n ];\r\n }\r\n\r\n static CirclePts(size: number)\r\n {\r\n let pts = [];\r\n let a = Math.PI * 2 / 8;\r\n for (let i = 0; i < 9; i++)\r\n pts.push(new Vector3(Math.sin(a * i) * size, Math.cos(a * i) * size));\r\n return pts;\r\n }\r\n\r\n static ObliqueCrossPts(size: number)\r\n {\r\n return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(-size, -size), new Vector3(size, size)];\r\n }\r\n static ObliqueCrossLinePts(size: number)\r\n {\r\n return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(), new Vector3(-size, -size), new Vector3(size, size)];\r\n }\r\n\r\n static SandClockPts(size: number)\r\n {\r\n return [\r\n new Vector3(size, size),\r\n new Vector3(-size, size),\r\n new Vector3(size, -size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, size),\r\n ];\r\n }\r\n\r\n static TangentPts(size: number)\r\n {\r\n let pts = [\r\n new Vector3(-size, size),\r\n new Vector3(size, size),\r\n new Vector3(size / 2, size),\r\n ];\r\n let a = Math.PI * 2 / 8;\r\n for (let i = 0; i < 9; i++)\r\n pts.push(new Vector3(Math.sin(a * i + Math.PI / 2) * size, Math.cos(a * i + Math.PI / 2) * size));\r\n return pts;\r\n }\r\n\r\n static PerPts(size: number)\r\n {\r\n return [\r\n new Vector3(-size, size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n new Vector3(0, -size),\r\n new Vector3(0, 0),\r\n new Vector3(-size, 0),\r\n ];\r\n }\r\n\r\n static LinesDirPts(len: number, width: number, lineType: LinesType)\r\n {\r\n if (lineType === LinesType.Reverse)\r\n {\r\n return [\r\n new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, width / 2),\r\n new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, -width / 2),\r\n new Vector3(-len / 2), new Vector3(len / 2),\r\n new Vector3(len / 2), new Vector3(len / 2 - width / 2, width / 2),\r\n new Vector3(len / 2), new Vector3(len / 2 - width / 2, -width / 2),\r\n ];\r\n }\r\n else if (lineType === LinesType.Positive)\r\n return [\r\n new Vector3(0, -len / 2), new Vector3(-width / 2, -len / 2 + width / 2),\r\n new Vector3(0, -len / 2), new Vector3(width / 2, -len / 2 + width / 2),\r\n new Vector3(0, -len / 2), new Vector3(0, len / 2),\r\n new Vector3(0, len / 2), new Vector3(-width / 2, len / 2 - width / 2),\r\n new Vector3(0, len / 2), new Vector3(width / 2, len / 2 - width / 2),\r\n\r\n ];\r\n else\r\n {\r\n let w1 = Math.min(len, width) / 5;\r\n\r\n return [\r\n new Vector3(0, len / 2), new Vector3(0, -len / 2),\r\n new Vector3(-width / 2), new Vector3(width / 2),\r\n\r\n new Vector3(-width / 2), new Vector3(-width / 2 + w1, w1),\r\n new Vector3(-width / 2), new Vector3(-width / 2 + w1, -w1),\r\n new Vector3(width / 2), new Vector3(width / 2 - w1, w1),\r\n new Vector3(width / 2), new Vector3(width / 2 - w1, -w1),\r\n\r\n new Vector3(0, len / 2), new Vector3(-w1, len / 2 - w1),\r\n new Vector3(0, len / 2), new Vector3(w1, len / 2 - w1),\r\n new Vector3(0, -len / 2), new Vector3(-w1, -len / 2 + w1),\r\n new Vector3(0, -len / 2), new Vector3(w1, -len / 2 + w1),\r\n ];\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector3, LineSegments, Object3D, Mesh, Geometry, Line as TLine, Matrix3, UVGenerator } from 'three';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { deserializationBoardData, serializeBoardData, SerializeBoard2DModeingData, DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, SerializeBoard3DModeingData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { arrayRemoveIf, arraySortByNumber, arraySum } from '../../Common/ArrayExt';\r\nimport { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { userConfig } from '../../Editor/UserConfig';\r\nimport { boardUVGenerator, boardUVGenerator2 } from '../../Geometry/BoardUVGenerator';\r\nimport { equaln, MoveMatrix, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { BoardOpenDir, BoardProcessOption, BoardType, ComposingType, FaceDirection, LinesType } from '../../UI/Store/BoardInterface';\r\nimport { ExtrudeHole } from '../3DSolid/ExtrudeHole';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { HardwareCompositeEntity } from '../Hardware/HardwareCompositeEntity';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { Shape } from '../Shape';\r\nimport { Circle } from './Circle';\r\nimport { Entity } from './Entity';\r\nimport { ExtrudeSolid, ExtureContourCurve } from './Extrude';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { CylinderHole } from '../3DSolid/CylinderHole';\r\nimport { BlockTableRecord } from '../BlockTableRecord';\r\nimport { InitRectBoardHoleOption, SetRectHighHole, TempRectHoleOption, CyHoleInBoard } from '../../Add-on/DrawDrilling/HoleUtils';\r\nimport { GetBoardHighSeal, GetBoardSealingCurves } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { Polyline } from './Polyline';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Arc } from './Arc';\r\nimport { VData2Curve, VKnifToolPath } from '../../GraphicsSystem/ToolPath/VKnifToolPath';\r\nimport { ZMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\n\r\n//转换板件类型成为空间类型. 0x 1y 2z\r\nexport function ConverBoardTypeToSpaceType(type: BoardType): number\r\n{\r\n switch (type)\r\n {\r\n case BoardType.Layer:\r\n return 2;\r\n case BoardType.Vertical:\r\n return 0;\r\n case BoardType.Behind:\r\n return 1;\r\n }\r\n}\r\n\r\nexport interface IModeling\r\n{\r\n shape: Shape;\r\n thickness: number;\r\n dir: FaceDirection;\r\n knifeRadius: number;\r\n addLen: number;\r\n addWidth?: number;\r\n addDepth?: number;\r\n}\r\n\r\nexport interface IKnifeInfo\r\n{\r\n angle: number;\r\n radius: number;\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface I2DModeingItem\r\n{\r\n depth: number;\r\n offset: number;\r\n knife: IKnifeInfo;\r\n}\r\n\r\nexport interface I2DModeling\r\n{\r\n path: Polyline;\r\n dir: FaceDirection;\r\n items: I2DModeingItem[];\r\n}\r\n\r\nexport interface IPathItem { pt: Vector3, bul: number; }\r\n\r\nexport interface I3DModeling\r\n{\r\n path: IPathItem[];\r\n dir: FaceDirection;\r\n knife: IKnifeInfo;\r\n}\r\n\r\n/**\r\n * 板件实体\r\n */\r\n@Factory\r\nexport class Board extends ExtrudeSolid\r\n{\r\n private _Rotation = {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n };\r\n private _BoardType: BoardType;\r\n private _Name = \"\";\r\n private _BoardProcessOption: BoardProcessOption;\r\n //板件排钻表,与之碰撞板件为key\r\n private _DrillList: Map = new Map();\r\n private _LayerNails: ObjectId[] = [];\r\n @AutoRecord RelativeHardware: ObjectId[] = [];\r\n @AutoRecord OpenDir: BoardOpenDir = BoardOpenDir.None;\r\n private _IsChaiDan: boolean = true;\r\n private _2DModelingList: I2DModeling[] = [];\r\n private _3DModelingList: I3DModeling[] = [];\r\n constructor()\r\n {\r\n super();\r\n this.InitBoardData();\r\n }\r\n\r\n /**\r\n * 创建一个代理数组,数组改变时被监听\r\n */\r\n private CreateArray(): T[]\r\n {\r\n return new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n this.WriteAllObjectRecord();\r\n return Reflect.set(target, key, value, receiver);\r\n }\r\n });\r\n }\r\n\r\n private InitBoardData()\r\n {\r\n let defaultData: BoardProcessOption =\r\n {\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n boardName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n composingFace: ComposingType.Arbitrary,\r\n highSealed: this.CreateArray(),\r\n sealedUp: \"1\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n spliteHeight: \"\",\r\n spliteWidth: \"\",\r\n spliteThickness: \"\",\r\n highDrill: this.CreateArray(),\r\n frontDrill: true,\r\n backDrill: true,\r\n drillType: \"\",\r\n remarks: this.CreateArray(),\r\n };\r\n\r\n this._BoardProcessOption = new Proxy(defaultData, {\r\n get: function (target, key, receiver)\r\n {\r\n return Reflect.get(target, key, receiver);\r\n },\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (key === \"highDrill\" || key === EBoardKeyList.HighSealed)\r\n {\r\n let arr = this.CreateArray() as any[];\r\n arr.push(...value);\r\n target[key] = arr;\r\n if (key === EBoardKeyList.HighSealed)\r\n this.Update(UpdateDraw.Geometry);\r\n return true;\r\n }\r\n let result = Reflect.set(target, key, value, receiver);\r\n if (key === EBoardKeyList.Lines)\r\n this.Update(UpdateDraw.Geometry);\r\n return result;\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n //初始化板件 来自长宽高\r\n InitBoard(length: number, width: number, thickness: number, boardType: BoardType = BoardType.Layer)\r\n {\r\n this._BoardType = boardType;\r\n if (boardType === BoardType.Layer)\r\n {\r\n this.ColorIndex = 2;\r\n this._Name = \"层板\";\r\n }\r\n else if (boardType === BoardType.Vertical)\r\n {\r\n this.ColorIndex = 11;\r\n this._Name = \"立板\";\r\n }\r\n else\r\n {\r\n this.ColorIndex = 3;\r\n this._Name = \"背板\";\r\n }\r\n\r\n let types = [...userConfig.DrillConfigs.keys(), \"不排\"];\r\n let type = types.includes(this.BoardProcessOption.drillType) ? this.BoardProcessOption.drillType : types[0];\r\n this._BoardProcessOption.drillType = type;\r\n this._BoardProcessOption.highDrill = Array(4).fill(type);\r\n\r\n this.ConverToRectSolid(width, length, thickness);\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n static CreateBoard(length: number, width: number, thickness: number, boardType: BoardType = BoardType.Layer)\r\n {\r\n let board = new Board();\r\n board.InitBoard(length, width, thickness, boardType);\r\n board.ApplyMatrix(board.RotateMat);\r\n board._SpaceOCS.identity();\r\n return board;\r\n }\r\n get DrillList()\r\n {\r\n return this._DrillList;\r\n }\r\n\r\n get LayerNails()\r\n {\r\n return this._LayerNails;\r\n }\r\n\r\n AppendNails(ids: ObjectId[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LayerNails.push(...ids);\r\n }\r\n ClearLayerNails()\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let nail of this._LayerNails)\r\n {\r\n if (nail.Object && !nail.IsErase)\r\n nail.Object.Erase();\r\n }\r\n this._LayerNails.length = 0;\r\n }\r\n\r\n /**\r\n * 你可以安心的修改它,这样会直接影响到板件,因为板件对这个对象添加了代理.\r\n */\r\n get BoardProcessOption()\r\n {\r\n return this._BoardProcessOption;\r\n }\r\n\r\n set BoardProcessOption(obj: BoardProcessOption)\r\n {\r\n Object.assign(this._BoardProcessOption, obj, { [EBoardKeyList.HighSealed]: obj[EBoardKeyList.HighSealed].slice() });\r\n }\r\n get NeedUpdateRelevanceGroove()\r\n {\r\n if (super.NeedUpdateRelevanceGroove)\r\n return true;\r\n\r\n for (let k of this.RelativeHardware)\r\n {\r\n if (!k || !k.Object) continue;\r\n if (this.__CacheKnifVersion__[k.Index] !== ((k.Object)).__UpdateVersion__)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n protected GetRelevanceKnifes(knifs: ExtrudeSolid[])\r\n {\r\n super.GetRelevanceKnifes(knifs);\r\n for (let e of this.RelativeHardware)\r\n {\r\n if (e.IsErase) continue;\r\n let hardware = e.Object;\r\n if (hardware instanceof HardwareCompositeEntity)\r\n {\r\n if (hardware.HardwareOption.isHole)\r\n {\r\n let holes = hardware.GetAllEntity(true, e => e instanceof ExtrudeHole || e instanceof ExtrudeSolid) as (ExtrudeHole | ExtrudeSolid)[];\r\n\r\n for (let i = 0; i < holes.length; i++)\r\n {\r\n let h = holes[i];\r\n let g = h instanceof ExtrudeHole ? h.Convert2ExtrudeSolid() : h;\r\n g.__TempIndexVersion__ = { Index: hardware.Id.Index, Version: hardware.__UpdateVersion__ };\r\n knifs.push(g);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n ClearRelevance(en?: ExtrudeSolid)\r\n {\r\n for (let id of this.RelativeHardware)\r\n {\r\n let e = id.Object;\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n arrayRemoveIf(e.RelevanceBoards, i => !i || i.Index === this.Id.Index);\r\n }\r\n }\r\n this.RelativeHardware.length = 0;\r\n super.ClearRelevance(en);\r\n }\r\n\r\n get SplitBoards()\r\n {\r\n let brs = this.SplitExtrudes;\r\n //拆单或者bbs的时候会重新加入最新的原板件的排钻和层板钉数据\r\n for (let br of brs)\r\n {\r\n if (br.__OriginalEnt__)\r\n {\r\n br._DrillList = new Map(this._DrillList.entries());\r\n br._LayerNails = [...this._LayerNails];\r\n br.ProcessingGroupList = [...this.ProcessingGroupList];\r\n br._BoardProcessOption = { ...this._BoardProcessOption };\r\n //如果是矩形板,关联切割后的板件,用上下左右封边重新填充高级封边,避免近乎矩形的板件封边看上去不对 #I2AQ9R\r\n if (this.isRect)\r\n br._BoardProcessOption.highSealed.length = 0;\r\n }\r\n }\r\n return brs;\r\n }\r\n\r\n get BoardModeling()\r\n {\r\n let models: IModeling[] = [];\r\n for (let g of this.grooves)\r\n {\r\n let cu = g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCS));\r\n\r\n let outline = Contour.CreateContour(cu, false);\r\n let holes: Contour[] = [];\r\n for (let subG of g.Grooves)\r\n {\r\n let holeCu = subG.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(subG.OCS));\r\n holes.push(Contour.CreateContour(holeCu, false));\r\n }\r\n\r\n let s = new Shape(outline, holes);\r\n\r\n models.push({\r\n shape: s,\r\n thickness: g.Thickness,\r\n dir: equaln(g.Position.applyMatrix4(this.OCSInv).z, 0) && g.Thickness < this.thickness - 1e-6 ? FaceDirection.Back : FaceDirection.Front,\r\n knifeRadius: g.KnifeRadius,\r\n addLen: g.GroovesAddLength,\r\n addWidth: g.GroovesAddWidth,\r\n addDepth: g.GroovesAddDepth,\r\n });\r\n }\r\n return models;\r\n }\r\n set BoardModeling(models: IModeling[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.length = 0;\r\n\r\n for (let model of models)\r\n {\r\n let g = new ExtrudeSolid();\r\n g.OCS = this.OCS;\r\n g.ContourCurve = model.shape.Outline.Curve;\r\n g.Thickness = model.thickness;\r\n g.GroovesAddLength = model.addLen;\r\n g.KnifeRadius = model.knifeRadius;\r\n\r\n for (let hole of model.shape.Holes)\r\n {\r\n let subG = new ExtrudeSolid();\r\n subG.OCS = this.OCS;\r\n subG.ContourCurve = hole.Curve;\r\n subG.Thickness = model.thickness;\r\n\r\n g.AppendGroove(subG);\r\n }\r\n\r\n if (model.dir === FaceDirection.Front)\r\n g.ApplyMatrix(MoveMatrix(new Vector3(0, 0, this.thickness - g.Thickness)));\r\n\r\n this.grooves.push(g);\r\n }\r\n this.Update();\r\n }\r\n get Modeling2D()\r\n {\r\n return [...this._2DModelingList];\r\n }\r\n set Modeling2D(ms: I2DModeling[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._2DModelingList = ms;\r\n this.OffsetPathCache.clear();\r\n this._2D3DPathObject = null;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n get Modeling3D()\r\n {\r\n return [...this._3DModelingList];\r\n }\r\n set Modeling3D(ms: I3DModeling[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._2D3DPathObject = null;\r\n this._3DModelingList = ms;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n ClearModeling2DList()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._2DModelingList.length = 0;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n ClearModeling3DList()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._3DModelingList.length = 0;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n get IsChaiDan()\r\n {\r\n return this._IsChaiDan;\r\n }\r\n set IsChaiDan(v: boolean)\r\n {\r\n if (this._IsChaiDan !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._IsChaiDan = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n ClearBoardModeling()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.length = 0;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n /**\r\n * 注意传入的排钻列表,避免指针被引用\r\n */\r\n AppendDrillList(k: ObjectId, drs: ObjectId[][])\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldDrs = this._DrillList.get(k);\r\n if (oldDrs)\r\n oldDrs.push(...drs);//同类型板件时,会触发这里.\r\n else\r\n this._DrillList.set(k, drs);\r\n }\r\n ClearDrillList(k: ObjectId)\r\n {\r\n let drids = this._DrillList.get(k);\r\n if (drids)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let drillents of drids)\r\n {\r\n for (let objId of drillents)\r\n {\r\n if (!objId.IsErase)\r\n objId.Object.Erase();\r\n }\r\n }\r\n this._DrillList.delete(k);\r\n\r\n if (k && k.Object)\r\n {\r\n //必须在这里删除\r\n let br = k.Object as Board;\r\n br.ClearDrillList(this.Id);\r\n }\r\n }\r\n }\r\n\r\n ClearAllDrillList()\r\n {\r\n for (const [id] of this._DrillList)\r\n {\r\n this.ClearDrillList(id);\r\n }\r\n }\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n\r\n if (!isErase) return;\r\n\r\n //记录数据,避免下面记录的时候,排钻已经被删除,导致排钻数据被优化掉.\r\n this.WriteAllObjectRecord();\r\n\r\n for (const [, driss] of this._DrillList)\r\n {\r\n for (let dris of driss)\r\n for (let d of dris)\r\n if (d && d.Object)\r\n d.Object.Erase();\r\n }\r\n this.ClearLayerNails();\r\n }\r\n get RotateMat()\r\n {\r\n let roMat = new Matrix4();\r\n\r\n switch (this._BoardType)\r\n {\r\n case BoardType.Layer:\r\n roMat.makeBasis(\r\n new Vector3(0, 1, 0),\r\n new Vector3(-1, 0, 0),\r\n new Vector3(0, 0, 1)\r\n );\r\n break;\r\n case BoardType.Vertical:\r\n roMat.makeBasis(\r\n new Vector3(0, 1, 0),\r\n new Vector3(0, 0, 1),\r\n new Vector3(1, 0, 0)\r\n );\r\n break;\r\n case BoardType.Behind:\r\n roMat.makeBasis(\r\n new Vector3(1, 0, 0),\r\n new Vector3(0, 0, 1),\r\n new Vector3(0, -1, 0)\r\n );\r\n }\r\n return roMat;\r\n }\r\n get Height()\r\n {\r\n return this.height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this.ContourCurve instanceof Circle)\r\n return;\r\n\r\n if (!equaln(v, this.height, 1e-2))\r\n {\r\n this.WriteAllObjectRecord();\r\n let refHeight = this.height / 2;\r\n let dist = v - this.height;\r\n\r\n let contour = Contour.CreateContour(this.ContourCurve, false);\r\n let isSuccess = contour.UnEqualProportionScale(refHeight, dist, \"y\");\r\n\r\n if (isSuccess)\r\n {\r\n this.height = v;\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n }\r\n }\r\n get Width()\r\n {\r\n return this.width;\r\n }\r\n set Width(v: number)\r\n {\r\n if (this.ContourCurve instanceof Circle)\r\n return;\r\n\r\n if (!equaln(v, this.width, 1e-2))\r\n {\r\n this.WriteAllObjectRecord();\r\n let refDist = this.width / 2;\r\n let dist = v - this.width;\r\n let contour = Contour.CreateContour(this.ContourCurve, false);\r\n let isSuccess = contour.UnEqualProportionScale(refDist, dist, \"x\");\r\n if (isSuccess)\r\n {\r\n this.width = v;\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n }\r\n }\r\n get BoardType(): BoardType\r\n {\r\n return this._BoardType;\r\n }\r\n set BoardType(type: BoardType)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (type !== this._BoardType)\r\n {\r\n let spaceCS = this._SpaceOCS.clone();\r\n this._BoardType = type;\r\n this.ApplyMatrix(this.OCSInv);\r\n\r\n this.ApplyMatrix(this.RotateMat);\r\n\r\n this._SpaceOCS.identity();\r\n\r\n this.ApplyMatrix(spaceCS);\r\n\r\n this.Update();\r\n }\r\n }\r\n\r\n //设置板件类型并且不做任何的事情\r\n SetBoardType(type: BoardType)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._BoardType = type;\r\n }\r\n\r\n //最左下角的点\r\n get MinPoint(): Vector3\r\n {\r\n switch (this._BoardType)\r\n {\r\n case BoardType.Layer:\r\n return new Vector3(0, this.height).applyMatrix4(this.OCS);\r\n case BoardType.Vertical:\r\n return this.Position;\r\n case BoardType.Behind:\r\n return new Vector3(0, 0, this.thickness).applyMatrix4(this.OCS);\r\n }\r\n }\r\n get MaxPoint(): Vector3\r\n {\r\n let pt = new Vector3(this.width, this.height, -this.thickness);\r\n pt.applyMatrix4(this.OCS);\r\n return pt;\r\n }\r\n\r\n get IsRect()\r\n {\r\n return this.isRect;\r\n }\r\n\r\n get IsSpecialShape()\r\n {\r\n return !this.isRect;\r\n }\r\n\r\n get HasGroove()\r\n {\r\n return this.grooves.length > 0;\r\n }\r\n\r\n get Name()\r\n {\r\n return this._Name;\r\n }\r\n set Name(n: string)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Name = n;\r\n }\r\n\r\n /**\r\n * 板件的轮廓,在板件坐标系中的表现方式.\r\n */\r\n get ContourCurve()\r\n {\r\n return super.ContourCurve;\r\n }\r\n set ContourCurve(cu: ExtureContourCurve)\r\n {\r\n //标识是否被初始化\r\n TempRectHoleOption.up = \"\";\r\n\r\n if (!this.contourCurve || cu.EndParam !== this.contourCurve.EndParam || !this.BoardProcessOption.drillType)\r\n {\r\n let drillTypes = [...userConfig.DrillConfigs.keys(), \"不排\"];\r\n let defaultType = this._BoardProcessOption.drillType;\r\n if (!defaultType || !drillTypes.includes(defaultType))\r\n {\r\n defaultType = drillTypes[0];\r\n this._BoardProcessOption.drillType = defaultType;\r\n }\r\n this._BoardProcessOption.highDrill = Array(cu.EndParam).fill(defaultType);\r\n }\r\n else\r\n {\r\n if (this.isRect)\r\n InitRectBoardHoleOption(this, TempRectHoleOption);\r\n }\r\n super.ContourCurve = cu;\r\n\r\n if (this.isRect && TempRectHoleOption.up)\r\n SetRectHighHole(this, TempRectHoleOption);\r\n }\r\n\r\n Explode()\r\n {\r\n return Board2Regions(this);\r\n // return this.m_Shape.Explode().map(cu => cu.ApplyMatrix(this.OCS));\r\n }\r\n RotateBoard(rox: number, roy: number, roz: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this._Rotation.x = rox;\r\n this._Rotation.y = roy;\r\n this._Rotation.z = roz;\r\n\r\n let spcocs = this.SpaceOCS;\r\n let roMatX = new Matrix4().makeRotationX(rox);\r\n let roMatY = new Matrix4().makeRotationY(roy);\r\n let roMatZ = new Matrix4().makeRotationZ(roz);\r\n\r\n this.ApplyMatrix(this.OCSInv)\r\n .ApplyMatrix(this.RotateMat)\r\n .ApplyMatrix(roMatX)\r\n .ApplyMatrix(roMatY)\r\n .ApplyMatrix(roMatZ)\r\n .ApplyMatrix(spcocs);\r\n\r\n this._SpaceOCS.copy(spcocs);\r\n this.Update();\r\n }\r\n get Rotation()\r\n {\r\n return this._Rotation;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n\r\n get UCGenerator(): UVGenerator\r\n {\r\n if (this.BoardProcessOption.lines === LinesType.Positive)\r\n return boardUVGenerator;\r\n else\r\n return boardUVGenerator2;\r\n }\r\n\r\n UpdateUV(geo: Geometry, ocs: Matrix4, isRev = false)\r\n {\r\n super.UpdateUV(geo, ocs, this.BoardProcessOption.lines === LinesType.Reverse);\r\n }\r\n\r\n //从一个实体拷贝数据,实体类型必须相同.\r\n CopyFrom(obj: Board)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let drillBak = this._DrillList;\r\n this._DrillList = new Map();\r\n let layerNailsBak = this._LayerNails;\r\n this._LayerNails = [];\r\n\r\n super.CopyFrom(obj);\r\n\r\n this._DrillList = drillBak;\r\n this._LayerNails = layerNailsBak;\r\n }\r\n\r\n Clone(): this\r\n {\r\n let br = super.Clone();\r\n br._DrillList.clear();\r\n br._LayerNails.length = 0;\r\n br.RelativeHardware.length = 0;\r\n return br;\r\n }\r\n Join(target: this)\r\n {\r\n let res = super.Join(target);\r\n if (res && target.RelativeHardware)\r\n {\r\n for (let hw of target.RelativeHardware)\r\n {\r\n if (!this.RelativeHardware.includes(hw))\r\n this.RelativeHardware.push(hw);\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n private GetLinesDir()\r\n {\r\n let l: LineSegments;\r\n let len: number;\r\n let width: number;\r\n\r\n switch (this.BoardProcessOption.lines)\r\n {\r\n case LinesType.Positive:\r\n len = this.height / 3;\r\n width = Math.min(this.width, this.height) / 8;\r\n break;\r\n case LinesType.Reverse:\r\n len = this.width / 2;\r\n width = Math.min(this.width, this.height) / 8;\r\n break;\r\n case LinesType.CanReversal:\r\n len = this.height / 3;\r\n width = this.width / 2;\r\n default:\r\n break;\r\n }\r\n\r\n l = new LineSegments(\r\n BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesDirPts(len, width, this.BoardProcessOption.lines)),\r\n ColorMaterial.GetLineMaterial(8)\r\n );\r\n let l1 = l.clone();\r\n l1.material = ColorMaterial.GetLineMaterial(7);\r\n l.position.set(this.width / 2, this.height / 2, 0);\r\n l1.position.set(this.width / 2, this.height / 2, this.thickness);\r\n\r\n l.updateMatrix();\r\n l1.updateMatrix();\r\n\r\n return [l, l1];\r\n }\r\n private _2D3DPathObject: Object3D;\r\n private Get2DAnd3DPaths(obj: Object3D)\r\n {\r\n if (this._2D3DPathObject)\r\n return this._2D3DPathObject;\r\n\r\n this._2D3DPathObject = new Object3D();\r\n let group2 = new Object3D();\r\n for (let vm of this._2DModelingList)\r\n {\r\n let path = vm.path;\r\n for (let item of vm.items)\r\n {\r\n let tempPath = this.GetOffsetPath(path, item);\r\n if (tempPath)\r\n {\r\n let curves = VData2Curve(VKnifToolPath(tempPath, item.depth, item.knife.angle / 2));\r\n let o = new Object3D();\r\n for (let c of curves)\r\n {\r\n c.ColorIndex = tempPath.ColorIndex;\r\n o.add(c.GetDrawObjectFromRenderType(RenderType.Wireframe));\r\n }\r\n if (vm.dir === FaceDirection.Back)\r\n o.applyMatrix4(ZMirrorMatrix);\r\n else\r\n o.position.setZ(this.thickness);\r\n o.updateMatrix();\r\n group2.add(o);\r\n }\r\n }\r\n }\r\n let group = new Object3D();\r\n let tempIndex = 1;\r\n let tempMap = new Map();\r\n for (let vm of this._3DModelingList)\r\n {\r\n let key = `${vm.dir}-${vm.knife.id}`;\r\n let color = tempMap.get(key);\r\n if (!color)\r\n {\r\n color = tempIndex;\r\n tempIndex++;\r\n tempMap.set(key, color);\r\n }\r\n\r\n for (let i = 0; i < vm.path.length - 1; i++)\r\n {\r\n let d1 = vm.path[i];\r\n let d2 = vm.path[i + 1];\r\n if (equaln(d1.bul, 0))\r\n {\r\n let geo = BufferGeometryUtils.CreateFromPts([d1.pt, d2.pt]);\r\n group.add(new TLine(geo, ColorMaterial.GetLineMaterial(color)));\r\n }\r\n else\r\n {\r\n let arc = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul);\r\n arc.ColorIndex = color;\r\n group.add(arc.GetDrawObjectFromRenderType(RenderType.Wireframe));\r\n }\r\n }\r\n }\r\n\r\n this._2D3DPathObject.add(group);\r\n this._2D3DPathObject.add(group2);\r\n\r\n return this._2D3DPathObject;\r\n }\r\n HandleSpliteEntitys(splitEntitys: this[])\r\n {\r\n let nails: ObjectId[] = [];\r\n for (let nail of this.LayerNails)\r\n {\r\n if (nail?.Object && !nail.IsErase)\r\n nails.push(nail);\r\n }\r\n let record = this._Owner.Object as BlockTableRecord;\r\n for (let en of splitEntitys)\r\n {\r\n let ocsInv = en.OCSInv;\r\n let nids: ObjectId[] = [];\r\n let needAddNailEnts: Board[] = [];\r\n nails = nails.filter(id =>\r\n {\r\n let n = id.Object as CylinderHole;\r\n let position = n.Position.applyMatrix4(ocsInv).setZ(0);\r\n if (en.contourCurve.PtInCurve(position))\r\n {\r\n let n1 = n.Clone();\r\n n1.MId = n.MId;\r\n n1.FId = n.FId;\r\n\r\n if (n.MId === this.Id)\r\n {\r\n n1.MId = en.Id;\r\n needAddNailEnts.push(n1.FId.Object as Board);\r\n }\r\n\r\n if (n.FId === this.Id)\r\n {\r\n n1.FId = en.Id;\r\n needAddNailEnts.push(n1.MId.Object as Board);\r\n }\r\n\r\n n.Erase();\r\n record.Add(n1);\r\n nids.push(n1.Id);\r\n\r\n return false;\r\n }\r\n return true;\r\n });\r\n en.AppendNails(nids);\r\n needAddNailEnts.forEach(e => e.AppendNails(nids));\r\n\r\n if (!userConfig.openDrillingReactor)\r\n {\r\n for (let [bid, idss] of this._DrillList)\r\n {\r\n if (!bid) continue;\r\n let board = bid.Object as Board;\r\n for (let ids of idss)\r\n {\r\n if (!ids[0]?.Object || ids[0].IsErase) continue;\r\n let holes = ids.map(i => i.Object) as CylinderHole[];\r\n if (holes[0] instanceof CylinderHole)\r\n {\r\n let isInBoard = CyHoleInBoard(holes, en, en.OCSInv);\r\n if (isInBoard)\r\n {\r\n let cloneHoles = holes.map(h => h.Clone());\r\n\r\n for (let h of cloneHoles)\r\n {\r\n if (h.FId === this.Id)\r\n {\r\n h.FId = en.Id;\r\n }\r\n if (h.MId === this.Id)\r\n {\r\n h.MId = en.Id;\r\n }\r\n record.Add(h);\r\n }\r\n for (let h of holes)\r\n h.Erase();\r\n en.AppendDrillList(bid, [cloneHoles.map(c => c.Id)]);\r\n board.AppendDrillList(en.Id, [cloneHoles.map(c => c.Id)]);\r\n }\r\n }\r\n else\r\n {\r\n //TODO:处理自定义排钻\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n InitDrawObject(renderType = RenderType.Wireframe)\r\n {\r\n let obj: Object3D;\r\n if (renderType === RenderType.Edge)\r\n {\r\n obj = new Object3D();\r\n obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(8)));\r\n this.CheckSealing(obj);\r\n }\r\n else\r\n {\r\n obj = super.InitDrawObject(renderType);\r\n }\r\n this.HandleBoardMaterial(renderType, obj);\r\n return obj;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let o = super.UpdateDrawObject(renderType, obj);\r\n if (renderType === RenderType.Edge)\r\n {\r\n obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(8)));\r\n this.CheckSealing(obj);\r\n }\r\n this.HandleBoardMaterial(renderType, obj);\r\n\r\n return o;\r\n }\r\n OffsetPathCache = new Map();\r\n private GetOffsetPath(path: Polyline, item: I2DModeingItem): Polyline\r\n {\r\n if (item.offset === 0)\r\n {\r\n return path;\r\n }\r\n else\r\n {\r\n let cache = this.OffsetPathCache.get(path);\r\n if (!cache)\r\n {\r\n cache = {};\r\n this.OffsetPathCache.set(path, cache);\r\n }\r\n let tempPath = cache[item.offset.toString()];\r\n if (!tempPath)\r\n {\r\n tempPath = path.GetOffsetCurves(item.offset)[0];\r\n cache[item.offset.toString()] = tempPath;\r\n }\r\n return tempPath;\r\n }\r\n }\r\n private HandleBoardMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (!this.IsChaiDan)\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2)\r\n {\r\n obj.children.length = 1;\r\n (obj.children[0] as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n else if (renderType !== RenderType.Wireframe)\r\n {\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n }\r\n if ((renderType === RenderType.Wireframe || renderType === RenderType.Conceptual) && userConfig.showLines && this.IsChaiDan)\r\n obj.add(...this.GetLinesDir());\r\n\r\n\r\n if (this.Id)\r\n {\r\n let o = this.Get2DAnd3DPaths(obj);\r\n if (o.parent)\r\n obj.children.push(o);\r\n else\r\n obj.add(o);\r\n }\r\n\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n super.UpdateDrawObjectMaterial(renderType, obj);\r\n if (!this.IsChaiDan)\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2)\r\n {\r\n (obj.children[0] as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n else if (renderType !== RenderType.Wireframe)\r\n {\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n }\r\n }\r\n CheckSealing(obj: Object3D)\r\n {\r\n let sealingInfo = new Map(userConfig.sealingColorMap.filter(d => d[0] && d[1]) as [string, string][]);\r\n if (sealingInfo.size === 0) return;\r\n let cus = GetBoardSealingCurves(this);\r\n let highSeals = GetBoardHighSeal(this, cus);\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let size = highSeals[i].size.toString();\r\n let color = sealingInfo.get(size);\r\n if (color)\r\n {\r\n cus[i].Position = cus[i].Position.add(new Vector3(0, 0, this.thickness / 2));\r\n let l = cus[i].GetDrawObjectFromRenderType(RenderType.Wireframe) as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(parseFloat(color));\r\n obj.add(l);\r\n }\r\n }\r\n }\r\n GetStretchPoints()\r\n {\r\n let pts = this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n for (let m of this._2DModelingList)\r\n {\r\n pts.push(...m.path.GetStretchPoints().map(p => p.add(new Vector3(0, 0, m.dir === FaceDirection.Front ? this.thickness : 0)).applyMatrix4(this.OCS)));\r\n }\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n let exCount = arraySum(this.GetStrectchPointCountList(DragPointType.Stretch));\r\n let originIndexList: number[] = [];\r\n let mIndexList: number[] = [];\r\n for (let i of indexList)\r\n {\r\n if (i < exCount)\r\n originIndexList.push(i);\r\n else\r\n mIndexList.push(i - exCount);\r\n }\r\n let oldOcs = this.OCS;\r\n super.MoveStretchPoints(originIndexList, vec);\r\n\r\n if (!this.Id) return;\r\n\r\n arraySortByNumber(mIndexList);\r\n let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n let offset = 0;\r\n let icount = mIndexList.length;\r\n let i = 0;\r\n for (let m of this._2DModelingList)\r\n {\r\n let count = m.path.GetDragPointCount(DragPointType.Stretch);\r\n offset += count;\r\n\r\n let iList: number[] = [];\r\n\r\n for (; i < icount; i++)\r\n {\r\n if (mIndexList[i] < offset)\r\n iList.push(mIndexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n if (iList.length > 0)\r\n {\r\n m.path.MoveStretchPoints(iList, localVec);\r\n }\r\n m.path.ApplyMatrix(oldOcs).ApplyMatrix(this.OCSInv);\r\n }\r\n\r\n this.OffsetPathCache.clear();\r\n this._2D3DPathObject = null;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts = super.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n if (snapMode === ObjectSnapMode.End)\r\n {\r\n for (let vm of this._2DModelingList)\r\n {\r\n if (!this.OffsetPathCache.has(vm.path)) continue;\r\n for (let item of vm.items)\r\n {\r\n if (item.offset === 0) continue;\r\n\r\n let paths = this.OffsetPathCache.get(vm.path);\r\n let polyline = paths[item.offset.toString()];\r\n let ps = polyline.GetStretchPoints();\r\n\r\n for (let p of ps)\r\n {\r\n if (vm.dir === FaceDirection.Front)\r\n p.add(new Vector3(0, 0, this.thickness));\r\n p.applyMatrix4(this.OCS);\r\n }\r\n pts.push(...ps);\r\n }\r\n }\r\n }\r\n return pts;\r\n }\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n if (this.RelativeHardware.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n if (ver < 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n this._BoardType = file.Read();\r\n this._Name = file.Read();\r\n //兼容旧版本\r\n if (ver > 2)\r\n {\r\n deserializationBoardData(file, this._BoardProcessOption, ver);\r\n }\r\n else\r\n {\r\n let opt = file.Read();\r\n this._BoardProcessOption = Object.assign(this._BoardProcessOption,\r\n typeof opt === \"string\" ? JSON.parse(opt) : opt);\r\n }\r\n\r\n //读取排钻列表\r\n this._DrillList.clear();\r\n let size = file.Read();\r\n\r\n //没有与任何板件关联的排钻\r\n let noRelevancyDrillings: ObjectId[][] = [];\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let drIdList: ObjectId[][] = [];\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let drIDs: ObjectId[] = [];\r\n let count1 = file.Read();\r\n for (let j = 0; j < count1; j++)\r\n {\r\n let fileId = file.ReadObjectId();\r\n fileId && drIDs.push(fileId);\r\n }\r\n if (drIDs.length > 0)\r\n drIdList.push(drIDs);\r\n }\r\n\r\n if (drIdList.length === 0)\r\n continue;\r\n\r\n if (!id)\r\n noRelevancyDrillings.push(...drIdList);\r\n else\r\n this._DrillList.set(id, drIdList);\r\n }\r\n\r\n if (noRelevancyDrillings.length > 0)\r\n this._DrillList.set(undefined, noRelevancyDrillings);\r\n\r\n if (ver > 1)\r\n {\r\n this._LayerNails.length = 0;\r\n let nailsCount = file.Read();\r\n for (let i = 0; i < nailsCount; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this._LayerNails.push(objId);\r\n }\r\n }\r\n if (ver > 4)\r\n this._Rotation = { x: file.Read(), y: file.Read(), z: file.Read() };\r\n if (ver >= 7)\r\n {\r\n let count = file.Read();\r\n this.RelativeHardware.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this.RelativeHardware.push(objId);\r\n }\r\n }\r\n if (ver >= 8)\r\n this.OpenDir = file.Read();\r\n\r\n if (ver >= 9)\r\n this._IsChaiDan = file.Read();\r\n\r\n if (ver >= 10)\r\n {\r\n DeserializationBoard2DModeingData(file, this._2DModelingList, ver);\r\n DeserializationBoard3DModeingData(file, this._3DModelingList, ver);\r\n }\r\n\r\n this.OffsetPathCache.clear();\r\n this._2D3DPathObject = null;\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(10);\r\n // file.Write(this._SpaceOCS.toArray()); ver < 6\r\n file.Write(this._BoardType);\r\n file.Write(this._Name);\r\n serializeBoardData(file, this._BoardProcessOption);\r\n\r\n file.Write(this._DrillList.size);\r\n for (let [id, idList] of this._DrillList)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(idList.length);\r\n for (let ids of idList)\r\n {\r\n file.Write(ids.length);\r\n for (let id of ids)\r\n file.WriteObjectId(id);\r\n }\r\n }\r\n file.Write(this._LayerNails.length);\r\n for (let nail of this._LayerNails)\r\n {\r\n file.WriteObjectId(nail);\r\n }\r\n file.Write(this._Rotation.x);\r\n file.Write(this._Rotation.y);\r\n file.Write(this._Rotation.z);\r\n\r\n file.Write(this.RelativeHardware.length);\r\n for (let id of this.RelativeHardware)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(this.OpenDir);\r\n file.Write(this._IsChaiDan);\r\n\r\n SerializeBoard2DModeingData(file, this._2DModelingList);\r\n SerializeBoard3DModeingData(file, this._3DModelingList);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Object3D, Shape as TShape, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Shape } from \"../DatabaseServices/Shape\";\r\nimport { FaceDirection } from \"../UI/Store/BoardInterface\";\r\nimport { MoveMatrix } from \"./GeUtils\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\n\r\n//FIXME: #IWBPB 性能缺陷和BUG. 等待废弃或者改进\r\nexport function CreateWireframe(en3D: Board | ExtrudeSolid)\r\n{\r\n let mat = ColorMaterial.GetLineMaterial(1);\r\n let lines: Object3D[] = [];\r\n\r\n let upShape = new Shape(Contour.CreateContour(en3D.ContourCurve));\r\n let downShape = new Shape(Contour.CreateContour(en3D.ContourCurve));\r\n\r\n if (en3D instanceof Board)\r\n {\r\n for (let m of en3D.BoardModeling)\r\n {\r\n let geo = new BufferGeometry().setFromPoints(m.shape.Shape.getPoints(10));\r\n let ocs = m.shape.Outline.Curve.OCS;\r\n let cloneShape = m.shape.Clone();\r\n cloneShape.Outline.Curve.Position = cloneShape.Outline.Curve.Position.setZ(0);\r\n\r\n let isCut = false;\r\n appendLines(m.shape.Outline.Curve, en3D.Thickness, lines, mat);\r\n\r\n if (m.thickness < en3D.Thickness)\r\n {\r\n appendLines(m.shape.Outline.Curve, m.thickness, lines, mat);\r\n //正面\r\n if (m.dir === FaceDirection.Front)\r\n {\r\n let ss = upShape.SubstactBoolOperation([cloneShape]);\r\n if (ss.length > 0 && ss[0].Holes.length === 0)\r\n {\r\n upShape = ss[0];\r\n isCut = true;\r\n }\r\n }\r\n else\r\n {\r\n let ss = downShape.SubstactBoolOperation([cloneShape]);\r\n if (ss.length > 0 && ss[0].Holes.length === 0)\r\n {\r\n downShape = ss[0];\r\n isCut = true;\r\n }\r\n }\r\n }\r\n if (!isCut || m.dir === FaceDirection.Back)\r\n {\r\n let geoClone = geo.clone();\r\n geoClone.applyMatrix4(MoveMatrix(new Vector3(0, 0, m.thickness))).applyMatrix4(ocs);\r\n lines.push(new Line(geoClone, mat));\r\n }\r\n\r\n if (!isCut || m.dir === FaceDirection.Front)\r\n {\r\n lines.push(new Line(geo.applyMatrix4(ocs), mat));\r\n }\r\n }\r\n }\r\n\r\n let downGeo = new BufferGeometry().setFromPoints(downShape.Shape.getPoints(10))\r\n .applyMatrix4(en3D.ContourCurve.OCS);\r\n let upGeo = new BufferGeometry().setFromPoints(upShape.Shape.getPoints(10))\r\n .applyMatrix4(MoveMatrix(new Vector3(0, 0, en3D.Thickness)))\r\n .applyMatrix4(en3D.ContourCurve.OCS);\r\n\r\n lines.push(\r\n new Line(downGeo, mat),\r\n new Line(upGeo, mat));\r\n\r\n appendLines(en3D.ContourCurve, en3D.Thickness, lines, mat);\r\n\r\n return lines;\r\n}\r\n\r\nfunction appendLines(cu: Curve, thick: number, lines: Object3D[], mat: LineBasicMaterial)\r\n{\r\n let pts = cu.GetStretchPoints();\r\n for (let p of pts)\r\n {\r\n let geo = new Geometry().setFromPoints([p, p.clone().add(new Vector3(0, 0, thick))]);\r\n lines.push(new Line(geo, mat));\r\n }\r\n}\r\n\r\nexport function FastWireframe(br: ExtrudeSolid, color = 0)\r\n{\r\n color = color || br.ColorIndex;\r\n let material = ColorMaterial.GetLineMaterial(color);\r\n\r\n let thickness = br.Thickness;\r\n\r\n let cu = br.ContourCurve;\r\n let pts = cu.Shape.getPoints(6);\r\n\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n let edgeCoords: number[] = [];\r\n\r\n for (let p of pts)\r\n {\r\n coords.push(p.x, p.y, 0);\r\n if (p[\"_mask_\"])\r\n edgeCoords.push(p.x, p.y, 0, p.x, p.y, thickness);\r\n }\r\n for (let p of pts)\r\n coords.push(p.x, p.y, thickness);\r\n\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(edgeCoords, 3));\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n\r\n let line = new Line(geo, material);\r\n line.applyMatrix4(cu.OCS);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCS);\r\n\r\n let result = [line, edge];\r\n\r\n let ocsInv = br.OCSInv;\r\n for (let g of br.Grooves)\r\n {\r\n let m = ocsInv.clone().multiply(g.OCS);\r\n let lines = FastWireframe(g, color);\r\n for (let l of lines)\r\n {\r\n l.applyMatrix4(m);\r\n result.push(l);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\nexport function FastWireframe2(dr: ExtrudeHole, color = 0)\r\n{\r\n color = color || dr.ColorIndex;\r\n let material = ColorMaterial.GetLineMaterial(color);\r\n\r\n let height = dr.Height;\r\n\r\n let cu = dr.ContourCurve;\r\n let pts = cu.Shape.getPoints(6);\r\n\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n let edgeCoords: number[] = [];\r\n\r\n for (let p of pts)\r\n {\r\n coords.push(p.x, p.y, 0);\r\n if (p[\"_mask_\"])\r\n edgeCoords.push(p.x, p.y, 0, p.x, p.y, height);\r\n }\r\n for (let p of pts)\r\n coords.push(p.x, p.y, height);\r\n\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(edgeCoords, 3));\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n\r\n let line = new Line(geo, material);\r\n line.applyMatrix4(cu.OCS);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCS);\r\n\r\n let result = [line, edge];\r\n\r\n return result;\r\n}\r\n","import { BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayClone, arrayLast, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { FastWireframe2 } from \"../../Geometry/CreateWireframe\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/ExtrudeEdgeGeometry\";\r\nimport { AsVector3, equaln, equalv2, equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Contour } from \"../Contour\";\r\nimport { DragPointType } from \"../Entity/DragPointType\";\r\nimport { ExtrudeSolid, ExtureContourCurve } from \"../Entity/Extrude\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { Shape } from \"../Shape\";\r\nimport { OBB } from './../../Geometry/OBB/obb';\r\nimport { Hole } from \"./Hole\";\r\n\r\n@Factory\r\nexport class ExtrudeHole extends Hole\r\n{\r\n private _contourCurve: ExtureContourCurve = new Polyline();\r\n private _EdgeGeometry: BufferGeometry;\r\n protected _knifeRadius: number = 3;\r\n @AutoRecord isHole = true;\r\n @AutoRecord isThrough = false;\r\n get KnifeRadius()\r\n {\r\n return this._knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this._knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._knifeRadius = v;\r\n }\r\n }\r\n Explode()\r\n {\r\n return [this.ContourCurve.Clone().ApplyMatrix(this.OCS)];\r\n }\r\n get ContourCurve()\r\n {\r\n return this._contourCurve;\r\n }\r\n\r\n set ContourCurve(curve: ExtureContourCurve)\r\n {\r\n if (!curve.IsClose) return;\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n curve.CloseMark = true;\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n\r\n //如果曲线被旋转了,那么修正它的旋转矩阵,避免纹路错误\r\n let ocs = curve.OCS;\r\n if (!equaln(ocs.elements[0], 1))// || ocs.elements[9] || ocs.elements[10]\r\n {\r\n for (let p of pts)\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n curve.OCS = new Matrix4();\r\n }\r\n curve.ClearDraw();\r\n }\r\n\r\n this.WriteAllObjectRecord();\r\n this._contourCurve = curve;\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n CheckContourCurve()\r\n {\r\n let box = this._contourCurve.BoundingBox;\r\n\r\n //修正轮廓基点\r\n if (!equalv3(box.min, ZeroVec))\r\n {\r\n this._contourCurve.Position =\r\n this._contourCurve.Position.sub(box.min);\r\n\r\n let v = box.min.applyMatrix4(this.OCS.setPosition(ZeroVec));\r\n this._Matrix.setPosition(this.Position.add(v));\r\n }\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let cu = this.ContourCurve;\r\n cu.ApplyMatrix(this.OCS);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n this.Update();\r\n return this;\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n\r\n contour.Position = contour.Position.add(this.Normal.multiplyScalar(this.Height));\r\n pts.push(\r\n ...contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n if (snapMode === ObjectSnapMode.Mid)\r\n pts.push(...contour.GetStretchPoints().map(p => p.add(this.Normal.multiplyScalar(-this.Height / 2))));\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n get Shape()\r\n {\r\n let contour = Contour.CreateContour(this.ContourCurve.Clone(), false);\r\n\r\n return new Shape(contour);\r\n }\r\n get BoundingBoxInOCS()\r\n {\r\n let box = new Box3Ext().copy(this.ContourCurve.BoundingBox);\r\n box.max.add(new Vector3(0, 0, this.Height));\r\n return box;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = this.ContourCurve.BoundingBox;\r\n box.max.add(new Vector3(0, 0, this.Height));\r\n box.applyMatrix4(this.OCS);\r\n return box;\r\n }\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let pts = [this.ContourCurve.Shape.getPoints(6).map(AsVector3)];\r\n this._EdgeGeometry = GenerateExtrudeEdgeGeometry(pts, this.Height).applyMatrix4(this._contourCurve.OCSNoClone);\r\n return this._EdgeGeometry;\r\n }\r\n private _MeshGeometry: BufferGeometry | Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n this._MeshGeometry = this.GeneralMeshGeometry();\r\n return this._MeshGeometry;\r\n }\r\n private GeneralMeshGeometry()\r\n {\r\n let extrudeSettings: ExtrudeGeometryOptions = {\r\n curveSegments: 12,\r\n steps: 1,\r\n bevelEnabled: false,\r\n depth: this.Height,\r\n };\r\n let geo = new ExtrudeGeometry(this.ContourCurve.Shape, extrudeSettings);\r\n geo.applyMatrix4(this._contourCurve.OCS);\r\n return geo;\r\n }\r\n GetGripOrStretchPoints(dragType: DragPointType)\r\n {\r\n let isGrip = dragType === DragPointType.Grip;\r\n\r\n let pts = isGrip ? this.ContourCurve.GetGripPoints() : this.ContourCurve.GetStretchPoints();\r\n let v = new Vector3(0, 0, this.Height);\r\n pts.push(...pts.map(p => p.clone().add(v)));\r\n pts.forEach(p => { p.applyMatrix4(this.OCS); });\r\n\r\n return pts;\r\n }\r\n private GetStrectchPointCountList(dragType: DragPointType): number\r\n {\r\n return this.ContourCurve.GetDragPointCount(dragType) * 2;\r\n }\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (dragType === DragPointType.Stretch && indexList.length === this.GetStrectchPointCountList(dragType))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n arraySortByNumber(indexList);\r\n this.MoveGripOrStretchPointsOnly(indexList, vec, dragType);\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n IsStretchHeight(indexs: number[])\r\n {\r\n let count = this.ContourCurve.GetStretchPoints().length;\r\n if (indexs.length === count)\r\n {\r\n let isF = indexs[0] < count;\r\n return indexs.every(i => isF === (i < count));\r\n }\r\n return false;\r\n }\r\n MoveGripOrStretchPointsOnly(indexList: Array, vec: Vector3, dragType: DragPointType)\r\n {\r\n let stretchCount = this.ContourCurve.GetDragPointCount(dragType);\r\n\r\n if (dragType === DragPointType.Stretch)\r\n {\r\n //Move\r\n if (indexList.length === stretchCount * 2)\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n //判断是否拉伸厚度\r\n if (this.IsStretchHeight(indexList))\r\n {\r\n let isFront = indexList[0] < stretchCount;\r\n\r\n if (indexList.every(v => v < stretchCount === isFront))\r\n {\r\n //Change thickness\r\n let lvec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n if (isFront)\r\n {\r\n this.Height -= lvec.z;\r\n //移动位置而不改变内部拉槽\r\n let v = this.Normal.multiplyScalar(lvec.z);\r\n this._Matrix.elements[12] += v.x;\r\n this._Matrix.elements[13] += v.y;\r\n this._Matrix.elements[14] += v.z;\r\n }\r\n else\r\n {\r\n this.Height += lvec.z;\r\n }\r\n return;\r\n }\r\n }\r\n\r\n indexList = arrayClone(indexList);\r\n }\r\n\r\n //修正点的索引\r\n for (let i = 0; i < indexList.length; i++)\r\n {\r\n let index = indexList[i];\r\n if (index >= stretchCount)\r\n {\r\n index -= stretchCount;\r\n indexList[i] = index;\r\n }\r\n }\r\n\r\n indexList = [...new Set(indexList)];\r\n\r\n let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n\r\n if (dragType === DragPointType.Grip)\r\n {\r\n if (this.ContourCurve instanceof Polyline\r\n && indexList.length === 1\r\n && indexList[0] % 2 === 1)\r\n {\r\n let param = indexList[0] / 2;\r\n if (this.ContourCurve.GetBuilgeAt(Math.floor(param)) === 0)\r\n {\r\n let der = this.ContourCurve.GetFistDeriv(param).normalize();\r\n [der.x, der.y] = [der.y, -der.x];\r\n let d = localVec.dot(der);\r\n localVec.copy(der).multiplyScalar(d);\r\n }\r\n }\r\n this.ContourCurve.MoveGripPoints(indexList, localVec);\r\n }\r\n else\r\n this.ContourCurve.MoveStretchPoints(indexList, localVec);\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n GetStretchPoints()\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n Convert2ExtrudeSolid()\r\n {\r\n let g = new ExtrudeSolid();\r\n g.KnifeRadius = this.KnifeRadius;\r\n g.SetContourCurve(this.ContourCurve);\r\n g.Thickness = this.Height;\r\n g.ApplyMatrix(this.OCS);\r\n return g;\r\n }\r\n GetPrintObject3D()\r\n {\r\n let geometry = new LineGeometry();\r\n let lineSegments = new Float32Array(this.EdgeGeometry.attributes.position.array);\r\n let instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n geometry.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n geometry.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n let line = new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetPrintConceptualMaterial());\r\n return [line, mesh];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Edge)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical || renderType === RenderType.Physical2)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(...FastWireframe2(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new Object3D().add(...this.GetPrintObject3D());\r\n }\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n\r\n if (renderType !== RenderType.Wireframe)\r\n Object3DRemoveAll(obj);\r\n\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n this.MeshGeometry;\r\n\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Edge)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n obj.add(...this.GetPrintObject3D());\r\n }\r\n else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical || renderType === RenderType.Physical2)\r\n {\r\n obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Jig)\r\n obj.add(...FastWireframe2(this));\r\n\r\n return obj;\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Edge)\r\n {\r\n let l = obj as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType !== RenderType.Jig && renderType !== RenderType.Print)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n get OBB(): OBB\r\n {\r\n let size = this.ContourCurve.BoundingBox.getSize(new Vector3).setZ(this.Height);\r\n return new OBB(this.OCS, size.multiplyScalar(0.5));\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n this._contourCurve = file.ReadObject() as ExtureContourCurve;\r\n this._knifeRadius = file.Read();\r\n if (ver > 1)\r\n {\r\n this.isHole = file.Read();\r\n }\r\n if (ver > 2)\r\n this.isThrough = file.Read();\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.WriteObject(this._contourCurve);\r\n file.Write(this._knifeRadius);\r\n file.Write(this.isHole);\r\n file.Write(this.isThrough);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, curveLinkGroup, equalCurve, IRectInfo, IsRect } from \"../../Common/CurveUtils\";\r\nimport { matrixAlignCoordSys } from \"../../Common/Matrix4Utils\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { AsVector2, AsVector3, comparePoint, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\n\r\n/**\r\n * 优化走刀路径,连接偏移后的曲线数组\r\n * @param offsetCus 偏移后的曲线组\r\n * @param originShape 原始走刀形状\r\n * @param rad 刀半径\r\n * @returns tool path\r\n */\r\nexport function OptimizeToolPath(offsetCus: Curve[], originShape: Shape, rad: number): Curve[]\r\n{\r\n // 去掉最外轮廓\r\n let outline = offsetCus.shift();\r\n\r\n let plList: Polyline[] = [];\r\n let noCloseCus: Curve[] = [];\r\n for (let cu of offsetCus)\r\n {\r\n if (!cu.IsClose)\r\n {\r\n noCloseCus.push(cu);\r\n continue;\r\n }\r\n if (cu instanceof Polyline)\r\n {\r\n //轮廓朝下的逆时针轮廓需要翻转\r\n //如果走刀不止一条,第一刀为顺时针,其余为逆时针\r\n if (cu.IsClose)\r\n {\r\n if (offsetCus.length === 1)\r\n {\r\n if (cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n }\r\n else\r\n if ((cu.Normal.z * cu.Area2 < 0) === (cu !== offsetCus[0]))\r\n cu.Reverse();\r\n }\r\n plList.push(cu);\r\n }\r\n else if (cu instanceof Circle)\r\n {\r\n let c = ConverCircleToPolyline(cu);\r\n if (offsetCus.length > 1 && cu === offsetCus[0])\r\n c.Reverse();\r\n c.ColorIndex = cu.ColorIndex;\r\n plList.push(c);\r\n }\r\n else\r\n console.warn(\"错误形状\");\r\n }\r\n\r\n if (noCloseCus.length > 0)\r\n {\r\n let culist: Curve[] = [];\r\n noCloseCus.forEach(c =>\r\n {\r\n if (c instanceof Polyline)\r\n culist.push(...c.Explode() as Curve[]);\r\n else\r\n culist.push(c);\r\n });\r\n //移除相等的曲线避免重复走刀\r\n RempveEqualCurves(culist);\r\n let groups = curveLinkGroup(culist);\r\n for (let g of groups)\r\n {\r\n let pl = Polyline.Combine(g);;\r\n pl.ColorIndex = noCloseCus[0].ColorIndex;\r\n plList.push(pl);\r\n }\r\n }\r\n let dir = GetCurveToInDir(outline);\r\n let cantIntCur: Curve[] = [outline];\r\n cantIntCur.push(...GetOffsetCurves(outline, rad * dir));\r\n if (originShape.Holes.length > 0)\r\n {\r\n for (let h of originShape.Holes)\r\n {\r\n let dir = Math.sign(h.Curve.Area2);\r\n if (h.Curve instanceof Circle)\r\n dir = 1;\r\n cantIntCur.push(h.Curve, ...GetOffsetCurves(h.Curve, rad * dir));\r\n }\r\n }\r\n\r\n //曲线统一起点\r\n ChangePlListStartPt(plList);\r\n //对多段线进行排序,按最起始点远近排序\r\n SortPlByStartPt(plList);\r\n\r\n let result: Curve[] = [];\r\n let firstPl = plList[0];\r\n firstPl.CloseMark = false;\r\n\r\n for (let i = 1; i < plList.length; i++)\r\n {\r\n let ePt = firstPl.EndPoint;\r\n let isDisVail: boolean;\r\n if (plList[i].TempData?.isOut && !equalv3(ePt, plList[i].StartPoint))\r\n isDisVail = true;\r\n else\r\n {\r\n let refLine = new Line(ePt, plList[i].StartPoint);\r\n isDisVail = cantIntCur.some(c => c.IntersectWith(refLine, 0).length > 1);\r\n }\r\n\r\n if (isDisVail)\r\n {\r\n result.push(firstPl);\r\n firstPl = plList[i];\r\n firstPl.CloseMark = false;\r\n }\r\n else\r\n {\r\n let alMat = matrixAlignCoordSys(plList[i].OCS, firstPl.OCS);\r\n let cuPtsBul = plList[i].PtsBuls;\r\n\r\n for (let i = 0; i < cuPtsBul.pts.length; i++)\r\n {\r\n //坐标系对齐\r\n let p = cuPtsBul.pts[i];\r\n p.copy(AsVector2(AsVector3(p).applyMatrix4(alMat)));\r\n firstPl.LineData.push({ pt: p, bul: cuPtsBul.buls[i] });\r\n }\r\n }\r\n }\r\n result.push(firstPl);\r\n return result;\r\n}\r\n\r\n/**\r\n* 设定走刀路径起始点\r\n* 为了统一刀路起点,最外轮廓左左点为起始点,其余轮廓以最接近最外轮廓起始点的点左起始点\r\n* @param plList\r\n*/\r\nfunction ChangePlListStartPt(plList: Polyline[])\r\n{\r\n let firstPl = plList[0];\r\n if (firstPl.IsClose)\r\n {\r\n let minP = undefined;\r\n let compare = comparePoint(\"xy\");\r\n for (let p of firstPl.GetStretchPoints())\r\n {\r\n if (!minP)\r\n minP = p;\r\n else\r\n if (compare(minP, p) === 1)\r\n minP = p;\r\n }\r\n let par = firstPl.GetParamAtPoint(minP);\r\n firstPl.ResetStartPoint(par);\r\n }\r\n\r\n let firstSpt = firstPl.StartPoint;\r\n\r\n for (let i = 1; i < plList.length; i++)\r\n {\r\n let pl = plList[i];\r\n\r\n if (pl.IsClose)\r\n {\r\n let pts = pl.GetStretchPoints().sort((p1, p2) =>\r\n {\r\n let dist1 = p1.distanceToSquared(firstSpt);\r\n let dist2 = p2.distanceToSquared(firstSpt);\r\n\r\n return dist1 - dist2;\r\n });\r\n let par = pl.GetParamAtPoint(pts[0]);\r\n pl.ResetStartPoint(par);\r\n }\r\n else\r\n {\r\n let sPt = pl.StartPoint;\r\n let ePt = pl.EndPoint;\r\n let dist1 = sPt.distanceToSquared(firstSpt);\r\n let dist2 = ePt.distanceToSquared(firstSpt);\r\n if (dist1 > dist2)\r\n pl.Reverse();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 排序多段线数组,按照起点之间的距离\r\n */\r\nfunction SortPlByStartPt(pls: Polyline[]): Polyline[]\r\n{\r\n if (pls.length <= 1) return pls;\r\n\r\n let result = [pls[0]];\r\n let usedPl = new WeakSet([pls[0]]);\r\n\r\n let p = pls[0].StartPoint;\r\n while (true)\r\n {\r\n if (pls.length === result.length)\r\n break;\r\n\r\n let vaildPl: Polyline;\r\n let minDist: number = Infinity;\r\n for (let pl of pls)\r\n {\r\n if (usedPl.has(pl))\r\n continue;\r\n let dist = pl.StartPoint.distanceToSquared(p);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n vaildPl = pl;\r\n }\r\n }\r\n p = vaildPl.StartPoint;\r\n result.push(vaildPl);\r\n usedPl.add(vaildPl);\r\n }\r\n pls.length = 0;\r\n pls.push(...result);\r\n}\r\n\r\nfunction RempveEqualCurves(cus: Curve[])\r\n{\r\n let needRemoveCurve: Set = new Set();\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu1 = cus[i];\r\n if (needRemoveCurve.has(cu1)) continue;\r\n for (let j = i + 1; j < cus.length; j++)\r\n {\r\n let cu2 = cus[j];\r\n if (needRemoveCurve.has(cu2)) continue;\r\n if (equalCurve(cu1, cu2))\r\n {\r\n needRemoveCurve.add(cu2);\r\n }\r\n }\r\n }\r\n arrayRemoveIf(cus, (c) => needRemoveCurve.has(c));\r\n}\r\n\r\n/**获取内偏移的轮廓 */\r\nexport function GetOffsetCurves(cu: Curve, dist: number, rectInfo?: IRectInfo): Curve[]\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (rectInfo?.isRect)\r\n {\r\n let r = RectOffset(cu, rectInfo, Math.abs(dist));\r\n return r ? [r] : [];\r\n }\r\n return cu.GetFeedingToolPath(dist).filter(c => !equaln(c.Length, 0, 1e-5));\r\n }\r\n else\r\n return cu.GetOffsetCurves(dist);\r\n}\r\n\r\n/** 获得曲线内偏移方向*/\r\nexport function GetCurveToInDir(cu: Curve): number\r\n{\r\n return cu.IsClockWise ? 1 : -1;\r\n}\r\n\r\n/**矩形偏移,正为内偏移 */\r\nexport function RectOffset(rect: Polyline, res: IRectInfo, dist: number)\r\n{\r\n if (!res.isRect || equaln(dist, 0)) return;\r\n\r\n let box = res.box;\r\n let size = res.size;\r\n let min = box.min.clone();\r\n let max = box.max.clone();\r\n\r\n if (dist > Math.min(size.x, size.y) / 2 + 1e-2) return;\r\n\r\n if (equaln(size.x / 2, dist, 1e-5))\r\n {\r\n let x = (box.min.x + box.max.x) * 0.5;\r\n let sPt = new Vector3(x, box.min.y + dist);\r\n let ePt = new Vector3(x, box.max.y - dist);\r\n return new Polyline([{ pt: AsVector2(sPt), bul: 0 }, { pt: AsVector2(ePt), bul: 0 }]).ApplyMatrix(res.OCS);\r\n }\r\n else if (equaln(size.y / 2, dist, 1e-5))\r\n {\r\n let y = (box.min.y + box.max.y) * 0.5;\r\n let sPt = new Vector3(box.min.x + dist, y);\r\n let ePt = new Vector3(box.max.x - dist, y);\r\n return new Polyline([{ pt: AsVector2(sPt), bul: 0 }, { pt: AsVector2(ePt), bul: 0 }]).ApplyMatrix(res.OCS);\r\n }\r\n else\r\n {\r\n min.add(new Vector3(dist, dist));\r\n max.add(new Vector3(-dist, -dist));\r\n return new Polyline().RectangleFrom2Pt(min, max).ApplyMatrix(res.OCS);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, equalCurve, IsRect, MergeCurvelist } from \"../../Common/CurveUtils\";\r\nimport { LogEnable } from \"../../Common/Log\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board, IModeling } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { ExtureContourCurve } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { ShapeManager } from \"../../DatabaseServices/ShapeManager\";\r\nimport { userConfig } from \"../../Editor/UserConfig\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { Route } from \"../../Geometry/CurveMap\";\r\nimport { GetSideFaceMtx } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { AsVector2, equaln, isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../../Geometry/RegionParse\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { FaceDirection } from \"../../UI/Store/BoardInterface\";\r\nimport { BoolOpeartionType, isTargetCurInOrOnSourceCur } from \"../BoolOperateUtils\";\r\nimport { GetSealedBoardContour } from \"../CalcEdgeSealing\";\r\nimport { GetCurveToInDir, GetOffsetCurves, OptimizeToolPath } from \"./OptimizeToolPath\";\r\n\r\n/**\r\n *计算走刀工具类\r\n */\r\nexport class FeedingToolPath extends Singleton\r\n{\r\n /**\r\n * 处理形状,内偏移\r\n * @param shape 造型Shape\r\n * @param knifRadius 刀半径/偏移距离\r\n * @param [isOut=true] 是否是最外轮廓,如果是,洞需要外偏移一个刀半径,多段线偏移保留不闭合轮廓\r\n */\r\n private HandleShape(shape: Shape, knifRadius: number, isOut = true): Curve[]\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (isOut)\r\n outline = outline.Clone();\r\n\r\n\r\n let dir = GetCurveToInDir(outline);\r\n\r\n let offsetCus: Curve[] = [outline];\r\n //获得形状外孔轮廓\r\n let holes: Contour[] = [];\r\n /**用于判断孤岛是否与外轮廓相交 */\r\n let holeOffsetCus: Curve[] = [];\r\n\r\n for (let h of shape.Holes)\r\n {\r\n if (!isOut)\r\n holes.push(h.Clone());\r\n else\r\n {\r\n let dir = -GetCurveToInDir(h.Curve);\r\n let cus: Curve[];\r\n if (h.Curve instanceof Circle)\r\n cus = h.Curve.GetOffsetCurves(knifRadius * dir);\r\n else\r\n cus = h.Curve.GetFeedingToolPath(knifRadius * dir);\r\n\r\n holeOffsetCus.push(...h.Curve.GetOffsetCurves(knifRadius * dir).filter(c => c.IsClose));\r\n\r\n holes.push(...this.GetContours(cus as Polyline[], offsetCus));\r\n }\r\n }\r\n\r\n let offsetDist = 0;\r\n\r\n let rectInfo = IsRect(outline);\r\n\r\n while (true)\r\n {\r\n if ((!isOut || offsetDist >= knifRadius) && rectInfo.isRect)\r\n offsetDist += knifRadius * 2;\r\n else\r\n offsetDist += knifRadius;\r\n\r\n let retCus: Curve[] = [];\r\n\r\n let tempOffsetCus = GetOffsetCurves(outline, offsetDist * dir, rectInfo);\r\n retCus.push(...tempOffsetCus);\r\n\r\n //最后一次内偏移如果是矩形,需在偏移一个刀半径避免没切到中心\r\n if (retCus.length === 0 && rectInfo.isRect && offsetDist > knifRadius)\r\n {\r\n offsetDist -= knifRadius;\r\n retCus.push(...GetOffsetCurves(outline, offsetDist * dir, rectInfo));\r\n }\r\n\r\n if (retCus.length === 0) break;\r\n //是否和孤岛相交\r\n let isInt = false;\r\n for (let c of retCus)\r\n {\r\n if (holes.length > 0)\r\n {\r\n isInt = holes.some(h => h.Curve.IntersectWith(c, 0).length > 0 || h.CuInOutline(c));\r\n if (isInt) break;\r\n }\r\n if (isOut && offsetDist === knifRadius)\r\n c.TempData = { isOut: true };\r\n offsetCus.push(c);\r\n }\r\n if (isInt)\r\n {\r\n //洞形状管理器\r\n let holesMg = new ShapeManager();\r\n if (isOut)\r\n holes = Shape.mergeContours(holes, false); //#I1MUQD 正好擦边的孔不合并\r\n holesMg.AppendShapeList(holes.map(h => new Shape(h)));\r\n let shapeMg = new ShapeManager();\r\n let cons = this.GetContours(retCus as Polyline[], offsetCus);\r\n shapeMg.AppendShapeList(cons.map(c => new Shape(c)));\r\n shapeMg.BoolOper(holesMg, BoolOpeartionType.Subtract);\r\n for (let s of shapeMg.ShapeList)\r\n {\r\n if (isOut && tempOffsetCus.length > 1)\r\n s.Outline.Curve.TempData = { isOut: true };\r\n offsetCus.push(...this.HandleShape(s, knifRadius, false));\r\n }\r\n break;\r\n }\r\n }\r\n let vailHoles: Contour[] = [];\r\n\r\n for (let i = 0; i < holes.length; i++)\r\n {\r\n let h = holes[i];\r\n //如果加工洞外圈和最外轮廓相交,则去掉\r\n if (h.Curve.IntersectWith(outline, 0).length > 0)\r\n continue;\r\n let isVail = true;\r\n //若最外轮廓内偏移一个刀半径的曲线 和最内轮廓相交或者被包含,则去掉.且不与洞曲线相等\r\n if (isOut)\r\n {\r\n let outlineOffsetCus = outline.GetOffsetCurves(dir * knifRadius).filter(c => c.IsClose) as Curve[];\r\n let outlineCus = GetOffsetCurves(outline, dir * knifRadius).filter(c => c.IsClose) as Curve[];;\r\n let ho = holeOffsetCus[i];\r\n let maxArea = Math.max(...(outlineOffsetCus.map(c => c.Area)));\r\n for (let j = 0; j < outlineOffsetCus.length; j++)\r\n {\r\n let c = outlineOffsetCus[j];\r\n if (h.Curve.IntersectWith(outlineCus[j], 0).length > 0)\r\n {\r\n if (!(equalCurve(ho, c) || isTargetCurInOrOnSourceCur(c as Polyline, h.Curve)))\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n else if (isTargetCurInOrOnSourceCur(h.Curve, c as Polyline))\r\n {\r\n offsetCus.push(c);\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n else if (ho.Area > maxArea)\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n }\r\n if (isVail)\r\n vailHoles.push(h);\r\n }\r\n\r\n offsetCus.push(...vailHoles.map(h => h.Curve));\r\n return offsetCus;\r\n }\r\n /**用于测试走刀路径 */\r\n TestCalcPath(br: Board, isCd = false)\r\n {\r\n let modelings = br.BoardModeling;\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n modelings.push(...allModeling.modeling);\r\n if (isCd && userConfig.chaidanOption.useDefaultRad)\r\n modelings.forEach(m => m.knifeRadius = userConfig.chaidanOption.radius);\r\n if (isCd)\r\n arrayRemoveIf(modelings, m =>\r\n {\r\n let c = m.shape.Outline.Curve;\r\n if (c instanceof Circle && c.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n return true;\r\n return false;\r\n });\r\n\r\n return this.CalcPath(modelings, br);\r\n }\r\n /**\r\n * 计算走刀路径\r\n */\r\n CalcPath(modelings: IModeling[], br: Board): Curve[]\r\n {\r\n let cus: Curve[] = [];\r\n for (let m of modelings)\r\n {\r\n cus.push(...this.GetModelFeedPath(br, m));\r\n }\r\n return cus;\r\n }\r\n GetModelFeedPath(br: { Thickness: number, ContourCurve: ExtureContourCurve; }, m: IModeling): Curve[]\r\n {\r\n const brThickness = br.Thickness;\r\n let cus: Curve[] = [];\r\n let { shape, thickness, knifeRadius, addLen, addWidth, addDepth } = m;\r\n if (!knifeRadius) knifeRadius = 3;\r\n if (addDepth)\r\n thickness += addDepth;\r\n if (thickness < 1e-5) return cus;\r\n shape = shape.Clone();\r\n shape.Z0();\r\n this.GrooveAddSize(shape, addLen, addWidth);\r\n this.HandleThoughGroove(br.ContourCurve, shape, knifeRadius);\r\n\r\n //造型半径和刀半径相等,返回重合点的线\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle && equaln(outline.Radius, m.knifeRadius))\r\n return [new Polyline([{ pt: AsVector2(outline.Center), bul: 0 }, { pt: AsVector2(outline.Center), bul: 0 }])];\r\n\r\n if (thickness >= brThickness)\r\n {\r\n //通孔只切一刀\r\n let dir = GetCurveToInDir(outline);\r\n let paths: Curve[];\r\n if (outline instanceof Circle)\r\n outline = ConverCircleToPolyline(outline);\r\n\r\n paths = outline.GetFeedingToolPath(dir * knifeRadius);\r\n for (let path of paths)\r\n {\r\n if (dir < 0)\r\n path.Reverse();\r\n\r\n // 有些走刀会变成一条线,或者某些地方退化成线,这个时候这个判断是错误的\r\n // if (!path.IsClockWise)\r\n // throw \"程序错误:全深网洞加工数据并不为逆时针!\";\r\n }\r\n cus.push(...paths);\r\n }\r\n else\r\n {\r\n let offsetCus = this.HandleShape(shape, knifeRadius);\r\n if (offsetCus.length > 1)\r\n cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius));\r\n }\r\n return cus;\r\n }\r\n private GrooveAddSize(shape: Shape, addLen: number, addWidth: number)\r\n {\r\n shape.Outline.Curve.Position = shape.Outline.Curve.Position.setZ(0);\r\n //若是矩形,应用槽加长\r\n if (addLen > 0 || addWidth > 0)\r\n {\r\n let curveData = IsRect(shape.Outline.Curve);\r\n if (curveData.isRect)\r\n {\r\n let box = curveData.box;\r\n let size = curveData.size;\r\n if (size.x > size.y)\r\n {\r\n box.max.add(new Vector3(addLen / 2, addWidth / 2));\r\n box.min.add(new Vector3(-addLen / 2, -addWidth / 2));\r\n }\r\n else\r\n {\r\n box.max.add(new Vector3(addWidth / 2, addLen / 2));\r\n box.min.add(new Vector3(-addWidth / 2, -addLen / 2));\r\n }\r\n let pl = new Polyline().RectangleFrom2Pt(box.min, box.max).ApplyMatrix(curveData.OCS);\r\n shape.Outline = Contour.CreateContour(pl);\r\n }\r\n }\r\n }\r\n private GetContours(cus: (Polyline | Circle)[], retCus: Curve[])\r\n {\r\n let cons: Contour[] = [];\r\n for (let c of cus)\r\n {\r\n if (c.IsClose)\r\n {\r\n cons.push(Contour.CreateContour(c));\r\n }\r\n else\r\n {\r\n let expCus = c.Explode() as Curve[];\r\n let regParse = new RegionParse(expCus);\r\n\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c && c.Area > 1e-3)\r\n cons.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n for (let c of expCus)\r\n {\r\n if (!regParse.GetCueveUsed(c))\r\n {\r\n retCus.push(c);\r\n }\r\n }\r\n\r\n }\r\n }\r\n return cons;\r\n }\r\n CheckModeling(br: Board)\r\n {\r\n let errorIndexs: number[] = [];\r\n let modelings = br.BoardModeling;\r\n for (let i = 0; i < modelings.length; i++)\r\n {\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n modelings[i].knifeRadius = userConfig.chaidanOption.radius;\r\n let cus = this.GetModelFeedPath(br, modelings[i]);\r\n if (cus.length === 0)\r\n errorIndexs.push(i);\r\n }\r\n return errorIndexs;\r\n }\r\n CheckCustomHole(br: Board)\r\n {\r\n let { modeling, sideModeling } = GetModelingFromCustomDrill(br);\r\n\r\n let errHoles: ExtrudeHole[] = [];\r\n\r\n for (let m of [...modeling, ...sideModeling])\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n let cus = this.GetModelFeedPath(br, m);\r\n if (cus.length === 0)\r\n errHoles.push(m.originEn);\r\n }\r\n\r\n return errHoles;\r\n }\r\n HandleThoughGroove(brCon: ExtureContourCurve, shape: Shape, knifeRadius: number)\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle) return;\r\n\r\n let cus = outline.Explode();\r\n MergeCurvelist(cus);\r\n let hasChange = false;\r\n let curveBak: Curve;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n if (c instanceof Line)\r\n {\r\n let mp = (curveBak ?? c).Midpoint;\r\n curveBak = undefined;\r\n if (brCon.PtOnCurve(mp))\r\n {\r\n hasChange = true;\r\n let cs = c.GetOffsetCurves(knifeRadius);\r\n cus[i] = cs[0];\r\n let fline = cus[FixIndex(i - 1, cus.length)];\r\n\r\n let isAddLine = false;\r\n\r\n if (fline instanceof Line)\r\n {\r\n let intPts = fline.IntersectWith2(cs[0], 3);\r\n if (intPts.length === 0)\r\n {\r\n console.error(\"未知错误情况\");\r\n return;\r\n }\r\n\r\n if (intPts[0].thisParam >= 0 && intPts[0].argParam <= 1)\r\n {\r\n fline.EndPoint = intPts[0].pt;\r\n cs[0].StartPoint = intPts[0].pt;\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n\r\n if (isAddLine)\r\n {\r\n let newLine = new Line(fline.EndPoint, cs[0].StartPoint);\r\n if (i === 0)\r\n {\r\n cus.push(newLine);\r\n }\r\n else\r\n {\r\n cus.splice(i, 0, newLine);\r\n i++;\r\n }\r\n }\r\n\r\n let backLine = cus[FixIndex(i + 1, cus.length)];\r\n\r\n isAddLine = false;\r\n\r\n if (backLine instanceof Line)\r\n {\r\n let intPts = backLine.IntersectWith2(cs[0], 3);\r\n if (intPts.length === 0)\r\n {\r\n if (LogEnable.Display)\r\n console.error(\"未知错误情况\");\r\n return;\r\n }\r\n\r\n if (intPts[0].thisParam <= 1 && intPts[0].argParam >= 0)\r\n {\r\n curveBak = backLine.Clone();\r\n backLine.StartPoint = intPts[0].pt;\r\n cs[0].EndPoint = intPts[0].pt;\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n if (isAddLine)\r\n {\r\n let newLine = new Line(cs[0].EndPoint, backLine.StartPoint);\r\n if (i + 1 === cus.length)\r\n {\r\n cus.unshift(newLine);\r\n }\r\n else\r\n {\r\n cus.splice(i + 1, 0, newLine);\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (hasChange)\r\n {\r\n let con = Contour.CreateContour(Polyline.Combine(cus));\r\n if (con)\r\n shape.Outline = con;\r\n else\r\n console.error(\"错误\");\r\n }\r\n }\r\n}\r\nexport function GetModelingFromCustomDrill(br: Board)\r\n{\r\n let normal = br.Normal;\r\n let outline = GetSealedBoardContour(br, true) as Polyline;\r\n\r\n let modeling: (IModeling & { originEn: ExtrudeHole; })[] = [];\r\n let sideModeling: (IModeling & { originEn: ExtrudeHole; })[] = [];\r\n\r\n const holes: ExtrudeHole[] = [];\r\n let bbox = br.BoundingBoxInOCS;\r\n\r\n let holeBoxMap = new WeakMap();\r\n\r\n for (let [, idss] of br.DrillList)\r\n {\r\n for (let ids of idss)\r\n {\r\n for (let id of ids)\r\n {\r\n if (id?.Object && !id.Object.IsErase && id.Object instanceof ExtrudeHole && id.Object.isHole)\r\n {\r\n if (!(id.Object.ContourCurve instanceof Circle))\r\n {\r\n let en = id.Object as ExtrudeHole;\r\n let enBox = en.GetBoundingBoxInMtx(br.OCSInv);\r\n holeBoxMap.set(en, enBox);\r\n if (enBox.clone().intersect(bbox).isSolid(0.1))\r\n holes.push(id.Object);\r\n }\r\n }\r\n else break;\r\n }\r\n }\r\n }\r\n\r\n\r\n for (let en of holes)\r\n {\r\n let box = holeBoxMap.get(en);\r\n let max = box.max;\r\n let min = box.min;\r\n let dir: FaceDirection;\r\n let shape = en.Shape;\r\n let diff = br.OCSInv.multiply(en.OCS);\r\n shape.ApplyMatrix(diff);\r\n let thickness: number;\r\n if (isParallelTo(normal, en.Normal))\r\n {\r\n if (min.z > br.Thickness - 1e-6) continue;\r\n\r\n //在板件的世界,0.01的误差应该不能被看出来,所以我们允许0.01的容差(这样应该是没问题的)\r\n //也避免了一些二维转三维出现的缝隙排钻不能被拆解的问题\r\n if (max.z >= br.Thickness - 1e-2)//较大的容差(0.01)\r\n {\r\n dir = FaceDirection.Front;\r\n shape.Position = shape.Position.setZ(min.z);\r\n thickness = br.Thickness - min.z;\r\n }\r\n else if (min.z < 1e-2)//较大的容差\r\n {\r\n dir = FaceDirection.Back;\r\n thickness = max.z;\r\n }\r\n else\r\n continue;\r\n\r\n if (thickness > +1e-6 && isTargetCurInOrOnSourceCur(outline, shape.Outline.Curve.Clone().Z0()))\r\n {\r\n modeling.push({\r\n shape,\r\n thickness,\r\n dir,\r\n knifeRadius: en.KnifeRadius,\r\n addLen: 0,\r\n originEn: en,\r\n });\r\n }\r\n }\r\n else\r\n {\r\n if (min.z <= 0 || max.z >= br.Thickness) continue;\r\n let spt = en.Position.applyMatrix4(br.OCSInv).setZ(0);\r\n\r\n if (outline.PtOnCurve(spt)) continue;\r\n let line = new Line(spt, en.Position.add(en.Normal.multiplyScalar(en.Height)).applyMatrix4(br.OCSInv).setZ(0));\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt) continue;\r\n\r\n let index = Math.floor(outline.GetParamAtPoint(pt));\r\n let thickness = line.StartPoint.distanceTo(pt);\r\n\r\n let shape = en.Shape.ApplyMatrix(en.OCS).ApplyMatrix(br.OCSInv);\r\n let vec = line.GetFistDeriv(0).normalize().multiplyScalar(thickness);\r\n shape.Position = shape.Position.add(vec);\r\n\r\n let cu = outline.GetCurveAtIndex(index);\r\n\r\n shape.ApplyMatrix(new Matrix4().getInverse(GetSideFaceMtx(cu)));\r\n sideModeling.push({\r\n shape,\r\n thickness,\r\n dir: index,\r\n knifeRadius: en.KnifeRadius,\r\n addLen: 0,\r\n originEn: en,\r\n });\r\n }\r\n }\r\n\r\n return { modeling, sideModeling };\r\n}\r\n"],"names":["iaop","Vector3","Matrix4","Vector2","observable","toJS","Box3","Object3D","LineBasicMaterial","DoubleSide","MeshBasicMaterial","ShaderMaterial","Color","LineDashedMaterial","LineMaterial","BufferGeometry","Shape","ShapeGeometry","BufferAttribute","EllipseCurve","ExtrudeGeometry","Mesh","Arc","Polyline","BoolOpeartionType","Circle","Plane","Line3","Line","TLine","MathUtils","LineGeometry","Line2","TShape","Path","BufferGeometryUtils2","LineSegments","Geometry","Face3","cache","CylinderBufferGeometry","Float32BufferAttribute","FixIndex","ShapeUtils","CatmullRomCurve3","BoxBufferGeometry","InstancedInterleavedBuffer","InterleavedBufferAttribute","Production","DrillingFace"],"mappings":"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EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC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"} \ No newline at end of file diff --git a/api.esm.js b/api.esm.js index 23f83f2..5b1ef07 100644 --- a/api.esm.js +++ b/api.esm.js @@ -1,12 +1,11 @@ -import { iaop } from 'xaop'; -import { Vector3, Matrix4, Vector2, Box3, Object3D, LineDashedMaterial, MeshBasicMaterial, LineBasicMaterial, DoubleSide, ShaderMaterial, Color, BufferGeometry, Shape as Shape$1, ShapeGeometry, BufferAttribute, EllipseCurve, ExtrudeGeometry, Mesh, Plane as Plane$1, Line3, Line as Line$1, MathUtils, Path, LineSegments, Geometry, Face3, CylinderBufferGeometry, Float32BufferAttribute, ShapeUtils, CatmullRomCurve3, BoxBufferGeometry, InstancedInterleavedBuffer, InterleavedBufferAttribute } from 'three'; + +import { Vector3, Matrix4, Vector2, Box3, Object3D, LineDashedMaterial, DoubleSide, MeshBasicMaterial, LineBasicMaterial, ShaderMaterial, Color, BufferGeometry, Shape as Shape$1, ShapeGeometry, BufferAttribute, EllipseCurve, ExtrudeGeometry, Mesh, Plane as Plane$1, Line3, Line as Line$1, MathUtils, Path, LineSegments, Geometry, Face3, CylinderBufferGeometry, Float32BufferAttribute, ShapeUtils, CatmullRomCurve3, BoxBufferGeometry, InstancedInterleavedBuffer, InterleavedBufferAttribute } from 'three'; +function observable() { }; +function toJS() { }; import { Line2 } from 'three/examples/jsm/lines/Line2'; import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry'; import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial'; -function observable() { }; -function toJS() { }; - /** * CAD对象工厂,通过注册 和暴露的创建方法,动态创建对象 */ @@ -67,7 +66,7 @@ let AllObjectData = class AllObjectData { //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 //对象从文件中读取数据,初始化自身 ReadFile(file) { - let ver = file.Read(); + file.Read(); let data = file.Read(); this.file.Data = data; return this; @@ -391,7 +390,13 @@ function DisposeThreeObj(obj) { if (oany.geometry && oany.geometry.name !== "Text") oany.geometry.dispose(); if (oany.material) - oany.material.dispose(); + if (Array.isArray(oany.material)) { + for (let m of oany.material) + m.dispose(); + } + else { + oany.material.dispose(); + } DisposeThreeObj(o); // 下面这个代码可能导致Object3d无法复用,删除它应该问题不大 // o.parent = null; @@ -580,9 +585,9 @@ function ToFixed(v, fractionDigits = 5) { const IdentityMtx4 = new Matrix4(); const ZeroVec = new Vector3(); const XAxis = new Vector3(1, 0, 0); -const XAxisN = new Vector3(-1, 0, 0); +new Vector3(-1, 0, 0); const YAxis = new Vector3(0, 1, 0); -const YAxisN = new Vector3(0, -1, 0); +new Vector3(0, -1, 0); const ZAxis = new Vector3(0, 0, 1); function AsVector2(p) { return new Vector2(p.x, p.y); @@ -596,6 +601,13 @@ function AsVector3(p) { function isIntersect(amin, amax, bmin, bmax, eps = 0) { return Math.max(amin, bmin) < Math.min(amax, bmax) + eps; } +function isIntersect2(a1, a2, b1, b2, eps = 0) { + if (a1 > a2) + [a1, a2] = [a2, a1]; + if (b1 > b2) + [b1, b2] = [b2, b1]; + return Math.max(a1, b1) < Math.min(a2, b2) + eps; +} /** * 旋转一个点,旋转中心在原点 * @param {Vector3} p 点 @@ -654,8 +666,8 @@ function angle(v) { function angleTo(v1, v2, ref = ZAxis) { if (v1.equals(ZeroVec) || v2.equals(ZeroVec)) return 0; - v1 = v1.clone(); - v2 = v2.clone(); + v1 = v1.clone(); + v2 = v2.clone(); if (ref !== ZAxis && !ref.equals(ZAxis)) { ref = ref.clone(); //任意轴坐标系. 使用相机的构造矩阵. @@ -796,6 +808,10 @@ function SelectNearP(pts, refPt) { function IsBetweenA2B(n, A, B, fuzz = -1e-8) { return n > A + fuzz && n < B - fuzz; } +/** 矩阵是世界坐标系 */ +function MatrixIsIdentityCS(mtx) { + return mtx.elements[0] === 1 && mtx.elements[5] === 1 && mtx.elements[10] === 1 && mtx.elements[12] === 0 && mtx.elements[13] === 0 && mtx.elements[14] === 0; +} /** * 设置矩阵的某列的向量 @@ -855,6 +871,14 @@ function Vector2ApplyMatrix4(mtx, vec) { vec.x = cacheVec.x; vec.y = cacheVec.y; } +function GetMirrorMat(v) { + let mirrorMat = new Matrix4(); + let xAxis = new Vector3(1 - 2 * v.x ** 2, -2 * v.x * v.y, -2 * v.x * v.z); + let yAxis = new Vector3(-2 * v.x * v.y, 1 - 2 * v.y ** 2, -2 * v.y * v.z); + let zAxis = new Vector3(-2 * v.x * v.z, -2 * v.y * v.z, 1 - 2 * v.z ** 2); + mirrorMat.makeBasis(xAxis, yAxis, zAxis); + return mirrorMat; +} /** * 把变换矩阵展平成2d矩阵,避免出现三维坐标. */ @@ -869,6 +893,7 @@ function MatrixPlanarizere(mtx, z0 = true) { return mtx; } const tempMatrix1 = new Matrix4; +const ZMirrorMatrix = GetMirrorMat(new Vector3(0, 0, 1)); var Status; (function (Status) { @@ -917,6 +942,7 @@ var RenderType; RenderType[RenderType["Print"] = 5] = "Print"; /**物理带线框 */ RenderType[RenderType["Physical2"] = 6] = "Physical2"; + RenderType[RenderType["Edge"] = 7] = "Edge"; /******************************************** 在视口时的渲染模式 */ /** * 线框模式 @@ -954,7 +980,7 @@ var ViewDirType; class UserConfig { constructor() { - this._version = 12; + this._version = 13; this._renderType = RenderType.Wireframe; this.maxSize = { isShow: false, @@ -980,12 +1006,15 @@ class UserConfig { maxHightightCount: 15000, snapSize: 15, aaType: AAType.FXAA, + background: "#000000", + layoutBackground: "#cccccc", }; this.viewDirType = ViewDirType.XN; this.useCtrlRotate = true; this.cursorSize = { D2: 1000, D3: 100, + SquareSize: 10, }; this.autoSaveConfig = { enable: true, @@ -1012,18 +1041,21 @@ class UserConfig { }; this.lineWidth = 2; //打印线框 this.forceFilterPxl = true; + this.checkSealing = false; + this.sealingColorMap = []; this.configName = "default"; this.configsNames = []; this.Init(); } Init() { - let type = localStorage.getItem(StoreageKeys.RenderType); - if (type) - this._renderType = parseFloat(type); + let type = Number(localStorage.getItem(StoreageKeys.RenderType)); + if (type && type !== RenderType.Edge) + this._renderType = type; } set RenderType(t) { if (t !== this._renderType) { this._renderType = t; + this.checkSealing = t === RenderType.Edge; this.SetRenderTypeEvent(); localStorage.setItem(StoreageKeys.RenderType, t.toString()); } @@ -1081,6 +1113,8 @@ class UserConfig { dimTextHeight: this.dimTextHeight, lineWidth: this.lineWidth, forceFilterPxl: this.forceFilterPxl, + checkSealing: this.checkSealing, + sealingColorMap: this.sealingColorMap } }; } @@ -1125,6 +1159,10 @@ class UserConfig { this.lineWidth = config.option.lineWidth; if (config.option.version > 11) this.forceFilterPxl = config.option.forceFilterPxl; + if (config.option.version > 12) { + this.checkSealing = config.option.checkSealing; + this.sealingColorMap = config.option.sealingColorMap; + } } } __decorate([ @@ -2173,7 +2211,7 @@ class ColorMaterial { static GetLineMaterial(color) { if (this._LineMaterialMap.has(color)) return this._LineMaterialMap.get(color); - let mat = new LineBasicMaterial({ color: this.GetColor(color) }); + let mat = new LineBasicMaterial({ color: this.GetColor(color), side: DoubleSide }); this._LineMaterialMap.set(color, mat); return mat; } @@ -2262,7 +2300,8 @@ ColorMaterial.PrintLineMatrial = new LineMaterial({ color: 0x000000, linewidth: LINE_WIDTH, dashed: false, - resolution: new Vector2(1000, 1000) + resolution: new Vector2(1000, 1000), + side: DoubleSide, }); ColorMaterial.GrayTransparentMeshMaterial = new MeshBasicMaterial({ color: 0xcccccc, @@ -2389,6 +2428,9 @@ var ObjectSnapMode; ObjectSnapMode[ObjectSnapMode["All"] = 31743] = "All"; })(ObjectSnapMode || (ObjectSnapMode = {})); +const BufferGeometry2GeometryCacheMap = new WeakMap(); +globalThis.fuck = BufferGeometry2GeometryCacheMap; + var BufferGeometryUtils; (function (BufferGeometryUtils) { function CreateFromPts(pts) { @@ -2412,6 +2454,7 @@ var BufferGeometryUtils; } else return false; + BufferGeometry2GeometryCacheMap.delete(geo); return true; } BufferGeometryUtils.UpdatePts = UpdatePts; @@ -4243,7 +4286,7 @@ let Ellipse = Ellipse_1 = class Ellipse extends Curve { } _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); + file.Read(); this._radX = file.Read(); this._radY = file.Read(); this._rotate = file.Read(); @@ -4543,7 +4586,7 @@ let Line = Line_1 = class Line extends Curve { //对象从文件中读取数据,初始化自身 _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); //1 + file.Read(); //1 this._StartPoint.fromArray(file.Read()); this._EndPoint.fromArray(file.Read()); } @@ -4577,26 +4620,6 @@ Line = Line_1 = __decorate([ Factory ], Line); -/** - * 根据盒子x排序盒子 - * @param {EBox[]} arr - */ -function SortEntityByBox(arr, sort = true) { - let boxMap = new Map(); - arr.forEach(e => boxMap.set(e, e.BoundingBox)); - if (sort) - arr.sort((e1, e2) => { - let b1 = boxMap.get(e1); - let b2 = boxMap.get(e2); - if (!equaln(b1.min.x, b2.min.x)) - return b1.min.x - b2.min.x; - else { - return b2.min.y - b1.min.y; - } - }); - return boxMap; -} - class CurveTreeNode { constructor(curve, box) { this.curve = curve; @@ -4983,12 +5006,11 @@ class OffsetPolyline { if (d.paddingCurve) this._CurveTreeNodes.push(...d.paddingCurve.map(c => new CurveTreeNode(c))); } - let boxContours = SortEntityByBox(this._TrimPolylineContours, false); for (let i = 0; i < this._TrimPolylineContours.length; i++) { let c = this._TrimPolylineContours[i]; - for (let curveNode of this._CurveTreeNodes) { - curveNode.TrimBy(c, boxContours.get(c)); - } + let cbox = c.BoundingBox; + for (let curveNode of this._CurveTreeNodes) + curveNode.TrimBy(c, cbox); } } //过滤方向相反和0长度线 @@ -6268,6 +6290,50 @@ let Polyline = Polyline_1 = class Polyline extends Curve { } return intParams; } + IsIntersectSelf() { + let cus = this.Explode().filter(c => !equaln(c.Length, 0, 1e-3)); + for (let i = 0; i < cus.length - 1; i++) { + let c1 = cus[i]; + let c1IsLine = c1 instanceof Line; + let d1 = c1.GetFistDeriv(c1IsLine ? 0 : 1).normalize(); + for (let j = i + 1; j < cus.length; j++) { + let c2 = cus[j]; + let c2IsLine = c2 instanceof Line; + let d2 = c2.GetFistDeriv(0).normalize(); + if (j === i + 1) { + if (c1IsLine === c2IsLine) { + if (c1IsLine) { + if (equalv3(d1, d2.negate())) + return true; + continue; + } + else { + if (equalv3(d1, d2.negate()) && equalv3(c1.Center, c2.Center)) + return true; + } + } + } + let intPts = c1.IntersectWith2(c2, 0); + let intPtsLen = intPts.length; + if (intPtsLen > 0) { + if (intPtsLen === 2 && equalv3(intPts[0].pt, intPts[1].pt, 1e-3)) { + intPtsLen = 1; + intPts.pop(); + } + if (intPtsLen === 2 && j === i + 1 && cus.length === 2) { + if (intPts.every(r => equaln(r.thisParam, 0, 1e-3) || equaln(r.thisParam, 1, 1e-3))) + continue; + } + if (j === i + 1 && intPtsLen === 1) + continue; + if (this.IsClose && i === 0 && j === cus.length - 1 && intPtsLen === 1) + continue; + return true; + } + } + } + return false; + } get BoundingBox() { let box = new Box3Ext(); for (let i = 0; i < this.EndParam; i++) { @@ -6511,12 +6577,15 @@ let Polyline = Polyline_1 = class Polyline extends Curve { this.Update(); } GetStretchPoints() { - let ocs = this.OCS; - let ptList = []; + let iswcs = MatrixIsIdentityCS(this._Matrix); + let pts = []; for (let data of this._LineData) { - ptList.push(AsVector3(data.pt).applyMatrix4(ocs)); + let p = AsVector3(data.pt); + if (!iswcs) + p.applyMatrix4(this._Matrix); + pts.push(p); } - return ptList; + return pts; } /** * 范围拉伸(stretch),对夹点进行拉伸. @@ -6524,7 +6593,6 @@ let Polyline = Polyline_1 = class Polyline extends Curve { * * @param {Array} indexList * @param {Vector3} vec - * @memberof Polyline */ MoveStretchPoints(indexList, vec) { this.WriteAllObjectRecord(); @@ -6648,10 +6716,10 @@ function reverseIntersectOption(intType) { function CheckPointOnCurve(intRes, c1, c2, extType, tolerance = 1e-6) { return intRes.filter(r => { if (!(extType & IntersectOption.ExtendThis)) - if (!c1.ParamOnCurve(r.thisParam, tolerance)) + if (!c1.ParamOnCurve(r.thisParam, tolerance / c1.Length)) return false; if (!(extType & IntersectOption.ExtendArg)) - if (!c2.ParamOnCurve(r.argParam, tolerance)) + if (!c2.ParamOnCurve(r.argParam, tolerance / c2.Length)) return false; return true; }); @@ -6724,7 +6792,7 @@ function IntersectCircleAndArc(circle, arc, extType, tolerance = 1e-6) { * @param {IntersectOption} extType 延伸选项 * @returns 交点集合 */ -function IntersectArcAndArc(arc1, arc2, extType, tolerance = 1e-6) { +function IntersectArcAndArc(arc1, arc2, extType, tolerance = 1e-5) { let pts = IntersectCircleAndCircle(arc1, arc2); return CheckPointOnCurve(pts, arc1, arc2, extType, tolerance); } @@ -7377,7 +7445,7 @@ let Circle = Circle_1 = class Circle extends Curve { //对象从文件中读取数据,初始化自身 _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); + file.Read(); this._Radius = file.Read(); } //对象将自身数据写入到文件. @@ -8360,9 +8428,9 @@ let Arc = Arc_1 = class Arc extends Curve { if (!(pt1 && pt2 && pt3)) return; let ocsInv = this.OCSInv; - pt1 = pt1.clone().applyMatrix4(ocsInv); - pt2 = pt2.clone().applyMatrix4(ocsInv); - pt3 = pt3.clone().applyMatrix4(ocsInv); + pt1 = pt1.clone().applyMatrix4(ocsInv).setZ(0); + pt2 = pt2.clone().applyMatrix4(ocsInv).setZ(0); + pt3 = pt3.clone().applyMatrix4(ocsInv).setZ(0); let center = getCircleCenter(pt1, pt2, pt3); this.Center = center.clone().applyMatrix4(this.OCS); //用圆心和其中一个点求距离得到半径: @@ -8393,7 +8461,10 @@ let Arc = Arc_1 = class Arc extends Curve { //更新Geometry UpdateGeometry(geo) { let pts = this.Shape.getPoints(60).map(AsVector3); - BufferGeometryUtils.UpdatePts(geo, pts); + if (geo instanceof LineGeometry) + geo.setPositions(pts.reduce((arr, p) => { return [...arr, ...p.toArray()]; }, [])); + else + BufferGeometryUtils.UpdatePts(geo, pts); } /** * 重载:更新绘制的实体 @@ -8892,7 +8963,7 @@ class Shape { } /** * 合并洞,本质是使用(并集算法)将可以并集的洞合并在一起,减少洞的数量. - * canSidewipe 用于走刀,擦边的是否合并 + * canSidewipe 用于走刀,擦边的,包含的,是否合并 */ static mergeContours(holes, canSidewipe = true) { if (holes.length <= 1) @@ -8924,6 +8995,8 @@ class Shape { if (!canSidewipe) { if (equaln(c.Area + ic.Area, unions.contours[0].Area, 0.1)) return true; + if (equaln(unions.contours[0].Area, Math.max(c.Area, ic.Area), 0.1)) + return true; } c = unions.contours[0]; //更新c b1 = c.BoundingBox; @@ -8980,7 +9053,7 @@ class Shape { } //读写文件 ReadFile(file) { - let ver = file.Read(); //1 + file.Read(); //1 this._Outline = Contour.CreateContour([file.ReadObject()]); let count = file.Read(); for (let i = 0; i < count; i++) { @@ -9103,7 +9176,7 @@ class ShapeManager { } } ReadFile(file) { - let ver = file.Read(); //1 + file.Read(); //1 let cout = file.Read(); for (let i = 0; i < cout; i++) { let obj = new Shape(); @@ -9398,7 +9471,7 @@ let Region = Region_1 = class Region extends Entity { } _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); //1 + file.Read(); //1 this._ShapeManager.Clear(); this._ShapeManager.ReadFile(file); } @@ -9553,6 +9626,86 @@ function deserializationBoardData(file, processData, ver) { } } } +function SerializeBoard2DModeingData(file, modelList) { + file.Write(modelList.length); + for (let data of modelList) { + file.WriteObject(data.path); + file.Write(data.dir); + file.Write(data.items.length); + for (let item of data.items) { + file.Write(item.depth); + file.Write(item.offset); + file.Write(item.knife.id); + file.Write(item.knife.radius); + file.Write(item.knife.angle); + file.Write(item.knife.name); + } + } +} +function SerializeBoard3DModeingData(file, modelList) { + file.Write(modelList.length); + for (let item of modelList) { + file.Write(item.path.length); + for (let d of item.path) { + file.Write(d.pt.toArray()); + file.Write(d.bul); + } + file.Write(item.dir); + file.Write(item.knife.id); + file.Write(item.knife.radius); + file.Write(item.knife.angle); + file.Write(item.knife.name); + } +} +//反序列化板件数据 +function DeserializationBoard2DModeingData(file, data, ver) { + data.length = 0; + const count = file.Read(); + for (let i = 0; i < count; i++) { + let path = file.ReadObject(); + let dir = file.Read(); + let m = { + path, + dir, + items: [] + }; + const itemCount = file.Read(); + for (let j = 0; j < itemCount; j++) { + let depth = file.Read(); + let offset = file.Read(); + let knifeId = file.Read(); + let knifeRad = file.Read(); + let knifeAngle = file.Read(); + let knifeName = file.Read(); + m.items.push({ + depth, offset, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName } + }); + } + data.push(m); + } +} +//反序列化板件数据 +function DeserializationBoard3DModeingData(file, data, ver) { + data.length = 0; + const count = file.Read(); + for (let i = 0; i < count; i++) { + let pathCount = file.Read(); + let path = []; + for (let i = 0; i < pathCount; i++) { + let pt = new Vector3().fromArray(file.Read()); + let bul = file.Read(); + path.push({ pt, bul }); + } + let dir = file.Read(); + let knifeId = file.Read(); + let knifeRad = file.Read(); + let knifeAngle = file.Read(); + let knifeName = file.Read(); + data.push({ + path, dir, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName } + }); + } +} class BoardUVGenerator { generateTopUV(geometry, vertices, indexA, indexB, indexC) { @@ -11493,6 +11646,20 @@ function VKnifToolPath(polyline, feedingDepth, knifAngle) { } return ptsbul; } +function VData2Curve(data) { + let curves = []; + for (let i = 0; i < data.length - 1; i++) { + let p1 = new Vector3(data[i].pt.x, data[i].pt.y, data[i].pt.z); + let p2 = new Vector3(data[i + 1].pt.x, data[i + 1].pt.y, data[i + 1].pt.z); + if (equaln(data[i].bul, 0)) { + curves.push(new Line(p1, p2)); + } + else { + curves.push(new Arc().ParseFromBul(p1, p2, data[i].bul)); + } + } + return curves; +} var Intent; (function (Intent) { @@ -12443,6 +12610,20 @@ const DefaultR2bOption = { footerThickness: 18, }; Object.freeze(DefaultR2bOption); +const DefaultR2b2Option = { + version: 1, + depthExpr: "W", + drillType: "", + sealedDown: "1", + sealedLeft: "1", + sealedRight: "1", + sealedUp: "1", + remarks: Array.from({ length: 12 }, () => ["", ""]), + maxThickness: 20, + layerShrink: 0, + vertialShrink: 0, +}; +Object.freeze(DefaultR2b2Option); function FixIndex$1(index, arr) { let count = (arr instanceof Array) ? arr.length : arr; @@ -12774,7 +12955,7 @@ let Spline = class Spline extends Curve { } _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); //1 + file.Read(); //1 let count = file.Read(); this._PointList.length = 0; for (let i = 0; i < count; i++) @@ -13061,7 +13242,7 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { return this._EdgeGeometry; } InitDrawObject(renderType) { - if (renderType === RenderType.Wireframe) + if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); else if (renderType === RenderType.Conceptual) { return new Object3D().add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); @@ -13088,7 +13269,7 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } UpdateDrawObject(renderType, obj) { DisposeThreeObj(obj); - if (renderType === RenderType.Wireframe) { + if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { let l = obj; l.geometry = this.EdgeGeometry; l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); @@ -13265,7 +13446,7 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); //1 + file.Read(); //1 this._Contour = file.ReadObject(); this._PathCurve = file.ReadObject(); if (this._Contour instanceof Spline || this._PathCurve instanceof Spline) { @@ -13448,7 +13629,7 @@ let HardwareTopline = class HardwareTopline extends SweepSolid { } _ReadFile(file) { super._ReadFile(file); - let ver = file.Read(); //1 + file.Read(); //1 this._contourRotation = file.Read(); this.HardwareOption.addLen = file.Read(); this.HardwareOption.name = file.Read(); @@ -13581,28 +13762,33 @@ class LookOverBoardInfosTool { } for (let [id, idList] of dlist) { for (let ids of idList) { - for (let objId of ids) { + findHole: for (let objId of ids) { let gd = objId.Object; if (!(gd === null || gd === void 0 ? void 0 : gd.IsErase)) { if (gd instanceof CylinderHole) switch (gd.Type) { case GangDrillType.Ljg: + case GangDrillType.Pxl: + case GangDrillType.Ymj: + case GangDrillType.Ljg: + case GangDrillType.TK: let spiteName = (_c = (_b = (_a = gd.GroupId) === null || _a === void 0 ? void 0 : _a.Object) === null || _b === void 0 ? void 0 : _b.Name) !== null && _c !== void 0 ? _c : "未命名"; //读取拆单名 addDrillToMap(spiteName, gd); - break; + break findHole; case GangDrillType.Wood: + case GangDrillType.WoodPXL: addDrillToMap("木销", gd); - break; + break findHole; } else { //TODO:统计自定义排钻 if (gd instanceof ExtrudeHole) { if ((_d = gd === null || gd === void 0 ? void 0 : gd.GroupId) === null || _d === void 0 ? void 0 : _d.Object) { - let name = gd.GroupId.Object.Name; - let ents = gd.GroupId.Object.Entitys; - addDrillToMap(name, ents[0].Object); - } + let name = gd.GroupId.Object.Name; + let ents = gd.GroupId.Object.Entitys; + addDrillToMap(name, ents[0].Object); + } else { Toaster({ message: `柜名:${b.BoardProcessOption.cabinetName} 板名:${b.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER }); } @@ -14049,6 +14235,157 @@ function IsDev() { return window.location.hostname === "localhost"; } +const SCALAR = 0.1; +function CyHoleInBoard(cys, br, ocs) { + if (cys.length === 1 && cys[0].Type === GangDrillType.Ymj) + return true; + const outline = br.ContourCurve; + let box = new Box3(); + let pxl; + let ljg; + let ymj; + let wood; + let woodPXL; + let pxl2; + for (let cy of cys) { + box.union(cy.BoundingBox); + if (cy.Type === GangDrillType.Pxl) { + if (pxl) + pxl2 = cy; + else + pxl = cy; + } + else if (cy.Type === GangDrillType.Ljg) + ljg = cy; + else if (cy.Type === GangDrillType.Wood) + wood = cy; + else if (cy.Type === GangDrillType.WoodPXL) + woodPXL = cy; + else + ymj = cy; + } + box.applyMatrix4(ocs); + let outlineBox = outline.BoundingBox; + outlineBox.max.setZ(br.Thickness); + if (!box.intersectsBox(outlineBox)) + return false; + let nor = new Vector3(); + if (ljg) + nor.copy(ljg.Normal); + else if (ymj) + nor.copy(ymj.Normal); + else if (wood) + nor.copy(wood.Normal); + nor.applyMatrix4(ocs.clone().setPosition(new Vector3)); + if (isParallelTo(nor, ZAxis)) { + if (ymj) { + let center = ymj.Position.applyMatrix4(ocs).setZ(0); + let cir = new Circle(center, ymj.Radius - SCALAR); + return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); + } + } + else { + if (pxl) { + let plxs = [pxl]; + if (pxl2) + plxs.push(pxl2); + if (plxs.every(cy => { + let center = cy.Position.applyMatrix4(ocs).setZ(0); + let cir = new Circle(center, pxl.Radius - SCALAR); + if (userConfig.forceFilterPxl) + return outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center); + else + return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center); + })) + return false; + } + if (woodPXL) { + let center = woodPXL.Position.applyMatrix4(ocs).setZ(0); + let cir = new Circle(center, woodPXL.Radius - SCALAR); + if (outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center)) + return false; + } + if (ljg) { + let c1 = ljg.Position.applyMatrix4(ocs).setZ(0); + let minPt = c1.clone().add(nor.clone().multiplyScalar(ljg.Height / 2)); + let c2 = c1.clone().add(nor.clone().multiplyScalar(ljg.Height - SCALAR)); + c1.add(nor.clone().multiplyScalar(SCALAR)); + rotatePoint(nor, Math.PI / 2); + c1.add(nor.multiplyScalar(ljg.Radius)); + c2.add(nor.negate()); + let rect = new Polyline().RectangleFrom2Pt(c1, c2); + let intPtsLen = outline.IntersectWith(rect, 0).length; + if (intPtsLen > 2 || (intPtsLen === 0 && !outline.PtInCurve(minPt))) + return false; + } + if (wood) { + let c1 = wood.Position.applyMatrix4(ocs).setZ(0); + let c2 = c1.clone().add(nor.clone().multiplyScalar(wood.Height)); + rotatePoint(nor, Math.PI / 2); + let dir = nor.multiplyScalar(wood.Radius); + let p1 = c1.clone().add(dir); + let p2 = c2.clone().add(dir); + let p3 = c1.clone().add(dir.negate()); + let p4 = c2.clone().add(dir); + let l1 = new Line(p1, p2); + let l2 = new Line(p3, p4); + if (l1.IntersectWith(outline, 0).length !== 1 || l2.IntersectWith(outline, 0).length !== 1) + return false; + } + } + return true; +} +const TempRectHoleOption = { + up: "", + down: "", + left: "", + right: "", +}; +/**分析上下左右排钻 */ +function InitRectBoardHoleOption(br, option) { + let dir = Math.sign(br.ContourCurve.Area2); + let hightDrill = br.BoardProcessOption.highDrill; + let cus = br.ContourCurve.Explode(); + for (let i = 0; i < cus.length; i++) { + let c = cus[i]; + let derv = c.GetFistDeriv(0).multiplyScalar(dir); + let an = angle(derv); + if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4)) + option.down = hightDrill[i]; + else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8) + option.right = hightDrill[i]; + else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8) + option.up = hightDrill[i]; + else + option.left = hightDrill[i]; + } +} +/**上下左右排钻写入板件 */ +function SetRectHighHole(br, option) { + let dir = Math.sign(br.ContourCurve.Area2); + let highDrill = br.BoardProcessOption.highDrill; + let cus = br.ContourCurve.Explode(); + highDrill.length = 0; + for (let i = 0; i < cus.length; i++) { + let c = cus[i]; + let derv = c.GetFistDeriv(0).multiplyScalar(dir); + let an = angle(derv); + if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4)) + highDrill.push(option.down); + else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8) + highDrill.push(option.right); + else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8) + highDrill.push(option.up); + else + highDrill.push(option.left); + } + let types = new Set(highDrill); + if (types.size === 1 && highDrill[0] !== DrillType.None) + br.BoardProcessOption[EBoardKeyList.DrillType] = highDrill[0]; + else if (types.size > 1) + br.BoardProcessOption[EBoardKeyList.DrillType] = DrillType.More; +} + var DrillingFace; (function (DrillingFace) { //正反面时,使用Front和Back @@ -14105,17 +14442,15 @@ var Production; offsetTanslation, metalsData: GetBoardMetals(br), boardContour, - originModelingData: GetOriginBoardModelingData(br) + modeling2D: Get2DModeing(br, offsetTanslation), + modeling3D: Get3DModeing(br, offsetTanslation), }; } Production.GetBoardSplitOrderData = GetBoardSplitOrderData; function GetBoardInfo(br, size) { let data = br.BoardProcessOption; - let param = { L: br.Height, W: br.Width, H: br.Thickness }; - let spliteHeight = safeEval(data.spliteHeight, param); - let spliteWidth = safeEval(data.spliteWidth, param); - let spliteThickness = safeEval(data.spliteThickness, param); - let isRect = (!isNaN(spliteHeight) && !isNaN(spliteWidth) && !isNaN(spliteThickness)) || !br.IsSpecialShape; + let spliteSize = Production.GetSpiteSize(br); + let isRect = !!spliteSize || !br.IsSpecialShape; return { id: br.Id.Index, name: br.Name, @@ -14126,9 +14461,9 @@ var Production; [EBoardKeyList.Color]: data[EBoardKeyList.Color], [EBoardKeyList.Lines]: data[EBoardKeyList.Lines], [EBoardKeyList.DrillType]: data[EBoardKeyList.DrillType], - spliteHeight: spliteHeight ? spliteHeight.toString() : "", - spliteThickness: spliteThickness ? spliteThickness.toString() : "", - spliteWidth: spliteWidth ? spliteWidth.toString() : "", + spliteHeight: spliteSize ? spliteSize.spliteHeight.toString() : "", + spliteThickness: spliteSize ? spliteSize.spliteThickness.toString() : "", + spliteWidth: spliteSize ? spliteSize.spliteWidth.toString() : "", isRect, remarks: data.remarks.slice(), kaiLiaoWidth: size.x, @@ -14224,6 +14559,32 @@ var Production; return result; } Production.SplitePolylineAtArc = SplitePolylineAtArc; + function SplitetArc(arc, hasEnd = false) { + let result = { pts: [], buls: [] }; + let bul = arc.Bul; + if (Math.abs(bul) > SPLITBUL + 1e-8) { + let allAngle = Math.atan(bul) * 4; + let splitCount = GetSpliteCount(allAngle); + let paramDiv = 1 / splitCount; + let newBul = Math.tan((allAngle / splitCount) / 4); + for (let i = 0; i < splitCount; i++) { + let param = i * paramDiv; + let p = arc.GetPointAtParam(param); + result.pts.push(p); + result.buls.push(newBul); + } + } + else { + result.pts.push(arc.StartPoint); + result.buls.push(bul); + } + if (hasEnd) { + result.pts.push(arc.EndPoint); + result.buls.push(0); + } + return result; + } + Production.SplitetArc = SplitetArc; /** * 获取封边数据 * 封边数据未统一逆时针顺序,用于拆单 @@ -14285,7 +14646,6 @@ var Production; } Production.GetMetalTotalEntitys = GetMetalTotalEntitys; function GetOriginBoardModelingData(br) { - const tool = FeedingToolPath.GetInstance(); const getModelings = (ms) => { var _a; let data = []; @@ -14333,6 +14693,13 @@ var Production; thickness: m.thickness + ((_a = m.addDepth) !== null && _a !== void 0 ? _a : 0), dir: m.dir, knifeRadius: m.knifeRadius, + origin: { + outline: ConverToPolylineAndSplitArc(cu.Clone(), false, false), + holes: m.shape.Holes.map(h => ConverToPolylineAndSplitArc(h.Curve.Clone(), false, false)), + addLen: m.addLen, + addWidth: m.addWidth, + addDepth: m.addDepth, + } }); else { Toaster({ @@ -14423,7 +14790,7 @@ var Production; } for (let h of holes) { if (h instanceof ExtrudeHole) - ParseExtrudeHoles(h, br, offsetTanslation, data, sealedContour); + ParseExtrudeHoles(h, br, offsetTanslation, data, sealedContour, true); else ParseCylHoles(h, br, offsetTanslation, data, sealedContour); } @@ -14474,6 +14841,18 @@ var Production; function InvertPosition(pos, thickness) { pos.z = thickness - pos.z; } + function HoleInBoard(center, radius, outline, isYMJ = false) { + let cir = new Circle(center, radius - SCALAR); + if (isYMJ) { + return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); + } + else { + if (userConfig.forceFilterPxl) + return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); + else + return outline.IntersectWith(cir, 0).length > 1 || outline.PtInCurve(center); + } + } /**分析常规排钻 */ function ParseCylHoles(d, br, offsetTanslation, data, outline) { let processData = br.BoardProcessOption; @@ -14488,12 +14867,14 @@ var Production; let diffMat = br.OCSInv.multiply(d.OCS); let x = new Vector3().setFromMatrixColumn(diffMat, 0); let angle = angleTo(XAxis, x); + let nor = d.Normal.applyMatrix4(roMat); + let pos2 = position.clone().add(nor.multiplyScalar(depth)); if (d.Type === GangDrillType.Pxl || d.Type === GangDrillType.WoodPXL) { if (isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz)) { if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, 1e-6) || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, 1e-6) - || !IsBetweenA2B(position.z, 0, br.Thickness) - || !outline.PtInCurve(position.clone().setZ(0))) + || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz) + || !HoleInBoard(position.clone().setZ(0), d.Radius, outline)) return; position.sub(offsetTanslation); face = processData[EBoardKeyList.BigHole]; @@ -14551,11 +14932,11 @@ var Production; } } else { - if (isParallelTo(d.Normal, br.Normal, CanDrawHoleFuzz)) { + if (isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz)) { if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, CanDrawHoleFuzz) || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, CanDrawHoleFuzz) - || !IsBetweenA2B(position.z, 0, br.Thickness, -CanDrawHoleFuzz) - || !outline.PtInCurve(position.clone().setZ(0))) + || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz) + || !HoleInBoard(position.clone().setZ(0), d.Radius, outline, true)) return; position.sub(offsetTanslation); holes = data.frontBackHoles; @@ -14574,7 +14955,7 @@ var Production; }); } /**分析自定义圆柱排钻 */ - function ParseExtrudeHoles(d, br, offsetTanslation, data, outline) { + function ParseExtrudeHoles(d, br, offsetTanslation, data, outline, isCheckGroove = false) { if (!d.isHole) return; let brNormal = br.Normal; @@ -14585,22 +14966,25 @@ var Production; let sp = cir.Center.applyMatrix4(diffMtx); let ep = cir.Center.add(new Vector3(0, 0, d.Height)).applyMatrix4(diffMtx); let x = new Vector3().setFromMatrixColumn(diffMtx, 0); - if (isParallelTo(nor, brNormal)) { + //#I2DPFO 在挖穿造型内的五金不加工 + const grooves = br.Grooves.filter(g => equaln(g.Thickness, br.Thickness)); + const groovesOutlines = isCheckGroove ? grooves.map(g => g.ContourCurve.Clone().ApplyMatrix(g.OCS).ApplyMatrix(br.OCSInv).Z0()) : []; + if (isParallelTo(nor, brNormal, CanDrawHoleFuzz)) { let z0 = Math.min(sp.z, ep.z); let z1 = Math.max(sp.z, ep.z); let p = sp.clone().setZ(0).sub(offsetTanslation); - if (Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6 && outline.PtInCurve(p)) { - let depth = z0 < 1e-2 ? z1 : br.Thickness - z0; + if (Math.max(z0, 0) < Math.min(z1, br.Thickness) - CanDrawHoleFuzz && outline.PtInCurve(p) && groovesOutlines.every(g => !g.PtInCurve(p))) { + let depth = z0 < CanDrawHoleFuzz ? z1 : br.Thickness - z0; let angle = angleTo(XAxis, x); if (equaln(angle, Math.PI)) angle = 0; - if (depth > 1e-2) + if (depth > CanDrawHoleFuzz) data.frontBackHoles.push({ type: d.isThrough ? GangDrillType.TK : GangDrillType.Ymj, - position: z0 < 1e-6 ? p : p.setZ(br.Thickness), + position: z0 < CanDrawHoleFuzz ? p : p.setZ(br.Thickness), radius: cir.Radius, depth, - face: z0 < 1e-6 ? DrillingFace.Back : DrillingFace.Front, + face: z0 < CanDrawHoleFuzz ? DrillingFace.Back : DrillingFace.Front, angle: angle, }); } @@ -14625,7 +15009,7 @@ var Production; let endPt; let face = Math.floor(outline.GetParamAtPoint(pt)); for (let p of [line.StartPoint, line.EndPoint]) { - if (outline.PtInCurve(p)) { + if (!equalv3(p.setZ(oldZ), position) && outline.PtInCurve(p)) { endPt = p.setZ(oldZ); break; } @@ -14633,7 +15017,7 @@ var Production; if (!endPt) return; let depth = position.distanceTo(endPt); - if (equaln(depth, 0, 1e-2)) + if (equaln(depth, 0, CanDrawHoleFuzz)) return; InvertPosition(position, br.Thickness); InvertPosition(endPt, br.Thickness); @@ -14779,6 +15163,73 @@ var Production; SendReport(msg); } Production.Report = Report; + function Get2DModeing(br, offset) { + let res = []; + let tmtx = MoveMatrix(offset.clone().negate()); + for (let m of br.Modeling2D) { + let path = m.path.Clone().ApplyMatrix(tmtx); + res.push({ + path: ConverToPolylineAndSplitArc(path), + dir: m.dir, + items: m.items.map(item => ({ ...item })) + }); + } + return res; + } + Production.Get2DModeing = Get2DModeing; + function Get3DModeing(br, offset) { + let res = []; + for (let m of br.Modeling3D) { + let d = { + path: { pts: [], buls: [] }, + knife: { ...m.knife }, + dir: m.dir + }; + for (let i = 0; i < m.path.length - 1; i++) { + let d1 = m.path[i]; + let d2 = m.path[i + 1]; + if (equaln(d1.bul, 0)) { + let p = d1.pt.clone(); + InvertPosition(p, br.Thickness); + p.sub(offset); + d.path.pts.push(p); + d.path.buls.push(0); + } + else { + let arc = new Arc().ParseFromBul(d1.pt.clone().sub(offset), d2.pt.clone().sub(offset), d1.bul); + let r = SplitetArc(arc, false); + r.pts.forEach(p => InvertPosition(p, br.Thickness)); + d.path.pts.push(...r.pts); + d.path.buls.push(...r.buls); + } + if (i === m.path.length - 2) { + let p = d2.pt.clone(); + InvertPosition(p, br.Thickness); + p.sub(offset); + d.path.pts.push(p); + d.path.buls.push(0); + } + } + res.push(d); + } + return res; + } + Production.Get3DModeing = Get3DModeing; + function GetChaiDanFeedingPath(data) { + const { thickness, boardContour, dir, addLen, addWidth, addDepth, knifeRadius } = data; + let brContour = Data2Polyline(boardContour); + const tool = FeedingToolPath.GetInstance(); + const outline = Contour.CreateContour(Data2Polyline(data.outline)); + const holes = data.holes.map(h => Contour.CreateContour(Data2Polyline(h))); + let shape = new Shape(outline, holes); + const paths = tool.GetModelFeedPath({ Thickness: thickness, ContourCurve: brContour }, { + shape, + thickness, + dir, knifeRadius, addLen, addWidth, addDepth + }); + return paths.map((c) => ConverToPolylineAndSplitArc(c, false)); + } + Production.GetChaiDanFeedingPath = GetChaiDanFeedingPath; })(Production || (Production = {})); /** @@ -14875,6 +15326,9 @@ class CurveIntersection2 extends CurveIntersection { * 某些时候我们不能创建轮廓,此时我们使用类似c2r的方法来构建一个外部轮廓. */ function CreateContour2(curves, fuzz = 1e-4) { + for (let c of curves) + if (c instanceof Circle) + return Contour.CreateContour(c); let extendsMinDistSq = fuzz * fuzz; let intersect = new CurveIntersection2(curves, false, IntersectOption.ExtendBoth, fuzz); let curves2 = []; @@ -14945,6 +15399,7 @@ var DepthType; DepthType[DepthType["Back"] = 2] = "Back"; DepthType[DepthType["All"] = 3] = "All"; })(DepthType || (DepthType = {})); +const ExtrudeBuildConfig = { bevel: false }; /** * 槽的几何数据,包括槽的墙面和槽的盖子 */ @@ -15009,7 +15464,7 @@ class Groove { if (this.depthType === DepthType.All) return; let isFront = this.depthType === DepthType.Front; - this.lid.Draw(verticesArray, uvArray, isFront, isFront ? this.allDepth - this.depth : this.depth, rotateUv); + this.lid.Draw(verticesArray, uvArray, isFront, isFront ? this.allDepth - this.depth : this.depth, rotateUv, this.allDepth); } } function CreateTape(faceType, startParam, endParam, depth, allDepth) { @@ -15034,7 +15489,7 @@ class ContourTreeNode { this.parent = node; node.children.push(this); } - Draw(verticesArray, uvArray, front, z, rotateUv) { + Draw(verticesArray, uvArray, front, z, rotateUv, allDepth) { // TestDraw(this.contour.Curve, depth); let pts = this.contour.Curve.GetStretchPoints(); let vertices = [...pts]; @@ -15057,8 +15512,8 @@ class ContourTreeNode { AddVertice(vertices[f[1]]); } } - function AddVertice(v) { - verticesArray.push(v.x, v.y, z); + function AddVertice(v, inz = z) { + verticesArray.push(v.x, v.y, inz); if (rotateUv) uvArray.push(v.y * 1e-3, v.x * 1e-3); else @@ -15066,9 +15521,10 @@ class ContourTreeNode { } for (let hole of this.children) { for (let h of hole.children) { - h.Draw(verticesArray, uvArray, front, z, rotateUv); //, depth + 2 + h.Draw(verticesArray, uvArray, front, z, rotateUv, allDepth); //, depth + 2 } } + return; //如果不倒角 就不执行下面的代码 } static ParseContourTree(contourNodes) { contourNodes.sort((c1, c2) => c1.contour.Curve.Area - c2.contour.Curve.Area); @@ -15127,7 +15583,7 @@ class EdgeGeometryBuild { let node = contourNodes[j]; if (node.parent) continue; - node.Draw(verticesArray, uvArray, index === 1, this.allDepth * index, rotateUv); + node.Draw(verticesArray, uvArray, index === 1, this.allDepth * index, rotateUv, this.allDepth); } } } @@ -15234,7 +15690,7 @@ class CurveTapeShape { } } } - Draw(verticesArray, uvArray, front, z, rotateUv) { + Draw(verticesArray, uvArray, front, z, rotateUv, allDepth) { this.ChildrenClip(); let polylines = this.contour.Curves; for (let h of this.holes) @@ -15260,7 +15716,7 @@ class CurveTapeShape { // TestDraw(s.contour.Curve.Clone(), z); if (node.parent) continue; - node.Draw(verticesArray, uvArray, front, z, rotateUv); + node.Draw(verticesArray, uvArray, front, z, rotateUv, allDepth); } } } @@ -15461,10 +15917,22 @@ class ExtudeWall { } Draw(verticesArray, uvArray, edgeBuild) { let xparams = SplitCurveParams(this.curve); + let isOuter = this.wallType === DirectionType.Outer; + let allDepth = this.allDepth; function AddVertice(v) { verticesArray.push(v.x); verticesArray.push(v.y); - verticesArray.push(v.z); + if (isOuter && ExtrudeBuildConfig.bevel) //如果倒角,则执行下面的代码 + { + if (v.z === 0) + verticesArray.push(1); + else if (v.z === allDepth) + verticesArray.push(allDepth - 1); + else + verticesArray.push(v.z); + } + else + verticesArray.push(v.z); } let tapes = []; this.Tape.sort((t1, t2) => t1.start - t2.start); @@ -15707,6 +16175,9 @@ class ExtrudeGeometryBuilder { this.br = br; this.verticesArray = []; //用于构建三维网格 this.uvArray = []; //uv + this.GenerateMeshData(br); + } + GenerateMeshData(br) { this.edgeAndLidBuilder = new EdgeGeometryBuild(this.br.Thickness); let rotateUv = (br instanceof Board && br.BoardProcessOption.lines === LinesType.Reverse); //计算墙(创建轮廓取出,为了得到正确的轮廓曲线(逆时针之类的)) @@ -17345,8 +17816,10 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { // if (e.DrawObject.children.length === 0) // e.ClearDraw(); let o = e.GetDrawObjectFromRenderType(renderType); - o.traverse(obj => obj.userData = {}); - AddEntityDrawObject(obj, e, renderType); + if (o) { + o.traverse(obj => obj.userData = {}); + AddEntityDrawObject(obj, e, renderType); + } } } get ColorIndex() { @@ -17484,7 +17957,7 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { //#endregion //#region 文件序列化 _ReadFile(file) { - let v = file.Read(); + file.Read(); super._ReadFile(file); let count = file.Read(); this.Entitys.length = 0; @@ -17750,155 +18223,6 @@ class PointShapeUtils { } } -const SCALAR = 0.1; -function CyHoleInBoard(cys, br, ocs) { - if (cys.length === 1 && cys[0].Type === GangDrillType.Ymj) - return true; - const outline = br.ContourCurve; - let box = new Box3(); - let pxl; - let ljg; - let ymj; - let wood; - let woodPXL; - let pxl2; - for (let cy of cys) { - box.union(cy.BoundingBox); - if (cy.Type === GangDrillType.Pxl) { - if (pxl) - pxl2 = cy; - else - pxl = cy; - } - else if (cy.Type === GangDrillType.Ljg) - ljg = cy; - else if (cy.Type === GangDrillType.Wood) - wood = cy; - else if (cy.Type === GangDrillType.WoodPXL) - woodPXL = cy; - else - ymj = cy; - } - box.applyMatrix4(ocs); - let outlineBox = outline.BoundingBox; - outlineBox.max.setZ(br.Thickness); - if (!box.intersectsBox(outlineBox)) - return false; - let nor = new Vector3(); - if (ljg) - nor.copy(ljg.Normal); - else if (ymj) - nor.copy(ymj.Normal); - else if (wood) - nor.copy(wood.Normal); - nor.applyMatrix4(ocs.clone().setPosition(new Vector3)); - if (isParallelTo(nor, ZAxis)) { - if (ymj) { - let center = ymj.Position.applyMatrix4(ocs).setZ(0); - let cir = new Circle(center, ymj.Radius - SCALAR); - return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); - } - } - else { - if (pxl) { - let plxs = [pxl]; - if (pxl2) - plxs.push(pxl2); - if (plxs.every(cy => { - let center = cy.Position.applyMatrix4(ocs).setZ(0); - let cir = new Circle(center, pxl.Radius - SCALAR); - if (userConfig.forceFilterPxl) - return outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center); - else - return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center); - })) - return false; - } - if (woodPXL) { - let center = woodPXL.Position.applyMatrix4(ocs).setZ(0); - let cir = new Circle(center, woodPXL.Radius - SCALAR); - if (outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center)) - return false; - } - if (ljg) { - let c1 = ljg.Position.applyMatrix4(ocs).setZ(0); - let minPt = c1.clone().add(nor.clone().multiplyScalar(ljg.Height / 2)); - let c2 = c1.clone().add(nor.clone().multiplyScalar(ljg.Height - SCALAR)); - c1.add(nor.clone().multiplyScalar(SCALAR)); - rotatePoint(nor, Math.PI / 2); - c1.add(nor.multiplyScalar(ljg.Radius)); - c2.add(nor.negate()); - let rect = new Polyline().RectangleFrom2Pt(c1, c2); - let intPtsLen = outline.IntersectWith(rect, 0).length; - if (intPtsLen > 2 || (intPtsLen === 0 && !outline.PtInCurve(minPt))) - return false; - } - if (wood) { - let c1 = wood.Position.applyMatrix4(ocs).setZ(0); - let c2 = c1.clone().add(nor.clone().multiplyScalar(wood.Height)); - rotatePoint(nor, Math.PI / 2); - let dir = nor.multiplyScalar(wood.Radius); - let p1 = c1.clone().add(dir); - let p2 = c2.clone().add(dir); - let p3 = c1.clone().add(dir.negate()); - let p4 = c2.clone().add(dir); - let l1 = new Line(p1, p2); - let l2 = new Line(p3, p4); - if (l1.IntersectWith(outline, 0).length !== 1 || l2.IntersectWith(outline, 0).length !== 1) - return false; - } - } - return true; -} -const TempRectHoleOption = { - up: "", - down: "", - left: "", - right: "", -}; -/**分析上下左右排钻 */ -function InitRectBoardHoleOption(br, option) { - let dir = Math.sign(br.ContourCurve.Area2); - let hightDrill = br.BoardProcessOption.highDrill; - let cus = br.ContourCurve.Explode(); - for (let i = 0; i < cus.length; i++) { - let c = cus[i]; - let derv = c.GetFistDeriv(0).multiplyScalar(dir); - let an = angle(derv); - if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4)) - option.down = hightDrill[i]; - else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8) - option.right = hightDrill[i]; - else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8) - option.up = hightDrill[i]; - else - option.left = hightDrill[i]; - } -} -/**上下左右排钻写入板件 */ -function SetRectHighHole(br, option) { - let dir = Math.sign(br.ContourCurve.Area2); - let highDrill = br.BoardProcessOption.highDrill; - let cus = br.ContourCurve.Explode(); - highDrill.length = 0; - for (let i = 0; i < cus.length; i++) { - let c = cus[i]; - let derv = c.GetFistDeriv(0).multiplyScalar(dir); - let an = angle(derv); - if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4)) - highDrill.push(option.down); - else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8) - highDrill.push(option.right); - else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8) - highDrill.push(option.up); - else - highDrill.push(option.left); - } - let types = new Set(highDrill); - if (types.size === 1 && highDrill[0] !== DrillType.None) - br.BoardProcessOption[EBoardKeyList.DrillType] = highDrill[0]; -} - var Board_1; /** * 板件实体 @@ -17918,6 +18242,9 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this.RelativeHardware = []; this.OpenDir = BoardOpenDir.None; this._IsChaiDan = true; + this._2DModelingList = []; + this._3DModelingList = []; + this.OffsetPathCache = new Map(); this.InitBoardData(); } /** @@ -17963,10 +18290,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { set: (target, key, value, receiver) => { if (Reflect.get(target, key, receiver) !== value) { this.WriteAllObjectRecord(); - if (key === "highDrill" || key === "highSealed") { + if (key === "highDrill" || key === EBoardKeyList.HighSealed) { let arr = this.CreateArray(); arr.push(...value); target[key] = arr; + if (key === EBoardKeyList.HighSealed) + this.Update(UpdateDraw.Geometry); return true; } let result = Reflect.set(target, key, value, receiver); @@ -18083,6 +18412,9 @@ let Board = Board_1 = class Board extends ExtrudeSolid { br._LayerNails = [...this._LayerNails]; br.ProcessingGroupList = [...this.ProcessingGroupList]; br._BoardProcessOption = { ...this._BoardProcessOption }; + //如果是矩形板,关联切割后的板件,用上下左右封边重新填充高级封边,避免近乎矩形的板件封边看上去不对 #I2AQ9R + if (this.isRect) + br._BoardProcessOption.highSealed.length = 0; } } return brs; @@ -18133,6 +18465,35 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } this.Update(); } + get Modeling2D() { + return [...this._2DModelingList]; + } + set Modeling2D(ms) { + this.WriteAllObjectRecord(); + this._2DModelingList = ms; + this.OffsetPathCache.clear(); + this._2D3DPathObject = null; + this.Update(UpdateDraw.Geometry); + } + get Modeling3D() { + return [...this._3DModelingList]; + } + set Modeling3D(ms) { + this.WriteAllObjectRecord(); + this._2D3DPathObject = null; + this._3DModelingList = ms; + this.Update(UpdateDraw.Geometry); + } + ClearModeling2DList() { + this.WriteAllObjectRecord(); + this._2DModelingList.length = 0; + this.Update(UpdateDraw.Geometry); + } + ClearModeling3DList() { + this.WriteAllObjectRecord(); + this._3DModelingList.length = 0; + this.Update(UpdateDraw.Geometry); + } get IsChaiDan() { return this._IsChaiDan; } @@ -18419,6 +18780,60 @@ let Board = Board_1 = class Board extends ExtrudeSolid { l1.updateMatrix(); return [l, l1]; } + Get2DAnd3DPaths(obj) { + if (this._2D3DPathObject) + return this._2D3DPathObject; + this._2D3DPathObject = new Object3D(); + let group2 = new Object3D(); + for (let vm of this._2DModelingList) { + let path = vm.path; + for (let item of vm.items) { + let tempPath = this.GetOffsetPath(path, item); + if (tempPath) { + let curves = VData2Curve(VKnifToolPath(tempPath, item.depth, item.knife.angle / 2)); + let o = new Object3D(); + for (let c of curves) { + c.ColorIndex = tempPath.ColorIndex; + o.add(c.GetDrawObjectFromRenderType(RenderType.Wireframe)); + } + if (vm.dir === FaceDirection.Back) + o.applyMatrix4(ZMirrorMatrix); + else + o.position.setZ(this.thickness); + o.updateMatrix(); + group2.add(o); + } + } + } + let group = new Object3D(); + let tempIndex = 1; + let tempMap = new Map(); + for (let vm of this._3DModelingList) { + let key = `${vm.dir}-${vm.knife.id}`; + let color = tempMap.get(key); + if (!color) { + color = tempIndex; + tempIndex++; + tempMap.set(key, color); + } + for (let i = 0; i < vm.path.length - 1; i++) { + let d1 = vm.path[i]; + let d2 = vm.path[i + 1]; + if (equaln(d1.bul, 0)) { + let geo = BufferGeometryUtils.CreateFromPts([d1.pt, d2.pt]); + group.add(new Line$1(geo, ColorMaterial.GetLineMaterial(color))); + } + else { + let arc = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul); + arc.ColorIndex = color; + group.add(arc.GetDrawObjectFromRenderType(RenderType.Wireframe)); + } + } + } + this._2D3DPathObject.add(group); + this._2D3DPathObject.add(group2); + return this._2D3DPathObject; + } HandleSpliteEntitys(splitEntitys) { var _a; let nails = []; @@ -18489,15 +18904,45 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } } InitDrawObject(renderType = RenderType.Wireframe) { - let obj = super.InitDrawObject(renderType); + let obj; + if (renderType === RenderType.Edge) { + obj = new Object3D(); + obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(8))); + this.CheckSealing(obj); + } + else { + obj = super.InitDrawObject(renderType); + } this.HandleBoardMaterial(renderType, obj); return obj; } UpdateDrawObject(renderType, obj) { let o = super.UpdateDrawObject(renderType, obj); + if (renderType === RenderType.Edge) { + obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(8))); + this.CheckSealing(obj); + } this.HandleBoardMaterial(renderType, obj); return o; } + GetOffsetPath(path, item) { + if (item.offset === 0) { + return path; + } + else { + let cache = this.OffsetPathCache.get(path); + if (!cache) { + cache = {}; + this.OffsetPathCache.set(path, cache); + } + let tempPath = cache[item.offset.toString()]; + if (!tempPath) { + tempPath = path.GetOffsetCurves(item.offset)[0]; + cache[item.offset.toString()] = tempPath; + } + return tempPath; + } + } HandleBoardMaterial(renderType, obj) { if (!this.IsChaiDan) { if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2) { @@ -18510,6 +18955,13 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } if ((renderType === RenderType.Wireframe || renderType === RenderType.Conceptual) && userConfig.showLines && this.IsChaiDan) obj.add(...this.GetLinesDir()); + if (this.Id) { + let o = this.Get2DAnd3DPaths(obj); + if (o.parent) + obj.children.push(o); + else + obj.add(o); + } } UpdateDrawObjectMaterial(renderType, obj) { super.UpdateDrawObjectMaterial(renderType, obj); @@ -18522,6 +18974,91 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } } } + CheckSealing(obj) { + let sealingInfo = new Map(userConfig.sealingColorMap.filter(d => d[0] && d[1])); + if (sealingInfo.size === 0) + return; + let cus = GetBoardSealingCurves(this); + let highSeals = GetBoardHighSeal(this, cus); + for (let i = 0; i < cus.length; i++) { + let size = highSeals[i].size.toString(); + let color = sealingInfo.get(size); + if (color) { + cus[i].Position = cus[i].Position.add(new Vector3(0, 0, this.thickness / 2)); + let l = cus[i].GetDrawObjectFromRenderType(RenderType.Wireframe); + l.material = ColorMaterial.GetLineMaterial(parseFloat(color)); + obj.add(l); + } + } + } + GetStretchPoints() { + let pts = this.GetGripOrStretchPoints(DragPointType.Stretch); + for (let m of this._2DModelingList) { + pts.push(...m.path.GetStretchPoints().map(p => p.add(new Vector3(0, 0, m.dir === FaceDirection.Front ? this.thickness : 0)).applyMatrix4(this.OCS))); + } + return pts; + } + MoveStretchPoints(indexList, vec) { + let exCount = arraySum(this.GetStrectchPointCountList(DragPointType.Stretch)); + let originIndexList = []; + let mIndexList = []; + for (let i of indexList) { + if (i < exCount) + originIndexList.push(i); + else + mIndexList.push(i - exCount); + } + let oldOcs = this.OCS; + super.MoveStretchPoints(originIndexList, vec); + if (!this.Id) + return; + arraySortByNumber(mIndexList); + let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec)); + let offset = 0; + let icount = mIndexList.length; + let i = 0; + for (let m of this._2DModelingList) { + let count = m.path.GetDragPointCount(DragPointType.Stretch); + offset += count; + let iList = []; + for (; i < icount; i++) { + if (mIndexList[i] < offset) + iList.push(mIndexList[i] - offset + count); + else + break; + } + if (iList.length > 0) { + m.path.MoveStretchPoints(iList, localVec); + } + m.path.ApplyMatrix(oldOcs).ApplyMatrix(this.OCSInv); + } + this.OffsetPathCache.clear(); + this._2D3DPathObject = null; + this.Update(UpdateDraw.Geometry); + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + let pts = super.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform); + if (snapMode === ObjectSnapMode.End) { + for (let vm of this._2DModelingList) { + if (!this.OffsetPathCache.has(vm.path)) + continue; + for (let item of vm.items) { + if (item.offset === 0) + continue; + let paths = this.OffsetPathCache.get(vm.path); + let polyline = paths[item.offset.toString()]; + let ps = polyline.GetStretchPoints(); + for (let p of ps) { + if (vm.dir === FaceDirection.Front) + p.add(new Vector3(0, 0, this.thickness)); + p.applyMatrix4(this.OCS); + } + pts.push(...ps); + } + } + } + return pts; + } DeferUpdate() { if (this.NeedUpdateFlag & UpdateDraw.Matrix) { if (this.RelativeHardware.some(id => !id.IsErase)) @@ -18596,10 +19133,16 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this.OpenDir = file.Read(); if (ver >= 9) this._IsChaiDan = file.Read(); + if (ver >= 10) { + DeserializationBoard2DModeingData(file, this._2DModelingList); + DeserializationBoard3DModeingData(file, this._3DModelingList); + } + this.OffsetPathCache.clear(); + this._2D3DPathObject = null; } WriteFile(file) { super.WriteFile(file); - file.Write(9); + file.Write(10); // file.Write(this._SpaceOCS.toArray()); ver < 6 file.Write(this._BoardType); file.Write(this._Name); @@ -18626,6 +19169,8 @@ let Board = Board_1 = class Board extends ExtrudeSolid { file.WriteObjectId(id); file.Write(this.OpenDir); file.Write(this._IsChaiDan); + SerializeBoard2DModeingData(file, this._2DModelingList); + SerializeBoard3DModeingData(file, this._3DModelingList); } }; __decorate([ @@ -18946,7 +19491,7 @@ let ExtrudeHole = class ExtrudeHole extends Hole { return [line, mesh]; } InitDrawObject(renderType = RenderType.Wireframe) { - if (renderType === RenderType.Wireframe) { + if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); } else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical || renderType === RenderType.Physical2) { @@ -18966,7 +19511,7 @@ let ExtrudeHole = class ExtrudeHole extends Hole { this._EdgeGeometry = undefined; this._MeshGeometry = undefined; this.MeshGeometry; - if (renderType === RenderType.Wireframe) { + if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { let l = obj; l.geometry = this.EdgeGeometry; l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); @@ -18982,7 +19527,7 @@ let ExtrudeHole = class ExtrudeHole extends Hole { return obj; } UpdateDrawObjectMaterial(renderType, obj) { - if (renderType === RenderType.Wireframe) { + if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { let l = obj; l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); } @@ -19397,49 +19942,7 @@ class FeedingToolPath extends Singleton { return true; return false; }); - let cus = this.CalcPath(modelings, br); - //不同走刀路径区分颜色 - cus.forEach((c, i) => c.ColorIndex = (i + 1 === 8 || i + 1 === 18 || i + 1 === 19) ? i + 2 : i + 1); - let outline = br.ContourCurve; - let dir = Math.sign(outline.Area2); - let sideOutlines = []; - //优化侧面造型模拟走刀位置 - for (let m of allModeling.sideModeling) { - let c = outline.GetCurveAtIndex(m.dir); - let derv = c.GetFistDeriv(0); - if (dir < 0) - derv.negate(); - let mat = MoveMatrix(dir > 0 ? c.StartPoint : c.EndPoint) - .multiply(new Matrix4().makeRotationZ(angleTo(XAxis, derv))) - .multiply(MoveMatrix(new Vector3(0, -br.Thickness))); - m.shape.ApplyMatrix(mat); - let pl = new Polyline().RectangleFrom2Pt(new Vector3(), new Vector3(c.Length, br.Thickness)); - pl.ColorIndex = 6; - pl.ApplyMatrix(mat); - sideOutlines.push(pl); - } - cus.push(...this.CalcPath(allModeling.sideModeling, br)); - //加入板件轮廓 - cus.unshift(br.ContourCurve.Clone()); - if (cus.length === 1) - return cus; - //加入造型外轮廓和洞 - for (let { shape, thickness } of modelings) { - let outline = shape.Outline.Curve.Clone(); - outline.Position = outline.Position.setZ(0); - outline.ColorIndex = 8; - cus.push(outline); - if (thickness < br.Thickness) { - cus.push(...shape.Holes.map(h => { - let c = h.Curve.Clone(); - c.Position = c.Position.setZ(0); - c.ColorIndex = 8; - return c; - })); - } - } - cus.push(...sideOutlines); - return cus; + return this.CalcPath(modelings, br); } /** * 计算走刀路径 @@ -19459,10 +19962,12 @@ class FeedingToolPath extends Singleton { knifeRadius = 3; if (addDepth) thickness += addDepth; + if (thickness < 1e-5) + return cus; shape = shape.Clone(); shape.Z0(); this.GrooveAddSize(shape, addLen, addWidth); - this.HandleThoughGroove(br, shape, knifeRadius); + this.HandleThoughGroove(br.ContourCurve, shape, knifeRadius); //造型半径和刀半径相等,返回重合点的线 let outline = shape.Outline.Curve; if (outline instanceof Circle && equaln(outline.Radius, m.knifeRadius)) @@ -19567,8 +20072,7 @@ class FeedingToolPath extends Singleton { } return errHoles; } - HandleThoughGroove(br, shape, knifeRadius) { - let brCon = br.ContourCurve; + HandleThoughGroove(brCon, shape, knifeRadius) { let outline = shape.Outline.Curve; if (outline instanceof Circle) return; @@ -19748,5 +20252,5 @@ function GetModelingFromCustomDrill(br) { return { modeling, sideModeling }; } -export { Arc, BoolOpeartionType, CADFiler, Circle, DrillingFace, FeedingToolPath, IsPtsAllOutOrOnReg, IsRect, Line, Polyline, Production, SimplifyPolyline, TempPolyline, VKnifToolPath, isTargetCurInOrOnSourceCur }; +export { Arc, BoolOpeartionType, CADFiler, Circle, DrillingFace, FeedingToolPath, IsPtsAllOutOrOnReg, IsRect, Line, Polyline, Production, SimplifyPolyline, TempPolyline, VData2Curve, VKnifToolPath, isTargetCurInOrOnSourceCur }; //# sourceMappingURL=api.esm.js.map diff --git a/api.esm.js.map b/api.esm.js.map index 6b2c5fd..dec010a 100644 --- a/api.esm.js.map +++ b/api.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"api.esm.js","sources":["../src/DatabaseServices/CADFactory.ts","../src/DatabaseServices/AllObjectData.ts","../src/DatabaseServices/AutoRecord.ts","../src/DatabaseServices/EraseEntityData.ts","../src/DatabaseServices/CADObject.ts","../src/DatabaseServices/ObjectId.ts","../src/ApplicationServices/HostApplicationServices.ts","../src/Common/Dispose.ts","../src/Geometry/CoordinateSystem.ts","../src/Common/eval.ts","../src/Common/StoreageKeys.ts","../src/Common/Utils.ts","../src/Geometry/GeUtils.ts","../src/Common/Matrix4Utils.ts","../src/Common/Status.ts","../src/GraphicsSystem/RenderType.ts","../src/Common/SystemEnum.ts","../src/Editor/UserConfig.ts","../src/Geometry/Box.ts","../src/DatabaseServices/Entity/Entity.ts","../src/DatabaseServices/CADFiler.ts","../src/GLSL/GoochShader.ts","../src/Common/ColorPalette.ts","../src/Common/ArrayExt.ts","../src/Editor/ObjectSnapMode.ts","../src/Geometry/BufferGeometryUtils.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/Matrix2.ts","../src/Geometry/RotateUV.ts","../src/ApplicationServices/mesh/createBoard.ts","../src/Geometry/CurveMap.ts","../src/Geometry/RegionParse.ts","../src/GraphicsSystem/BoolOperateUtils.ts","../src/DatabaseServices/Entity/Curve.ts","../src/DatabaseServices/Contour.ts","../src/Geometry/Plane.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Line.ts","../src/Geometry/SortEntityByBox.ts","../src/GraphicsSystem/OffsetPolyline.ts","../src/DatabaseServices/PointInPolyline.ts","../src/DatabaseServices/Entity/DragPointType.ts","../src/DatabaseServices/Entity/Polyline.ts","../src/GraphicsSystem/IntersectWith.ts","../src/DatabaseServices/Entity/Circle.ts","../src/Geometry/Count.ts","../src/Geometry/Orbit.ts","../src/Common/CurveUtils.ts","../src/DatabaseServices/Entity/Arc.ts","../src/Common/Log.ts","../src/Common/Singleton.ts","../src/Geometry/UVUtils.ts","../src/DatabaseServices/Shape.ts","../src/DatabaseServices/ShapeManager.ts","../src/DatabaseServices/Entity/Region.ts","../src/Add-on/BoardEditor/Board2Regions.ts","../src/Common/BoardKeyList.ts","../src/Add-on/BoardEditor/SerializeBoardData.ts","../src/Geometry/BoardUVGenerator.ts","../src/UI/Store/BoardInterface.ts","../src/Common/AddEntityDrawObject.ts","../src/csg/core/math/IsMirrot.ts","../src/csg/core/constants.ts","../src/csg/core/math/Vector3.ts","../src/csg/core/math/Vector2.ts","../src/csg/core/math/Vertex3.ts","../src/csg/core/math/Plane.ts","../src/csg/core/math/Polygon3.ts","../src/csg/core/trees.ts","../src/csg/core/FuzzyFactory.ts","../src/csg/core/FuzzyFactory3d.ts","../src/csg/core/utils/canonicalize.ts","../src/csg/core/utils/csgMeasurements.ts","../src/csg/core/utils.ts","../src/csg/core/math/Line2.ts","../src/csg/core/math/OrthoNormalBasis.ts","../src/csg/core/math/reTesselateCoplanarPolygons.ts","../src/csg/core/utils/retesellate.ts","../src/csg/core/CSG.ts","../src/csg/core/Geometry2CSG.ts","../src/Geometry/BSPGroupParse.ts","../src/Geometry/ExtrudeEdgeGeometry.ts","../src/Add-on/testEntity/SimplifyPolyline.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/Common/Toaster.ts","../src/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/UI/Store/WineRackInterface.ts","../src/UI/Store/BoardFindInterface.ts","../src/UI/Store/LatticeInterface.ts","../src/UI/Store/DoorInterface.ts","../src/UI/Components/RightPanel/RightPanelInterface.ts","../src/Editor/DefaultConfig.ts","../src/Nest/Common/Util.ts","../src/Geometry/SweepGeometry.ts","../src/DatabaseServices/Spline.ts","../src/Geometry/OBB/obb.ts","../src/DatabaseServices/3DSolid/SweepSolid.ts","../src/DatabaseServices/Hardware/HardwareTopline.ts","../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Common/Report.ts","../src/Common/ShowSelectObjects.ts","../src/Common/Deving.ts","../src/Production/Product.ts","../src/Geometry/CurveIntersection.ts","../src/Geometry/CreateContour2.ts","../src/Geometry/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Geometry/PointShapeUtils.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/DatabaseServices/Entity/Board.ts","../src/Geometry/CreateWireframe.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts"],"sourcesContent":["\r\n/**\r\n * CAD对象工厂,通过注册 和暴露的创建方法,动态创建对象\r\n */\r\nexport class CADFactory\r\n{\r\n private constructor() { }\r\n private objectNameMap = new Map();\r\n private static factory = new CADFactory();\r\n static RegisterObject(C: any)\r\n {\r\n this.factory.objectNameMap.set(C.name, C);\r\n }\r\n static RegisterObjectAlias(C: any, name: string)\r\n {\r\n this.factory.objectNameMap.set(name, C);\r\n }\r\n static CreateObject(name: string): any\r\n {\r\n let C = this.factory.objectNameMap.get(name);\r\n if (C) return new C();\r\n }\r\n}\r\n\r\n//可以通过添加装饰器 在类前面(@Factory),自动注册工厂的序列化\r\nexport function Factory(target: Object)\r\n{\r\n CADFactory.RegisterObject(target);\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\nimport { CADObject } from './CADObject';\r\n\r\n/**\r\n * 保存对象创建或者修改时的所有数据记录\r\n */\r\n@Factory\r\nexport class AllObjectData implements ISerialize\r\n{\r\n file: CADFiler;\r\n constructor(obj?: CADObject)\r\n {\r\n this.file = new CADFiler();\r\n if (obj)\r\n obj.WriteFile(this.file);\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n let data = file.Read();\r\n this.file.Data = data;\r\n return this;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.file.Data);\r\n return this;\r\n }\r\n}\r\n","\r\n\r\nexport const ISPROXYKEY = \"_isProxy\";\r\n\r\n/**\r\n * 自动对CADObject的属性添加属性记录器,自动调用 `WriteAllObjectRecord`\r\n * 如果属性是数组,那么自动添加`Proxy`.\r\n * 可以使用`ISPROXYKEY`覆盖这个函数的代理行为(使用CADObject.CreateProxyArray快速覆盖)\r\n *\r\n * @param target\r\n * @param property\r\n * @param [descriptor]\r\n */\r\nexport function AutoRecord(\r\n target: { WriteAllObjectRecord: () => void; },\r\n property: string,\r\n descriptor?: PropertyDecorator)\r\n{\r\n let privateKey = '__' + property;\r\n Object.defineProperty(target, property,\r\n {\r\n set: function (value)\r\n {\r\n if (value instanceof Array)\r\n {\r\n if (!this[privateKey])\r\n {\r\n if (value[ISPROXYKEY])\r\n this[privateKey] = value;\r\n else\r\n this[privateKey] = new Proxy(value, {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n this.WriteAllObjectRecord();\r\n return Reflect.set(target, key, value, receiver);\r\n },\r\n get: (target, key, receiver) =>\r\n {\r\n if (key === ISPROXYKEY)\r\n return true;\r\n //实体先被删除后在触发length = xxx\r\n if (key === \"splice\" || key === \"pop\" || key === \"shift\")\r\n this.WriteAllObjectRecord();\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n else\r\n {\r\n let arr = this[privateKey] as Array;\r\n arr.length = 0;\r\n arr.push(...value);\r\n }\r\n }\r\n else\r\n {\r\n let oldv = this[privateKey];\r\n if (oldv !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this[privateKey] = value;\r\n }\r\n }\r\n },\r\n get: function ()\r\n {\r\n return this[privateKey];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n }\r\n );\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\n@Factory\r\nexport class EraseEntityData implements ISerialize\r\n{\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.isErase = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.isErase);\r\n return this;\r\n }\r\n constructor(public isErase = true)\r\n {\r\n }\r\n}\r\n","import { iaop } from 'xaop';\r\nimport { AllObjectData } from './AllObjectData';\r\nimport { ISPROXYKEY } from './AutoRecord';\r\nimport { CADFactory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CommandHistoryRecord } from './CommandHistoryRecord';\r\nimport { Database } from './Database';\r\nimport { EraseEntityData } from './EraseEntityData';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\r\n\r\nexport abstract class CADObject\r\n{\r\n protected _Owner: ObjectId;\r\n /**\r\n * 用于储存临时数据\r\n */\r\n public TempData: any;\r\n\r\n //下面的三个数据由Rect2Board使用\r\n __CacheBox__: any;\r\n __CacheBoard__: any;\r\n __CacheSize__: any;\r\n __CachePolyline__: any;\r\n\r\n set Owner(owner: ObjectId)\r\n {\r\n this._Owner = owner;\r\n }\r\n get Owner()\r\n {\r\n return this._Owner;\r\n }\r\n\r\n Destroy()\r\n {\r\n //在效果图同步反应器中,需要知道被删除的实体的id,所以不删除这个属性\r\n // this.objectId = undefined;\r\n this._db = undefined;\r\n }\r\n\r\n //对象被彻底遗弃\r\n GoodBye(): any\r\n {\r\n this.Destroy();\r\n this.Erase(true);\r\n }\r\n\r\n /**\r\n * 当实体异步更新绘制实体完成后触发这个函数.\r\n * Application通过注入的方式得知这个事件,刷新视图显示.\r\n */\r\n @iaop\r\n AsyncUpdated()\r\n {\r\n }\r\n\r\n //-------------------------DB-------------------------\r\n protected _db: Database;\r\n get Db(): Database\r\n {\r\n return this._db;\r\n }\r\n\r\n //对象在加入数据库时,必须指定一个源数据库,否则无法读取引用id.\r\n SetDefaultDb(db: Database)\r\n {\r\n if (!this._db)\r\n this._db = db;\r\n else\r\n console.warn(\"重复设置默认Database!\");\r\n\r\n return this;\r\n }\r\n\r\n //private 私有的方法,暴露给Db的添加对象,方法使用.\r\n //只用对象加入到db中,我们才初始化ObjectId.\r\n //从db池中分配id给自身使用. 除非你创建对象往db里面加,否则不要调用该方法\r\n SetOwnerDatabase(db: Database)\r\n {\r\n if (!this._db)\r\n {\r\n this._db = db;\r\n this.objectId = db.AllocateId();\r\n this.objectId.Object = this;\r\n }\r\n else\r\n console.warn(\"重复设置源Database!\");\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * WblockClone 的时候,id是db分配的,此刻我们只需要设置它的db\r\n */\r\n SetDatabase(db: Database)\r\n {\r\n this._db = db;\r\n }\r\n\r\n //-------------------------DB End-------------------------\r\n\r\n // -------------------------isErase-------------------------\r\n protected _isErase: boolean = false;\r\n get IsErase(): boolean\r\n {\r\n return this._isErase;\r\n }\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this._isErase)\r\n return;\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n undoData.CreateEraseHistory(this, isErase);\r\n this._isErase = isErase;\r\n }\r\n //-------------------------isErase End-------------------------\r\n\r\n // -------------------------id-------------------------\r\n\r\n //操作这个需要谨慎!\r\n objectId: ObjectId;\r\n\r\n get Id(): ObjectId\r\n {\r\n return this.objectId;\r\n }\r\n\r\n // -------------------------id End-------------------------\r\n\r\n // -------------------------File-------------------------\r\n\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n //write Id;\r\n let id = file.ReadObjectId();\r\n if (!this.objectId && id)//避免CopyFrom时错误的修改自身Id\r\n {\r\n this.objectId = id;\r\n id.Object = this;\r\n }\r\n this._isErase = file.Read();\r\n if (ver > 1)\r\n this.Owner = file.ReadObjectId();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.WriteObjectId(this.objectId);\r\n file.Write(this._isErase);\r\n file.WriteObjectId(this.Owner);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: ISerialize)\r\n {\r\n if (undoData instanceof AllObjectData)\r\n {\r\n undoData.file.database = this._db;\r\n undoData.file.Reset();\r\n this.ReadFile(undoData.file);\r\n }\r\n else if (undoData instanceof EraseEntityData)\r\n {\r\n this.Erase(undoData.isErase);\r\n }\r\n }\r\n\r\n //撤销所保存的位置\r\n UndoRecord(): CommandHistoryRecord\r\n {\r\n if (this._db && this.objectId)\r\n return this._db.hm.UndoData;\r\n }\r\n //写入所有的对象数据 以便还原对象\r\n WriteAllObjectRecord(): boolean\r\n {\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n {\r\n undoData.WriteObjectSnapshoot(this);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //复制出一个实体,如果存在关联,则指向原关联实体\r\n Clone(): this\r\n {\r\n let newObject = CADFactory.CreateObject(this.constructor.name) as this;\r\n\r\n //备份\r\n let bakId = this.objectId;\r\n this.objectId = undefined;\r\n\r\n let file = new CADFiler();\r\n file.database = this._db;\r\n this.WriteFile(file);\r\n file.Reset();\r\n newObject.ReadFile(file);\r\n\r\n newObject.objectId = undefined;\r\n newObject._db = undefined;\r\n\r\n this.objectId = bakId;\r\n return newObject;\r\n }\r\n\r\n DeepClone(\r\n ownerObject: CADObject,\r\n cloneObejct: CADObject,\r\n idMaping: Map = undefined,\r\n isPrimary = true\r\n ): this\r\n {\r\n return this;\r\n }\r\n\r\n //从一个实体拷贝数据,实体类型必须相同.\r\n CopyFrom(obj: CADObject)\r\n {\r\n let idBak = this.objectId;\r\n let ownerBak = this._Owner;\r\n this.WriteAllObjectRecord();\r\n let f = new CADFiler();\r\n obj.WriteFile(f);\r\n this.ReadFile(f);\r\n this.objectId = idBak;\r\n this._Owner = ownerBak;\r\n }\r\n\r\n //-------------------------File End-------------------------\r\n\r\n //Utils\r\n /**\r\n * 配合 `@AutoRecord` 使用\r\n * 使用这个方法来覆盖AutoRecord的监听行为.\r\n * 这个行为只能用来监听实体添加和实体修改.\r\n * 实体删除行为暂时无法监听\r\n * @param setCallback 设置新的实体到数组时的回调函数\r\n */\r\n protected CreateProxyArray(setCallback: (v: any) => void)\r\n {\r\n return new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n setCallback(value);\r\n }\r\n return Reflect.set(target, key, value, receiver);\r\n },\r\n get: (target, key, receiver) =>\r\n {\r\n if (key === ISPROXYKEY)\r\n return true;\r\n //实体先被删除后在触发length = xxx\r\n if (key === \"splice\" || key === \"pop\" || key === \"shift\")\r\n {\r\n this.WriteAllObjectRecord();\r\n setCallback(undefined);\r\n }\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n}\r\n","import { CADObject } from './CADObject';\r\n\r\nexport enum RelevancyType\r\n{\r\n General = 0,\r\n Soft = 1,\r\n Hard = 2,\r\n}\r\n\r\n/*\r\nCADObject对象拥有Id属性,用来记录引用关系.\r\n通过id可以得到对应的关联实体,或者记录实体的关联关系.\r\n\r\nObjectId必须使用 Database分配(db里面会存id的列表,以便同时更新id指向实体)\r\n\r\n*/\r\nexport class ObjectId\r\n{\r\n _RelevancyType = RelevancyType.General;\r\n constructor(private index = 0, private obj?: CADObject)\r\n {\r\n }\r\n\r\n get IsErase(): boolean\r\n {\r\n return !this.obj || this.obj.IsErase;\r\n }\r\n set Object(obj: CADObject)\r\n {\r\n this.obj = obj;\r\n }\r\n get Object(): CADObject\r\n {\r\n return this.obj;\r\n }\r\n get Index(): number\r\n {\r\n return this.index;\r\n }\r\n set Index(index: number)\r\n {\r\n this.index = index;\r\n }\r\n}\r\n","import { ApplicationService } from './Application';\r\nimport { MeshBasicMaterial, MeshStandardMaterial } from 'three';\r\n\r\ninterface IHostApplicationServices\r\n{\r\n Application?: ApplicationService;\r\n DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n UseShadow?: boolean;\r\n ShowHistoryLog?: boolean;\r\n}\r\n\r\nexport let HostApplicationServices: IHostApplicationServices = { ShowHistoryLog: true };\r\n","import { Object3D } from \"three\";\r\n\r\n/**\r\n * 销毁Object对象的Geometry,并不会销毁材质(新版本销毁材质,好像问题不大?)\r\n */\r\nexport function DisposeThreeObj(obj: Object3D)\r\n{\r\n for (let o of obj.children)\r\n {\r\n let oany = o as any;\r\n //文字的geometry缓存保留下来\r\n if (oany.geometry && oany.geometry.name !== \"Text\")\r\n oany.geometry.dispose();\r\n\r\n if (oany.material)\r\n oany.material.dispose();\r\n\r\n DisposeThreeObj(o);\r\n\r\n // 下面这个代码可能导致Object3d无法复用,删除它应该问题不大\r\n // o.parent = null;\r\n // o.dispatchEvent({ type: \"removed\" });\r\n }\r\n // 下面这个代码可能导致Object3d无法复用,删除它应该问题不大\r\n // obj.children.length = 0;\r\n return obj;\r\n}\r\n\r\nexport function Object3DRemoveAll(obj: Object3D)\r\n{\r\n for (let o of obj.children)\r\n {\r\n o.parent = null;\r\n o.dispatchEvent({ type: \"removed\" });\r\n }\r\n obj.children.length = 0;\r\n return obj;\r\n}\r\n","import { Matrix4, Vector3 } from 'three';\r\n\r\n/**\r\n * 坐标系运算.\r\n */\r\nexport class CoordinateSystem\r\n{\r\n Postion: Vector3;\r\n XAxis: Vector3;\r\n YAxis: Vector3;\r\n ZAxis: Vector3;\r\n\r\n constructor(postion?: Vector3, xAxis?: Vector3, yAxis?: Vector3, zAxis?: Vector3)\r\n {\r\n this.Postion = postion || new Vector3(0, 0, 0);\r\n this.XAxis = xAxis || new Vector3(1, 0, 0);\r\n this.YAxis = yAxis || new Vector3(0, 1, 0);\r\n this.ZAxis = zAxis || new Vector3(0, 0, 1);\r\n }\r\n\r\n applyMatrix4(mat4: Matrix4)\r\n {\r\n this.Postion.applyMatrix4(mat4);\r\n let roMat = mat4.clone().setPosition(new Vector3());\r\n this.XAxis.applyMatrix4(roMat);\r\n this.YAxis.applyMatrix4(roMat);\r\n this.ZAxis.applyMatrix4(roMat);\r\n return this;\r\n }\r\n\r\n getMatrix4(): Matrix4\r\n {\r\n let m = new Matrix4();\r\n m.makeBasis(this.XAxis, this.YAxis, this.ZAxis);\r\n m.setPosition(this.Postion);\r\n return m;\r\n }\r\n CopyForm(mat4: Matrix4)\r\n {\r\n this.Postion.setFromMatrixPosition(mat4);\r\n mat4.extractBasis(this.XAxis, this.YAxis, this.ZAxis);\r\n return this;\r\n }\r\n\r\n extractBasis(xAxisA: Vector3, yAxisA: Vector3, zAxisA: Vector3)\r\n {\r\n xAxisA.copy(this.XAxis);\r\n yAxisA.copy(this.YAxis);\r\n zAxisA.copy(this.ZAxis);\r\n }\r\n copy(cs: CoordinateSystem): CoordinateSystem\r\n {\r\n this.Postion.copy(cs.Postion);\r\n this.XAxis.copy(cs.XAxis);\r\n this.YAxis.copy(cs.YAxis);\r\n this.ZAxis.copy(cs.ZAxis);\r\n return this;\r\n }\r\n clone()\r\n {\r\n let r = new CoordinateSystem();\r\n r.Postion = this.Postion.clone();\r\n r.XAxis = this.XAxis.clone();\r\n r.YAxis = this.YAxis.clone();\r\n r.ZAxis = this.ZAxis.clone();\r\n return r;\r\n }\r\n}\r\n","import { equaln } from \"../Geometry/GeUtils\";\r\nimport { clamp as CLAMP, FixedNotZero } from \"./Utils\";\r\n\r\nlet abs = Math.abs;\r\nlet acos = Math.acos;\r\nlet acosh = Math.acosh;\r\nlet asin = Math.asin;\r\nlet asinh = Math.asinh;\r\nlet atan = Math.atan;\r\nlet atanh = Math.atanh;\r\nlet atan2 = Math.atan2;\r\nlet ceil = Math.ceil;\r\nlet cbrt = Math.cbrt;\r\nlet expm1 = Math.expm1;\r\nlet clz32 = Math.clz32;\r\nlet cos = Math.cos;\r\nlet cosh = Math.cosh;\r\nlet exp = Math.exp;\r\nlet floor = Math.floor;\r\nlet fround = Math.fround;\r\nlet hypot = Math.hypot;\r\nlet imul = Math.imul;\r\nlet log = Math.log;\r\nlet log1p = Math.log1p;\r\nlet log2 = Math.log2;\r\nlet log10 = Math.log10;\r\nlet max = Math.max;\r\nlet min = Math.min;\r\nlet pow = Math.pow;\r\nlet random = Math.random;\r\nlet round = Math.round;\r\nlet sign = Math.sign;\r\nlet sin = Math.sin;\r\nlet sinh = Math.sinh;\r\nlet sqrt = Math.sqrt;\r\nlet tan = Math.tan;\r\nlet tanh = Math.tanh;\r\nlet trunc = Math.trunc;\r\nlet E = Math.E;\r\nlet LN10 = Math.LN10;\r\nlet LN2 = Math.LN2;\r\nlet LOG10E = Math.LOG10E;\r\nlet LOG2E = Math.LOG2E;\r\nlet PI = Math.PI;\r\nlet SQRT1_2 = Math.SQRT1_2;\r\nlet SQRT2 = Math.SQRT2;\r\nlet clamp = CLAMP;\r\nlet eq = equaln;\r\n\r\nlet OPERATORS = new Set([\"+\", \"-\", \"*\", \"/\"]);\r\n\r\n/**\r\n * eval2(\"+10\", { L: 100 }, \"L\")\r\n * @param expr\r\n * @param [params]\r\n * @param [defaultParam] 当输入 +10 这样的表达式时,设置默认的操作变量\r\n * @returns 计算结果\r\n */\r\nexport function eval2(expr: string, params?: {}, defaultParam?: string): number\r\n{\r\n let code = \"\";\r\n if (params)\r\n for (let name in params)\r\n code += `let ${name} = ${params[name]};`;\r\n\r\n if (defaultParam)\r\n {\r\n expr = expr.trimLeft();\r\n if (expr[0] && OPERATORS.has(expr[0]))\r\n expr = defaultParam + expr;\r\n }\r\n\r\n code += expr;\r\n\r\n let result = eval(code);\r\n\r\n if (typeof result === \"function\")\r\n return result();\r\n\r\n return Number(result);//防止bigint乱入\r\n}\r\n\r\nexport function safeEval(expr: string, params?: {}, defaultParam?: string): number\r\n{\r\n try\r\n {\r\n return eval2(expr, params);\r\n }\r\n catch (error)\r\n {\r\n return NaN;\r\n }\r\n}\r\n\r\nexport function CheckExpr(expr: string, params: any)\r\n{\r\n let resultObj = { res: undefined, error: undefined };\r\n try\r\n {\r\n resultObj.res = eval2(expr, params);\r\n }\r\n catch (error)\r\n {\r\n resultObj.error = error;\r\n }\r\n return resultObj;\r\n}\r\n\r\nconst Reg_Expr = /\\{[^\\}]+\\}/g;\r\n/**解析大括号内的 */\r\nexport function ParseExpr(expr: string, params?: {})\r\n{\r\n let strs = expr.match(Reg_Expr);\r\n if (!strs) return expr;\r\n for (let str of strs)\r\n expr = expr.replace(str, FixedNotZero(safeEval(str.slice(1, -1), params), 2));\r\n return expr;\r\n}\r\n","export enum StoreageKeys\r\n{\r\n IsLogin = \"isLogin\",\r\n PlatSession = \"platSession\",\r\n PlatToken = \"platToken\",\r\n UserName = \"userName\",\r\n UserPhone = \"userPhone\",\r\n RenderType = \"renderType\",\r\n ExactDrill = \"openExactDrill\",\r\n ConfigName = \"configName_\",\r\n IsNewErp = \"isNewErp\",\r\n RoomName = \"roomName\",\r\n LastOpenFileId = \"lastfid\",\r\n Uid = \"uid\",\r\n Goods = \"Goods_\",\r\n DrillTemp = \"drilltemp_\",\r\n DrillReactor = \"drillRreactor\",\r\n kjlConfig = \"kjl\",\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { safeEval } from \"./eval\";\r\nimport { StoreageKeys } from \"./StoreageKeys\";\r\nimport { ObjectId } from \"../DatabaseServices/ObjectId\";\r\n\r\n//仅数字构成的3位字符串(不以0开头)\r\nexport const digitStrReg = /^[^0\\D]\\d{0,2}$/;\r\nexport const commandReg = /[^A-Za-z0-9]/g;\r\n//仅可输入英文\r\nexport const onlyEnExpReg = /[^A-Za-z]/g;\r\n/**替换收口条柜名后缀 */\r\nexport const ClosingStripReg = /[左|右|上]{1}收口$/;\r\nexport const FileFormatReg = /^\\[(\\d+,){5}[(true)|(false)].+\\]$/;\r\n\r\n/**扣除封边是否相连和连接共用精度 */\r\nexport const LINK_FUZZ = 1e-3;\r\n\r\nexport function IsNumber(keyCode: number)\r\n{\r\n return (keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105);\r\n}\r\nexport function IsChar(keyCode: number)\r\n{\r\n return keyCode >= 65 && keyCode <= 90;\r\n}\r\nexport function isLetter(s: string)\r\n{\r\n let code = s.charCodeAt(0);\r\n return (code >= 97 && code <= 122) || (code >= 65 && code <= 90);\r\n}\r\nexport function isNum(s: string)\r\n{\r\n return !isNaN(safeEval(s));\r\n}\r\n\r\nexport function clamp(value: number, min: number, max: number)\r\n{\r\n return Math.max(min, Math.min(max, value));\r\n}\r\n\r\nexport function FixIndex(index: number, arr: Array | number)\r\n{\r\n let count = (arr instanceof Array) ? arr.length : arr;\r\n if (index < 0)\r\n return count + index;\r\n else if (index >= count)\r\n return index - count;\r\n else\r\n return index;\r\n}\r\n//格式化日期\r\nexport function formateDate(date: Date, fmt: string)\r\n{\r\n let o = {\r\n \"M+\": date.getMonth() + 1, //月份\r\n \"d+\": date.getDate(), //日\r\n \"h+\": date.getHours(), //小时\r\n \"m+\": date.getMinutes(), //分\r\n \"s+\": date.getSeconds(), //秒\r\n \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度\r\n \"S\": date.getMilliseconds() //毫秒\r\n };\r\n //如:yyyy\r\n if (/(y+)/.test(fmt))\r\n {\r\n fmt = fmt.replace(RegExp.$1, (date.getFullYear().toString()).substr(4 - RegExp.$1.length));\r\n }\r\n //yyyy-MM-dd hh:mm:ss\r\n for (let k in o)\r\n {\r\n if (new RegExp(\"(\" + k + \")\").test(fmt))\r\n {\r\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((\"00\" + o[k]).substr((\"\" + o[k]).length)));\r\n }\r\n }\r\n return fmt;\r\n}\r\n\r\n//判断v在v1和v2之间.(v1>v2 or v2>v1)\r\nexport function isBetweenNums(v1: number, v2: number, v: number, fuzz = 1e-8)\r\n{\r\n if (v1 > v2) [v1, v2] = [v2, v1];\r\n return equaln(v, clamp(v, v1, v2), fuzz);\r\n}\r\n\r\n//深复制对象数组\r\nexport function sliceDeep(arr: object[], start?: number, end?: number): object[]\r\n{\r\n return arr.slice(start, end).map((obj) => Object.assign({}, obj));\r\n}\r\n\r\nfunction fallbackCopyTextToClipboard(text)\r\n{\r\n let textArea = document.createElement(\"textarea\");\r\n textArea.value = text;\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n try\r\n {\r\n let successful = document.execCommand('copy');\r\n } catch (err)\r\n {\r\n }\r\n document.body.removeChild(textArea);\r\n}\r\nexport async function copyTextToClipboard(text: string)\r\n{\r\n if (!navigator[\"clipboard\"])\r\n {\r\n fallbackCopyTextToClipboard(text);\r\n return;\r\n }\r\n return await navigator[\"clipboard\"].writeText(text);\r\n}\r\n\r\n//ref: https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript\r\n\r\n/**\r\n * 读取剪切板的字符串\r\n */\r\nexport async function readClipboardText()\r\n{\r\n if (navigator[\"clipboard\"])\r\n return await navigator[\"clipboard\"].readText();\r\n return \"\";\r\n}\r\n\r\n//使用定点表示法来格式化一个数,小数点后面不尾随0. 如 FixedNotZero(1.1 , 3) => 1.1\r\nexport function FixedNotZero(v: number | string, fractionDigits: number = 0)\r\n{\r\n if (typeof v === \"string\")\r\n v = parseFloat(v);\r\n if (isNaN(v)) return \"\";\r\n if (equaln(v, 0)) return \"0\";\r\n let str = v.toFixed(fractionDigits);\r\n let commonIndex = str.indexOf(\".\");\r\n if (commonIndex !== -1)\r\n {\r\n let zeroCount = 0;\r\n let strCount = str.length;\r\n for (let l = strCount; l--;)\r\n {\r\n if (str[l] === \"0\")\r\n zeroCount++;\r\n else\r\n break;\r\n }\r\n if (zeroCount > 0)\r\n {\r\n if (zeroCount === (strCount - commonIndex - 1))\r\n zeroCount++;\r\n return str.slice(0, strCount - zeroCount);\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n/**\r\n * To fixed\r\n * @param v\r\n * @param [fractionDigits]\r\n * @returns\r\n */\r\nexport function ToFixed(v: number, fractionDigits: number = 5)\r\n{\r\n if (equaln(v, 0, Math.pow(0.1, fractionDigits))) return \"0\";\r\n return v.toFixed(fractionDigits);\r\n}\r\n\r\nexport function GetEntity(obj: Object3D): Entity | undefined\r\n{\r\n while (obj)\r\n {\r\n if (obj.userData.Entity)\r\n return obj.userData.Entity;\r\n\r\n obj = obj.parent;\r\n }\r\n}\r\n\r\nexport function IsEntity(obj: Object3D): boolean\r\n{\r\n return GetEntity(obj) instanceof Entity;\r\n}\r\n\r\nexport function IsNoErase(id: ObjectId): boolean\r\n{\r\n return id && !id.IsErase;\r\n}\r\n\r\n/**\r\n * 原图地址转换为对应缩略图地址\r\n */\r\nexport function getThumbsUrl(url: string)\r\n{\r\n return url ? url.replace(/\\/\\w*\\.\\w*$/, mat => \"/thumbs\" + mat.replace(\".\", \"_100.\")) : \"\";\r\n}\r\n\r\n/**\r\n * 快速判断a是不是被修改了\r\n */\r\nexport function equalObject(a: Object, b: Object)\r\n{\r\n for (let key in a)\r\n {\r\n if (a[key] !== b[key])\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function cloneObject(a: T): T\r\n{\r\n return Object.assign({}, a);\r\n}\r\n\r\nexport function Uint8ArrayToBase64(bytes: Uint8Array)\r\n{\r\n let binary = \"\";\r\n let len = bytes.byteLength;\r\n for (let i = 0; i < len; i++)\r\n binary += String.fromCharCode(bytes[i]);\r\n return window.btoa(binary);\r\n}\r\n\r\n/**转换服务端获取的文件大小 */\r\nexport function getFileSize(size: number)\r\n{\r\n let units = [\"B\", \"KB\", \"MB\", \"GB\"];\r\n for (let u of units)\r\n {\r\n if (size > 1 && size < 1024)\r\n return FixedNotZero(size, 2) + u;\r\n else\r\n size /= 1024;\r\n }\r\n}\r\n\r\nexport function GetIndexDBID(id: string)\r\n{\r\n return localStorage.getItem(StoreageKeys.Uid) + \":\" + id;\r\n}\r\n\r\nexport function FixDigits(v: number, fractionDigits = 2)\r\n{\r\n return parseFloat(v.toFixed(fractionDigits));\r\n}\r\n","import { Box3, BufferGeometry, Geometry, Line, Matrix4, Mesh, Object3D, Vector, Vector2, Vector3 } from 'three';\r\nimport { ToFixed } from '../Common/Utils';\r\n\r\nexport const IdentityMtx4 = new Matrix4();\r\nexport const ZeroVec = new Vector3();\r\nexport const XAxis = new Vector3(1, 0, 0);\r\nexport const XAxisN = new Vector3(-1, 0, 0);\r\nexport const YAxis = new Vector3(0, 1, 0);\r\nexport const YAxisN = new Vector3(0, -1, 0);\r\nexport const ZAxis = new Vector3(0, 0, 1);\r\n\r\nexport function AsVector2(p: { x: number, y: number; })\r\n{\r\n return new Vector2(p.x, p.y);\r\n}\r\nexport function AsVector3(p: { x: number, y: number, z?: number; })\r\n{\r\n return new Vector3(p.x, p.y, p.z);\r\n}\r\n\r\n/**\r\n * 判断一维线段a和b是否存在交集\r\n */\r\nexport function isIntersect(amin: number, amax: number, bmin: number, bmax: number, eps = 0)\r\n{\r\n return Math.max(amin, bmin) < Math.min(amax, bmax) + eps;\r\n}\r\n\r\nexport function isIntersect2(a1: number, a2: number, b1: number, b2: number, eps = 0)\r\n{\r\n if (a1 > a2) [a1, a2] = [a2, a1];\r\n if (b1 > b2) [b1, b2] = [b2, b1];\r\n return Math.max(a1, b1) < Math.min(a2, b2) + eps;\r\n}\r\n\r\n/**\r\n * 旋转一个点,旋转中心在原点\r\n * @param {Vector3} p 点\r\n * @param {number} a 角度.\r\n * @returns {Vector3} 返回pt不拷贝.\r\n */\r\nexport function rotatePoint(p: Vector3, a: number): Vector3\r\n{\r\n let s = Math.sin(a);\r\n let c = Math.cos(a);\r\n\r\n let x = p.x * c - p.y * s;\r\n let y = p.x * s + p.y * c;\r\n\r\n p.x = x;\r\n p.y = y;\r\n return p;\r\n}\r\n\r\nexport function equaln(v1: number, v2: number, fuzz = 1e-5)\r\n{\r\n return Math.abs(v1 - v2) <= fuzz;\r\n}\r\n\r\nexport function equalnn(dis = 5)\r\n{\r\n let fuzz = 0.1 ** dis;\r\n return function (v1: number, v2: number)\r\n {\r\n return Math.abs(v1 - v2) <= fuzz;\r\n };\r\n}\r\n\r\ninterface P2\r\n{\r\n x: number; y: number;\r\n}\r\n\r\nexport function equalv3(v1: Vector3, v2: Vector3, fuzz = 1e-8)\r\n{\r\n return equaln(v1.x, v2.x, fuzz) && equaln(v1.y, v2.y, fuzz) && equaln(v1.z, v2.z, fuzz);\r\n}\r\nexport function equalv2(v1: P2, v2: P2, fuzz = 1e-8)\r\n{\r\n return equaln(v1.x, v2.x, fuzz) && equaln(v1.y, v2.y, fuzz);\r\n}\r\n\r\n/**\r\n * 按照极坐标的方式移动一个点\r\n *\r\n * @export\r\n * @template\r\n * @param {T} v 向量(2d,3d)\r\n * @param {number} an 角度\r\n * @param {number} dis 距离\r\n * @returns {T}\r\n */\r\nexport function polar(v: T, an: number, dis: number): T\r\n{\r\n v.x += Math.cos(an) * dis;\r\n v.y += Math.sin(an) * dis;\r\n return v;\r\n}\r\n\r\nexport function angle(v: Vector3 | Vector2): number\r\n{\r\n let angle = Math.atan2(v.y, v.x);\r\n if (equaln(angle, 0, 1e-8)) return 0;\r\n if (angle < 0) angle += Math.PI * 2;\r\n return angle;\r\n}\r\n\r\n/**\r\n * 求两个向量的夹角,顺时针为负,逆时针为正\r\n *\r\n * @param {Vector3} v1\r\n * @param {Vector3} v2\r\n * @param {Vector3} [ref] 参考向量,如果为世界坐标系则为0,0,1\r\n * @returns\r\n */\r\nexport function angleTo(v1: Vector3, v2: Vector3, ref: Vector3 = ZAxis): number\r\n{\r\n if (v1.equals(ZeroVec) || v2.equals(ZeroVec))\r\n return 0;\r\n\r\n v1 = v1.clone();\r\n v2 = v2.clone();\r\n\r\n if (ref !== ZAxis && !ref.equals(ZAxis))\r\n {\r\n ref = ref.clone();\r\n //任意轴坐标系. 使用相机的构造矩阵.\r\n ref.multiplyScalar(-1);\r\n let up = getLoocAtUpVec(ref);\r\n let refOcs = new Matrix4();\r\n refOcs.lookAt(ZeroVec, ref, up);\r\n let refOcsInv = new Matrix4().getInverse(refOcs);\r\n v1.applyMatrix4(refOcsInv);\r\n v2.applyMatrix4(refOcsInv);\r\n v1.z = 0;\r\n v2.z = 0;\r\n }\r\n\r\n if (v1.equals(ZeroVec) || v2.equals(ZeroVec))//修复,这里有可能被更改为0\r\n return 0;\r\n\r\n //平行的向量返回0向量,不需要归一化\r\n let cv = new Vector3().crossVectors(v1, v2);\r\n if (equalv3(cv, ZeroVec))\r\n return 0;\r\n\r\n cv.normalize();\r\n return equaln(cv.z, 0) ? v1.angleTo(v2) : v1.angleTo(v2) * cv.z;\r\n}\r\n\r\nexport function getLoocAtUpVec(dir: Vector3): Vector3\r\n{\r\n if (dir.equals(ZeroVec))\r\n {\r\n throw (\"zero vector\");\r\n }\r\n let norm = dir.clone().normalize();\r\n if (norm.equals(ZAxis))\r\n {\r\n return new Vector3(0, 1, 0);\r\n }\r\n else if (norm.equals(ZAxis.clone().negate()))\r\n {\r\n return new Vector3(0, -1, 0);\r\n }\r\n else\r\n {\r\n let xv: Vector3 = new Vector3();\r\n xv.crossVectors(ZAxis, norm);\r\n\r\n let up = new Vector3();\r\n up.crossVectors(norm, xv);\r\n return up;\r\n }\r\n}\r\n\r\nexport function createLookAtMat4(dir: Vector3): Matrix4\r\n{\r\n let up = getLoocAtUpVec(dir);\r\n let mat = new Matrix4();\r\n mat.lookAt(ZeroVec, dir, up);\r\n return mat;\r\n}\r\n\r\n/**\r\n * 判断2个向量是不是平行,尽量传入单位向量,才能保证计算精度\r\n */\r\nexport function isParallelTo(v1: Vector3, v2: Vector3, fuzz = 1e-8): boolean\r\n{\r\n return v1.clone().cross(v2).lengthSq() < fuzz;\r\n}\r\n\r\n/**\r\n * 垂直向量\r\n */\r\nexport function isPerpendicularityTo(v1: Vector3, v2: Vector3, fuzz = 1e-8)\r\n{\r\n return equaln(v1.dot(v2), 0, fuzz);\r\n}\r\n\r\nexport function ptToString(v: Vector3, fractionDigits: number = 3): string\r\n{\r\n return v.toArray().map(o => ToFixed(o, fractionDigits)).join(\",\");\r\n}\r\n\r\nexport function midPoint(v1: Vector3, v2: Vector3): Vector3\r\n{\r\n return v1.clone().add(v2).multiplyScalar(0.5);\r\n}\r\nexport function midPoint2(v1: Vector2, v2: Vector2): Vector2\r\n{\r\n return v1.clone().add(v2).multiplyScalar(0.5);\r\n}\r\n\r\n/**\r\n * 获得Three对象的包围盒.\r\n * @param obj\r\n * @param [updateMatrix] 是否应该更新对象矩阵\r\n * @returns box\r\n */\r\nexport function GetBox(obj: Object3D, updateMatrix?: boolean): Box3\r\n{\r\n let box = new Box3();\r\n if (updateMatrix) obj.updateMatrixWorld(false);\r\n if (!obj.visible) return box;\r\n\r\n obj.traverseVisible(o =>\r\n {\r\n if (!o.visible) return;\r\n //@ts-ignore\r\n let geo = o.geometry as BufferGeometry;\r\n if (geo)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n let geoBox = geo.boundingBox.clone().applyMatrix4(o.matrixWorld);\r\n if (geoBox.max.z > 1e5)\r\n console.log();\r\n box.union(geoBox);\r\n }\r\n });\r\n return box;\r\n}\r\n\r\nexport function GetBoxArr(arr: Array): Box3\r\n{\r\n let box = new Box3();\r\n for (let o of arr)\r\n {\r\n let b = GetBox(o);\r\n if (!b.isEmpty())\r\n box.union(b);\r\n }\r\n return box;\r\n}\r\n\r\nexport function MoveMatrix(v: Vector3): Matrix4\r\n{\r\n return new Matrix4().setPosition(v);\r\n}\r\n\r\n//获得输入点在2线组成的4个区间的位置\r\nexport function getPtPostion(sp: Vector3, ep: Vector3, c: Vector3, inPt: Vector3)\r\n{\r\n let l1 = sp.clone().sub(c);\r\n let l2 = ep.clone().sub(c);\r\n let l3 = l1.clone().negate();\r\n let l4 = l2.clone().negate();\r\n let inputLine = inPt.clone().sub(c);\r\n let ang1 = angleTo(l1, l2);\r\n let ang2 = Math.PI;\r\n let ang3 = ang2 + Math.abs(ang1);\r\n let inputAng = angleTo(l1, inputLine);\r\n if (ang1 * inputAng < 0)\r\n inputAng = (Math.PI * 2 - Math.abs(inputAng));\r\n ang1 = Math.abs(ang1);\r\n inputAng = Math.abs(inputAng);\r\n if (inputAng <= ang1)\r\n return { sp, ep };\r\n else if (inputAng > ang1 && inputAng <= ang2)\r\n return { sp: c.clone().add(l3), ep };\r\n else if (inputAng > ang2 && inputAng <= ang3)\r\n return { sp: c.clone().add(l3), ep: c.clone().add(l4) };\r\n else\r\n return { sp, ep: c.clone().add(l4) };\r\n}\r\nexport function angleAndX(v: Vector3 | Vector2)\r\n{\r\n return v.x ? Math.atan(v.y / v.x) : Math.PI / 2;\r\n}\r\n\r\n/**\r\n * 将角度调整为0-2pi之间\r\n */\r\nexport function clampRad(an: number)\r\n{\r\n an = an % (Math.PI * 2);\r\n if (an < 0) an += Math.PI * 2;\r\n return an;\r\n}\r\n\r\nexport function updateGeometry(l: Line | Mesh, geometry: Geometry | BufferGeometry)\r\n{\r\n let geo = l.geometry as Geometry;\r\n geo.dispose();\r\n l.geometry = geometry;\r\n geometry.computeBoundingSphere();\r\n}\r\n\r\nexport function UpdateBoundingSphere(obj: Object3D)\r\n{\r\n //@ts-ignore\r\n let geo = obj.geometry as Geometry;\r\n if (geo)\r\n geo.computeBoundingSphere();\r\n}\r\n\r\n\r\nexport type compareVectorFn = (v1: Vector, v2: Vector3) => number;\r\n\r\nconst comparePointCache: Map = new Map();\r\n\r\n/**\r\n * 构建返回一个用来排序的函数.根据key创建排序规则.\r\n *\r\n * 当key = \"xyz\" 时,点集按 x从小到大,y从小到大 z从小到大\r\n * key = \"X\" 时,点集按 x从大到小\r\n * 以此类推.\r\n *\r\n * 例子:\r\n * let pts:Vector3[] =...;\r\n * pts.sort(comparePoint(\"x\")); //x从小到大排序\r\n * pts.sort(comparePoint(\"zX\")); //z从小到大 x从大到小\r\n *\r\n * @export\r\n * @param {string} sortKey\r\n * @returns {compareVectorFn}\r\n */\r\nexport function comparePoint(sortKey: string): compareVectorFn\r\n{\r\n if (comparePointCache.has(sortKey))\r\n return comparePointCache.get(sortKey);\r\n\r\n let sortIndex = [];\r\n\r\n const keys = ['x', 'X', 'y', 'Y', 'z', 'Z'];\r\n for (let char of sortKey)\r\n {\r\n let index = keys.indexOf(char);\r\n\r\n let i2 = index / 2;\r\n let ci = Math.floor(i2);\r\n sortIndex.push([ci, i2 > ci ? 1 : -1]);\r\n }\r\n\r\n let compareFunction = (v1: Vector, v2: Vector3): number =>\r\n {\r\n if (!v1) return -1;\r\n if (!v2) return 1;\r\n for (let s of sortIndex)\r\n {\r\n let vv1 = v1.getComponent(s[0]);\r\n let vv2 = v2.getComponent(s[0]);\r\n if (equaln(vv1, vv2)) continue;\r\n if (vv2 > vv1) return s[1];\r\n else return -s[1];\r\n }\r\n return 0;\r\n };\r\n\r\n comparePointCache.set(sortKey, compareFunction);\r\n return compareFunction;\r\n}\r\n\r\n/**\r\n *计算各轴旋转角度\r\n */\r\nexport function GetEulerAngle(x: Vector3, y: Vector3, z: Vector3)\r\n{\r\n let roY = Math.atan2(x.z, Math.sqrt(x.x ** 2 + x.y ** 2)) * -180 / Math.PI;\r\n let roZ = Math.atan2(x.y, x.x);\r\n let vec = YAxis.clone();\r\n let roMat = new Matrix4().makeRotationZ(roZ);\r\n roZ *= 180 / Math.PI;\r\n vec.applyMatrix4(roMat);\r\n let roX = Math.atan2(z.dot(vec), y.dot(vec)) * -180 / Math.PI;\r\n return { roX, roY, roZ };\r\n}\r\n\r\n/**\r\n * 方形框捕捉\r\n * @param sqCenter 正方形点\r\n * @param snapPt 被捕捉的点\r\n * @param size 捕捉框大小\r\n */\r\nexport function SnapPoint(sqCenter: Vector3, snapPt: Vector3, size: number): boolean\r\n{\r\n return Math.abs(sqCenter.x - snapPt.x) < size\r\n && Math.abs(sqCenter.y - snapPt.y) < size;\r\n}\r\n\r\nexport function SelectNearP(pts: Vector3[], refPt: Vector3): Vector3\r\n{\r\n if (pts.length > 1)\r\n {\r\n let dist1 = refPt.distanceToSquared(pts[0]);\r\n let dist2 = refPt.distanceToSquared(pts[1]);\r\n return dist1 <= dist2 ? pts[0] : pts[1];\r\n }\r\n return pts[0];\r\n}\r\n\r\n/**n是否在AB之间,fuzz 若为负的,允许相等 */\r\nexport function IsBetweenA2B(n: number, A: number, B: number, fuzz = -1e-8)\r\n{\r\n return n > A + fuzz && n < B - fuzz;\r\n}\r\n","import { Matrix4, Vector2, Vector3 } from 'three';\r\nimport { CoordinateSystem } from '../Geometry/CoordinateSystem';\r\nimport { equaln, isParallelTo } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 设置矩阵的某列的向量\r\n * @param {Matrix4} mat 矩阵\r\n * @param {number} col 列索引,0x 1y 2z 3org\r\n * @param {Vector3} v 向量或点\r\n */\r\nexport function matrixSetVector(mat: Matrix4, col: number, v: Vector3)\r\n{\r\n let index = col * 4;\r\n mat.elements[index] = v.x;\r\n mat.elements[index + 1] = v.y;\r\n mat.elements[index + 2] = v.z;\r\n}\r\n\r\n/**\r\n * 返回矩阵,该坐标系将坐标系与原点的坐标系映射为坐标系,\r\n * 并将坐标系与X轴坐标系,\r\n * Y轴坐标轴以及Z轴坐标系统之间的坐标系统坐标系统的原点坐标系和原点坐标系统坐标轴的坐标系分别设置为XAxis,YAxis和ZAxis\r\n * @returns {Matrix4} 返回新的矩阵\r\n */\r\nexport function matrixAlignCoordSys(matrixFrom: Matrix4, matrixTo: Matrix4): Matrix4\r\n{\r\n return new Matrix4().getInverse(matrixTo).multiply(matrixFrom);\r\n}\r\n\r\n/**\r\n * 判断2个矩形共面\r\n * @param {Matrix4} matrixFrom\r\n * @param {Matrix4} matrixTo\r\n * @returns {boolean} 2个矩阵共面\r\n */\r\nexport function matrixIsCoplane(matrixFrom: Matrix4, matrixTo: Matrix4, fuzz = 1e-5): boolean\r\n{\r\n let nor1 = new Vector3().setFromMatrixColumn(matrixFrom, 2);\r\n let nor2 = new Vector3().setFromMatrixColumn(matrixTo, 2);\r\n\r\n //法线共面\r\n if (!isParallelTo(nor1, nor2))\r\n return false;\r\n\r\n //高共面\r\n let pt = new Vector3().setFromMatrixPosition(matrixTo);\r\n //变换到自身对象坐标系.\r\n pt.applyMatrix4(new Matrix4().getInverse(matrixFrom));\r\n\r\n return equaln(pt.z, 0, fuzz);\r\n}\r\n\r\n//构造缩放矩阵\r\nexport function matrixScale(scale: number, center?: Vector3)\r\n{\r\n let scaleMat = new Matrix4().makeScale(scale, scale, scale);\r\n if (center)\r\n scaleMat.setPosition(center.clone().multiplyScalar(1 - scale));\r\n return scaleMat;\r\n}\r\n\r\n/**\r\n * 设置旋转矩阵,不改变矩阵的基点\r\n */\r\nexport function setRotationOnAxis(mtx: Matrix4, axis: Vector3, ro: number)\r\n{\r\n let pos = new Vector3().setFromMatrixPosition(mtx);\r\n mtx.makeRotationAxis(axis, ro);\r\n mtx.setPosition(pos);\r\n return mtx;\r\n}\r\n\r\n/**\r\n * 修正镜像后矩阵\r\n */\r\nexport function reviseMirrorMatrix(mtx: Matrix4): Matrix4\r\n{\r\n let cs = new CoordinateSystem().applyMatrix4(mtx);\r\n cs.YAxis.negate();\r\n mtx.copy(cs.getMatrix4());\r\n return mtx;\r\n}\r\n\r\nlet cacheVec: Vector3;\r\nexport function Vector2ApplyMatrix4(mtx: Matrix4, vec: Vector2)\r\n{\r\n if (!cacheVec) cacheVec = new Vector3();\r\n\r\n cacheVec.x = vec.x;\r\n cacheVec.y = vec.y;\r\n\r\n cacheVec.applyMatrix4(mtx);\r\n\r\n vec.x = cacheVec.x;\r\n vec.y = cacheVec.y;\r\n}\r\nexport function GetMirrorMat(v: Vector3)\r\n{\r\n let mirrorMat = new Matrix4();\r\n let xAxis = new Vector3(1 - 2 * v.x ** 2, -2 * v.x * v.y, -2 * v.x * v.z);\r\n let yAxis = new Vector3(-2 * v.x * v.y, 1 - 2 * v.y ** 2, -2 * v.y * v.z);\r\n let zAxis = new Vector3(-2 * v.x * v.z, -2 * v.y * v.z, 1 - 2 * v.z ** 2);\r\n mirrorMat.makeBasis(xAxis, yAxis, zAxis);\r\n return mirrorMat;\r\n}\r\n\r\nexport function ApplyMatrix4IgnorePosition(vec: { x: number, y: number, z: number; }, m: Matrix4)\r\n{\r\n let { x, y, z } = vec;\r\n let e = m.elements;\r\n vec.x = e[0] * x + e[4] * y + e[8] * z;\r\n vec.y = e[1] * x + e[5] * y + e[9] * z;\r\n vec.z = e[2] * x + e[6] * y + e[10] * z;\r\n return vec;\r\n}\r\n\r\n/**\r\n * 把变换矩阵展平成2d矩阵,避免出现三维坐标.\r\n */\r\nexport function MatrixPlanarizere(mtx: Matrix4, z0 = true)\r\n{\r\n mtx.elements[2] = 0;\r\n mtx.elements[6] = 0;\r\n mtx.elements[8] = 0;\r\n mtx.elements[9] = 0;\r\n mtx.elements[10] = Math.sign(mtx.elements[10]);\r\n\r\n if (z0)\r\n mtx.elements[14] = 0;\r\n\r\n return mtx;\r\n}\r\n\r\nexport const tempMatrix1 = new Matrix4;\r\n","\r\n\r\n\r\nexport enum Status\r\n{\r\n False = 0,\r\n True = 1,\r\n Canel = -1,\r\n\r\n ConverToCircle = 101,\r\n\r\n DuplicateRecordName = 102,\r\n}\r\n\r\nexport enum UpdateDraw\r\n{\r\n None = 0,\r\n Matrix = 1,\r\n Geometry = 2,\r\n Material = 4,\r\n All = ~(~0 << 6)\r\n}\r\n\r\n/**\r\n * WblockClne时,遇到重复记录的操作方式\r\n */\r\nexport enum DuplicateRecordCloning\r\n{\r\n Ignore = 1,\r\n Replace = 2,\r\n Rename = 3,\r\n}\r\n","\r\n/**\r\n * 场景的渲染类型.\r\n */\r\nexport enum RenderType\r\n{\r\n /**\r\n * 线框模式\r\n */\r\n Wireframe = 1,\r\n\r\n /**\r\n * 概念\r\n */\r\n Conceptual = 2,\r\n\r\n\r\n /**\r\n * 物理着色PBR\r\n */\r\n Physical = 3,\r\n\r\n Jig = 4,\r\n Print = 5,\r\n /**物理带线框 */\r\n Physical2 = 6,\r\n\r\n /******************************************** 在视口时的渲染模式 */\r\n /**\r\n * 线框模式\r\n */\r\n WireframePrint = 101,\r\n\r\n /**\r\n * 概念\r\n */\r\n ConceptualPrint = 102,\r\n\r\n\r\n /**\r\n * 物理着色PBR\r\n */\r\n PhysicalPrint = 103,\r\n\r\n JigPrint = 104,\r\n PrintPrint = 105,\r\n /**物理带线框 */\r\n Physical2Print = 106,\r\n}\r\n","export enum AAType\r\n{\r\n FXAA = 0,//快速近似抗锯齿(性能更好)\r\n SMAA = 1,//多重采样抗锯齿(质量更好)\r\n}\r\n\r\nexport enum ViewDirType\r\n{\r\n FS = 0,\r\n YAS = 1,\r\n ZS = 2,\r\n YS = 3,\r\n QS = 4,\r\n HS = 5,\r\n XN = 6,\r\n}\r\n","import { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { DrillingOption } from \"../UI/Store/drillInterface\";\r\nimport { observable, reaction, toJS } from \"mobx\";\r\nimport { StoreageKeys } from \"../Common/StoreageKeys\";\r\nimport { IWineRackOption } from \"../UI/Store/WineRackInterface\";\r\nimport { IBaseOption, IGrooveOption } from \"../UI/Store/BoardInterface\";\r\nimport { IConfigStore } from \"../UI/Store/BoardStore\";\r\nimport { IConfigOption } from \"../UI/Components/Board/UserConfig\";\r\nimport { AAType, ViewDirType } from \"../Common/SystemEnum\";\r\n\r\nexport interface IMaxSizeProps extends IBaseOption\r\n{\r\n height: number;\r\n width: number;\r\n isShow: boolean;\r\n}\r\n\r\nexport interface ISystemConfig extends IBaseOption\r\n{\r\n aaType: AAType;\r\n maxHightightCount: number;\r\n snapSize: number;\r\n}\r\n\r\nexport interface ICursorConfig extends IBaseOption\r\n{\r\n D2: number;\r\n D3: number;\r\n}\r\n\r\nexport class UserConfig implements IConfigStore\r\n{\r\n private readonly _version = 12;\r\n _renderType: RenderType = RenderType.Wireframe;\r\n @observable maxSize: IMaxSizeProps = {\r\n isShow: false,\r\n height: 2440,\r\n width: 1220,\r\n };\r\n @observable private _drillConfigs: Map = new Map();\r\n @observable openDrillingReactor = true;\r\n @observable openAutoCuttingReactor = true;\r\n /**打开将检测排钻是否在板件内*/\r\n @observable openExactDrill = true;\r\n winerackConfig: IWineRackOption;\r\n userConfigName: { [key: string]: string; } = {};\r\n private modeling2HoleRad = 20; //圆造型小于等于该值拆成孔数据\r\n @observable isAdmin = false;\r\n isMaster = false;\r\n rights = [];\r\n @observable kjlConfig: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"1\",\r\n };\r\n @observable SystemConfig: ISystemConfig = {\r\n maxHightightCount: 15000,\r\n snapSize: 15,\r\n aaType: AAType.FXAA,\r\n };\r\n @observable viewDirType: ViewDirType = ViewDirType.XN;\r\n @observable useCtrlRotate = true;\r\n @observable cursorSize: ICursorConfig = {\r\n D2: 1000,\r\n D3: 100,\r\n };\r\n @observable autoSaveConfig = {\r\n enable: true,\r\n time: 1,\r\n };\r\n @observable showLines = false;\r\n @observable keepConfig = false;\r\n @observable autoClearHistory = true;\r\n @observable chaidanOption = {\r\n changXiuBian: 6,\r\n duanXiuBian: 6,\r\n useDefaultRad: false,\r\n radius: 2.5,\r\n modeling2HoleRad: 20, //圆造型小于等于该值拆成孔数据\r\n isCheckInterfere: false,\r\n noModeingData: \"\", //非造型遭数据\r\n };\r\n @observable autoLines = false;\r\n dimTextHeight = 60;\r\n\r\n @observable performanceConfig = {\r\n fakersweep: false,\r\n disablerefcut: false,\r\n disablecheckgroove: false,\r\n };\r\n lineWidth = 2; //打印线框\r\n @observable forceFilterPxl = true;\r\n constructor()\r\n {\r\n this.Init();\r\n }\r\n Init()\r\n {\r\n let type = localStorage.getItem(StoreageKeys.RenderType);\r\n if (type)\r\n this._renderType = parseFloat(type);\r\n }\r\n set RenderType(t: RenderType)\r\n {\r\n if (t !== this._renderType)\r\n {\r\n this._renderType = t;\r\n this.SetRenderTypeEvent();\r\n\r\n localStorage.setItem(StoreageKeys.RenderType, t.toString());\r\n }\r\n }\r\n\r\n get RenderType() { return this._renderType; }\r\n\r\n SetRenderTypeEvent() { }\r\n get DrillConfigs()\r\n {\r\n return this._drillConfigs || new Map();\r\n }\r\n set DrillConfigs(config: Map)\r\n {\r\n observable(this._drillConfigs).replace(config);\r\n this.SetDrillConfigsEvent();\r\n }\r\n SetDrillConfigsEvent() { }\r\n configName = \"default\";\r\n configsNames: string[] = [];\r\n InitOption()\r\n {\r\n this.openDrillingReactor = true;\r\n this.openAutoCuttingReactor = true;\r\n Object.assign(this.maxSize, {\r\n height: 2440,\r\n width: 1220\r\n });\r\n Object.assign(this.kjlConfig, {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"1\"\r\n });\r\n Object.assign(this.chaidanOption, {\r\n changXiuBian: 6,\r\n duanXiuBian: 6,\r\n useDefaultRad: false,\r\n radius: 2.5,\r\n modeling2HoleRad: 20,\r\n noModeingData: \"\",\r\n });\r\n this.dimTextHeight = 60;\r\n }\r\n SaveConfig()\r\n {\r\n return {\r\n option: {\r\n version: this._version,\r\n openDrillingReactor: this.openDrillingReactor,\r\n openAutoCuttingReactor: this.openAutoCuttingReactor,\r\n maxSize: toJS(this.maxSize),\r\n kjlConfig: toJS(this.kjlConfig),\r\n systemConfig: toJS(this.SystemConfig),\r\n viewDirType: this.viewDirType,\r\n useCtrlRotate: this.useCtrlRotate,\r\n cursorSize: toJS(this.cursorSize),\r\n autoSaveConfig: toJS(this.autoSaveConfig),\r\n showLines: this.showLines,\r\n keepConfig: this.keepConfig,\r\n autoClearHistory: this.autoClearHistory,\r\n chaidanOption: toJS(this.chaidanOption),\r\n autoLines: this.autoLines,\r\n dimTextHeight: this.dimTextHeight,\r\n lineWidth: this.lineWidth,\r\n forceFilterPxl: this.forceFilterPxl,\r\n }\r\n };\r\n }\r\n UpdateOption(config: IConfigOption)\r\n {\r\n this.openDrillingReactor = config.option.openDrillingReactor;\r\n this.openAutoCuttingReactor = config.option.openAutoCuttingReactor;\r\n Object.assign(this.maxSize, config.option.maxSize);\r\n Object.assign(this.kjlConfig, config.option.kjlConfig);\r\n this.modeling2HoleRad = config.option.modeling2HoleRad;\r\n\r\n if (config.option.version > 1)\r\n {\r\n Object.assign(this.SystemConfig, config.option.systemConfig);\r\n }\r\n if (config.option.version > 2)\r\n {\r\n this.viewDirType = config.option.viewDirType;\r\n this.useCtrlRotate = config.option.useCtrlRotate;\r\n }\r\n\r\n if (config.option.version > 3)\r\n {\r\n Object.assign(this.cursorSize, config.option.cursorSize);\r\n }\r\n if (config.option.version > 4)\r\n {\r\n Object.assign(this.autoSaveConfig, config.option.autoSaveConfig);\r\n }\r\n if (config.option.version > 5)\r\n {\r\n this.showLines = config.option.showLines;\r\n }\r\n if (config.option.version > 6)\r\n {\r\n this.keepConfig = config.option.keepConfig;\r\n }\r\n if (config.option.version > 7)\r\n {\r\n this.autoClearHistory = config.option.autoClearHistory;\r\n }\r\n if (config.option.version > 8)\r\n {\r\n config.option.chaidanOption.modeling2HoleRad = Number(config.option.chaidanOption.modeling2HoleRad);\r\n Object.assign(this.chaidanOption, config.option.chaidanOption);\r\n this.autoLines = config.option.autoLines;\r\n }\r\n else\r\n this.chaidanOption.modeling2HoleRad = this.modeling2HoleRad;\r\n\r\n if (config.option.version > 9)\r\n this.dimTextHeight = config.option.dimTextHeight;\r\n if (config.option.version > 10)\r\n this.lineWidth = config.option.lineWidth;\r\n\r\n if (config.option.version > 11)\r\n this.forceFilterPxl = config.option.forceFilterPxl;\r\n }\r\n}\r\n\r\nexport const userConfig = new UserConfig();\r\n","import { Vector3, Box3 } from 'three';\r\n\r\n/**\r\n * 盒子的切割类型\r\n */\r\nexport enum SplitType\r\n{\r\n X = 0,\r\n Y = 1,\r\n Z = 2,\r\n}\r\n\r\n/**\r\n * 扩展Box3,添加切割方法,体积等\r\n */\r\nexport class Box3Ext extends Box3\r\n{\r\n TempData: any;\r\n get Volume()\r\n {\r\n let size = this.getSize(new Vector3());\r\n return size.x * size.y * size.z;\r\n }\r\n\r\n //每个轴的大小必须大于最小的size\r\n isSolid(minSize = 1)\r\n {\r\n return this.getSize(new Vector3()).toArray().every(x => x > minSize);\r\n }\r\n substract(b: Box3Ext, spaceType: SplitType)\r\n {\r\n let interBox = this.clone().intersect(b) as this;\r\n if (interBox.isEmpty() || !interBox.isSolid())\r\n return [this];\r\n\r\n let p1 = interBox.min.clone().setComponent(spaceType, this.min.getComponent(spaceType));\r\n let p2 = interBox.max.clone().setComponent(spaceType, interBox.min.getComponent(spaceType));\r\n\r\n let p3 = interBox.min.clone().setComponent(spaceType, interBox.max.getComponent(spaceType));\r\n let p4 = interBox.max.clone().setComponent(spaceType, this.max.getComponent(spaceType));\r\n\r\n return [\r\n new Box3Ext(p1, p2),\r\n new Box3Ext(p3, p4)\r\n ].filter(b => b.isSolid());\r\n }\r\n clampSpace(b2: Box3Ext, splitType: SplitType)\r\n {\r\n let interBox = this.clone();\r\n interBox.min.max(b2.min);\r\n interBox.max.min(b2.max);\r\n interBox.min.setComponent(splitType, Math.min(this.max.getComponent(splitType), b2.max.getComponent(splitType)));\r\n interBox.max.setComponent(splitType, Math.max(this.min.getComponent(splitType), b2.min.getComponent(splitType)));\r\n return interBox;\r\n }\r\n intersectsBox(box: Box3, fuzz = 1e-8): boolean\r\n {\r\n return IntersectsBox(this, box, fuzz);\r\n }\r\n}\r\n\r\nexport function IntersectsBox(box1: Box3, box2: Box3, fuzz = 1e-6): boolean\r\n{\r\n return box2.max.x < box1.min.x - fuzz || box2.min.x > box1.max.x + fuzz ||\r\n box2.max.y < box1.min.y - fuzz || box2.min.y > box1.max.y + fuzz ||\r\n box2.max.z < box1.min.z - fuzz || box2.min.z > box1.max.z + fuzz ? false : true;\r\n}\r\n\r\n/**盒子二维面是否相交 */\r\nexport function IntersectBox2(box1: Box3, box2: Box3, fuzz = 1e-3)\r\n{\r\n return box2.max.x < box1.min.x - fuzz || box2.min.x > box1.max.x + fuzz ||\r\n box2.max.y < box1.min.y - fuzz || box2.min.y > box1.max.y + fuzz ? false : true;\r\n}\r\n","import { Box3, Material, Matrix3, Matrix4, MeshStandardMaterial, Object3D, Vector3 } from 'three';\r\nimport { iaop } from 'xaop';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { matrixIsCoplane, MatrixPlanarizere } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { userConfig } from '../../Editor/UserConfig';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { equaln, equalv3, UpdateBoundingSphere, IdentityMtx4 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { CADObject } from '../CADObject';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { PhysicalMaterialRecord } from '../PhysicalMaterialRecord';\r\n\r\n/**\r\n * Entity 是所有图元的基类,绘制的实体都集成该类.\r\n */\r\n@Factory\r\nexport class Entity extends CADObject\r\n{\r\n\r\n IsEmbedEntity = false;\r\n\r\n /**\r\n * 该实体的只有一个渲染类型,任何渲染类型都一个样\r\n */\r\n protected OnlyRenderType = false;\r\n protected _CacheDrawObject = new Map();\r\n //材质id\r\n protected materialId: ObjectId;\r\n protected _Color: number = 7;\r\n\r\n //自身坐标系\r\n protected _Matrix = new Matrix4();\r\n\r\n //模块空间的标系\r\n protected _SpaceOCS: Matrix4 = new Matrix4();\r\n get SpaceOCS()\r\n {\r\n return this._SpaceOCS.clone();\r\n }\r\n get SpaceOCSInv()\r\n {\r\n return new Matrix4().getInverse(this._SpaceOCS);\r\n }\r\n set SpaceOCS(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SpaceOCS.copy(m);\r\n }\r\n\r\n protected _Visible = true;\r\n\r\n @AutoRecord GroupId: ObjectId;\r\n @AutoRecord Template: ObjectId;\r\n //加工组\r\n @AutoRecord ProcessingGroupList: ObjectId[] = [];\r\n\r\n /**\r\n * 当AutoUpdate为false时,记录需要更新的标志.\r\n * 以便延迟更新时找到相应的更新标志.\r\n */\r\n NeedUpdateFlag: UpdateDraw = UpdateDraw.None;\r\n AutoUpdate = true;\r\n\r\n set Material(materialId: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.materialId = materialId;\r\n this.Update();\r\n }\r\n\r\n get Material()\r\n {\r\n return this.materialId;\r\n }\r\n\r\n set ColorIndex(color: number)\r\n {\r\n if (color !== this._Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Color = color;\r\n this.Update(UpdateDraw.Material);\r\n }\r\n }\r\n get ColorIndex(): number\r\n {\r\n return this._Color;\r\n }\r\n /**\r\n * 炸开实体\r\n */\r\n Explode(): Entity[] { return []; }\r\n\r\n /**\r\n * 返回对象的包围框.\r\n */\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3();\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let mtxBak = this._Matrix;\r\n this._Matrix = IdentityMtx4;\r\n let box = this.BoundingBox;\r\n this._Matrix = mtxBak;\r\n return new Box3Ext().copy(box);\r\n }\r\n\r\n GetBoundingBoxInMtx(mtx: Matrix4): Box3Ext\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCS.premultiply(mtx));\r\n }\r\n\r\n get BoundingBoxInSpaceCS(): Box3Ext\r\n {\r\n return this.GetBoundingBoxInMtx(this.SpaceOCSInv);\r\n }\r\n\r\n get OCS(): Matrix4\r\n {\r\n return this._Matrix.clone();\r\n }\r\n\r\n get OCSNoClone()\r\n {\r\n return this._Matrix;\r\n }\r\n\r\n //直接设置实体的矩阵,谨慎使用该函数,没有更新实体.\r\n set OCS(mat4: Matrix4)\r\n {\r\n this._Matrix.copy(mat4);\r\n }\r\n get Normal(): Vector3\r\n {\r\n return new Vector3().setFromMatrixColumn(this._Matrix, 2);\r\n }\r\n get Position(): Vector3\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n\r\n set Position(pt: Vector3)\r\n {\r\n let moveX = pt.x - this._Matrix.elements[12];\r\n let moveY = pt.y - this._Matrix.elements[13];\r\n let moveZ = pt.z - this._Matrix.elements[14];\r\n\r\n if (moveX === 0 && moveY === 0 && moveZ === 0) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(pt);\r\n this._SpaceOCS.elements[12] += moveX;\r\n this._SpaceOCS.elements[13] += moveY;\r\n this._SpaceOCS.elements[14] += moveZ;\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n\r\n //Z轴归0\r\n Z0()\r\n {\r\n if (this._Matrix.elements[14] === 0) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Matrix.elements[14] = 0;\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\r\n }\r\n\r\n //坐标系二维化\r\n MatrixPlanarizere()\r\n {\r\n let z = this._Matrix.elements[10];\r\n if (equaln(Math.abs(z), 1, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n MatrixPlanarizere(this._Matrix, false);\r\n }\r\n return this;\r\n }\r\n\r\n get OCSInv(): Matrix4\r\n {\r\n return new Matrix4().getInverse(this._Matrix);\r\n }\r\n\r\n /**\r\n * 与指定实体是否共面.\r\n */\r\n IsCoplaneTo(e: Entity): boolean\r\n {\r\n return matrixIsCoplane(this._Matrix, e.OCS, 1e-4);\r\n }\r\n\r\n /**\r\n * 测试两个实体的包围盒是否相交.\r\n */\r\n BoundingBoxIntersectWith(en: Entity): boolean\r\n {\r\n let box = this.BoundingBox;\r\n let box2 = en.BoundingBox;\r\n return box && box2 && box.intersectsBox(box2);\r\n }\r\n\r\n //#region Draw\r\n\r\n ClearDraw()\r\n {\r\n if (this._drawObject)\r\n {\r\n DisposeThreeObj(this._drawObject);\r\n this._drawObject = undefined;\r\n }\r\n\r\n for (let [, obj] of this._CacheDrawObject)\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.clear();\r\n return this;\r\n }\r\n ClearDrawOfJig()\r\n {\r\n let jig = this._CacheDrawObject.get(RenderType.Jig);\r\n if (jig)\r\n this._CacheDrawObject.delete(RenderType.Jig);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.clear();\r\n if (jig)\r\n this._CacheDrawObject.set(RenderType.Jig, jig);\r\n }\r\n\r\n get IsOnlyRender()\r\n {\r\n return this.OnlyRenderType;\r\n }\r\n _drawObject: Object3D;\r\n\r\n get DrawObject()\r\n {\r\n if (this._drawObject)\r\n return this._drawObject;\r\n\r\n this._drawObject = new Object3D();\r\n if (!this.IsEmbedEntity)\r\n this._drawObject.userData.Entity = this;\r\n if (this.IsVisible)\r\n {\r\n this._CurRenderType = userConfig.RenderType;\r\n let obj = this.GetDrawObjectFromRenderType(userConfig.RenderType);\r\n if (obj) this._drawObject.add(obj);\r\n }\r\n else\r\n this._drawObject.visible = false;\r\n return this._drawObject;\r\n }\r\n\r\n get JigObject()\r\n {\r\n let obj = this.GetDrawObjectFromRenderType(RenderType.Jig);\r\n if (obj && !this.IsEmbedEntity)\r\n obj.userData.Entity = this;\r\n return obj;\r\n }\r\n\r\n DestroyJigObject()\r\n {\r\n let obj = this._CacheDrawObject.get(RenderType.Jig);\r\n if (obj)\r\n {\r\n this._CacheDrawObject.delete(RenderType.Jig);\r\n DisposeThreeObj(obj);\r\n if (obj.parent)\r\n obj.parent.remove(obj);\r\n }\r\n }\r\n\r\n //当前绘制类型,在.DrawObject 和 UpdateRenderType中初始化和更新\r\n protected _CurRenderType: RenderType;\r\n UpdateRenderType(type: RenderType)\r\n {\r\n if (this._CurRenderType !== type || this.DrawObject.children.length === 0)\r\n {\r\n this._CurRenderType = type;\r\n if ((this.OnlyRenderType && this.DrawObject.children.length > 0) || !this.Visible) return;\r\n Object3DRemoveAll(this.DrawObject);\r\n let obj = this.GetDrawObjectFromRenderType(type);\r\n if (obj) this.DrawObject.add(obj);\r\n }\r\n }\r\n\r\n GetDrawObjectFromRenderType(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (this.OnlyRenderType)\r\n {\r\n if (renderType === RenderType.Jig)\r\n return;\r\n if (renderType < 100)\r\n renderType = RenderType.Wireframe;\r\n else\r\n renderType = RenderType.WireframePrint;\r\n }\r\n\r\n if (this._CacheDrawObject.has(renderType))\r\n {\r\n return this._CacheDrawObject.get(renderType);\r\n }\r\n else\r\n {\r\n let drawObj = this.InitDrawObject(renderType);\r\n if (drawObj === undefined)\r\n {\r\n if (renderType > 100)//如果实体没有实现打印类型,那么就使用原先的实体的渲染类型\r\n return this.GetDrawObjectFromRenderType(renderType - 100);\r\n return;\r\n };\r\n\r\n //矩阵直接使用指针,因为已经关闭自动更新,所以矩阵不会被Object3D修改.\r\n drawObj.matrixAutoUpdate = false;\r\n drawObj.matrix = this._Matrix;\r\n drawObj.updateMatrixWorld(true);\r\n drawObj.traverse(UpdateBoundingSphere);\r\n\r\n if (!this.IsEmbedEntity)\r\n drawObj.userData.Entity = this;\r\n\r\n this._CacheDrawObject.set(renderType, drawObj);\r\n return drawObj;\r\n }\r\n }\r\n\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n return undefined;\r\n }\r\n\r\n //实体绘制更新版本号\r\n __UpdateVersion__ = 0;\r\n\r\n /**\r\n * 当实体数据改变时,绘制的实体必须做出改变.供框架调用\r\n */\r\n @iaop\r\n Update(mode = UpdateDraw.All)\r\n {\r\n this.__UpdateVersion__++;\r\n this.NeedUpdateFlag |= mode;\r\n if (this.AutoUpdate)\r\n this.DeferUpdate();\r\n }\r\n\r\n //三维实体总是一起生成线框实体和网格实体,这个通知更新,然后统一更新就好了\r\n //避免重复更新\r\n UpdateDrawGeometry() { }\r\n\r\n DeferUpdate()\r\n {\r\n let mode = this.NeedUpdateFlag;\r\n if (mode === 0) return;\r\n\r\n if (mode & UpdateDraw.Geometry && this._CacheDrawObject.size > 0)\r\n this.UpdateDrawGeometry();\r\n\r\n this.UpdateVisible();\r\n\r\n let isJigIng = this._CacheDrawObject.has(RenderType.Jig);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (isJigIng && type !== RenderType.Jig)\r\n continue;\r\n\r\n if (mode & UpdateDraw.Geometry)\r\n {\r\n if (obj.userData.IsClone)\r\n {\r\n let parent = obj.parent;\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.delete(type);\r\n let newObj = this.GetDrawObjectFromRenderType(type);\r\n if (parent)\r\n {\r\n parent.remove(obj);\r\n parent.add(newObj);\r\n }\r\n obj = newObj;\r\n }\r\n else\r\n this.UpdateDrawObject(type, obj);\r\n }\r\n\r\n if (mode & UpdateDraw.Material)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n\r\n if (mode & UpdateDraw.Matrix || mode & UpdateDraw.Geometry)\r\n {\r\n obj.updateMatrixWorld(true);\r\n // if (this.Id)//如果这个是Jig实体,那么我们更新这个盒子球似乎也没有意义 (虽然这在某些情况能改进性能,但是在绘制圆弧的时候,因为没有更新圆弧的盒子,导致绘制出来的圆弧无法被选中)\r\n obj.traverse(UpdateBoundingSphere);\r\n }\r\n\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n /**\r\n * 当实体需要更新时,需要重载该方法,实现实体更新\r\n */\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n\r\n }\r\n\r\n protected get MeshMaterial()\r\n {\r\n if (this.materialId && this.materialId.Object)\r\n return (this.materialId.Object).Material as MeshStandardMaterial;\r\n return HostApplicationServices.DefaultMeshMaterial;\r\n }\r\n\r\n /**\r\n * 更新实体Jig状态时的材质\r\n */\r\n UpdateJigMaterial(color = 8)\r\n {\r\n }\r\n RestoreJigMaterial()\r\n {\r\n for (let [type, en] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, en);\r\n }\r\n get Visible()\r\n {\r\n return this._Visible;\r\n }\r\n set Visible(v: boolean)\r\n {\r\n if (v !== this._Visible)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Visible = v;\r\n this.UpdateVisible();\r\n }\r\n }\r\n\r\n private get IsVisible()\r\n {\r\n return !this._isErase && this._Visible;\r\n }\r\n\r\n UpdateVisible()\r\n {\r\n if (this._drawObject)\r\n {\r\n this._drawObject.visible = this.IsVisible;\r\n if (this.IsVisible)\r\n this.UpdateRenderType(userConfig.RenderType);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n GoodBye()\r\n {\r\n super.GoodBye();\r\n if (this._drawObject && this._drawObject.parent)\r\n this._drawObject.parent.remove(this._drawObject);\r\n this.ClearDraw();\r\n }\r\n\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this._isErase)\r\n return;\r\n this.__UpdateVersion__++;\r\n super.Erase(isErase);\r\n this.UpdateVisible();\r\n this.EraseEvent(isErase);\r\n }\r\n\r\n @iaop\r\n EraseEvent(isErase: boolean)\r\n {\r\n\r\n }\r\n /**\r\n * 使用统一的方法设置对象的矩阵.\r\n * 需要对缩放矩形进行重载.避免对象矩阵不是单位矩阵\r\n */\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (equaln(m.getMaxScaleOnAxis(), 1))\r\n {\r\n let xA = new Vector3();\r\n let yA = new Vector3();\r\n let zA = new Vector3();\r\n m.extractBasis(xA, yA, zA);\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n if (!equalv3(xA.clone().cross(yA).normalize(), zA))\r\n this.ApplyMirrorMatrix(m);\r\n else\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n else\r\n {\r\n this.ApplyScaleMatrix(m);\r\n }\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n\r\n }\r\n\r\n /**\r\n *\r\n * @param snapMode 捕捉模式(单一)\r\n * @param pickPoint const\r\n * @param lastPoint const\r\n * @param viewXform const 最近点捕捉需要这个变量\r\n * @returns object snap points\r\n */\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n return [];\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n *\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\r\n * @memberof Entity\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n\r\n }\r\n IntersectWith(curve: Entity, intType: IntersectOption): Vector3[] { return; }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._CurRenderType = this._CurRenderType;\r\n ent.Template = undefined;\r\n ent.CloneDrawObject(this);\r\n return ent;\r\n }\r\n\r\n CloneDrawObject(from: this)\r\n {\r\n for (let [type, obj] of from._CacheDrawObject)\r\n {\r\n let oldUserDaata = obj.userData;\r\n obj.traverse(o => o.userData = {});\r\n let newObj = obj.clone();\r\n obj.userData = oldUserDaata;\r\n obj.userData.IsClone = true;\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n newObj.userData.IsClone = true;\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n static __ReadFileIng__: boolean;\r\n __ReadFileIng__: boolean;\r\n\r\n get ReadFileIng()\r\n {\r\n return this.__ReadFileIng__ || Entity.__ReadFileIng__;\r\n }\r\n\r\n /**\r\n * 从文件读取,序列化自身,如果需要,重载_ReadFile\r\n */\r\n ReadFile(file: CADFiler)\r\n {\r\n this.__ReadFileIng__ = true;\r\n this._ReadFile(file);\r\n this.Update();\r\n this.__ReadFileIng__ = false;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._Color = file.Read();\r\n this.materialId = file.ReadHardObjectId();\r\n this._Matrix.fromArray(file.Read());\r\n\r\n if (ver === 2)\r\n this.Owner = file.ReadObjectId();\r\n\r\n if (ver > 3)\r\n this.Template = file.ReadObjectId();\r\n\r\n if (ver > 4)\r\n this.GroupId = file.ReadHardObjectId();\r\n\r\n if (ver > 5)\r\n this._Visible = file.Read();\r\n if (ver > 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n if (ver > 7)\r\n {\r\n let count = file.Read();\r\n this.ProcessingGroupList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.ProcessingGroupList.push(file.ReadHardObjectId());\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(8);\r\n super.WriteFile(file);\r\n file.Write(this._Color);\r\n file.WriteHardObjectId(this.materialId);\r\n file.Write(this._Matrix.toArray());\r\n file.WriteObjectId(this.Template);\r\n file.WriteHardObjectId(this.GroupId);\r\n file.Write(this._Visible);\r\n file.Write(this._SpaceOCS.toArray());\r\n\r\n file.Write(this.ProcessingGroupList.length);\r\n for (let id of this.ProcessingGroupList)\r\n file.WriteHardObjectId(id);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n\r\n CopyFrom(obj: CADObject)\r\n {\r\n let templateIdBak = this.Template;\r\n super.CopyFrom(obj);\r\n this.Update();\r\n this.Template = templateIdBak;\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { CADFactory } from './CADFactory';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\r\nimport { Entity } from './Entity/Entity';\r\n\r\n/**\r\n * CAD文件数据\r\n */\r\nexport class CADFiler\r\n{\r\n database: Database;\r\n private readIndex: number = 0;\r\n constructor(protected _datas: any[] = [])\r\n {\r\n }\r\n\r\n Destroy()\r\n {\r\n delete this._datas;\r\n delete this.readIndex;\r\n }\r\n\r\n get Data(): any[]\r\n {\r\n return this._datas;\r\n }\r\n\r\n set Data(data: any[])\r\n {\r\n this._datas = data;\r\n this.Reset();\r\n }\r\n\r\n Clear()\r\n {\r\n this._datas.length = 0;\r\n return this.Reset();\r\n }\r\n Reset()\r\n {\r\n this.readIndex = 0;\r\n return this;\r\n }\r\n\r\n WriteString(str: string)\r\n {\r\n this._datas.push(str);\r\n return this;\r\n }\r\n\r\n ReadString(): string\r\n {\r\n return this._datas[this.readIndex++] as string;\r\n }\r\n\r\n WriteObject(obj: ISerialize)\r\n {\r\n if (!obj)\r\n {\r\n this.Write(\"\");\r\n return;\r\n }\r\n this.WriteString(obj.constructor.name);\r\n obj.WriteFile(this);\r\n\r\n return this;\r\n }\r\n\r\n ReadObject(obj?: T): T\r\n {\r\n let className = this.ReadString();\r\n if (className)\r\n {\r\n if (obj === undefined)\r\n {\r\n obj = CADFactory.CreateObject(className);\r\n if (this.database !== undefined && obj instanceof CADObject)\r\n obj.SetDefaultDb(this.database);\r\n }\r\n obj.ReadFile(this);\r\n return obj;\r\n }\r\n }\r\n\r\n CloneObjects(objects: CADObject[], clonedObjects: CADObject[] = [])\r\n {\r\n for (let o of objects)\r\n this.WriteObject(o);\r\n let count = objects.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let obj = this.ReadObject();\r\n if (obj instanceof Entity)\r\n obj.CloneDrawObject(objects[i] as Entity);\r\n clonedObjects.push(obj);\r\n }\r\n\r\n return clonedObjects;\r\n }\r\n\r\n Write(data: any)\r\n {\r\n if (data instanceof ObjectId)\r\n this._datas.push(data.Index);\r\n else\r\n this._datas.push(data);\r\n\r\n return this;\r\n }\r\n\r\n Read(): any\r\n {\r\n return this._datas[this.readIndex++];\r\n }\r\n\r\n ReadArray(count: number): any[]\r\n {\r\n let arr = this._datas.slice(this.readIndex, this.readIndex + count);\r\n this.readIndex += count;\r\n return arr;\r\n }\r\n\r\n //------------------------ID序列化------------------------\r\n /*\r\n Id关联分为三种情况:\r\n 1.普通关联:关联对象未被拷贝时,关联到空对象.\r\n 2.软关联 :关联对象未被拷贝时,关联到原先的对象.\r\n 3.硬关联 :对象被拷贝时,被关联的对象必须也被拷贝.\r\n */\r\n\r\n //-------1.普通关联\r\n WriteObjectId(id: ObjectId): this\r\n {\r\n if (id)\r\n this.Write(id.Index);\r\n else\r\n this.Write(0);\r\n return this;\r\n }\r\n\r\n ReadObjectId(): ObjectId\r\n {\r\n let index = this.Read();\r\n if (this.database)\r\n return this.database.GetObjectId(index, true);\r\n }\r\n\r\n //-------2.软关联\r\n WriteSoftObjectId(id: ObjectId): this\r\n {\r\n return this.WriteObjectId(id);\r\n }\r\n ReadSoftObjectId(): ObjectId\r\n {\r\n return this.ReadObjectId();\r\n }\r\n\r\n //-------3.硬关联\r\n WriteHardObjectId(id: ObjectId): this\r\n {\r\n return this.WriteObjectId(id);\r\n }\r\n ReadHardObjectId()\r\n {\r\n return this.ReadObjectId();\r\n }\r\n\r\n //序列化\r\n ToString()\r\n {\r\n return JSON.stringify(this._datas);\r\n }\r\n FromString(str: string)\r\n {\r\n this._datas = JSON.parse(str);\r\n }\r\n}\r\n","import { ShaderMaterialParameters, Vector3 } from \"three\";\r\n\r\n//https://github.com/arefin86/arefin86.github.io/blob/master/js/shaders/GoochShader.js\r\nexport function GetGoochShader()\r\n{\r\n return {\r\n uniforms: {\r\n \"LightPosition\": { type: \"v3\", value: new Vector3(-200, 0, 200) },\r\n \"SurfaceColor\": { type: \"v3\", value: new Vector3(1.0, 1.0, 0.) },\r\n \"WarmColor\": { type: \"v3\", value: new Vector3(1.0, 0.5, 0.0) },\r\n \"CoolColor\": { type: \"v3\", value: new Vector3(0, 0, 0.7) },\r\n \"DiffuseWarm\": { type: \"f\", value: 0.45 },\r\n \"DiffuseCool\": { type: \"f\", value: 0.1 }\r\n },\r\n\r\n vertexShader: require(\"./Goodch2.vs\"),\r\n fragmentShader: require(\"./Goodch2.fs\")\r\n };\r\n}\r\n\r\nexport function GetGoodShaderSimple(color: Vector3 = new Vector3): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color }\r\n },\r\n vertexShader: require(\"./GoodchSimple.vs\"),\r\n fragmentShader: require(\"./GoodchSimple.fs\"),\r\n\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: 1\r\n };\r\n}\r\n","import { Color, DoubleSide, LineBasicMaterial, LineDashedMaterial, MeshBasicMaterial, ShaderMaterial, Vector3, Vector2 } from 'three';\r\nimport { GetGoodShaderSimple } from '../GLSL/GoochShader';\r\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\r\n\r\nconst ColorPalette = [\r\n [0, 0, 0, 0], //----- 0 - lets make it red for an example\r\n //[255, 255, 255, 255],//----- 0 - ByBlock - White\r\n [255, 0, 0, 255], //----- 1 - Red\r\n // [255, 0, 0, 255], //----- 1 - Red\r\n [255, 255, 0, 255], //----- 2 - Yellow\r\n [0, 255, 0, 255], //----- 3 - Green\r\n [0, 255, 255, 255], //----- 4 - Cyan\r\n [0, 0, 255, 255], //----- 5 - Blue\r\n [255, 0, 255, 255], //----- 6 - Magenta\r\n // [255, 0, 0, 255], //----- 7 - More red Red\r\n // [255, 0, 0, 255], //----- 8 - More red Red\r\n // [255, 0, 0, 255], //----- 9 - More red Red\r\n [255, 255, 255, 255],//----- 7 - White\r\n [128, 128, 128, 255],//----- 8\r\n [192, 192, 192, 255],//----- 9\r\n [255, 0, 0, 255], //----- 10\r\n [255, 127, 127, 255],//----- 11\r\n [165, 0, 0, 255], //----- 12\r\n [165, 82, 82, 255], //----- 13\r\n [127, 0, 0, 255], //----- 14\r\n [127, 63, 63, 255], //----- 15\r\n [76, 0, 0, 255], //----- 16\r\n [76, 38, 38, 255], //----- 17\r\n [38, 0, 0, 255], //----- 18\r\n [38, 19, 19, 255], //----- 19\r\n [255, 63, 0, 255], //----- 20\r\n [255, 159, 127, 255],//----- 21\r\n [165, 41, 0, 255], //----- 22\r\n [165, 103, 82, 255], //----- 23\r\n [127, 31, 0, 255], //----- 24\r\n [127, 79, 63, 255], //----- 25\r\n [76, 19, 0, 255], //----- 26\r\n [76, 47, 38, 255], //----- 27\r\n [38, 9, 0, 255], //----- 28\r\n [38, 23, 19, 255], //----- 29\r\n [255, 127, 0, 255], //----- 30\r\n [255, 191, 127, 255],//----- 31\r\n [165, 82, 0, 255], //----- 32\r\n [165, 124, 82, 255], //----- 33\r\n [127, 63, 0, 255], //----- 34\r\n [127, 95, 63, 255], //----- 35\r\n [76, 38, 0, 255], //----- 36\r\n [76, 57, 38, 255], //----- 37\r\n [38, 19, 0, 255], //----- 38\r\n [38, 28, 19, 255], //----- 39\r\n [255, 191, 0, 255], //----- 40\r\n [255, 223, 127, 255],//----- 41\r\n [165, 124, 0, 255], //----- 42\r\n [165, 145, 82, 255], //----- 43\r\n [127, 95, 0, 255], //----- 44\r\n [127, 111, 63, 255], //----- 45\r\n [76, 57, 0, 255], //----- 46\r\n [76, 66, 38, 255], //----- 47\r\n [38, 28, 0, 255], //----- 48\r\n [38, 33, 19, 255], //----- 49\r\n [255, 255, 0, 255], //----- 50\r\n [255, 255, 127, 255],//----- 51\r\n [165, 165, 0, 255], //----- 52\r\n [165, 165, 82, 255], //----- 53\r\n [127, 127, 0, 255], //----- 54\r\n [127, 127, 63, 255], //----- 55\r\n [76, 76, 0, 255], //----- 56\r\n [76, 76, 38, 255], //----- 57\r\n [38, 38, 0, 255], //----- 58\r\n [38, 38, 19, 255], //----- 59\r\n [191, 255, 0, 255], //----- 60\r\n [223, 255, 127, 255],//----- 61\r\n [124, 165, 0, 255], //----- 62\r\n [145, 165, 82, 255], //----- 63\r\n [95, 127, 0, 255], //----- 64\r\n [111, 127, 63, 255], //----- 65\r\n [57, 76, 0, 255], //----- 66\r\n [66, 76, 38, 255], //----- 67\r\n [28, 38, 0, 255], //----- 68\r\n [33, 38, 19, 255], //----- 69\r\n [127, 255, 0, 255], //----- 70\r\n [191, 255, 127, 255],//----- 71\r\n [82, 165, 0, 255], //----- 72\r\n [124, 165, 82, 255], //----- 73\r\n [63, 127, 0, 255], //----- 74\r\n [95, 127, 63, 255], //----- 75\r\n [38, 76, 0, 255], //----- 76\r\n [57, 76, 38, 255], //----- 77\r\n [19, 38, 0, 255], //----- 78\r\n [28, 38, 19, 255], //----- 79\r\n [63, 255, 0, 255], //----- 80\r\n [159, 255, 127, 255],//----- 81\r\n [41, 165, 0, 255], //----- 82\r\n [103, 165, 82, 255], //----- 83\r\n [31, 127, 0, 255], //----- 84\r\n [79, 127, 63, 255], //----- 85\r\n [19, 76, 0, 255], //----- 86\r\n [47, 76, 38, 255], //----- 87\r\n [9, 38, 0, 255], //----- 88\r\n [23, 38, 19, 255], //----- 89\r\n [0, 255, 0, 255], //----- 90\r\n [127, 255, 127, 255],//----- 91\r\n [0, 165, 0, 255], //----- 92\r\n [82, 165, 82, 255], //----- 93\r\n [0, 127, 0, 255], //----- 94\r\n [63, 127, 63, 255], //----- 95\r\n [0, 76, 0, 255], //----- 96\r\n [38, 76, 38, 255], //----- 97\r\n [0, 38, 0, 255], //----- 98\r\n [19, 38, 19, 255], //----- 99\r\n [0, 255, 63, 255], //----- 100\r\n [127, 255, 159, 255],//----- 101\r\n [0, 165, 41, 255], //----- 102\r\n [82, 165, 103, 255], //----- 103\r\n [0, 127, 31, 255], //----- 104\r\n [63, 127, 79, 255], //----- 105\r\n [0, 76, 19, 255], //----- 106\r\n [38, 76, 47, 255], //----- 107\r\n [0, 38, 9, 255], //----- 108\r\n [19, 38, 23, 255], //----- 109\r\n [0, 255, 127, 255], //----- 110\r\n [127, 255, 191, 255],//----- 111\r\n [0, 165, 82, 255], //----- 112\r\n [82, 165, 124, 255], //----- 113\r\n [0, 127, 63, 255], //----- 114\r\n [63, 127, 95, 255], //----- 115\r\n [0, 76, 38, 255], //----- 116\r\n [38, 76, 57, 255], //----- 117\r\n [0, 38, 19, 255], //----- 118\r\n [19, 38, 28, 255], //----- 119\r\n [0, 255, 191, 255], //----- 120\r\n [127, 255, 223, 255],//----- 121\r\n [0, 165, 124, 255], //----- 122\r\n [82, 165, 145, 255], //----- 123\r\n [0, 127, 95, 255], //----- 124\r\n [63, 127, 111, 255], //----- 125\r\n [0, 76, 57, 255], //----- 126\r\n [38, 76, 66, 255], //----- 127\r\n [0, 38, 28, 255], //----- 128\r\n [19, 38, 33, 255], //----- 129\r\n [0, 255, 255, 255], //----- 130\r\n [127, 255, 255, 255],//----- 131\r\n [0, 165, 165, 255], //----- 132\r\n [82, 165, 165, 255], //----- 133\r\n [0, 127, 127, 255], //----- 134\r\n [63, 127, 127, 255], //----- 135\r\n [0, 76, 76, 255], //----- 136\r\n [38, 76, 76, 255], //----- 137\r\n [0, 38, 38, 255], //----- 138\r\n [19, 38, 38, 255], //----- 139\r\n [0, 191, 255, 255], //----- 140\r\n [127, 223, 255, 255],//----- 141\r\n [0, 124, 165, 255], //----- 142\r\n [82, 145, 165, 255], //----- 143\r\n [0, 95, 127, 255], //----- 144\r\n [63, 111, 127, 255], //----- 145\r\n [0, 57, 76, 255], //----- 146\r\n [38, 66, 76, 255], //----- 147\r\n [0, 28, 38, 255], //----- 148\r\n [19, 33, 38, 255], //----- 149\r\n [0, 127, 255, 255], //----- 150\r\n [127, 191, 255, 255],//----- 151\r\n [0, 82, 165, 255], //----- 152\r\n [82, 124, 165, 255], //----- 153\r\n [0, 63, 127, 255], //----- 154\r\n [63, 95, 127, 255], //----- 155\r\n [0, 38, 76, 255], //----- 156\r\n [38, 57, 76, 255], //----- 157\r\n [0, 19, 38, 255], //----- 158\r\n [19, 28, 38, 255], //----- 159\r\n [0, 63, 255, 255], //----- 160\r\n [127, 159, 255, 255],//----- 161\r\n [0, 41, 165, 255], //----- 162\r\n [82, 103, 165, 255], //----- 163\r\n [0, 31, 127, 255], //----- 164\r\n [63, 79, 127, 255], //----- 165\r\n [0, 19, 76, 255], //----- 166\r\n [38, 47, 76, 255], //----- 167\r\n [0, 9, 38, 255], //----- 168\r\n [19, 23, 38, 255], //----- 169\r\n [0, 0, 255, 255], //----- 170\r\n [127, 127, 255, 255],//----- 171\r\n [0, 0, 165, 255], //----- 172\r\n [82, 82, 165, 255], //----- 173\r\n [0, 0, 127, 255], //----- 174\r\n [63, 63, 127, 255], //----- 175\r\n [0, 0, 76, 255], //----- 176\r\n [38, 38, 76, 255], //----- 177\r\n [0, 0, 38, 255], //----- 178\r\n [19, 19, 38, 255], //----- 179\r\n [63, 0, 255, 255], //----- 180\r\n [159, 127, 255, 255],//----- 181\r\n [41, 0, 165, 255], //----- 182\r\n [103, 82, 165, 255], //----- 183\r\n [31, 0, 127, 255], //----- 184\r\n [79, 63, 127, 255], //----- 185\r\n [19, 0, 76, 255], //----- 186\r\n [47, 38, 76, 255], //----- 187\r\n [9, 0, 38, 255], //----- 188\r\n [23, 19, 38, 255], //----- 189\r\n [127, 0, 255, 255], //----- 190\r\n [191, 127, 255, 255],//----- 191\r\n [82, 0, 165, 255], //----- 192\r\n [124, 82, 165, 255], //----- 193\r\n [63, 0, 127, 255], //----- 194\r\n [95, 63, 127, 255], //----- 195\r\n [38, 0, 76, 255], //----- 196\r\n [57, 38, 76, 255], //----- 197\r\n [19, 0, 38, 255], //----- 198\r\n [28, 19, 38, 255], //----- 199\r\n [191, 0, 255, 255], //----- 200\r\n [223, 127, 255, 255],//----- 201\r\n [124, 0, 165, 255], //----- 202\r\n [145, 82, 165, 255], //----- 203\r\n [95, 0, 127, 255], //----- 204\r\n [111, 63, 127, 255], //----- 205\r\n [57, 0, 76, 255], //----- 206\r\n [66, 38, 76, 255], //----- 207\r\n [28, 0, 38, 255], //----- 208\r\n [33, 19, 38, 255], //----- 209\r\n [255, 0, 255, 255], //----- 210\r\n [255, 127, 255, 255],//----- 211\r\n [165, 0, 165, 255], //----- 212\r\n [165, 82, 165, 255], //----- 213\r\n [127, 0, 127, 255], //----- 214\r\n [127, 63, 127, 255], //----- 215\r\n [76, 0, 76, 255], //----- 216\r\n [76, 38, 76, 255], //----- 217\r\n [38, 0, 38, 255], //----- 218\r\n [38, 19, 38, 255], //----- 219\r\n [255, 0, 191, 255], //----- 220\r\n [255, 127, 223, 255],//----- 221\r\n [165, 0, 124, 255], //----- 222\r\n [165, 82, 145, 255], //----- 223\r\n [127, 0, 95, 255], //----- 224\r\n [127, 63, 111, 255], //----- 225\r\n [76, 0, 57, 255], //----- 226\r\n [76, 38, 66, 255], //----- 227\r\n [38, 0, 28, 255], //----- 228\r\n [38, 19, 33, 255], //----- 229\r\n [255, 0, 127, 255], //----- 230\r\n [255, 127, 191, 255],//----- 231\r\n [165, 0, 82, 255], //----- 232\r\n [165, 82, 124, 255], //----- 233\r\n [127, 0, 63, 255], //----- 234\r\n [127, 63, 95, 255], //----- 235\r\n [76, 0, 38, 255], //----- 236\r\n [76, 38, 57, 255], //----- 237\r\n [38, 0, 19, 255], //----- 238\r\n [38, 19, 28, 255], //----- 239\r\n [255, 0, 63, 255], //----- 240\r\n [255, 127, 159, 255],//----- 241\r\n [165, 0, 41, 255], //----- 242\r\n [165, 82, 103, 255], //----- 243\r\n [127, 0, 31, 255], //----- 244\r\n [127, 63, 79, 255], //----- 245\r\n [76, 0, 19, 255], //----- 246\r\n [76, 38, 47, 255], //----- 247\r\n [38, 0, 9, 255], //----- 248\r\n [38, 19, 23, 255], //----- 249\r\n [84, 84, 84, 255], //----- 250\r\n [118, 118, 118, 255],//----- 251\r\n [152, 152, 152, 255],//----- 252\r\n [186, 186, 186, 255],//----- 253\r\n [220, 220, 220, 255],//----- 254\r\n [255, 255, 255, 255],//----- 255\r\n [0, 0, 0, 0] //----- ByLayer - White\r\n];\r\n\r\nexport const LINE_WIDTH = 2;\r\n\r\n//颜色材质,对于二维图像来说可能有用,应该不对三维对象使用该材质\r\nexport class ColorMaterial\r\n{\r\n private constructor() { }\r\n private static _LineMaterialMap = new Map();\r\n private static _BasicMaterialMap = new Map();\r\n static GetLineMaterial(color: number): LineBasicMaterial\r\n {\r\n if (this._LineMaterialMap.has(color))\r\n return this._LineMaterialMap.get(color);\r\n let mat = new LineBasicMaterial({ color: this.GetColor(color) });\r\n this._LineMaterialMap.set(color, mat);\r\n return mat;\r\n }\r\n\r\n static GetBasicMaterial(color: number): MeshBasicMaterial\r\n {\r\n if (this._BasicMaterialMap.has(color))\r\n return this._BasicMaterialMap.get(color);\r\n let mtl = new MeshBasicMaterial({ color: this.GetColor(color) });\r\n this._BasicMaterialMap.set(color, mtl);\r\n return mtl;\r\n }\r\n\r\n private static _BasicDoubleSideMaterialMap = new Map();\r\n static GetBasicMaterialDoubleSide(color: number): MeshBasicMaterial\r\n {\r\n if (this._BasicDoubleSideMaterialMap.has(color))\r\n return this._BasicDoubleSideMaterialMap.get(color);\r\n let mtl = new MeshBasicMaterial({ color: this.GetColor(color), side: DoubleSide });\r\n this._BasicDoubleSideMaterialMap.set(color, mtl);\r\n return mtl;\r\n }\r\n\r\n private static _ConceptualMaterial: Map = new Map();\r\n static GetConceptualMaterial(color: number)\r\n {\r\n if (this._ConceptualMaterial.has(color))\r\n return this._ConceptualMaterial.get(color);\r\n\r\n let shaderParams = GetGoodShaderSimple(\r\n new Vector3().fromArray(this.GetColor(color).toArray())\r\n );\r\n let mtl = new ShaderMaterial(shaderParams);\r\n this._ConceptualMaterial.set(color, mtl);\r\n return mtl;\r\n }\r\n private static _printConceptualMaterial: ShaderMaterial;\r\n static GetPrintConceptualMaterial()\r\n {\r\n if (!this._printConceptualMaterial)\r\n {\r\n this._printConceptualMaterial = new ShaderMaterial({\r\n uniforms: {\r\n \"SurfaceColor\": { value: [1.0, 1.0, 1.0] }\r\n },\r\n vertexShader: require(\"../GLSL/GoodchSimple.vs\"),\r\n fragmentShader: require(\"../GLSL/GoodchSimple2.fs\"),\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: LINE_WIDTH\r\n });\r\n }\r\n return this._printConceptualMaterial;\r\n }\r\n\r\n private static _BasicTransparentMaterialMap: Map = new Map();\r\n static GetBasicMaterialTransparent(color: number, opacity: number)\r\n {\r\n let key = `${color},${opacity}`;\r\n let mat = this._BasicTransparentMaterialMap.get(key);\r\n if (mat) return mat;\r\n mat = new MeshBasicMaterial({ transparent: true, opacity: opacity, side: DoubleSide });\r\n this._BasicTransparentMaterialMap.set(key, mat);\r\n return mat;\r\n }\r\n\r\n private static _BasicTransparentMaterialMap2: Map = new Map();\r\n static GetBasicMaterialTransparent2(color: number, opacity: number)\r\n {\r\n let key = `${color},${opacity}`;\r\n let mat = this._BasicTransparentMaterialMap2.get(key);\r\n if (mat) return mat;\r\n mat = new MeshBasicMaterial({ transparent: true, opacity: opacity });\r\n this._BasicTransparentMaterialMap2.set(key, mat);\r\n return mat;\r\n }\r\n\r\n static GetColor(color: number)\r\n {\r\n let rgb = ColorPalette[color];\r\n if (rgb)\r\n return new Color(rgb[0] / 255, rgb[1] / 255, rgb[2] / 255);\r\n\r\n //避免无法获得到颜色而产生的错误\r\n return new Color();\r\n }\r\n\r\n //橡皮筋材质: 黄色 点划线\r\n static RubberBandMaterial = new LineDashedMaterial({\r\n color: 0xF0B41E,\r\n dashSize: 20,\r\n gapSize: 8,\r\n });\r\n\r\n //极轴材质: 绿色 点划线\r\n static SnapAxisMaterial = new LineDashedMaterial({\r\n color: 0x008B00,\r\n dashSize: 5,\r\n gapSize: 5\r\n });\r\n static PrintLineMatrial = new LineMaterial({\r\n color: 0x000000,\r\n linewidth: LINE_WIDTH,\r\n dashed: false,\r\n resolution: new Vector2(1000, 1000)\r\n });\r\n static GrayTransparentMeshMaterial = new MeshBasicMaterial({\r\n color: 0xcccccc,\r\n transparent: true,\r\n opacity: 0.3,\r\n });\r\n static TransparentMeshMaterial = new MeshBasicMaterial({\r\n transparent: true,\r\n opacity: 0,\r\n });\r\n static TransparentLineMaterial = new MeshBasicMaterial({\r\n transparent: true,\r\n opacity: 0,\r\n });\r\n}\r\n","/**\r\n * 删除数组中指定的元素,返回数组本身\r\n * @param {Array} arr 需要操作的数组\r\n * @param {*} el 需要移除的元素\r\n */\r\nexport function arrayRemove(arr: Array, el: T): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (arr[i] !== el)\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\n\r\nexport function arrayRemoveOnce(arr: Array, el: T): Array\r\n{\r\n let index = arr.indexOf(el);\r\n if (index !== -1)\r\n arr.splice(index, 1);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 删除通过函数校验的元素\r\n * @param {(e: T) => boolean} checkFuntion 校验函数\r\n */\r\nexport function arrayRemoveIf(arr: Array, checkFuntion: (e: T) => boolean): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (!checkFuntion(arr[i]))\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\nexport function arrayFirst(arr: Array): T\r\n{\r\n return arr[0];\r\n}\r\n\r\nexport function arrayLast(arr: { [key: number]: T, length: number; }): T\r\n{\r\n return arr[arr.length - 1];\r\n}\r\n\r\n/**\r\n * 根据数值从小到大排序数组\r\n * @param {Array} arr\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arraySortByNumber(arr: Array): Array\r\n{\r\n arr.sort(sortNumberCompart);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 对排序好的数组进行去重操作\r\n * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arrayRemoveDuplicateBySort(arr: Array, checkFuction: (e1: T, e2: T) => boolean = checkEqual): Array\r\n{\r\n if (arr.length < 2) return arr;\r\n let j = 1;\r\n for (let i = 1, l = arr.length; i < l; i++)\r\n if (!checkFuction(arr[j - 1], arr[i]))\r\n arr[j++] = arr[i];\r\n arr.length = j;\r\n return arr;\r\n}\r\n\r\n//原地更新数组,注意这个函数并不会比map快.\r\nexport function arrayMap(arr: Array, mapFunc: (v: T) => T): Array\r\n{\r\n for (let i = 0, count = arr.length; i < count; i++)\r\n arr[i] = mapFunc(arr[i]);\r\n return arr;\r\n}\r\n\r\nfunction sortNumberCompart(e1: any, e2: any)\r\n{\r\n return e1 - e2;\r\n}\r\n\r\nfunction checkEqual(e1: any, e2: any): boolean\r\n{\r\n return e1 === e2;\r\n}\r\n\r\n/**\r\n * 改变数组的值顺序\r\n * @param arr 需要改变初始值位置的数组\r\n * @param index //将index位置以后的值放到起始位置\r\n */\r\nexport function changeArrayStartIndex(arr: T[], index: number): T[]\r\n{\r\n arr.unshift(...arr.splice(index));\r\n return arr;\r\n}\r\n\r\nexport function equalArray(a: T[], b: T[], checkF = checkEqual)\r\n{\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (var i = 0; i < a.length; ++i)\r\n if (!checkF(a[i], b[i])) return false;\r\n return true;\r\n}\r\n\r\nexport function arrayClone(arr: T[]): T[]\r\n{\r\n return arr.slice();\r\n}\r\n\r\n//https://jsperf.com/merge-array-implementations/30\r\nexport function arrayPushArray(arr1: T[], arr2: T[]): T[]\r\n{\r\n let arr1Length = arr1.length;\r\n let arr2Length = arr2.length;\r\n arr1.length = arr1Length + arr2Length;\r\n for (let i = 0; i < arr2Length; i++)\r\n arr1[arr1Length + i] = arr2[i];\r\n\r\n return arr1;\r\n}\r\n\r\nexport function arraySum(arr: number[])\r\n{\r\n let sum = 0;\r\n for (let n of arr) sum += n;\r\n return sum;\r\n}\r\n\r\nexport function FilterSet(s: Set, fn: (el: T) => boolean): Set\r\n{\r\n let ns = new Set();\r\n for (let el of s)\r\n {\r\n if (fn(el))\r\n ns.add(el);\r\n }\r\n return ns;\r\n}\r\n","\r\n/**\r\n * OSMODE\r\n */\r\nexport enum ObjectSnapMode\r\n{\r\n None = 0, //无\r\n End = 1, //端点\r\n Mid = 2, //中点\r\n Cen = 4, //圆心\r\n Node = 8,//节点\r\n Qua = 16,//象限点\r\n Int = 32,//交点\r\n Ins = 64,//插入点\r\n Per = 128,//垂足\r\n Tan = 256,//切点\r\n Nea = 512,//最近点\r\n NotEntitySnap = 1024,//清除所有对象捕捉\r\n App = 2048,//外观交点\r\n Ext = 4096,//延伸\r\n Par = 8192,//平行\r\n Axis = 16384,//极轴\r\n All = ~(~0 << 15) - 1024,\r\n}\r\n","import { BufferGeometry, Vector3, BufferAttribute, ShapeGeometry, Shape } from \"three\";\r\n\r\nexport namespace BufferGeometryUtils\r\n{\r\n export function CreateFromPts(pts: Vector3[]): BufferGeometry\r\n {\r\n return new BufferGeometry().setFromPoints(pts);\r\n }\r\n\r\n /**\r\n * 更新BufferGeometry的顶点\r\n * @param geo\r\n * @param pts\r\n * @returns 当成功时返回true,更新失败时返回false\r\n */\r\n export function UpdatePts(geo: BufferGeometry, pts: Vector3[]): boolean\r\n {\r\n let bf = geo.getAttribute(\"position\") as BufferAttribute;\r\n if (bf === undefined)\r\n geo.setFromPoints(pts);\r\n else if (bf.count >= pts.length)\r\n {\r\n bf.copyVector3sArray(pts);\r\n bf.needsUpdate = true;\r\n geo.drawRange.count = pts.length;\r\n }\r\n else\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n let arrowGeometry: ShapeGeometry;\r\n export function ArrowGeometry()\r\n {\r\n if (arrowGeometry)\r\n return arrowGeometry;\r\n else\r\n {\r\n let arrowShape = new Shape();\r\n arrowShape.lineTo(-0.5, -1.8);\r\n arrowShape.lineTo(0.5, -1.8);\r\n arrowGeometry = new ShapeGeometry(arrowShape);\r\n arrowGeometry.computeBoundingBox();\r\n return arrowGeometry;\r\n }\r\n }\r\n\r\n export function MergeBufferGeometries(geometries: BufferGeometry[], useGroups: boolean = false): BufferGeometry\r\n {\r\n if (geometries.length === 0)\r\n return new BufferGeometry();\r\n let isIndexed = geometries[0].index !== null;\r\n\r\n let attributesUsed = new Set(Object.keys(geometries[0].attributes));\r\n let morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes));\r\n\r\n let attributes = {};\r\n let morphAttributes = {};\r\n\r\n let morphTargetsRelative = geometries[0].morphTargetsRelative;\r\n\r\n let mergedGeometry = new BufferGeometry();\r\n\r\n let offset = 0;\r\n\r\n for (let i = 0; i < geometries.length; ++i)\r\n {\r\n\r\n let geometry = geometries[i];\r\n\r\n // ensure that all geometries are indexed, or none\r\n\r\n if (isIndexed !== (geometry.index !== null)) return null;\r\n\r\n // gather attributes, exit early if they're different\r\n\r\n for (let name in geometry.attributes)\r\n {\r\n\r\n if (!attributesUsed.has(name)) continue;\r\n\r\n if (attributes[name] === undefined) attributes[name] = [];\r\n\r\n attributes[name].push(geometry.attributes[name]);\r\n\r\n }\r\n\r\n // gather morph attributes, exit early if they're different\r\n\r\n if (morphTargetsRelative !== geometry.morphTargetsRelative) return null;\r\n\r\n for (let name in geometry.morphAttributes)\r\n {\r\n\r\n if (!morphAttributesUsed.has(name)) continue;\r\n\r\n if (morphAttributes[name] === undefined) morphAttributes[name] = [];\r\n\r\n morphAttributes[name].push(geometry.morphAttributes[name]);\r\n\r\n }\r\n\r\n // gather .userData\r\n\r\n mergedGeometry.userData.mergedUserData = mergedGeometry.userData.mergedUserData || [];\r\n mergedGeometry.userData.mergedUserData.push(geometry.userData);\r\n\r\n if (useGroups)\r\n {\r\n\r\n let count: number;\r\n\r\n if (isIndexed)\r\n {\r\n\r\n count = geometry.index.count;\r\n\r\n } else if (geometry.attributes.position !== undefined)\r\n {\r\n\r\n count = geometry.attributes.position.count;\r\n\r\n } else\r\n {\r\n\r\n return null;\r\n\r\n }\r\n\r\n mergedGeometry.addGroup(offset, count, i);\r\n\r\n offset += count;\r\n\r\n }\r\n\r\n }\r\n\r\n // merge indices\r\n\r\n if (isIndexed)\r\n {\r\n\r\n let indexOffset = 0;\r\n let mergedIndex = [];\r\n\r\n for (let i = 0; i < geometries.length; ++i)\r\n {\r\n\r\n let index = geometries[i].index;\r\n\r\n for (let j = 0; j < index.count; ++j)\r\n {\r\n\r\n mergedIndex.push(index.getX(j) + indexOffset);\r\n\r\n }\r\n\r\n indexOffset += geometries[i].attributes.position.count;\r\n\r\n }\r\n\r\n mergedGeometry.setIndex(mergedIndex);\r\n\r\n }\r\n\r\n // merge attributes\r\n\r\n for (let name in attributes)\r\n {\r\n\r\n let mergedAttribute = MergeBufferAttributes(attributes[name]);\r\n\r\n if (!mergedAttribute) return null;\r\n\r\n mergedGeometry.setAttribute(name, mergedAttribute);\r\n\r\n }\r\n\r\n // merge morph attributes\r\n\r\n for (let name in morphAttributes)\r\n {\r\n\r\n let numMorphTargets = morphAttributes[name][0].length;\r\n\r\n if (numMorphTargets === 0) break;\r\n\r\n mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\r\n mergedGeometry.morphAttributes[name] = [];\r\n\r\n for (let i = 0; i < numMorphTargets; ++i)\r\n {\r\n\r\n let morphAttributesToMerge: any[] = [];\r\n\r\n for (let j = 0; j < morphAttributes[name].length; ++j)\r\n {\r\n\r\n morphAttributesToMerge.push(morphAttributes[name][j][i]);\r\n\r\n }\r\n\r\n let mergedMorphAttribute = MergeBufferAttributes(morphAttributesToMerge);\r\n\r\n if (!mergedMorphAttribute) return null;\r\n\r\n mergedGeometry.morphAttributes[name].push(mergedMorphAttribute);\r\n\r\n }\r\n\r\n }\r\n\r\n return mergedGeometry;\r\n\r\n }\r\n\r\n export function MergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute\r\n {\r\n let TypedArray;\r\n let itemSize: number;\r\n let normalized: boolean;\r\n let arrayLength = 0;\r\n\r\n for (let i = 0; i < attributes.length; ++i)\r\n {\r\n\r\n let attribute = attributes[i];\r\n\r\n if (TypedArray === undefined) TypedArray = attribute.array.constructor;\r\n if (TypedArray !== attribute.array.constructor) return null;\r\n\r\n if (itemSize === undefined) itemSize = attribute.itemSize;\r\n if (itemSize !== attribute.itemSize) return null;\r\n\r\n if (normalized === undefined) normalized = attribute.normalized;\r\n if (normalized !== attribute.normalized) return null;\r\n\r\n arrayLength += attribute.array.length;\r\n\r\n }\r\n\r\n let array = new TypedArray(arrayLength);\r\n let offset = 0;\r\n\r\n for (let i = 0; i < attributes.length; ++i)\r\n {\r\n\r\n array.set(attributes[i].array, offset);\r\n\r\n offset += attributes[i].array.length;\r\n\r\n }\r\n\r\n return new BufferAttribute(array, itemSize, normalized);\r\n\r\n }\r\n\r\n}\r\n","import { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { clamp } from \"../Common/Utils\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\n\r\nexport class Shape2 extends Shape\r\n{\r\n getPoints(divisions: number = 12)\r\n {\r\n divisions = divisions || 12;\r\n let points = [], last: Vector2;\r\n for (let i = 0, curves = this.curves; i < curves.length; i++)\r\n {\r\n let curve = curves[i];\r\n //@ts-ignore\r\n let resolution = (curve && curve.isEllipseCurve) ? clamp(curve.getLength() / 20, divisions * 2, 60)\r\n //@ts-ignore\r\n : (curve && (curve.isLineCurve || curve.isLineCurve3)) ? 1\r\n //@ts-ignore\r\n : (curve && curve.isSplineCurve) ? divisions * curve.points.length\r\n : divisions;\r\n\r\n let pts = curve.getPoints(resolution);\r\n\r\n for (let j = 0; j < pts.length; j++)\r\n {\r\n let point = pts[j];\r\n if (last && equalv2(last, point, 1e-4))\r\n continue; // ensures no consecutive points are duplicates\r\n\r\n points.push(point);\r\n last = point;\r\n\r\n if (j === pts.length - 1)\r\n point[\"_mask_\"] = true;\r\n }\r\n }\r\n if (this.autoClose\r\n && points.length > 1\r\n && !points[points.length - 1].equals(points[0]))\r\n {\r\n points.push(points[0]);\r\n }\r\n return points;\r\n }\r\n\r\n\r\n absellipse(aX: number, aY: number, xRadius: number, yRadius: number, aStartAngle: number, aEndAngle: number, aClockwise: boolean, aRotation: number): this\r\n {\r\n let curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation);\r\n\r\n /*\r\n if (this.curves.length > 0)\r\n {\r\n // if a previous curve is present, attempt to join\r\n let firstPoint = curve.getPoint(0);\r\n if (!equalv2(firstPoint, this.currentPoint))\r\n {\r\n this.lineTo(firstPoint.x, firstPoint.y);\r\n }\r\n }\r\n */\r\n\r\n this.curves.push(curve);\r\n\r\n let lastPoint = curve.getPoint(1);\r\n this.currentPoint.copy(lastPoint);\r\n\r\n return this;\r\n }\r\n}\r\n","import { Vector2, Vector3, Matrix4 } from \"three\";\r\n\r\nexport class Matrix2\r\n{\r\n //column-major\r\n el = [1, 0, 0, 1]; //ix iy jx jy [a c b d]\r\n\r\n set(ix: number, iy: number, jx: number, jy: number)\r\n {\r\n this.el[0] = ix;\r\n this.el[1] = iy;\r\n this.el[2] = jx;\r\n this.el[3] = jy;\r\n }\r\n\r\n applyVector(vec: Vector2 | Vector3)\r\n {\r\n let x = vec.x;\r\n let y = vec.y;\r\n let e = this.el;\r\n vec.x = e[0] * x + e[2] * y;\r\n vec.y = e[1] * x + e[3] * y;\r\n return this;\r\n }\r\n\r\n fromMatrix4(mtx4: Matrix4)\r\n {\r\n this.set(mtx4.elements[0], mtx4.elements[1],\r\n mtx4.elements[3], mtx4.elements[4]\r\n );\r\n }\r\n\r\n setRotate(theta: number): this\r\n {\r\n let c = Math.cos(theta);\r\n let s = Math.sin(theta);\r\n this.set(c, s, -s, c);\r\n return this;\r\n }\r\n\r\n //自我求逆矩阵,返回自身\r\n invert(): this\r\n {\r\n //ref:https://www.mathsisfun.com/algebra/matrix-inverse.html\r\n let [a, c, b, d] = this.el;\r\n let det = 1 / (a * d - b * c);\r\n this.set(d * det, -c * det,\r\n -b * det, a * det\r\n );\r\n return this;\r\n }\r\n}\r\n","import { Matrix2 } from './Matrix2';\r\n\r\nlet r = new Matrix2();\r\nexport function RotateUVs(geo: THREE.Geometry)\r\n{\r\n r.set(0, -1,\r\n 1, 0);\r\n\r\n for (let uvs of geo.faceVertexUvs)\r\n {\r\n for (let uv of uvs)\r\n {\r\n for (let v of uv)\r\n r.applyVector(v);\r\n }\r\n }\r\n geo.uvsNeedUpdate = true;\r\n}\r\n","import { ExtrudeGeometry, Matrix4, Mesh, Shape, Vector2 } from 'three';\r\nimport { Shape2 } from '../../DatabaseServices/Shape2';\r\nimport { AsVector3, equaln, polar } from '../../Geometry/GeUtils';\r\nimport { RotateUVs } from '../../Geometry/RotateUV';\r\n\r\nexport namespace CreateBoardUtil\r\n{\r\n //解析二维圆弧\r\n export class Arc2d\r\n {\r\n _StartAn: number;\r\n _EndAn: number;\r\n _StartPoint: Vector2;\r\n _EndPoint: Vector2;\r\n _Center: Vector2;\r\n _Radius: number;\r\n constructor(p1: Vector2, p2: Vector2, bul: number)\r\n {\r\n this._StartPoint = p1.clone();\r\n this._EndPoint = p2.clone();\r\n\r\n let vec: Vector2 = p2.clone().sub(p1);\r\n let len = vec.length();\r\n let an = vec.angle();\r\n this._Radius = len / Math.sin(2 * Math.atan(bul)) / 2;\r\n let allAngle = Math.atan(bul) * 4;\r\n let delDis = bul * len / 2;\r\n let toDis = this._Radius - delDis;\r\n an += Math.PI * 0.5;\r\n\r\n this._Center = p1.clone().add(p2);\r\n this._Center.multiplyScalar(0.5);\r\n\r\n polar(this._Center, an, toDis);\r\n\r\n this._StartAn = p1.clone().sub(this._Center).angle();\r\n this._EndAn = p2.clone().sub(this._Center).angle();\r\n if (bul < 0)\r\n {\r\n //一个神奇的特性 它需要这么做\r\n this._StartAn -= Math.PI;\r\n this._EndAn -= Math.PI;\r\n }\r\n }\r\n }\r\n\r\n\r\n //创建轮廓 通过点表和凸度\r\n export function CreatePath(pts: Vector2[], buls: number[]): Shape\r\n {\r\n let shape = new Shape2();\r\n if (pts.length === 0) return shape;\r\n let firstPt = pts[0];\r\n\r\n shape.moveTo(firstPt.x, firstPt.y);\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let nextPt = pts[i + 1];\r\n if (equaln(buls[i], 0, 1e-8))\r\n {\r\n shape.lineTo(nextPt.x, nextPt.y);\r\n }\r\n else\r\n {\r\n let pt = pts[i];\r\n //参考\r\n //http://www.dorodnic.com/blog/tag/three-js/ 绘制一个齿轮\r\n //https://www.kirupa.com/html5/drawing_circles_canvas.htm //html5\r\n let arc2 = new Arc2d(pt, nextPt, buls[i]);\r\n let cen = arc2._Center;\r\n shape.absarc(cen.x, cen.y, arc2._Radius, arc2._StartAn, arc2._EndAn, buls[i] < 0);\r\n }\r\n }\r\n return shape;\r\n }\r\n\r\n //创建板件 暂时这么写\r\n export function createBoard(boardData: object)\r\n {\r\n var pts: Vector2[] = new Array();\r\n var buls: number[] = new Array();\r\n var boardPts = boardData[\"Pts\"];\r\n var boardBuls = boardData[\"Buls\"];\r\n\r\n let boardHeight = boardData[\"H\"];\r\n\r\n var boardMat = new Matrix4();\r\n var matInv: Matrix4 = new Matrix4();\r\n //InitBoardMat\r\n {\r\n\r\n var xD = AsVector3(boardData[\"XVec\"]);\r\n var yD = AsVector3(boardData[\"YVec\"]);\r\n var ZD = AsVector3(boardData[\"ZVec\"]);\r\n var pBase = AsVector3(boardData[\"BasePoint\"]).multiplyScalar(0.001);\r\n\r\n boardMat.makeBasis(xD, yD, ZD);\r\n boardMat.setPosition(pBase);\r\n matInv.getInverse(boardMat);\r\n }\r\n\r\n for (let i = 0; i < boardPts.length; i++)\r\n {\r\n var pt = AsVector3(boardPts[i]).multiplyScalar(0.001);\r\n pt.applyMatrix4(matInv);\r\n pts.push(new Vector2(pt.x, pt.y));\r\n buls.push(boardBuls[i]);\r\n }\r\n\r\n var sp = CreatePath(pts, buls);\r\n var extrudeSettings = {\r\n steps: 1,\r\n bevelEnabled: false,\r\n amount: boardHeight * 0.001\r\n };\r\n\r\n var ext = new ExtrudeGeometry(sp, extrudeSettings);\r\n ext.translate(0, 0, -boardHeight * 0.001);\r\n ext.applyMatrix4(boardMat);\r\n\r\n if (boardData[\"BoardName\"] === \"地脚线\")\r\n {\r\n RotateUVs(ext);\r\n }\r\n\r\n var mesh = new Mesh(ext);\r\n return mesh;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { angle, clampRad, equalv3 } from \"./GeUtils\";\r\n\r\n//顶点\r\nexport interface Vertice\r\n{\r\n //位置\r\n position: Vector3;\r\n //路径\r\n routes: Route[];\r\n}\r\n\r\n//路线\r\nexport interface Route\r\n{\r\n curve: Curve; //路线的曲线\r\n from: Vertice;\r\n to: Vertice; //终点的点\r\n length: number;\r\n isReverse: boolean;\r\n an?: number; //角度\r\n\r\n s: Vector3;\r\n e: Vector3;\r\n}\r\n\r\n/**\r\n * 曲线连接图\r\n * 所有的顶点和边的关系\r\n */\r\nexport class CurveMap\r\n{\r\n constructor(\r\n public numdimensions = 4,\r\n public _RemoveSortLine = false,\r\n private multiplier = 10 ** numdimensions,\r\n ) { }\r\n\r\n /*\r\n 节点图.\r\n 每个节点对应下一个路口的路线表.\r\n 路口表使用逆时针排序,起始角度使用正x轴.\r\n */\r\n _VerticeMap = new Map();\r\n\r\n _Vertices: Vertice[] = [];\r\n\r\n /**\r\n * 得到节点图的所有站点列表\r\n */\r\n get Stands(): Vertice[]\r\n {\r\n return this._Vertices;\r\n }\r\n\r\n /**\r\n * @param curve\r\n * @param [isArc=curve instanceof Arc]\r\n * @param [removeDuplicate=false]\r\n * @returns 加入成功?\r\n */\r\n AddCurveToMap(curve: Curve, isArc: boolean = curve instanceof Arc, removeDuplicate: boolean = false, parseAngle = false): boolean\r\n {\r\n let sp = curve.StartPoint;\r\n let ep = curve.EndPoint;\r\n let startS = this.GetOnlyVertice(sp);\r\n let endS = this.GetOnlyVertice(ep);\r\n\r\n //在面域分析中,路线指向同一个顶点已经没有意义了\r\n if (this._RemoveSortLine && startS === endS)\r\n return false;\r\n\r\n if (removeDuplicate)//删除重复\r\n {\r\n let index = startS.routes.findIndex(r =>\r\n {\r\n if (r.to === endS && r.curve.constructor.name === curve.constructor.name)\r\n {\r\n if (isArc)\r\n return equalv3(curve.GetPointAtParam(0.5), r.curve.GetPointAtParam(0.5));\r\n return true;\r\n }\r\n });\r\n if (index !== -1) return false;\r\n }\r\n\r\n let length = curve.Length;\r\n curve.TempData = 0;\r\n\r\n let routeS2E: Route = { curve, isReverse: false, length, from: startS, to: endS, s: sp, e: ep };\r\n let routeE2S: Route = { curve, isReverse: true, length, from: endS, to: startS, e: sp, s: ep };\r\n\r\n if (!isArc && parseAngle)\r\n {\r\n let an = angle(endS.position.clone().sub(startS.position));\r\n routeS2E.an = an;\r\n routeE2S.an = clampRad(an + Math.PI);\r\n }\r\n startS.routes.push(routeS2E);\r\n endS.routes.push(routeE2S);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * 获得唯一的顶点\r\n */\r\n GetOnlyVertice(p: Vector3): Vertice\r\n {\r\n let gp = this.GenerateP(p);\r\n if (this._VerticeMap.has(gp))\r\n return this._VerticeMap.get(gp);\r\n\r\n let vertice: Vertice = { position: gp, routes: [] };\r\n this._VerticeMap.set(p, vertice);\r\n this._Vertices.push(vertice);\r\n return vertice;\r\n }\r\n\r\n _LookupTable: { [key: string]: Vector3; } = {};\r\n\r\n /**\r\n * 生成一个唯一的向量.\r\n */\r\n GenerateP(p: Vector3): Vector3\r\n {\r\n let key = \"\";\r\n let els = p.toArray();\r\n for (let n of els)\r\n {\r\n let valueQuantized = Math.round(n * this.multiplier);\r\n key += valueQuantized + '/';\r\n }\r\n\r\n if (key in this._LookupTable)\r\n return this._LookupTable[key];\r\n\r\n let hashparts = els.map((el) =>\r\n {\r\n let q0 = Math.floor(el * this.multiplier);\r\n let q1 = q0 + 1;\r\n return ['' + q0 + '/', '' + q1 + '/'];\r\n });\r\n\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n key = '';\r\n hashparts.forEach(function (hashpart)\r\n {\r\n key += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this._LookupTable[key] = p;\r\n }\r\n return p;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveIf, arrayRemoveOnce } from \"../Common/ArrayExt\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { CurveMap, Route, Vertice } from \"./CurveMap\";\r\nimport { angle } from \"./GeUtils\";\r\n\r\n//区域的路线表 表示了一个区域\r\ntype RegionRouteS = Route[][];\r\n\r\n/**\r\n面域分析,基于最小循环图重新实现的版本,拓展了实现求最大轮廓。\r\n当最大轮廓=最小轮廓时,只绘制最大轮廓(独立轮廓无分裂)。\r\n\r\n算法只实现去重模式,业务场景应该没有非去重模式。\r\n如果需要非去重模式,那么应该获取到多个CurveMap,然后对多个CurveMap进行面域分析,得出多个重叠的面域。\r\n */\r\nexport class RegionParse\r\n{\r\n //区域列表 通常是外轮廓\r\n RegionsOutline: RegionRouteS = [];\r\n //区域列表 通常是内轮廓\r\n RegionsInternal: RegionRouteS = [];\r\n\r\n //碎线 曲线进入到这里会被炸开.\r\n ExpLineMap: Map = new Map();\r\n\r\n private _CurveCount: number;\r\n\r\n /**\r\n * @param cuList 请不要传递圆和椭圆.\r\n * @param [numDimensions=3] 精度:小数点后个数\r\n * @param [removeDuplicate=true] 删除重复(现在必须是true,请不要修改它)\r\n */\r\n constructor(cuList: Curve[], public numDimensions = 3, private removeDuplicate = true)\r\n {\r\n //需要搜索的站\r\n let vertices = this.GenerateVerticeMap(cuList);\r\n\r\n //移除细丝\r\n while (true)\r\n {\r\n let v = vertices.find(v => v.routes.length < 2);\r\n if (v) this.RemoveFilamentAt(v, vertices);\r\n else break;\r\n }\r\n let lowerVertice: Vertice;\r\n while (vertices.length > 0)\r\n {\r\n lowerVertice = lowerVertice?.routes.length > 1 ? lowerVertice : this.FindLowerLeftStand(vertices);\r\n let minWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Min);\r\n let maxWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Max);\r\n\r\n this.RemoveEdge(minWalk[0]);\r\n this.RemoveFilamentAt(minWalk[0].from, vertices);\r\n this.RemoveFilamentAt(minWalk[0].to, vertices);\r\n\r\n minWalk = ReduceWalk(minWalk);\r\n maxWalk = ReduceWalk(maxWalk);\r\n if (maxWalk.length > 1)\r\n {\r\n this.RegionsOutline.push(maxWalk);\r\n if (minWalk.length === maxWalk.length && minWalk.every((w1, index) => w1 === maxWalk[index]))//大小重叠\r\n {\r\n //直接remove,不用计算引用个数\r\n for (let w of minWalk)\r\n {\r\n this.RemoveEdge(w);\r\n this.RemoveFilamentAt(w.from, vertices);\r\n this.RemoveFilamentAt(w.to, vertices);\r\n }\r\n continue;//继续循环\r\n }\r\n else\r\n for (let w of maxWalk)\r\n w.curve.TempData = 1;\r\n }\r\n\r\n if (minWalk.length > 1)// && minWalk.every(w => (w.curve.TempData) < 2) 没有重复线应该不会被用2次\r\n {\r\n this.RegionsInternal.push(minWalk);\r\n for (let w of minWalk)\r\n {\r\n w.curve.TempData++;\r\n if (w.curve.TempData === 2)\r\n {\r\n this.RemoveEdge(w);\r\n this.RemoveFilamentAt(w.from, vertices);\r\n this.RemoveFilamentAt(w.to, vertices);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n RemoveFilamentAt(v: Vertice, vertices: Vertice[])\r\n {\r\n let current = v;\r\n while (current && current.routes.length < 2)\r\n {\r\n vertices = arrayRemoveOnce(vertices, current);\r\n let r = current.routes[0];\r\n if (r)\r\n {\r\n this.RemoveEdge(r);\r\n current = r.to;\r\n }\r\n else\r\n current = undefined;\r\n }\r\n }\r\n\r\n RemoveEdge(r: Route)\r\n {\r\n let index = r.from.routes.findIndex(rr => rr.curve === r.curve);\r\n if (index !== -1)\r\n r.from.routes.splice(index, 1);\r\n\r\n index = r.to.routes.findIndex(rr => rr.curve === r.curve);\r\n if (index !== -1)\r\n r.to.routes.splice(index, 1);\r\n }\r\n\r\n /**\r\n * 找到最下方并且最左边的站 yx\r\n */\r\n private FindLowerLeftStand(vertices: Vertice[]): Vertice\r\n {\r\n return vertices.reduce((m, v) =>\r\n {\r\n let dy = v.position.y - m.position.y;\r\n if (dy < 0) return v;\r\n if (dy > 0) return m;\r\n return v.position.x - m.position.x < 0 ? v : m;\r\n });\r\n }\r\n\r\n /**\r\n * 构造路线图. 每个节点对应下一个路口的路线表. 路口表使用逆时针排序,起始角度使用正x轴.\r\n * @returns 所有的顶点\r\n */\r\n private GenerateVerticeMap(curveList: Curve[]): Array\r\n {\r\n let curveMap = new CurveMap(this.numDimensions, true);\r\n\r\n //将多段线炸开\r\n let plcus: Curve[] = [];\r\n arrayRemoveIf(curveList, c =>\r\n {\r\n if (c instanceof Polyline)\r\n {\r\n let cus = c.Explode();\r\n\r\n //如果为圆弧,提前打断\r\n let arcs: Arc[] = [];\r\n arrayRemoveIf(cus, c =>\r\n {\r\n if (c.Length < 1e-5) return true;\r\n\r\n if (c instanceof Arc)\r\n {\r\n let arcBrs = this.BreakArc(c);\r\n for (let arc of arcBrs)\r\n arcs.push(arc);\r\n }\r\n\r\n return false;\r\n });\r\n //加入到计算\r\n cus.push(...arcs);\r\n\r\n this.ExpLineMap.set(c, cus);\r\n plcus.push(...cus);\r\n return true;\r\n }\r\n return false;\r\n });\r\n curveList.push(...plcus);\r\n\r\n this._CurveCount = curveList.length;\r\n\r\n for (let cu of curveList)\r\n {\r\n //由于圆弧可能导致最低点计算错误的问题.\r\n if (cu instanceof Arc)\r\n {\r\n let arcs = this.BreakArc(cu);\r\n if (arcs.length > 1)\r\n {\r\n arcs.forEach(a => curveMap.AddCurveToMap(a, true, this.removeDuplicate, true));\r\n this.ExpLineMap.set(cu, arcs);\r\n continue;\r\n }\r\n else\r\n curveMap.AddCurveToMap(cu, true, this.removeDuplicate, true);\r\n }\r\n else\r\n curveMap.AddCurveToMap(cu, false, this.removeDuplicate, true);\r\n }\r\n\r\n //排序,根据角度逆时针排序.\r\n for (let v of curveMap._Vertices)\r\n {\r\n let minLength = Infinity;\r\n for (let r of v.routes)\r\n if (r.length < minLength) minLength = r.length;\r\n for (let r of v.routes)\r\n CalcRouteAngle(r, minLength * 0.2);\r\n v.routes.sort((r1, r2) => r1.an - r2.an);\r\n }\r\n return curveMap.Stands;\r\n }\r\n\r\n private BreakArc(arc: Arc): Arc[]\r\n {\r\n let underPt = arc.Center.add(new Vector3(0, -arc.Radius));\r\n let param = arc.GetParamAtPoint(underPt);\r\n if (param > 0.01 && param < 0.99)\r\n return arc.GetSplitCurves(param);\r\n else\r\n return [arc];\r\n }\r\n\r\n /**\r\n * 曲线是否已经被算法使用\r\n */\r\n GetCueveUsed(cu: Curve): boolean\r\n {\r\n if (this.ExpLineMap.has(cu))\r\n {\r\n let use = this.ExpLineMap.get(cu).some(c => c.TempData > 0);\r\n if (!use)\r\n this.ExpLineMap.delete(cu);\r\n return use;\r\n }\r\n else\r\n return cu.TempData > 0;\r\n }\r\n}\r\n\r\nfunction CalcRouteAngle(r: Route, length: number)\r\n{\r\n if (r.an !== undefined) return;\r\n let cu = r.curve;\r\n let p = r.isReverse ?\r\n cu.GetPointAtParam(cu.GetParamAtDist(r.length - length))\r\n : cu.GetPointAtParam(cu.GetParamAtDist(length));\r\n r.an = angle(p.sub(r.from.position));\r\n}\r\n\r\nenum WalkType\r\n{\r\n Min = 1,\r\n Max = -1,\r\n}\r\n\r\nfunction ClosedWalkFrom(startVertice: Vertice, maxRoute: number, type = WalkType.Min): Route[]\r\n{\r\n let walk: Route[] = [];\r\n let curVertice: Vertice = startVertice;\r\n let preRoute: Route;\r\n // console.log(\"start\", type, startVertice.position.toArray());\r\n do\r\n {\r\n let route = GetNextRoute(curVertice, preRoute, type);\r\n if (type === WalkType.Max && route.curve.TempData > 0)\r\n return [];\r\n // console.log(route.to.position.toArray());\r\n walk.push(route);\r\n [curVertice, preRoute] = [route.to, route];\r\n if (walk.length > maxRoute * 2)\r\n throw \"超过计算次数限制\";\r\n }\r\n while (curVertice !== startVertice);\r\n\r\n return walk;\r\n}\r\n\r\n/**\r\n * 删除中途回路\r\n */\r\nfunction ReduceWalk(w: Route[]): Route[]\r\n{\r\n if (w.length === 0) return w;\r\n //未构成回路,直接回家\r\n if (w[0].curve === arrayLast(w).curve) return [];\r\n\r\n for (let i = 0; i < w.length; i++)\r\n {\r\n let r1 = w[i];\r\n for (let j = w.length; j--;)\r\n {\r\n if (i === j) break;\r\n let r2 = w[j];\r\n if (r1.to === r2.to)\r\n {\r\n if (j > i)\r\n w.splice(i + 1, j - i);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return w;\r\n}\r\n\r\nfunction GetNextRoute(v: Vertice, prev?: Route, type: WalkType = WalkType.Min): Route\r\n{\r\n if (!prev)\r\n return arrayLast(v.routes); //顺时针 cw \\|/ 从左往右\r\n\r\n //逆时针 ccw 往左\r\n let index = v.routes.findIndex(r => r.curve === prev.curve);\r\n let newIndex = FixIndex(index + 1 * type, v.routes);\r\n return v.routes[newIndex];\r\n}\r\n","import { Vector3 } from 'three';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { IntersectOption } from './IntersectWith';\r\n\r\nexport enum BoolOpeartionType\r\n{\r\n Intersection = 0,\r\n Union = 1,\r\n Subtract = 2\r\n}\r\n\r\nconst fuzz = 1e-3;\r\nlet fuzzV3 = new Vector3(fuzz, fuzz, fuzz);\r\n\r\n//判断曲线是否在源封闭曲线内\r\nexport function isTargetCurInOrOnSourceCur(sourceCur: Polyline | Circle | Ellipse, targetCur: Curve)\r\n{\r\n if (!sourceCur.BoundingBox.expandByVector(fuzzV3).containsBox(targetCur.BoundingBox))\r\n return false;\r\n\r\n let cus: Curve[] = [];\r\n if (targetCur instanceof Polyline)\r\n cus = targetCur.Explode();\r\n else\r\n cus = [targetCur];\r\n\r\n return cus.every(c =>\r\n {\r\n let pts = getIntPtContextPts(sourceCur, c);\r\n if (pts.length <= 1)\r\n pts.push(c.StartPoint, c.EndPoint);\r\n return IsPtsAllInOrOnReg(sourceCur, pts);\r\n });\r\n}\r\n\r\n//获取交点处上下距0.01par的点\r\nfunction getIntPtContextPts(sourceCur: Curve, cu: Curve, pts: Vector3[] = [])\r\n{\r\n let interPts = cu.IntersectWith(sourceCur, IntersectOption.OnBothOperands);\r\n if (interPts.length > 0)\r\n {\r\n let pars = interPts.map(pt => cu.GetParamAtPoint(pt));\r\n for (let par of pars)\r\n {\r\n if (par >= 0.02)\r\n pts.push(cu.GetPointAtParam(par - 0.01));\r\n\r\n if (par <= (cu.EndParam - 0.02))\r\n pts.push(cu.GetPointAtParam(par + 0.01));\r\n }\r\n }\r\n return pts;\r\n}\r\n//判断点点是否全部都在封闭区域内或者在曲线上\r\nfunction IsPtsAllInOrOnReg(sourceReg: Polyline | Circle | Ellipse, pts: Vector3[])\r\n{\r\n return pts.every(pt =>\r\n {\r\n //是否点在封闭曲线内\r\n return sourceReg.PtOnCurve(pt) || sourceReg.PtInCurve(pt);\r\n });\r\n}\r\n\r\n//判断点是否全部都在封闭区域外或者在曲线上\r\nexport function IsPtsAllOutOrOnReg(sourceReg: Polyline | Circle, pts: Vector3[])\r\n{\r\n return pts.every(pt =>\r\n {\r\n //是否点在封闭曲线内\r\n return sourceReg.PtOnCurve(pt) || !sourceReg.PtInCurve(pt);\r\n });\r\n}\r\n","import { Line, Material, Object3D, Shape, Vector3 } from 'three';\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { Status } from '../../Common/Status';\r\nimport { equaln, equalv3 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectResult } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Entity } from './Entity';\r\n\r\nexport enum ExtendType\r\n{\r\n /**\r\n * 前后都不延伸\r\n */\r\n None = 0,\r\n /**\r\n * 只允许延伸前面\r\n */\r\n Front = 1,\r\n /**\r\n * 只允许延伸后面\r\n */\r\n Back = 2,\r\n /**\r\n * 前后延伸\r\n */\r\n Both = 3,\r\n}\r\n\r\n/**\r\n * 曲线的基类,子类请实现以下方法.\r\n */\r\n@Factory\r\nexport abstract class Curve extends Entity\r\n{\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Is2D()\r\n {\r\n return equaln(this._Matrix.elements[14], 0);\r\n }\r\n\r\n get StartPoint(): Vector3 { return; }\r\n set StartPoint(v: Vector3) { return; }\r\n get StartParam(): number { return; }\r\n get EndPoint(): Vector3 { return; }\r\n set EndPoint(v: Vector3) { return; }\r\n\r\n /** 曲线中点 */\r\n get Midpoint()\r\n {\r\n return this.GetPointAtParam(this.MidParam);\r\n }\r\n\r\n get MidParam()\r\n {\r\n if (this.EndParam === 1)\r\n return 0.5;\r\n else\r\n return this.GetParamAtDist(this.Length * 0.5);\r\n }\r\n\r\n get EndParam(): number { return; }\r\n get Area(): number { return 0; }\r\n /**\r\n *获得曲线的面积,逆时针为正,顺时针为负.\r\n */\r\n get Area2(): number { return 0; }\r\n get Length(): number { return 0; }\r\n get IsClose(): boolean { return false; }\r\n /** 曲线为顺时针 */\r\n get IsClockWise(): boolean { return this.Area2 < 0; }\r\n\r\n abstract get Shape(): Shape;\r\n\r\n GetPointAtParam(param: number): Vector3 { return; }\r\n GetPointAtDistance(distance: number): Vector3 { return; }\r\n GetDistAtParam(param: number): number { return; }\r\n GetDistAtPoint(pt: Vector3): number { return; }\r\n GetParamAtPoint(pt: Vector3): number { return; }\r\n GetParamAtPoint2(pt: Vector3): number { return this.GetParamAtPoint(pt); }\r\n\r\n GetParamAtDist(d: number): number { return; }\r\n\r\n /**\r\n * 返回曲线在指定位置的一阶导数(在wcs内)\r\n *\r\n * @param {(number | Vector3)} param\r\n * @returns {Vector3}\r\n * @memberof Curve\r\n */\r\n GetFistDeriv(param: number | Vector3): Vector3 { return; }\r\n GetFistDerivAngle(param: number | Vector3): number\r\n {\r\n let d = this.GetFistDeriv(param);\r\n return Math.atan2(d.y, d.x);\r\n }\r\n\r\n /**\r\n * 返回切割曲线后的结果.总是从起点开始切割,并且按顺序返回曲线.\r\n * @param {(number[] | number)} param\r\n * @returns {Array}\r\n */\r\n GetSplitCurves(param: number[] | number): Array { return; }\r\n //未完善\r\n GetCurveAtParamRange(startParam: number, EndParam: number): Array { return; }\r\n GetSplitCurvesByPts(pt: Vector3[] | Vector3): Array\r\n {\r\n let pts = Array.isArray(pt) ? pt : [pt];\r\n let pars = pts.map(p => this.GetParamAtPoint(p));\r\n return this.GetSplitCurves(pars);\r\n }\r\n protected SplitParamSort(param: number[] | number): number[]\r\n {\r\n if (Array.isArray(param))\r\n {\r\n param = param.filter(p => this.ParamOnCurve(p));\r\n if (param.length === 0)\r\n return [];\r\n param.push(0, this.EndParam);\r\n arraySortByNumber(param);\r\n arrayRemoveDuplicateBySort(param, (e1, e2) => equaln(e1, e2, 1e-7));\r\n return param;\r\n }\r\n else if (this.ParamOnCurve(param))\r\n return [0, param, this.EndParam];\r\n else\r\n return [];\r\n }\r\n Extend(newParam: number) { }\r\n /**\r\n * 连接曲线到本曲线,如果成功返回true\r\n * @param {Curve} cu 需要连接的曲线\r\n * @returns {boolean} 连接成功\r\n * @memberof Curve\r\n */\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-4): Status { return Status.False; }\r\n\r\n //翻转曲线.首尾调换.\r\n Reverse(): this { return this; }\r\n\r\n //点在曲线上\r\n PtOnCurve(pt: Vector3, fuzz = 1e-6): boolean\r\n {\r\n return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt));\r\n }\r\n\r\n //点在曲线中,不在起点或者终点.\r\n PtOnCurve2(pt: Vector3): boolean\r\n {\r\n return !(equalv3(this.StartPoint, pt, 1e-6) || equalv3(this.EndPoint, pt, 1e-6)) && this.ParamOnCurve(this.GetParamAtPoint(pt), 0);\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n return this.PtOnCurve(p, fuzz);\r\n }\r\n\r\n //参数在曲线上 容差,1e-6\r\n ParamOnCurve(param: number, fuzz = 1e-6): boolean { return !isNaN(param) && param >= -fuzz && param <= this.EndParam + fuzz; }\r\n GetOffsetCurves(offsetDist: number): Array { return; }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3 { return; }\r\n\r\n /**\r\n * 曲线相交点\r\n */\r\n IntersectWith(curve: Curve, intType: IntersectOption, tolerance = 1e-6): Vector3[]\r\n {\r\n return this.IntersectWith2(curve, intType, tolerance).map(r => r.pt);\r\n }\r\n\r\n /**\r\n * 曲线相交点和点的参数\r\n */\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-6): IntersectResult[] { return []; }\r\n\r\n\r\n /**\r\n * 拽托点个数\r\n */\r\n GetDragPointCount(drag: DragPointType): number { return 0; }\r\n\r\n //------------------绘制相关------------------\r\n //重载\r\n protected OnlyRenderType = true;\r\n\r\n /**\r\n * 重载:更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (type === RenderType.WireframePrint)\r\n {\r\n //打印模式暂时不需要改颜色\r\n }\r\n else\r\n {\r\n let m = obj as Line;\r\n m.material = material || ColorMaterial.GetLineMaterial(this._Color);\r\n }\r\n }\r\n\r\n UpdateJigMaterial(color = 8)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n this.UpdateDrawObjectMaterial(type, obj, ColorMaterial.GetLineMaterial(color));\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { curveLinkGroup, equalCurve } from \"../Common/CurveUtils\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { IntersectBox2 } from \"../Geometry/Box\";\r\nimport { Route } from \"../Geometry/CurveMap\";\r\nimport { equaln, equalv3 } from \"../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../Geometry/RegionParse\";\r\nimport { isTargetCurInOrOnSourceCur } from \"../GraphicsSystem/BoolOperateUtils\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\nimport { Arc } from \"./Entity/Arc\";\r\nimport { Circle } from \"./Entity/Circle\";\r\nimport { Curve } from \"./Entity/Curve\";\r\nimport { Polyline } from \"./Entity/Polyline\";\r\n\r\nlet cache = new WeakMap();\r\n\r\nconst COMBINE_FUZZ = 1e-2;\r\n\r\nexport class Contour\r\n{\r\n private _Curve: Polyline | Circle;\r\n\r\n protected SetCurve(cu: Polyline | Circle)\r\n {\r\n if (cu instanceof Polyline)\r\n {\r\n if (cu.Area2 < 0)\r\n cu.Reverse();\r\n }\r\n this._Curve = cu;\r\n }\r\n /**会将传入的闭合轮廓改为逆时针 */\r\n static CreateContour(cus: Curve[] | Polyline | Circle, needLink = true)\r\n {\r\n if (cus instanceof Curve)\r\n {\r\n if (cus.IsClose)\r\n {\r\n let c = new Contour();\r\n c.SetCurve(cus);\r\n return c;\r\n }\r\n return;\r\n }\r\n\r\n let closeCurve = Contour.Combine(cus, needLink, COMBINE_FUZZ) as Polyline | Circle;\r\n if (closeCurve && closeCurve.IsClose)\r\n {\r\n if (closeCurve instanceof Polyline && closeCurve.CloseMark === false)\r\n {\r\n closeCurve.CloseMark = true;\r\n closeCurve.RemoveVertexAt(closeCurve.NumberOfVertices - 1);\r\n }\r\n\r\n let c = new Contour();\r\n c.SetCurve(closeCurve);\r\n return c;\r\n }\r\n }\r\n get Curve(): Polyline | Circle\r\n {\r\n return this._Curve;\r\n }\r\n get Area()\r\n {\r\n return this._Curve.Area;\r\n }\r\n get BoundingBox()\r\n {\r\n return this._Curve.BoundingBox;\r\n }\r\n /**\r\n * 不等比例缩放\r\n * @param {number} ref 缩放参考值,大于该值的点缩放\r\n * @param {number} dist 缩放距离\r\n * @param {string} dir x y z\r\n */\r\n UnEqualProportionScale(ref: number, dist: number, dir: \"x\" | \"y\")\r\n {\r\n let cu = this._Curve;\r\n if (cu instanceof Polyline)\r\n {\r\n let lineData = cu.LineData;\r\n let length = lineData.length;\r\n let p = cu.Position[dir];\r\n\r\n let moveIndexs: number[] = [];\r\n for (let i = 0; i < length; i++)\r\n {\r\n if (lineData[i].pt[dir] + p > ref)\r\n moveIndexs.push(i);\r\n }\r\n let moveVec = new Vector3();\r\n moveVec[dir] = dist;\r\n cu.MoveStretchPoints(moveIndexs, moveVec);\r\n return true;\r\n }\r\n return false;\r\n }\r\n Clone()\r\n {\r\n return Contour.CreateContour([this._Curve.Clone()]);\r\n }\r\n //交集:结果数组为空则失败\r\n IntersectionBoolOperation(target: Contour): Contour[]\r\n {\r\n if (!IntersectBox2(this.BoundingBox, target.BoundingBox))\r\n return [];\r\n let resultCus = this.GetIntersetAndUnionList(target);\r\n return Contour.GetAllContour(resultCus.intersectionList);\r\n }\r\n //并集:结果轮廓数组长度大于2,则失败.等于1则成功.\r\n UnionBoolOperation(target: Contour): { contours: Contour[], holes: Contour[]; }\r\n {\r\n let resultCus = this.GetIntersetAndUnionList(target);\r\n\r\n //快速\r\n if (resultCus.unionList.every(c => c.IsClose))\r\n return {\r\n contours: Contour.GetAllContour(resultCus.unionList),\r\n holes: [],\r\n };\r\n\r\n //并集后的线段表如果有共线的直接合并起来\r\n let cus: Curve[] = [];\r\n for (let pl of resultCus.unionList)\r\n {\r\n if (pl instanceof Polyline)\r\n cus.push(...pl.Explode());\r\n else\r\n cus.push(pl);\r\n }\r\n let cuGroups = curveLinkGroup(cus);\r\n for (let g of cuGroups)\r\n {\r\n for (let i = 0; i < g.length; i++)\r\n {\r\n let c1 = g[i];\r\n let nextI = FixIndex(i + 1, g);\r\n let c2 = g[nextI];\r\n\r\n let status = c1.Join(c2);\r\n if (status === Status.True)\r\n {\r\n g.splice(nextI, 1);\r\n i--;\r\n }\r\n else if (status === Status.ConverToCircle)\r\n {\r\n g.length = 0;\r\n let a = c1 as Arc;\r\n g.push(new Circle(a.Center, a.Radius));\r\n break;\r\n }\r\n }\r\n }\r\n let allContour = Contour.GetAllContour(cuGroups);\r\n if (allContour.length < 2)\r\n {\r\n return {\r\n contours: allContour,\r\n holes: [],\r\n };\r\n }\r\n else\r\n {\r\n let cache = new WeakMap();\r\n for (let c of allContour)\r\n cache.set(c, c.Area);\r\n allContour.sort((a, b) => cache.get(b) - cache.get(a));\r\n return {\r\n contours: [allContour[0]],\r\n holes: allContour.slice(1)\r\n };\r\n }\r\n\r\n }\r\n //差集:等于0完全被减去\r\n SubstactBoolOperation(target: Contour): Contour[]\r\n {\r\n let subtractList = this.GetSubtractList(target);\r\n\r\n //纯网洞\r\n if (subtractList.every(c => c.IsClose))\r\n return Contour.GetAllContour(subtractList);\r\n\r\n let regParse = new RegionParse(subtractList, 2);\r\n\r\n let contours: Contour[] = [];\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c\r\n && !equalCurve(c.Curve, this.Curve)\r\n && !equalCurve(c.Curve, target.Curve)\r\n && c.Area > 1e-3)\r\n contours.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n\r\n return contours;\r\n }\r\n /**\r\n * 计算与目标轮廓布尔运算后的结果曲线.\r\n */\r\n GetIntersetAndUnionList(target: Contour): { intersectionList: Curve[], unionList: Curve[]; }\r\n {\r\n let intersectionList: Curve[] = [];\r\n let unionList: Curve[] = [];\r\n\r\n let sourceOutline = this._Curve;\r\n let targetOutline = target.Curve;\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3);\r\n\r\n //可能会有提升,但是好像不大(并且还有更慢的趋势)\r\n // if (!sourceOutline.BoundingBox.intersectsBox(targetOutline.BoundingBox, 1e-3))\r\n // return { intersectionList, unionList };\r\n\r\n let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n\r\n let sourceContainerTarget: boolean;\r\n let targetContainerSource: boolean;\r\n if (sourceOutline.Area > targetOutline.Area)\r\n {\r\n sourceContainerTarget = interPts.length === 0 ? fastCurveInCurve(sourceOutline as Polyline, targetOutline as Polyline) : this.CuInOutline(targetOutline);\r\n targetContainerSource = false;\r\n }\r\n else\r\n {\r\n sourceContainerTarget = false;\r\n targetContainerSource = interPts.length === 0 ? fastCurveInCurve(targetOutline as Polyline, sourceOutline as Polyline) : target.CuInOutline(sourceOutline);\r\n }\r\n\r\n //包含.相交.分离(三种状态)\r\n if (sourceContainerTarget)//源包含目标\r\n {\r\n intersectionList.push(targetOutline);\r\n unionList.push(sourceOutline);\r\n }\r\n else if (targetContainerSource)//目标包含源\r\n {\r\n unionList.push(targetOutline);\r\n intersectionList.push(sourceOutline);\r\n }\r\n else if (interPts.length <= 1)//分离\r\n {\r\n unionList.push(sourceOutline, targetOutline);\r\n }\r\n else//相交 interPts.length > 0\r\n {\r\n let pars1 = interPts.map(r => r.thisParam);\r\n let pars2 = interPts.map(r => r.argParam);\r\n\r\n let sourceCus: Array = sourceOutline.GetSplitCurves(pars1);\r\n let targetCus: Array = targetOutline.GetSplitCurves(pars2);\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let hasEqualCus = false;\r\n for (let i = 0; i < targetCus.length; i++)\r\n {\r\n let cu = targetCus[i];\r\n hasEqualCus = fastEqualCurve(cu, pl);\r\n if (hasEqualCus)\r\n {\r\n //方向相同\r\n if (\r\n equalv3(cu.GetFistDeriv(cu.EndParam * 0.5).normalize(), pl.GetFistDeriv(pl.EndParam * 0.5).normalize(), 1e-3)\r\n === isEqualNormal\r\n )\r\n {\r\n unionList.push(pl);\r\n intersectionList.push(pl);\r\n }\r\n targetCus.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n if (hasEqualCus)\r\n continue;\r\n\r\n if (fastCurveInCurve(targetOutline, pl))\r\n intersectionList.push(pl);\r\n else\r\n unionList.push(pl);\r\n }\r\n\r\n for (let pl of targetCus)\r\n {\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n intersectionList.push(pl);\r\n else\r\n unionList.push(pl);\r\n }\r\n\r\n //特殊的分离\r\n if (intersectionList.length === 0 && unionList.length === (sourceCus.length + targetCus.length))\r\n {\r\n return { intersectionList, unionList: [sourceOutline, targetOutline] };\r\n }\r\n }\r\n return { intersectionList, unionList };\r\n }\r\n GetSubtractList(target: Contour): Polyline[]\r\n {\r\n let sourceOutline = this._Curve as Polyline;\r\n let targetOutline = target.Curve as Polyline;\r\n\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3);\r\n\r\n let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n\r\n if (interPts.length <= 1)\r\n {\r\n //反包含\r\n if (fastCurveInCurve2(targetOutline, sourceOutline) || equalCurve(targetOutline, sourceOutline))\r\n return [];\r\n //包含\r\n if (fastCurveInCurve2(sourceOutline, targetOutline))\r\n return [sourceOutline, targetOutline];\r\n else//分离\r\n return [sourceOutline];\r\n }\r\n\r\n //相交\r\n let subtractList: Polyline[] = [];\r\n let sourceCus = sourceOutline.GetSplitCurves(interPts.map(r => r.thisParam)) as Polyline[];\r\n let targetCus = targetOutline.GetSplitCurves(interPts.map(r => r.argParam)) as Polyline[];\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let plMidParam = pl.MidParam;\r\n let plDir = pl.GetFistDeriv(plMidParam).normalize();\r\n\r\n let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl));\r\n if (index !== -1)\r\n {\r\n let cu = targetCus[index];\r\n let cuMidParam = cu.MidParam;\r\n let cuDir = cu.GetFistDeriv(cuMidParam).normalize();\r\n\r\n if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3))//不同向\r\n subtractList.push(pl);\r\n\r\n targetCus.splice(index, 1);\r\n\r\n continue;\r\n }\r\n if (!fastCurveInCurve(targetOutline, pl))\r\n subtractList.push(pl);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceCus.length;\r\n\r\n for (let pl of targetCus)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceCus.length)\r\n return [sourceOutline];\r\n\r\n return subtractList;\r\n }\r\n GetSubtractListByMoreTargets(targets: Contour[])\r\n {\r\n let { holes, subtractList } = this.GetSubListWithCus(targets);\r\n\r\n //纯网洞\r\n if (subtractList.every(c => c.IsClose))\r\n return {\r\n holes: holes.map(h => Contour.CreateContour(h)),\r\n outlines: Contour.GetAllContour(subtractList)\r\n };\r\n\r\n let regParse = new RegionParse(subtractList, 2);\r\n\r\n let contours: Contour[] = [];\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c\r\n && !equalCurve(c.Curve, this.Curve)\r\n && targets.every(target => !equalCurve(c.Curve, target.Curve))\r\n && c.Area > 1e-3)\r\n contours.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n\r\n return {\r\n holes: holes.map(h => Contour.CreateContour(h)),\r\n outlines: contours\r\n };\r\n\r\n }\r\n GetSubListWithCus(targets: Contour[])\r\n {\r\n let sourceOutline = this._Curve as Polyline;\r\n let subtractList: Polyline[] = [];\r\n let holes: Polyline[] = [];\r\n let intPars: number[] = [];\r\n let cuMap = new Map();\r\n\r\n let outBox = sourceOutline.BoundingBox;\r\n\r\n for (let con of targets)\r\n {\r\n const targetOutline = con.Curve as Polyline;\r\n\r\n if (!IntersectBox2(outBox, targetOutline.BoundingBox))\r\n continue;\r\n\r\n let pts = sourceOutline.IntersectWith2(con.Curve, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n if (pts.length <= 1)\r\n {\r\n //反包含\r\n if (fastCurveInCurve2(targetOutline, sourceOutline) || equalCurve(targetOutline, sourceOutline))\r\n return { holes, subtractList };\r\n //包含\r\n if (fastCurveInCurve2(sourceOutline, targetOutline))\r\n holes.push(targetOutline);\r\n else//分离\r\n {\r\n\r\n }\r\n }\r\n else\r\n {\r\n intPars.push(...pts.map(r => r.thisParam));\r\n cuMap.set(targetOutline, pts.map(r => r.argParam));\r\n }\r\n }\r\n intPars.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(intPars, (e1, e2) => equaln(e1, e2, 1e-8));\r\n let sourceCus = sourceOutline.GetSplitCurves(intPars) as Polyline[];\r\n let targetCus: Polyline[] = [];\r\n\r\n let targetMap = new WeakMap();\r\n\r\n let isEqualNormal: boolean;\r\n\r\n for (let [c, pars] of cuMap)\r\n {\r\n let cus = c.GetSplitCurves(pars) as Polyline[];\r\n cus.forEach(cu => targetMap.set(cu, c));\r\n targetCus.push(...cus);\r\n }\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let plMidParam = pl.MidParam;\r\n let plDir = pl.GetFistDeriv(plMidParam).normalize();\r\n\r\n let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl, 0.05));\r\n if (index !== -1)\r\n {\r\n let cu = targetCus[index];\r\n isEqualNormal = equalv3(sourceOutline.Normal, targetMap.get(cu).Normal, 1e-3);\r\n let cuMidParam = cu.MidParam;\r\n let cuDir = cu.GetFistDeriv(cuMidParam).normalize();\r\n\r\n if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3))//不同向\r\n subtractList.push(pl);\r\n\r\n targetCus.splice(index, 1);\r\n\r\n continue;\r\n }\r\n\r\n if (targets.every(t => !fastCurveInCurve(t.Curve as Polyline, pl)))\r\n subtractList.push(pl);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceCus.length;\r\n\r\n for (let pl of targetCus)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceCus.length)\r\n return { subtractList: [sourceOutline], holes };\r\n\r\n return { subtractList, holes };\r\n\r\n }\r\n /**\r\n * 获得全部闭合曲线\r\n * @若传入二维曲线数据,将默认子数组为闭合曲线段\r\n */\r\n static GetAllContour(cus: Curve[] | Curve[][]): Contour[]\r\n {\r\n if (cus.length === 0)\r\n return [];\r\n\r\n let cuGroups: Curve[][];\r\n if (Array.isArray(cus[0]))\r\n cuGroups = cus as Curve[][];\r\n else\r\n cuGroups = curveLinkGroup(cus as Curve[]);\r\n\r\n let contours: Contour[] = [];\r\n\r\n for (let g of cuGroups)\r\n contours.push(Contour.CreateContour(g, false));\r\n return contours.filter(c => c !== undefined && !equaln(c.Area, 0, 1e-6));\r\n }\r\n /**\r\n * 合并曲线组成为多段线\r\n * @param cus 曲线组\r\n * @param [needLink=true] 需要解析成首尾连接状态\r\n * @returns 单一曲线,如果返回超过1个,其他的将被遗弃.\r\n */\r\n static Combine(cus: Curve[], needLink = true, tolerance = 1e-3): Curve\r\n {\r\n if (cus.length === 0) return undefined;\r\n\r\n let groups = needLink ? curveLinkGroup(cus) : [cus];\r\n for (let g of groups)\r\n {\r\n if (g.length === 1)\r\n return g[0].Clone();\r\n else\r\n {\r\n if (cache.has(g))\r\n return cache.get(g);\r\n\r\n let gclone = g.map(c => c.Clone());\r\n\r\n arrayRemoveDuplicateBySort(gclone, (cu1: Curve, cu2: Curve) => cu1.Join(cu2, false, tolerance) === Status.True);\r\n\r\n if (gclone.length > 1 && gclone[0].Join(arrayLast(gclone), false, tolerance))\r\n gclone.pop();\r\n\r\n let pl = Polyline.Combine(gclone, tolerance);\r\n\r\n cache.set(g, pl);\r\n\r\n return pl;\r\n }\r\n }\r\n }\r\n get Shape(): THREE.Shape\r\n {\r\n return this._Curve.Shape;\r\n }\r\n CuInOutline(targetCur: Curve)\r\n {\r\n return isTargetCurInOrOnSourceCur(this._Curve, targetCur);\r\n }\r\n Equal(tar: Contour)\r\n {\r\n return equalCurve(this._Curve, tar._Curve);\r\n }\r\n}\r\n\r\n/**\r\n * 对于轮廓切割后的曲线判断相同,使用这个函数进行快速判断\r\n */\r\nfunction fastEqualCurve(c1: Curve, c2: Curve, tolerance = 1e-3)\r\n{\r\n let sp1 = c1.StartPoint;\r\n let ep1 = c1.EndPoint;\r\n let sp2 = c2.StartPoint;\r\n let ep2 = c2.EndPoint;\r\n\r\n if (!(\r\n (equalv3(sp1, sp2, tolerance) && equalv3(ep1, ep2, tolerance))\r\n || (equalv3(sp1, ep2, tolerance) && equalv3(ep1, sp2, tolerance))\r\n ))\r\n return false;\r\n\r\n return equalv3(c1.Midpoint, c2.Midpoint, tolerance);\r\n}\r\n\r\n\r\n//对于双多段线互相切割后的结果,快速判断曲线是否在另一条曲线内部\r\n//也许有一天这个中点算法需要改一下, 使用 src\\Geometry\\ExtrudeEdgeGeometry2.ts->CenterPoint 会比较稳妥\r\nfunction fastCurveInCurve(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.GetPointAtParam(targetCu.EndParam * 0.5));\r\n}\r\n\r\nfunction fastCurveInCurve2(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.StartPoint) &&\r\n sourceCu.PtInCurve(targetCu.GetPointAtParam(targetCu.EndParam * 0.5));\r\n}\r\n","import { Line3, Plane, Ray, Vector3 } from \"three\";\r\n\r\nexport class PlaneExt extends Plane\r\n{\r\n constructor(normal = new Vector3(0, 0, 1), constant?: number | Vector3)\r\n {\r\n super(normal);\r\n if (typeof constant === \"number\")\r\n this.constant = constant;\r\n else if (constant)\r\n this.constant = -this.normal.dot(constant);\r\n }\r\n\r\n intersectLine(line: Line3, optionalTarget = new Vector3(), extendLine = false): Vector3\r\n {\r\n let v1 = new Vector3();\r\n\r\n let direction = line.delta(v1);\r\n\r\n let denominator = this.normal.dot(direction);\r\n\r\n if (denominator === 0)\r\n {\r\n // line is coplanar, return origin\r\n if (this.distanceToPoint(line.start) === 0)\r\n {\r\n return optionalTarget.copy(line.start);\r\n }\r\n // Unsure if this is the correct method to handle this case.\r\n return undefined;\r\n }\r\n\r\n let t = - (line.start.dot(this.normal) + this.constant) / denominator;\r\n //If you not extendLine,check intersect point in Line\r\n if (!extendLine && (t < -1e-6 || t > 1))\r\n {\r\n return undefined;\r\n }\r\n\r\n return optionalTarget.copy(direction).multiplyScalar(t).add(line.start);\r\n }\r\n intersectRay(ray: Ray, optionalTarget?: Vector3, extendLine?: boolean): Vector3\r\n {\r\n // 从射线初始位置\r\n let line = new Line3(ray.origin.clone(), ray.origin.clone().add(ray.direction));\r\n return this.intersectLine(line, optionalTarget, extendLine);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Matrix3, Matrix4, Object3D, Shape, Vector3, Line as TLine, MathUtils } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getDeterminantFor2V, getArcOrCirNearPts, getTanPtsOnEllipse, Pts2Polyline } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { angle, equaln, equalv3, MoveMatrix, rotatePoint, angleTo, AsVector2, AsVector3 } from '../../Geometry/GeUtils';\r\nimport { IntersectEllipse, IntersectEllipseAndCircleOrArc, IntersectEllipseAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Arc } from './Arc';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\n\r\n@Factory\r\nexport class Ellipse extends Curve\r\n{\r\n private _radX: number;\r\n private _radY: number;\r\n private _rotate: number;\r\n private _startAngle = 0;\r\n private _endAngle = Math.PI * 2;\r\n constructor(\r\n center?: Vector3,\r\n radX: number = 1e-3,\r\n radY: number = 1e-3,\r\n angle: number = 0)\r\n {\r\n super();\r\n center && this._Matrix.setPosition(center);\r\n this._radX = radX;\r\n this._radY = radY;\r\n this._rotate = angle;\r\n }\r\n get StartParam(): number\r\n {\r\n return 0;\r\n }\r\n get EndParam(): number\r\n {\r\n return 1;\r\n }\r\n get StartPoint()\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get EndPoint()\r\n {\r\n return this.GetPointAtParam(1);\r\n }\r\n get Shape(): Shape\r\n {\r\n let sp = new Shape();\r\n sp.ellipse(0, 0, this._radX, this._radY, this._startAngle, this._endAngle, false, this._rotate);\r\n return sp;\r\n }\r\n get IsClose(): boolean\r\n {\r\n return equaln(this.TotalAngle, Math.PI * 2);\r\n }\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(v);\r\n this.Update();\r\n }\r\n get RadX()\r\n {\r\n return this._radX;\r\n }\r\n set RadX(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._radX = v;\r\n this.Update();\r\n }\r\n get RadY()\r\n {\r\n return this._radY;\r\n }\r\n set RadY(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._radY = v;\r\n this.Update();\r\n }\r\n get Rotation()\r\n {\r\n return this._rotate;\r\n }\r\n set Rotation(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._rotate = v;\r\n this.Update();\r\n }\r\n get StartAngle()\r\n {\r\n return this._startAngle;\r\n }\r\n get EndAngle()\r\n {\r\n return this._startAngle;\r\n }\r\n set StartAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._startAngle = v;\r\n this.Update();\r\n }\r\n set EndAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._endAngle = v;\r\n this.Update();\r\n }\r\n get Length()\r\n {\r\n let a = this._radX;\r\n let b = this._radY;\r\n return Math.PI * Math.abs(3 * (a + b) - Math.sqrt((3 * a + b) * (a + 3 * b))) * this.TotalAngle / Math.PI * 0.5;\r\n }\r\n get Area()\r\n {\r\n let area = Math.PI * this._radX * this._radY;\r\n let an = this._endAngle - this._startAngle;\r\n if (an < 0)\r\n an = Math.PI * 2 + an;\r\n area *= an / Math.PI * 0.5;\r\n let area2 = Math.abs(\r\n getDeterminantFor2V(\r\n AsVector2(this.StartPoint.sub(this.Center)),\r\n AsVector2(this.EndPoint.sub(this.Center)))\r\n ) / 2;\r\n if (an < Math.PI)\r\n area -= area2;\r\n else\r\n area += area2;\r\n return area;\r\n }\r\n get TotalAngle()\r\n {\r\n let totolAngle = this._endAngle - this._startAngle;\r\n if (totolAngle < 0)\r\n totolAngle = Math.PI * 2 + totolAngle;\r\n return totolAngle;\r\n }\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3().setFromPoints(this.GetGripPoints());\r\n }\r\n PtInCurve(pt: Vector3)\r\n {\r\n let p = rotatePoint(pt.clone().sub(this.Center), -this.Rotation);\r\n return p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2 < 1;\r\n }\r\n PtOnCurve(pt: Vector3)\r\n {\r\n if (this.PtOnEllipse(pt))\r\n {\r\n let a = this.GetCircleAngleAtPoint(pt);\r\n return a <= this.TotalAngle + 1e-6;\r\n }\r\n return false;\r\n }\r\n PtOnEllipse(pt: Vector3)\r\n {\r\n let p = rotatePoint(pt.clone().applyMatrix4(this.OCSInv), -this.Rotation);\r\n return equaln(p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2, 1, 1e-3);\r\n }\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.TotalAngle * param + this._startAngle;\r\n\r\n if (an > Math.PI)\r\n an -= 2 * Math.PI;\r\n\r\n let a = this.RadX;\r\n let b = this.RadY;\r\n let pt = new Vector3(a * Math.cos(an), b * Math.sin(an), 0);\r\n\r\n pt.applyMatrix4(new Matrix4().makeRotationZ(this._rotate));\r\n\r\n return pt.applyMatrix4(this.OCS);\r\n }\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnEllipse(pt))\r\n {\r\n return NaN;\r\n }\r\n let an = this.GetCircleAngleAtPoint(pt);\r\n let par = an / this.TotalAngle;\r\n\r\n if (this.IsClose || par < 1 + 1e-6)\r\n return par;\r\n else\r\n {\r\n let diffPar = Math.PI * 2 / this.TotalAngle - 1;\r\n if (par - 1 < diffPar / 2)\r\n return par;\r\n else\r\n return par - 1 - diffPar;\r\n }\r\n }\r\n GetPointAtDistance(distance: number)\r\n {\r\n let param = distance / this.Length;\r\n return this.GetPointAtParam(param);\r\n }\r\n GetDistAtParam(param: number)\r\n {\r\n return this.Length * param;\r\n }\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n GetAngleAtParam(par: number)\r\n {\r\n let pt = this.GetPointAtParam(par).applyMatrix4(this.OCSInv).applyMatrix4(new Matrix4().makeRotationZ(-this.Rotation));\r\n return angle(pt) + this._startAngle;\r\n }\r\n GetCircleAngleAtPoint(pt: Vector3)\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv);\r\n let an = angle(pt) - this._rotate;\r\n if (an < 0)\r\n an = Math.PI * 2 - an;\r\n if (an > Math.PI * 2)\r\n an -= Math.PI * 2;\r\n let dist = pt.length();\r\n let k = dist * Math.cos(an) / this._radX;\r\n if (Math.abs(k) > 1)\r\n k = Math.floor(Math.abs(k)) * Math.sign(k);\r\n if (Math.abs(an) <= Math.PI)\r\n an = Math.acos(k);\r\n else\r\n an = Math.PI * 2 - Math.acos(k);\r\n\r\n an -= this._startAngle;\r\n\r\n if (an < 0)\r\n an = Math.PI * 2 + an;\r\n return an;\r\n }\r\n\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n if (typeof pt === \"number\")\r\n pt = this.GetPointAtParam(pt);\r\n else\r\n pt = pt.clone();\r\n\r\n let refPts = this.GetGripPoints();\r\n\r\n let p = pt.clone().applyMatrix4(this.OCSInv).applyMatrix4(new Matrix4().makeRotationZ(-this._rotate));\r\n let vec = new Vector3();\r\n if (equalv3(pt, refPts[0]))\r\n vec.set(0, 1, 0);\r\n else if (equalv3(pt, refPts[1]))\r\n {\r\n vec.set(0, -1, 0);\r\n }\r\n else if (p.y > 0)\r\n {\r\n let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y);\r\n vec.set(-1, -k, 0);\r\n }\r\n else\r\n {\r\n let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y);\r\n vec.set(1, k, 0);\r\n }\r\n vec.applyMatrix4(new Matrix4().makeRotationZ(this._rotate));\r\n\r\n return vec.applyMatrix4(new Matrix4().extractRotation(this.OCS));\r\n }\r\n GetClosestPointTo(p: Vector3, extend: boolean): Vector3\r\n {\r\n //参考:https://wet-robots.ghost.io/simple-method-for-distance-to-ellipse/\r\n let ro = new Matrix4().makeRotationZ(this._rotate);\r\n let roInv = new Matrix4().getInverse(ro);\r\n let pt = p.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(roInv);\r\n let px = pt.x;\r\n let py = pt.y;\r\n let t = angle(pt);\r\n let a = this._radX;\r\n let b = this._radY;\r\n let x: number, y: number;\r\n for (let i = 0; i < 3; i++)\r\n {\r\n x = a * Math.cos(t);\r\n y = b * Math.sin(t);\r\n let ex = (a ** 2 - b ** 2) * Math.cos(t) ** 3 / a;\r\n let ey = (b * b - a * a) * Math.sin(t) ** 3 / b;\r\n let rx = x - ex;\r\n let ry = y - ey;\r\n let qx = px - ex;\r\n let qy = py - ey;\r\n\r\n let r = Math.sqrt(ry ** 2 + rx ** 2);\r\n let q = Math.sqrt(qy ** 2 + qx ** 2);\r\n\r\n let dc = r * Math.asin((rx * qy - ry * qx) / (r * q));\r\n let dt = dc / Math.sqrt(a * a + b * b - x * x - y * y);\r\n\r\n t += dt;\r\n }\r\n let retPt = new Vector3(x, y).applyMatrix4(ro).applyMatrix4(this.OCS);\r\n if (this.IsClose || extend)\r\n {\r\n return retPt;\r\n }\r\n else if (this.PtOnCurve(retPt))\r\n {\r\n return retPt;\r\n }\r\n else\r\n {\r\n let d1 = p.distanceToSquared(this.StartPoint);\r\n let d2 = p.distanceToSquared(this.EndPoint);\r\n return d1 < d2 ? this.StartPoint : this.EndPoint;\r\n }\r\n }\r\n GetOffsetCurves(offsetDist: number)\r\n {\r\n if ((offsetDist + Math.min(this._radX, this._radY)) > 0)\r\n {\r\n let el = this.Clone();\r\n el.RadX = this._radX + offsetDist;\r\n el.RadY = this._radY + offsetDist;\r\n return [el];\r\n }\r\n return [];\r\n }\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params: number[];\r\n if (param instanceof Array)\r\n {\r\n params = param.filter(p => this.ParamOnCurve(p));\r\n params.sort((a1, a2) => a2 - a1);//从大到小\r\n }\r\n else\r\n params = [param];\r\n\r\n //补上最后一个到第一个的弧\r\n if (this.IsClose)\r\n params.unshift(arrayLast(params));\r\n else\r\n {\r\n params.unshift(1);\r\n params.push(0);\r\n }\r\n arrayRemoveDuplicateBySort(params);\r\n\r\n let anglelist = params.map(param => this.TotalAngle * param + this._startAngle);\r\n let elllist: this[] = [];\r\n for (let i = 0; i < anglelist.length - 1; i++)\r\n {\r\n let sa = anglelist[i];\r\n let ea = anglelist[i + 1];\r\n let el = this.Clone();\r\n if (!equaln(sa, ea, 1e-6))\r\n {\r\n el.StartAngle = ea;\r\n el.EndAngle = equaln(sa, 0) ? Math.PI * 2 : sa;\r\n elllist.push(el);\r\n }\r\n }\r\n return elllist;\r\n }\r\n Join(el: Ellipse)\r\n {\r\n if (this.IsClose || el.IsClose || !this.IsCoplaneTo(el) || !equalv3(el.Center, this.Center))\r\n return Status.False;\r\n\r\n let status = Status.False;\r\n\r\n if (equaln(this._endAngle, this._startAngle))\r\n {\r\n this.EndAngle = this._endAngle;\r\n status = Status.True;\r\n }\r\n else if (equaln(this._startAngle, el._endAngle))\r\n {\r\n this.StartAngle = el._startAngle;\r\n status = Status.True;\r\n }\r\n if (status === Status.True && !this.IsClose && equaln(this._startAngle, this._endAngle))\r\n {\r\n this.StartAngle = 0;\r\n this.EndAngle = Math.PI * 2;\r\n }\r\n return status;\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n {\r\n let pts = this.GetGripPoints();\r\n return pts;\r\n }\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Nea:\r\n {\r\n return getArcOrCirNearPts(this, pickPoint, viewXform);\r\n }\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n return [this.GetClosestPointTo(lastPoint, false)];\r\n }\r\n case ObjectSnapMode.Tan:\r\n {\r\n //TODO:过某点获取椭圆全部切点\r\n if (lastPoint)\r\n {\r\n return getTanPtsOnEllipse(this, lastPoint);\r\n }\r\n }\r\n default:\r\n return [];\r\n }\r\n }\r\n IntersectWith2(curve: Curve, intType: IntersectOption)\r\n {\r\n //TODO:优化椭圆和椭圆,椭圆和圆相交\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectEllipseAndLine(curve, this, reverseIntersectOption(intType)));\r\n }\r\n else if (curve instanceof Circle || curve instanceof Arc)\r\n {\r\n return IntersectEllipseAndCircleOrArc(this, curve, intType);\r\n }\r\n else if (curve instanceof Polyline)\r\n {\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, intType));\r\n }\r\n else if (curve instanceof Ellipse)\r\n {\r\n return IntersectEllipse(this, curve, intType);\r\n }\r\n else\r\n return [];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let line = new TLine(this.UpdateGeometry(), ColorMaterial.GetLineMaterial(this._Color));\r\n this.UpdateDrawObject(renderType, line);\r\n return line;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let geo = (obj as TLine).geometry as BufferGeometry;\r\n this.UpdateGeometry(geo);\r\n }\r\n //更新Geometry\r\n private UpdateGeometry(geo?: BufferGeometry)\r\n {\r\n if (!geo)\r\n geo = new BufferGeometry();\r\n let curve = this.Shape;\r\n geo.setFromPoints(curve.getPoints(60));\r\n return geo;\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let tmpMat4 = new Matrix4().makeRotationZ(this.Rotation);\r\n let pts = [\r\n new Vector3(this._radX, 0),\r\n new Vector3(-this._radX, 0),\r\n new Vector3(0, this._radY),\r\n new Vector3(0, -this._radY)\r\n ].map(p => p.applyMatrix4(tmpMat4).applyMatrix4(this.OCS));\r\n\r\n if (!equaln(0, this._startAngle))\r\n pts.push(this.StartPoint);\r\n if (!equaln(0, this._endAngle))\r\n pts.push(this.EndPoint);\r\n\r\n pts.push(this.Center);\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n let pts = this.GetStretchPoints();\r\n\r\n if (indexList.length > 0)\r\n {\r\n let p = pts[indexList[0]].clone();\r\n p.add(vec);\r\n\r\n if (indexList[0] <= 1)\r\n this.RadX = p.distanceTo(this.Center);\r\n else if (indexList[0] <= 3)\r\n this.RadY = p.distanceTo(this.Center);\r\n else\r\n {\r\n let p1 = pts[indexList[0]];\r\n //TODO:跟cad不一致待优化\r\n if (equalv3(p1, this.StartPoint))\r\n {\r\n let v1 = p1.clone().sub(this.Center);\r\n let v2 = p.clone().sub(this.Center);\r\n let an = angleTo(v1, v2);\r\n this.StartAngle = this.StartAngle + an;\r\n }\r\n else if (equalv3(p1, this.EndPoint))\r\n {\r\n let v1 = p1.clone().sub(this.Center);\r\n let v2 = p.clone().sub(this.Center);\r\n let an = angleTo(v2, v1);\r\n this.EndAngle = this.EndAngle + an;\r\n }\r\n else\r\n this.Center = p;\r\n }\r\n }\r\n }\r\n Convert2Polyline(count = 0)\r\n {\r\n const MIN_LEN = 80;\r\n const par = this.TotalAngle / Math.PI * 0.5;\r\n if (!count)\r\n {\r\n count = Math.floor(this.Length / par / MIN_LEN);\r\n count = MathUtils.clamp(count, 15, 80);\r\n }\r\n\r\n count = Math.floor(count * par);\r\n\r\n if ((count & 1) === 0)\r\n count++;\r\n\r\n let pts = this.Shape.getPoints(count);\r\n if (this.IsClose)\r\n pts.pop();\r\n\r\n let pl = Pts2Polyline(pts, this.IsClose);\r\n pl.ApplyMatrix(this.OCS);\r\n if (this.IsClose)\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._radX = file.Read();\r\n this._radY = file.Read();\r\n this._rotate = file.Read();\r\n this._startAngle = file.Read();\r\n this._endAngle = file.Read();\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);\r\n file.Write(this.RadX);\r\n file.Write(this.RadY);\r\n file.Write(this.Rotation);\r\n file.Write(this._startAngle);\r\n file.Write(this._endAngle);\r\n }\r\n\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Line3, Matrix3, Matrix4, Object3D, Shape, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { PlaneExt } from '../../Geometry/Plane';\r\nimport { IntersectEllipseAndLine, IntersectLineAndArc, IntersectLineAndCircle, IntersectLineAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Arc } from './Arc';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Polyline } from './Polyline';\r\n\r\n@Factory\r\nexport class Line extends Curve\r\n{\r\n\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3)\r\n {\r\n super();\r\n }\r\n\r\n get Is2D()\r\n {\r\n return super.Is2D && equaln(this._StartPoint.z, 0) && equaln(this._EndPoint.z, 0);\r\n }\r\n\r\n get Shape()\r\n {\r\n return new Shape([AsVector2(this._StartPoint), AsVector2(this._EndPoint)]);\r\n }\r\n\r\n Z0()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.StartPoint = this.StartPoint.setZ(0);\r\n this.EndPoint = this.EndPoint.setZ(0);\r\n return this;\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.StartPoint = this.StartPoint.applyMatrix4(m);\r\n this.EndPoint = this.EndPoint.applyMatrix4(m);\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this.StartPoint = sp;\r\n this.EndPoint = ep;\r\n return this;\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let geo = BufferGeometryUtils.CreateFromPts([this._StartPoint, this._EndPoint]);\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry();\r\n geometry.setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, lineObj: TLine)\r\n {\r\n BufferGeometryUtils.UpdatePts(lineObj.geometry as BufferGeometry, [this._StartPoint, this._EndPoint]);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return [this.StartPoint, this.EndPoint];\r\n case ObjectSnapMode.Mid:\r\n return [this.GetPointAtParam(0.5)];\r\n case ObjectSnapMode.Nea:\r\n {\r\n let derv = this.GetFistDeriv(0).normalize();\r\n let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3);\r\n\r\n //平行不捕捉\r\n if (isParallelTo(viewNormal, derv))\r\n return [];\r\n\r\n let fNormal = new Vector3().crossVectors(viewNormal, derv);\r\n fNormal.crossVectors(derv, fNormal);\r\n\r\n let plane = new PlaneExt(fNormal, this.StartPoint);\r\n let plocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true);\r\n let pclosest = this.GetClosestPointTo(plocal, false);\r\n return [pclosest];\r\n }\r\n case ObjectSnapMode.Ext:\r\n return [this.GetClosestPointTo(pickPoint, true)];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(lastPoint, true);\r\n if (this.ParamOnCurve(param))\r\n return [closestPt];\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this.StartPoint, this.GetPointAtParam(0.5), this.EndPoint];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n if (index === 0)\r\n this.StartPoint = this.StartPoint.add(vec);\r\n else if (index === 2)\r\n this.EndPoint = this.EndPoint.add(vec);\r\n else\r\n {\r\n let m = MoveMatrix(vec);\r\n this.ApplyMatrix(m);\r\n }\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n if (index === 0)\r\n this.StartPoint = this.StartPoint.add(vec);\r\n else\r\n this.EndPoint = this.EndPoint.add(vec);\r\n }\r\n }\r\n\r\n GetFistDeriv(param: number | Vector3): Vector3\r\n {\r\n return this.EndPoint.sub(this.StartPoint);\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4)\r\n {\r\n if (curve instanceof Line)\r\n {\r\n return IntersectLineAndLine(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectLineAndArc(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectLineAndCircle(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Polyline)\r\n {\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n\r\n if (curve instanceof Ellipse)\r\n return IntersectEllipseAndLine(this, curve, intType, tolerance);\r\n\r\n //其他的尚未实现.\r\n return [];\r\n }\r\n\r\n //Param\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this.StartPoint.add(this.GetFistDeriv(0).multiplyScalar(param));\r\n }\r\n GetParamAtPoint(pt: Vector3): number\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(pt, true);\r\n if (!equalv3(closestPt, pt, 1e-5))\r\n return NaN;\r\n return param;\r\n }\r\n GetParamAtDist(d: number): number\r\n {\r\n return d / this.Length;\r\n }\r\n GetPointAtDistance(distance: number): Vector3\r\n {\r\n return this.GetPointAtParam(this.GetParamAtDist(distance));\r\n }\r\n GetDistAtParam(param: number): number\r\n {\r\n return this.Length * param;\r\n }\r\n GetDistAtPoint(pt: Vector3): number\r\n {\r\n return this.GetDistAtParam(this.GetParamAtPoint(pt));\r\n }\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params = this.SplitParamSort(param);\r\n let pts = params.map(param => this.GetPointAtParam(param));\r\n let ret = new Array();\r\n if (pts.length >= 2)\r\n {\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let newLine = this.Clone() as Line;\r\n newLine.ColorIndex = this.ColorIndex;\r\n newLine.StartPoint = pts[i];\r\n newLine.EndPoint = pts[i + 1];\r\n ret.push(newLine);\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n GetParamAtPoint2(pt: Vector3): number\r\n {\r\n let { param } = this.GetClosestAtPoint(pt, true);\r\n return param;\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n let { param } = this.GetClosestAtPoint(p, true);\r\n return this.ParamOnCurve(param, fuzz);\r\n }\r\n\r\n GetClosestAtPoint(pt: Vector3, extend: boolean): { closestPt: Vector3, param: number; }\r\n {\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n if (equalv3(pt, sp, 1e-8))\r\n return { closestPt: sp, param: 0 };\r\n else if (equalv3(pt, ep, 1e-8))\r\n return { closestPt: ep, param: 1 };\r\n\r\n let direction = this.GetFistDeriv(0);\r\n let length = direction.length();\r\n\r\n if (length === 0)\r\n {\r\n let param = NaN;\r\n if (equalv3(pt, this.StartPoint, 1e-6))\r\n param = 0;\r\n return { closestPt: sp, param: param };\r\n }\r\n\r\n direction.divideScalar(length);\r\n\r\n let diff = pt.clone().sub(sp);\r\n let param = direction.dot(diff);\r\n\r\n let closestPt: Vector3;\r\n if (extend)\r\n closestPt = sp.add(direction.multiplyScalar(param));\r\n else\r\n if (param < 0)\r\n {\r\n closestPt = sp;\r\n param = 0;\r\n }\r\n else if (param > length)\r\n {\r\n closestPt = this.EndPoint;\r\n param = length;\r\n }\r\n else\r\n closestPt = sp.add(direction.multiplyScalar(param));\r\n return {\r\n closestPt: closestPt,\r\n param: param / length\r\n };\r\n }\r\n\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.GetClosestAtPoint(pt, extend).closestPt;\r\n }\r\n\r\n Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < this.StartParam)\r\n {\r\n this.StartPoint = this.GetPointAtParam(newParam);\r\n }\r\n else if (newParam > this.EndParam)\r\n {\r\n this.EndPoint = this.GetPointAtParam(newParam);\r\n }\r\n }\r\n\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-5): Status\r\n {\r\n if (cu instanceof Line)\r\n {\r\n //平行\r\n if (!isParallelTo(this.GetFistDeriv(0).normalize(), cu.GetFistDeriv(0).normalize()))\r\n return Status.False;\r\n\r\n let sp = cu.StartPoint;\r\n let { closestPt: cp1, param: param1 } = this.GetClosestAtPoint(sp, true);\r\n if (!equalv3(sp, cp1, tolerance))//点在曲线上,允许较低的精度\r\n return Status.False;\r\n\r\n let ep = cu.EndPoint;\r\n let { closestPt: cp2, param: param2 } = this.GetClosestAtPoint(ep, true);\r\n if (!equalv3(ep, cp2, tolerance))\r\n return Status.False;\r\n\r\n if (param1 > param2)\r\n {\r\n [param1, param2] = [param2, param1];\r\n [sp, ep] = [ep, sp];\r\n }\r\n\r\n if (allowGap || Math.max(0, param1) < Math.min(1, param2) + tolerance / this.Length)//这里的容差是值容差,但是我们用它来判断参数,所以进行转换\r\n {\r\n if (param1 < 0)\r\n this.StartPoint = sp;\r\n if (param2 > 1)\r\n this.EndPoint = ep;\r\n return Status.True;\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n [this._StartPoint, this._EndPoint] = [this._EndPoint, this._StartPoint];\r\n return this;\r\n }\r\n\r\n GetOffsetCurves(offsetDist: number): Array\r\n {\r\n let derv = this.GetFistDeriv(0).normalize().multiplyScalar(offsetDist);\r\n derv.applyMatrix4(new Matrix4().makeRotationAxis(this.Normal, -Math.PI / 2));\r\n let newLine = this.Clone() as Line;\r\n newLine.StartPoint = this.StartPoint.add(derv);\r\n newLine.EndPoint = this.EndPoint.add(derv);\r\n return [newLine];\r\n }\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3().setFromPoints([this.StartPoint, this.EndPoint]);\r\n }\r\n\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return 1;\r\n }\r\n //属性\r\n get Length(): number { return this._StartPoint.distanceTo(this._EndPoint); }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._StartPoint.fromArray(file.Read());\r\n this._EndPoint.fromArray(file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.Write(this._StartPoint.toArray());\r\n file.Write(this._EndPoint.toArray());\r\n }\r\n //#endregion-----------------------------File End-----------------------------\r\n\r\n //#region 属性\r\n set StartPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCS);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCS);\r\n }\r\n set EndPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { Box3 } from \"three\";\r\nimport { equaln } from \"./GeUtils\";\r\n\r\nexport interface EBox\r\n{\r\n BoundingBox: Box3;\r\n}\r\n\r\n/**\r\n * 根据盒子x排序盒子\r\n * @param {EBox[]} arr\r\n */\r\nexport function SortEntityByBox(arr: T[], sort: boolean = true)\r\n{\r\n let boxMap: Map = new Map();\r\n arr.forEach(e => boxMap.set(e, e.BoundingBox));\r\n\r\n if (sort)\r\n arr.sort((e1, e2) =>\r\n {\r\n let b1 = boxMap.get(e1);\r\n let b2 = boxMap.get(e2);\r\n if (!equaln(b1.min.x, b2.min.x))\r\n return b1.min.x - b2.min.x;\r\n else\r\n {\r\n return b2.min.y - b1.min.y;\r\n }\r\n });\r\n\r\n return boxMap;\r\n}\r\n","import { debug } from \"request-promise-native\";\r\nimport { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { TestDraw } from \"../Add-on/test/TestUtil\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline } from \"../Common/CurveUtils\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { IntersectsBox } from \"../Geometry/Box\";\r\nimport { CurveMap, Route, Vertice } from \"../Geometry/CurveMap\";\r\nimport { angle, equaln, equalv2, equalv3, IdentityMtx4, SelectNearP } from \"../Geometry/GeUtils\";\r\nimport { SortEntityByBox } from \"../Geometry/SortEntityByBox\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\ninterface IOffsetResult\r\n{\r\n index: number;\r\n curve: Curve;\r\n sp?: Vector3;\r\n preArc?: Curve;\r\n ep?: Vector3;\r\n nextArc?: Curve;\r\n paddingCurve?: Curve[];\r\n}\r\n\r\nclass CurveTreeNode\r\n{\r\n children: CurveTreeNode[];\r\n box: Box3;\r\n used: boolean;\r\n constructor(public curve: Curve, box?: Box3)\r\n {\r\n this.box = box || curve.BoundingBox;\r\n }\r\n\r\n TrimBy(contour: Contour, box: Box3)\r\n {\r\n if (IntersectsBox(box, this.box))\r\n {\r\n if (this.children !== undefined)\r\n {\r\n for (let c of this.children)\r\n c.TrimBy(contour, box);\r\n }\r\n else\r\n {\r\n if (contour.Curve instanceof Circle && this.curve instanceof Arc)\r\n {\r\n if (equalv3(contour.Curve.Center, this.curve.Center))\r\n {\r\n if (contour.Curve.Radius > this.curve.Radius + 1e-4)\r\n this.children = [];\r\n\r\n return;\r\n }\r\n }\r\n\r\n //交点参数列表\r\n let iParams = this.curve.IntersectWith(contour.Curve, IntersectOption.OnBothOperands)\r\n .map(p => this.curve.GetParamAtPoint2(p));\r\n\r\n let cus = this.curve.GetSplitCurves(iParams);\r\n if (cus.length === 0)\r\n {\r\n let p = this.curve.GetPointAtParam(0.5);\r\n if (box.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p)))\r\n this.children = [];\r\n }\r\n else\r\n {\r\n this.children = [];\r\n for (let c of cus)\r\n {\r\n let p = c.GetPointAtParam(0.5);\r\n if (CurveIsFine(c) && (!(box.containsPoint(p) && contour.Curve.PtInCurve(p)) || contour.Curve.PtOnCurve(p)))\r\n this.children.push(new CurveTreeNode(c));\r\n }\r\n if (this.children.length === cus.length)\r\n this.children = undefined;\r\n }\r\n }\r\n }\r\n }\r\n\r\n get Nodes()\r\n {\r\n if (!this.children) return [this];\r\n else\r\n {\r\n let cus: CurveTreeNode[] = [];\r\n for (let c of this.children)\r\n cus.push(...c.Nodes);\r\n return cus;\r\n }\r\n }\r\n}\r\n\r\nexport class OffsetPolyline\r\n{\r\n //多段线信息\r\n _CacheOCS: Matrix4;\r\n _Vertexs: Vector3[];\r\n _SubCurves: Curve[];\r\n _Circles: Circle[];\r\n\r\n //偏移子曲线\r\n _SubOffsetedCurves: IOffsetResult[];\r\n //用于裁剪的曲线节点\r\n _CurveTreeNodes: CurveTreeNode[];\r\n //裁剪完的曲线节点\r\n _CurveTrimedTreeNodes: CurveTreeNode[];\r\n\r\n //裁剪轮廓\r\n _TrimPolylineContours: Contour[];\r\n _TrimCircleContours: Circle[];\r\n _TrimArcContours: Contour[];\r\n\r\n //结果曲线\r\n _RetCurves: Polyline[];\r\n\r\n _IsClose: boolean;\r\n _OffsetDistSign: number;\r\n\r\n constructor(public _Polyline: Polyline, public _OffsetDist: number, public _ToolPath = false,\r\n private _OffsetDistSq = (_OffsetDist ** 2) * 2.1//对直角走刀不进行圆弧过度\r\n )\r\n {\r\n }\r\n\r\n Do(): Polyline[]\r\n {\r\n this._OffsetDistSign = Math.sign(this._OffsetDist);\r\n this._TrimPolylineContours = [];\r\n this._TrimCircleContours = [];\r\n this._TrimArcContours = [];\r\n\r\n this._RetCurves = [];\r\n this._CurveTreeNodes = [];\r\n\r\n this.InitSubCurves();\r\n if (this._SubCurves.length === 0)\r\n return this._RetCurves;\r\n\r\n this.GeneralCirclesAndVertexs();\r\n this.OffsetSubCurves();\r\n this.LinkSubCurves();\r\n\r\n if (this._SubOffsetedCurves.length === 0)\r\n {\r\n this._SubOffsetedCurves.push({ curve: this._Circles[0], index: 0, paddingCurve: this._Circles.slice(1) });\r\n\r\n this._TrimPolylineContours.push(\r\n ...this._Circles.map(c => Contour.CreateContour(c, false)),\r\n ...this._SubCurves.map(c => Contour.CreateContour([c, new Line(c.StartPoint, c.EndPoint)], false))\r\n );\r\n }\r\n else\r\n this.GeneralTrimContours();\r\n this.TrimByContours();\r\n this.FilterInvalidCurve();\r\n this.JoinCollinear();\r\n this.LinkResultPolyline();\r\n return this._RetCurves;\r\n }\r\n\r\n InitSubCurves()\r\n {\r\n this._CacheOCS = this._Polyline.OCS;\r\n this._IsClose = this._Polyline.IsClose;\r\n this._Polyline.OCS = IdentityMtx4;\r\n this._SubCurves = this._Polyline.Explode().filter(c => c.Length > 1e-4);\r\n this._Polyline.OCS = this._CacheOCS;\r\n return this;\r\n }\r\n\r\n protected GeneralCirclesAndVertexs()\r\n {\r\n this._Vertexs = this._SubCurves.map(c => c.StartPoint);\r\n let lastCu = arrayLast(this._SubCurves);\r\n if (!equalv3(lastCu.EndPoint, this._Vertexs[0], 1e-3))\r\n this._Vertexs.push(lastCu.EndPoint);\r\n\r\n let radius = Math.abs(this._OffsetDist);\r\n this._Circles = this._Vertexs.map(p => new Circle(p, radius));\r\n }\r\n\r\n protected OffsetSubCurves()\r\n {\r\n this._SubOffsetedCurves = [];\r\n for (let index = 0; index < this._SubCurves.length; index++)\r\n {\r\n let curveOld = this._SubCurves[index];\r\n if (curveOld.Length > 1e-6)\r\n {\r\n let curve = curveOld.GetOffsetCurves(this._OffsetDist)[0];\r\n if (curve)\r\n this._SubOffsetedCurves.push({ curve, index });\r\n else\r\n this._TrimArcContours.push(Contour.CreateContour([curveOld, new Line(curveOld.StartPoint, curveOld.EndPoint)], false));\r\n }\r\n }\r\n }\r\n\r\n //连接(延伸)曲线,或者补(圆弧,直线)\r\n protected LinkSubCurves()\r\n {\r\n let count = this._SubOffsetedCurves.length;\r\n if (!this._IsClose) count--;\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let curveResNow = this._SubOffsetedCurves[i];\r\n let iNext = FixIndex(i + 1, this._SubOffsetedCurves);\r\n let curveResNext = this._SubOffsetedCurves[iNext];\r\n let curveNow = curveResNow.curve;\r\n let curveNext = curveResNext.curve;\r\n let isNeighbor = FixIndex(curveResNow.index + 1, this._SubCurves) === curveResNext.index;\r\n\r\n if (isNeighbor)\r\n {\r\n let sp = curveNow.EndPoint;\r\n let ep = curveNext.StartPoint;\r\n //直连\r\n if (equalv3(sp, ep, 1e-3))\r\n continue;\r\n\r\n let iPts = curveNow.IntersectWith(curveNext, IntersectOption.ExtendBoth);\r\n let tPts = iPts.filter(p => curveNow.PtOnCurve3(p) && curveNext.PtOnCurve3(p));\r\n\r\n let code = EntityEncode2(curveNow, curveNext);\r\n\r\n let tp: Vector3;\r\n if (code === 1)\r\n {\r\n if (tPts.length > 0)//不走刀或者有真交点 this._ToolPath === false ||\r\n tp = iPts[0];\r\n else\r\n {\r\n if (iPts.length > 0 && curveNow.GetParamAtPoint(iPts[0]) > 1)\r\n {\r\n let refP = this._Vertexs[curveResNext.index];\r\n let distSq = iPts[0].distanceToSquared(refP);\r\n if (this._ToolPath && distSq > this._OffsetDistSq)\r\n {\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];\r\n this._TrimCircleContours.push(this._Circles[curveResNext.index]);\r\n }\r\n else\r\n tp = iPts[0];\r\n }\r\n // else\r\n // curveResNow.paddingCurve = [new Line(sp, ep)];\r\n }\r\n }\r\n else\r\n {\r\n let refP = this._Vertexs[curveResNext.index];\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(iPts, refP);\r\n else //补单圆 或者尝试连接\r\n {\r\n let arc = this.CreateArc(refP, sp, ep);\r\n\r\n if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext, refP))\r\n {\r\n //设置新的连接点,并且备份旧点\r\n let oldp: Vector3;\r\n if (curveResNow.sp)\r\n {\r\n oldp = curveNow.StartPoint;\r\n curveNow.StartPoint = curveResNow.sp;\r\n }\r\n let oldp2: Vector3;\r\n if (curveResNext.ep)\r\n {\r\n oldp2 = curveNext.EndPoint;\r\n curveNext.EndPoint = curveResNext.ep;\r\n }\r\n\r\n let p: Vector3;\r\n\r\n if (code === 2 && iPts.length === 2)\r\n {\r\n let c = curveNow as Arc;\r\n let minArc = new Arc(c.Center, c.Radius, c.EndAngle, 0, c.IsClockWise);\r\n\r\n let p1 = iPts[0];\r\n let a1 = minArc.GetAngleAtPoint(p1);\r\n let anAll1 = c.ParamOnCurve(c.GetParamAtAngle(a1)) ? Infinity : minArc.ComputeAnlge(a1);\r\n\r\n let p2 = iPts[1];\r\n let a2 = minArc.GetAngleAtPoint(p2);\r\n let anAll2 = c.ParamOnCurve(c.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2);\r\n\r\n if (anAll2 < anAll1)\r\n p = p2;\r\n else\r\n p = p1;\r\n }\r\n else\r\n p = SelectNearP(iPts, refP);\r\n\r\n let onPre: boolean;\r\n let param = curveNow.GetParamAtPoint2(p);\r\n if (curveNow instanceof Line)\r\n onPre = param > 1;\r\n else\r\n onPre = param < 0 || param > 1;\r\n\r\n let onNext: boolean = false;\r\n if (onPre)\r\n {\r\n let param2 = curveNext.GetParamAtPoint2(p);\r\n if (curveNext instanceof Line)\r\n onNext = param2 < 0;\r\n else\r\n onNext = param2 < 0 || param2 > 1;\r\n }\r\n\r\n if (curveResNow.sp)\r\n curveNow.StartPoint = oldp;\r\n if (curveResNext.ep)\r\n curveNext.EndPoint = oldp2;\r\n\r\n if (onPre && onNext)\r\n tp = p;\r\n else\r\n curveResNow.paddingCurve = [arc];\r\n }\r\n else\r\n curveResNow.paddingCurve = [arc];\r\n\r\n this._TrimCircleContours.push(this._Circles[curveResNext.index]);\r\n }\r\n }\r\n if (tp)\r\n {\r\n curveResNow.ep = tp;\r\n curveResNext.sp = tp;\r\n\r\n curveResNow.nextArc = curveNext;\r\n curveResNext.preArc = curveNow;\r\n }\r\n }\r\n else\r\n {\r\n let padCirs: Circle[] = [];\r\n for (let s = FixIndex(curveResNow.index + 1, this._Circles); ; s = FixIndex(s + 1, this._Circles))\r\n {\r\n let c = this._Circles[s];\r\n this._TrimCircleContours.push(c);\r\n padCirs.push(c);\r\n if (s === curveResNext.index)\r\n break;\r\n }\r\n curveResNow.paddingCurve = padCirs;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n private IsSharpCorner(curveResNow: IOffsetResult, curveResNext: IOffsetResult, refP: Vector3): boolean\r\n {\r\n let v1 = this._SubCurves[curveResNow.index].GetPointAtParam(0.9);\r\n let v2 = this._SubCurves[curveResNext.index].GetPointAtParam(0.1);\r\n v1.subVectors(refP, v1);\r\n v2.sub(refP);\r\n v1.cross(v2);\r\n return Math.sign(v1.z) === this._OffsetDistSign;\r\n }\r\n\r\n protected GeneralTrimContours()\r\n {\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let cu2 = d.curve;\r\n if (d.sp && d.ep)\r\n {\r\n let param1 = cu2.GetParamAtPoint(d.sp);\r\n let param2 = cu2.GetParamAtPoint(d.ep);\r\n\r\n if (cu2.ParamOnCurve(param1) && cu2.ParamOnCurve(param2) && param1 > param2)\r\n [d.sp, d.ep] = [d.ep, d.sp];\r\n }\r\n if (d.sp) cu2.StartPoint = d.sp;\r\n if (d.ep) cu2.EndPoint = d.ep;\r\n\r\n //这是极端情况,圆弧被压缩成0长度圆弧,本质是空圆弧(我们会在下面判断它)(因为精度的问题)\r\n //因为精度的问题,这种0圆心角的圆弧会被当成全圆,但是偏移算法中,应该不可能出现全圆弧的圆弧,所以我们压扁它\r\n if (cu2 instanceof Arc\r\n && equaln(cu2.StartAngle, cu2.EndAngle, 1e-6)\r\n // && !equaln((this._SubCurves[d.index]).AllAngle, Math.PI * 2, 1e-3) 应该不会出现\r\n )\r\n {\r\n if (cu2.IsClockWise)\r\n cu2.StartAngle = cu2.EndAngle + 1e-6;\r\n else\r\n cu2.EndAngle = cu2.StartAngle + 1e-6;\r\n }\r\n }\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let cu1 = this._SubCurves[d.index];\r\n let cu2 = d.curve;\r\n\r\n let [p1, p2, p3, p4] = [cu1.StartPoint, cu2.StartPoint, cu1.EndPoint, cu2.EndPoint];\r\n let l1 = new Line(p1, p2);\r\n let l2 = new Line(p3, p4);\r\n\r\n let ipts = l1.IntersectWith(l2, IntersectOption.OnBothOperands, 1e-8);\r\n if (ipts.length > 0)\r\n {\r\n let p = ipts[0];\r\n l1.EndPoint = p;\r\n l2.EndPoint = p;\r\n let cus = [cu1, l1, l2];\r\n let contour = Contour.CreateContour(cus, false);\r\n if (contour)\r\n {\r\n this._TrimPolylineContours.push(contour);\r\n continue;\r\n }\r\n else\r\n {\r\n console.error(\"未预料到的错误,构建轮廓失败\" + this._OffsetDist);\r\n }\r\n }\r\n\r\n //真理1:针脚线不可能同时被两个圆弧所切割\r\n let l1Intact = true;\r\n let l2Intact = true;\r\n if (cu2 instanceof Arc)\r\n {\r\n if (Math.sign(cu2.Bul) !== this._OffsetDistSign)\r\n {\r\n let ipts1 = cu2.IntersectWith(l1, IntersectOption.OnBothOperands);\r\n let ipts2 = cu2.IntersectWith(l2, IntersectOption.OnBothOperands);\r\n\r\n let sp: Vector3;\r\n let ep: Vector3;\r\n if (ipts1.length === 2)\r\n sp = SelectNearP(ipts1, p1);\r\n if (ipts2.length === 2)\r\n ep = SelectNearP(ipts2, p3);\r\n\r\n if (sp || ep) cu2 = cu2.Clone();\r\n if (sp)\r\n {\r\n l1.EndPoint = sp;\r\n cu2.StartPoint = sp;\r\n l1Intact = false;\r\n }\r\n if (ep)\r\n {\r\n l2.EndPoint = ep;\r\n cu2.EndPoint = ep;\r\n l2Intact = false;\r\n }\r\n }\r\n }\r\n\r\n let l1PadArc: Arc;\r\n let l2PadArc: Arc;\r\n //真理2:隔壁的圆弧不可能破坏当前的圆弧,只能破坏当前的针脚\r\n if (l1Intact && d.preArc && d.preArc instanceof Arc)\r\n {\r\n let a = d.preArc;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l1, IntersectOption.OnBothOperands);\r\n if (ipts.length === 2)\r\n {\r\n let sp = SelectNearP(ipts, p1);\r\n l1.EndPoint = sp;\r\n l1PadArc = a.Clone();\r\n l1PadArc.StartPoint = sp;\r\n }\r\n }\r\n }\r\n if (l2Intact && d.nextArc && d.nextArc instanceof Arc)\r\n {\r\n let a = d.nextArc;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l2, IntersectOption.OnBothOperands);\r\n if (ipts.length === 2)\r\n {\r\n let ep = SelectNearP(ipts, p3);\r\n l2.EndPoint = ep;\r\n l2PadArc = a.Clone();\r\n l2PadArc.EndPoint = ep;\r\n }\r\n }\r\n }\r\n\r\n let pl = new Polyline();\r\n let cus = [cu1, l1];\r\n if (l1PadArc) cus.push(l1PadArc);\r\n cus.push(cu2, l2);\r\n if (l2PadArc) cus.push(l2PadArc);\r\n\r\n for (let c of cus)\r\n pl.Join(c);\r\n\r\n let contour = Contour.CreateContour(pl, false);\r\n if (contour)\r\n this._TrimPolylineContours.push(contour);\r\n else\r\n console.error(\"未预料到的错误,构建轮廓失败\" + this._OffsetDist);\r\n }\r\n\r\n if (!this._IsClose)\r\n {\r\n if (this._TrimCircleContours[0] !== this._Circles[0])\r\n this._TrimCircleContours.push(this._Circles[0]);\r\n let lastTrimCircle = arrayLast(this._TrimCircleContours);\r\n let lastCircle = arrayLast(this._Circles);\r\n if (lastTrimCircle !== lastCircle)\r\n this._TrimCircleContours.push(lastCircle);\r\n if (this._SubOffsetedCurves[0].index !== 0)\r\n this._TrimCircleContours.push(this._Circles[this._SubOffsetedCurves[0].index]);\r\n\r\n let lastIndex = this._Circles.length - 1;\r\n let lastD = arrayLast(this._SubOffsetedCurves);\r\n if (lastIndex !== lastD.index)\r\n this._TrimCircleContours.push(this._Circles[lastD.index + 1]);\r\n }\r\n\r\n this._TrimPolylineContours.push(\r\n ...this._TrimCircleContours.map(c => Contour.CreateContour(c, false)),\r\n ...this._TrimArcContours\r\n );\r\n }\r\n\r\n // 通过构建的轮廓对偏移曲线进行裁剪\r\n protected TrimByContours()\r\n {\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let c = d.curve;\r\n if (CurveIsFine(c))\r\n this._CurveTreeNodes.push(new CurveTreeNode(c));\r\n if (d.paddingCurve)\r\n this._CurveTreeNodes.push(...d.paddingCurve.map(c => new CurveTreeNode(c)));\r\n }\r\n let boxContours = SortEntityByBox(this._TrimPolylineContours, false);\r\n\r\n for (let i = 0; i < this._TrimPolylineContours.length; i++)\r\n {\r\n let c = this._TrimPolylineContours[i];\r\n for (let curveNode of this._CurveTreeNodes)\r\n {\r\n curveNode.TrimBy(c, boxContours.get(c));\r\n }\r\n }\r\n }\r\n\r\n //过滤方向相反和0长度线\r\n private FilterInvalidCurve()\r\n {\r\n this._CurveTrimedTreeNodes = [];\r\n for (let n of this._CurveTreeNodes)\r\n {\r\n let ns = n.Nodes;\r\n for (let sn of ns)\r\n {\r\n if (this.CheckPointDir(sn.curve.GetPointAtParam(0.5)))\r\n this._CurveTrimedTreeNodes.push(sn);\r\n }\r\n }\r\n }\r\n\r\n //合并共线\r\n private JoinCollinear()\r\n {\r\n for (let i = 0; i < this._CurveTrimedTreeNodes.length; i++)\r\n {\r\n let n = this._CurveTrimedTreeNodes[i];\r\n if (n.used) continue;\r\n let sp = n.curve.StartPoint;\r\n for (let j = i + 1; j < this._CurveTrimedTreeNodes.length; j++)\r\n {\r\n let n2 = this._CurveTrimedTreeNodes[j];\r\n if (n2.used) continue;\r\n let status = n.curve.Join(n2.curve);\r\n if (status === Status.ConverToCircle)\r\n {\r\n n.used = true;\r\n n2.used = true;\r\n let circle = new Circle((n.curve).Center, (n.curve).Radius);\r\n n.curve = circle;\r\n this._RetCurves.push(ConverCircleToPolyline(circle).ApplyMatrix(this._CacheOCS));\r\n }\r\n else if (status === Status.True)\r\n {\r\n if (equalv3(sp, n.curve.StartPoint))\r\n n2.used = true;\r\n else\r\n {\r\n n.used = true;\r\n n2.curve = n.curve;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //连接结果曲线,返回最终多段线\r\n private LinkResultPolyline()\r\n {\r\n let used = new Set();\r\n let cuMap = new CurveMap(1);\r\n for (let n of this._CurveTrimedTreeNodes)\r\n {\r\n if (!n.used)\r\n cuMap.AddCurveToMap(n.curve);\r\n }\r\n\r\n let preP: Vector3;\r\n\r\n let searchNext = (s: Vertice, pl: Polyline): Vertice =>\r\n {\r\n let minDist = Infinity;\r\n let minR: Route;\r\n for (let r of s.routes)\r\n {\r\n if (used.has(r.curve)) continue;\r\n\r\n if (preP)\r\n {\r\n let d = r.s.distanceToSquared(preP);\r\n if (d < minDist)\r\n {\r\n minR = r;\r\n minDist = d;\r\n }\r\n }\r\n else\r\n {\r\n minR = r;\r\n break;\r\n }\r\n }\r\n\r\n if (minR)\r\n {\r\n used.add(minR.curve);\r\n preP = minR.e;\r\n let status = pl.Join(minR.curve, false, 5e-2);\r\n if (status !== Status.True)\r\n console.warn(\"连接失败\");\r\n return minR.to;\r\n }\r\n };\r\n\r\n for (let s of cuMap.Stands)\r\n {\r\n preP = undefined;\r\n let pl = new Polyline();\r\n let ss = s;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl);\r\n ss = s;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl);\r\n\r\n if (pl.NumberOfVertices > 1)\r\n {\r\n //避免0长度的线\r\n if (pl.NumberOfVertices === 2 && pl.Length < 1e-6) continue;\r\n\r\n let d = pl.LineData;\r\n let ld = arrayLast(d);\r\n if (equalv2(d[0].pt, ld.pt, 1e-2))\r\n ld.pt.copy(d[0].pt);\r\n this._RetCurves.push(pl.ApplyMatrix(this._CacheOCS));\r\n }\r\n }\r\n }\r\n\r\n CheckPointDir(pt: Vector3): boolean\r\n {\r\n return this.GetPointAtCurveDir(pt) === this._OffsetDistSign;\r\n }\r\n\r\n GetPointAtCurveDir(pt: Vector3): number\r\n {\r\n let minIndex = Infinity;\r\n let minDist = Infinity;\r\n let minCp: Vector3;\r\n for (let i = 0; i < this._SubCurves.length; i++)\r\n {\r\n let c = this._SubCurves[i];\r\n let cp = c.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-5)) return 0;\r\n\r\n let dist = cp.distanceToSquared(pt);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n minIndex = i;\r\n minCp = cp;\r\n }\r\n }\r\n\r\n let c = this._SubCurves[minIndex];\r\n let param = c.GetParamAtPoint(minCp);\r\n\r\n if (equaln(param, 0) && ((minIndex === 0) ? this._IsClose : true))\r\n {\r\n let preIndex = FixIndex(minIndex - 1, this._SubCurves);\r\n let preCurve = this._SubCurves[preIndex];\r\n\r\n if (!equalv3(c.GetFistDeriv(0).normalize(), preCurve.GetFistDeriv(1).normalize()))\r\n {\r\n let p = c.StartPoint;\r\n let l1 = c.Length;\r\n let l2 = preCurve.Length;\r\n let minLength = Math.min(l1, l2) * 0.2;\r\n\r\n let nextP: Vector3;\r\n let preP: Vector3;\r\n if (c instanceof Arc)\r\n nextP = c.GetPointAtDistance(minLength);\r\n else\r\n nextP = c.EndPoint;\r\n\r\n if (preCurve instanceof Arc)\r\n preP = preCurve.GetPointAtDistance(l2 - minLength);\r\n else\r\n preP = preCurve.StartPoint;\r\n\r\n let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p)));\r\n\r\n let dir = arc.PtOnCurve3(pt) ? -1 : 1;\r\n return dir;\r\n }\r\n }\r\n else if (equaln(param, 1) && ((minIndex === this._SubCurves.length - 1) ? this._IsClose : true))\r\n {\r\n let nextIndex = FixIndex(minIndex + 1, this._SubCurves);\r\n let nextCurve = this._SubCurves[nextIndex];\r\n\r\n if (!equalv3(c.GetFistDeriv(1).normalize(), nextCurve.GetFistDeriv(0).normalize()))\r\n {\r\n let p = c.EndPoint;\r\n\r\n let l1 = c.Length;\r\n let l2 = nextCurve.Length;\r\n let minLength = Math.min(l1, l2) * 0.2;\r\n\r\n let nextP: Vector3;\r\n let preP: Vector3;\r\n if (c instanceof Arc)\r\n preP = c.GetPointAtDistance(l1 - minLength);\r\n else\r\n preP = c.StartPoint;\r\n\r\n if (nextCurve instanceof Arc)\r\n nextP = nextCurve.GetPointAtDistance(minLength);\r\n else\r\n nextP = nextCurve.EndPoint;\r\n\r\n let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p)));\r\n\r\n let dir = arc.PtOnCurve3(pt) ? -1 : 1;\r\n return dir;\r\n }\r\n }\r\n\r\n let dri = c.GetFistDeriv(param);\r\n let cross = dri.cross(pt.clone().sub(minCp));\r\n return -Math.sign(cross.z);\r\n }\r\n\r\n protected CreateArc(center: Vector3, startP: Vector3, endP?: Vector3)\r\n {\r\n let sa = angle(startP.clone().sub(center));\r\n let ea = endP ? angle(endP.clone().sub(center)) : sa;\r\n let arc = new Arc(center, Math.abs(this._OffsetDist), sa, ea, this._OffsetDist < 0);\r\n return arc;\r\n }\r\n}\r\n\r\nfunction EntityEncode(c: Curve)\r\n{\r\n if (c instanceof Line) return 1;\r\n else return 2;\r\n}\r\nfunction EntityEncode2(c1: Curve, c2: Curve)\r\n{\r\n return EntityEncode(c1) & EntityEncode(c2);\r\n}\r\n\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nfunction CurveIsFine(curve: Curve)\r\n{\r\n if (curve instanceof Arc && curve.AllAngle < 2e-6) return false;\r\n return curve.Length > 5e-5;\r\n}\r\n","import { Vector2, Vector3 } from 'three';\r\nimport { angle, equaln, equalv3 } from '../Geometry/GeUtils';\r\nimport { IntersectOption } from '../GraphicsSystem/IntersectWith';\r\nimport { Arc } from './Entity/Arc';\r\nimport { Line } from './Entity/Line';\r\nimport { Polyline } from './Entity/Polyline';\r\n\r\n/**\r\n * 点在扇形内部,提供一个简单实现的版本.\r\n * 优化版本请参照:http://www.cnblogs.com/miloyip/archive/2013/04/19/3029852.html\r\n * \r\n * @param arc 二维圆弧\r\n * @param pt \r\n * @returns 点在扇形内部.\r\n */\r\nfunction IsPointInCircularSector(arc: Arc, pt: Vector3): boolean\r\n{\r\n let center = arc.Center;\r\n let disSq = center.distanceTo(pt);\r\n if (disSq > arc.Radius * arc.Radius) return false;\r\n let an = angle(pt.clone().sub(center));\r\n let param = arc.GetParamAtAngle(an);\r\n return arc.ParamOnCurve(param);\r\n}\r\n\r\n/**\r\n * 点在弓型内部\r\n * \r\n * @param arc 二维圆弧\r\n * @param pt 点\r\n * @param isInChrodIsTrue 当点在弦上也认为在弓形内部\r\n * @returns 点在内部\r\n */\r\nexport function IsPointInBowArc(arc: Arc, pt: Vector3, isInChrodIsTrue = false): boolean\r\n{\r\n let pv = pt.clone().sub(arc.StartPoint);\r\n let av = arc.EndPoint.sub(arc.StartPoint);\r\n\r\n pv.cross(av);\r\n\r\n //未优化的代码\r\n // if (pv.z > 0 && arc.IsClockWise)\r\n // return false;\r\n // else if (pv.z < 0 && !arc.IsClockWise)\r\n // return false;\r\n // else\r\n // return arc.Center.distanceToSquared(pt) < arc.Radius * arc.Radius;\r\n\r\n //简化的代码\r\n if ((pv.z > 0) !== arc.IsClockWise || (isInChrodIsTrue && equaln(pv.z, 0)))\r\n {\r\n return arc.Center.distanceToSquared(pt) < arc.Radius * arc.Radius;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * 判断点在多段线内外\r\n * @param pl 多段线\r\n * @param pt 点\r\n * @returns 点在多段线内部\r\n */\r\nexport function IsPointInPolyLine(pl: Polyline, pt: Vector3): boolean\r\n{\r\n let crossings = 0;\r\n\r\n let insLine = new Line(pt, pt.clone().add(new Vector3(0, 10, 0)));\r\n\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n if (equaln(pl.GetBuilgeAt(i), 0, 5e-6))//直线\r\n {\r\n let sp = pl.GetPointAtParam(i);\r\n let ep = pl.GetPointAtParam(i + 1);\r\n //点位于线上面\r\n if (pt.y > Math.max(sp.y, ep.y))\r\n continue;\r\n //线垂直Y轴\r\n let derX = ep.x - sp.x;\r\n if (equaln(derX, 0, 5e-6))\r\n continue;\r\n\r\n //起点\r\n if (equaln(sp.x, pt.x, 5e-6))\r\n {\r\n if (sp.y > pt.y && derX < 0) crossings++;\r\n continue;\r\n }\r\n //终点\r\n if (equaln(ep.x, pt.x, 5e-6))\r\n {\r\n if (ep.y > pt.y && derX > 0) crossings++;\r\n continue;\r\n }\r\n\r\n //快速求交,只验证有没有交点\r\n let [x1, x2] = sp.x > ep.x ? [ep.x, sp.x] : [sp.x, ep.x];\r\n if (pt.x > x1 && pt.x < x2)\r\n {\r\n let derY = ep.y - sp.y;\r\n let k = derY / derX;\r\n\r\n if ((pt.x - sp.x) * k + sp.y > pt.y)\r\n crossings++;\r\n }\r\n }\r\n else //圆弧\r\n {\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n let sp = arc.StartPoint;\r\n let ep = arc.EndPoint;\r\n\r\n //如果相切\r\n if (equaln(Math.abs(pt.x - arc.Center.x), arc.Radius))\r\n {\r\n //当点和起点或者终点和点相切时\r\n if (equaln(sp.x, pt.x) && sp.y > pt.y)\r\n {\r\n if (ep.x - sp.x < -1e-5)\r\n crossings++;\r\n }\r\n else if (equaln(ep.x, pt.x) && ep.y > pt.y)\r\n {\r\n if (ep.x - sp.x > 1e-5)\r\n crossings++;\r\n }\r\n continue;\r\n }\r\n if (equaln(sp.x, pt.x) && sp.y > pt.y)\r\n {\r\n let der = arc.GetFistDeriv(0);\r\n if (der.x < -1e-5)\r\n crossings++;\r\n }\r\n if (equaln(ep.x, pt.x) && ep.y > pt.y)\r\n {\r\n let der = arc.GetFistDeriv(1);\r\n if (der.x > 1e-5)\r\n crossings++;\r\n }\r\n\r\n for (let pti of arc.IntersectWith(insLine, IntersectOption.ExtendArg))\r\n {\r\n if (pti.y < pt.y || equalv3(sp, pti, 1e-5) || equalv3(ep, pti, 1e-5))\r\n continue;\r\n\r\n let der = arc.GetFistDeriv(pti);\r\n if (!equaln(der.x, 0)) //相切.\r\n crossings++;\r\n }\r\n }\r\n }\r\n\r\n return (crossings % 2) === 1;\r\n}\r\n\r\n/**\r\n * 点在区域内部\r\n * \r\n * @param pt \r\n * @param pts \r\n * @returns \r\n */\r\nfunction IsPointInPolygon(pt: Vector3, pts: Vector2[])\r\n{\r\n let crossings = 0; //int\r\n let [px, py] = [pt.x, pt.y];\r\n\r\n let ptCout = pts.length;\r\n for (let i = 0; i < ptCout; i++)\r\n {\r\n let pti = pts[i];\r\n let ptn = pts[(i + 1) % ptCout];\r\n\r\n let [x1, x2] = [pti.x, ptn.x];\r\n\r\n /* This is done to ensure that we get the same result when\r\n the line goes from left to right and right to left */\r\n if (x1 > x2) [x1, x2] = [x2, x1];\r\n\r\n /* First check if the ray is possible to cross the line */\r\n if (px > x1 && px <= x2 && (py < pti.y || py <= ptn.y))\r\n {\r\n const eps = 0.000001;\r\n\r\n /* Calculate the equation of the line */\r\n let dx = ptn.x - pti.x;\r\n let dy = ptn.y - pti.y;\r\n let k;\r\n\r\n if (Math.abs(dx) < eps)\r\n k = 1e300;\r\n else\r\n k = dy / dx;\r\n\r\n let m = pti.y - k * pts[i].x;\r\n\r\n /* Find if the ray crosses the line */\r\n let y2 = k * px + m;\r\n if (py <= y2)\r\n crossings++;\r\n }\r\n }\r\n\r\n return crossings % 2 === 1;\r\n}\r\n","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Matrix3, Matrix4, Object3D, Vector2, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { CreateBoardUtil } from '../../ApplicationServices/mesh/createBoard';\r\nimport { arrayLast, arrayRemoveDuplicateBySort, changeArrayStartIndex } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { ComputerCurvesNormalOCS, getDeterminantFor2V } from '../../Common/CurveUtils';\r\nimport { matrixAlignCoordSys, matrixIsCoplane, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { FixIndex } from '../../Common/Utils';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, updateGeometry } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../../GraphicsSystem/OffsetPolyline';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Arc } from './Arc';\r\nimport { Curve, ExtendType } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Line } from './Line';\r\n\r\nexport interface PolylineProps\r\n{\r\n pt: Vector2,\r\n bul: number;\r\n}\r\n@Factory\r\nexport class Polyline extends Curve\r\n{\r\n private _ClosedMark: boolean = false;\r\n constructor(private _LineData: PolylineProps[] = [])\r\n {\r\n super();\r\n }\r\n\r\n UpdateMatrixTo(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p = new Vector3().setFromMatrixPosition(m);\r\n p.applyMatrix4(this.OCSInv);\r\n if (equaln(p.z, 0))\r\n {\r\n let dir = Math.sign(this.Area2);\r\n let tm = matrixAlignCoordSys(this.OCS, m);\r\n for (let p of this._LineData)\r\n {\r\n let p3 = AsVector3(p.pt);\r\n p3.applyMatrix4(tm);\r\n p.pt.set(p3.x, p3.y);\r\n }\r\n this.OCS = m;\r\n let newDir = Math.sign(this.Area2);\r\n if (dir !== newDir)\r\n for (let p of this._LineData)\r\n p.bul *= -1;\r\n }\r\n }\r\n\r\n /**\r\n * 原地翻转,仅改变法向量\r\n */\r\n Flip()\r\n {\r\n this.WriteAllObjectRecord();\r\n let x = new Vector3();\r\n let y = new Vector3();\r\n let z = new Vector3();\r\n this._Matrix.extractBasis(x, y, z);\r\n z.negate();\r\n y.crossVectors(z, x);\r\n let p = this.Position;\r\n this._Matrix.makeBasis(x, y, z).setPosition(p);\r\n\r\n for (let d of this._LineData)\r\n {\r\n d.pt.y *= -1;\r\n d.bul *= -1;\r\n }\r\n this.Update();\r\n return this;\r\n }\r\n\r\n //翻转曲线,首尾调换\r\n Reverse(): this\r\n {\r\n if (this._LineData.length === 0)\r\n return this;\r\n this.WriteAllObjectRecord();\r\n\r\n let pts = [];\r\n let buls = [];\r\n for (let data of this._LineData)\r\n {\r\n pts.push(data.pt);\r\n buls.push(-data.bul);\r\n }\r\n\r\n let lastBul = buls.pop();\r\n buls.reverse();\r\n buls.push(lastBul);\r\n\r\n pts.reverse();\r\n\r\n if (this._ClosedMark && !equalv2(pts[0], arrayLast(pts)))\r\n {\r\n pts.unshift(pts.pop());\r\n buls.unshift(buls.pop());\r\n }\r\n\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let d = this._LineData[i];\r\n d.pt = pts[i];\r\n d.bul = buls[i];\r\n }\r\n\r\n return this;\r\n }\r\n set LineData(data: PolylineProps[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData = data;\r\n this.Update();\r\n }\r\n get LineData()\r\n {\r\n return this._LineData;\r\n }\r\n\r\n get NumberOfVertices(): number\r\n {\r\n return this._LineData.length;\r\n }\r\n\r\n /**\r\n * 在指定位置插入点.\r\n * 例如:\r\n * pl.AddVertexAt(pl.NumberOfVerticesk,p);//在末尾插入一个点\r\n *\r\n * @param {number} index 索引位置\r\n * @param {Vector2} pt 点\r\n * @returns {this}\r\n * @memberof Polyline\r\n */\r\n AddVertexAt(index: number, pt: Vector2 | Vector2[]): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let pts: PolylineProps[];\r\n if (Array.isArray(pt))\r\n {\r\n pts = pt.map(p =>\r\n {\r\n return {\r\n pt: p.clone(),\r\n bul: 0\r\n };\r\n });\r\n }\r\n else\r\n pts = [{ pt: pt.clone(), bul: 0 }];\r\n\r\n this._LineData.splice(index, 0, ...pts);\r\n this.Update();\r\n return this;\r\n }\r\n RemoveVertexAt(index: number): this\r\n {\r\n if (index < this._LineData.length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.splice(index, 1);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n RemoveVertexIn(from: number, to: number): this\r\n {\r\n if (from + 1 < this._LineData.length && to > from)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.splice(from + 1, to - from - 1);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * 重设闭合多段线的起点\r\n * @param index 起始index,如果index非整数,将用最接近的整数作为起始索引\r\n */\r\n ResetStartPoint(index: number)\r\n {\r\n if (!this.IsClose || index >= this.EndParam) return false;\r\n\r\n if (equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt))\r\n this._LineData.pop();\r\n\r\n changeArrayStartIndex(this._LineData, Math.floor(index + 0.5));\r\n this._LineData.push({\r\n pt: this._LineData[0].pt.clone(),\r\n bul: 0\r\n });\r\n return true;\r\n }\r\n GetPoint2dAt(index: number): Vector2 | undefined\r\n {\r\n if (index >= 0 && this._LineData.length > index)\r\n return this._LineData[index].pt.clone();\r\n }\r\n /**\r\n * 设置指定点的位置\r\n *\r\n * @param {number} index\r\n * @param {Vector2} pt\r\n * @memberof Polyline\r\n */\r\n SetPointAt(index: number, pt: Vector2): this\r\n {\r\n let d = this._LineData[index];\r\n if (d)\r\n {\r\n this.WriteAllObjectRecord();\r\n d.pt.copy(pt);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n for (let i = 0; i <= this.EndParam; i++)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n p.applyMatrix4(m).applyMatrix4(this.OCSInv);\r\n this.SetPointAt(i, AsVector2(p));\r\n }\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldPts = this.GetStretchPoints();\r\n reviseMirrorMatrix(this._Matrix);\r\n for (let i = 0; i < oldPts.length; i++)\r\n {\r\n let newP = oldPts[i].applyMatrix4(this.OCSInv);\r\n let newBul = -this.GetBuilgeAt(i);\r\n this.SetPointAt(i, AsVector2(newP));\r\n this.SetBulgeAt(i, newBul);\r\n }\r\n this.Reverse();\r\n return this;\r\n }\r\n SetBulgeAt(index: number, bul: number): this\r\n {\r\n let d = this._LineData[index];\r\n if (d)\r\n {\r\n this.WriteAllObjectRecord();\r\n d.bul = bul;\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n GetBuilgeAt(index: number): number\r\n {\r\n return this._LineData[index].bul;\r\n }\r\n Rectangle(length: number, height: number): this\r\n {\r\n this.LineData = [\r\n { pt: new Vector2(), bul: 0 },\r\n { pt: new Vector2(length), bul: 0 },\r\n { pt: new Vector2(length, height), bul: 0 },\r\n { pt: new Vector2(0, height), bul: 0 }];\r\n this.CloseMark = true;\r\n return this;\r\n }\r\n RectangleFrom2Pt(p1: Vector3, p2: Vector3): this\r\n {\r\n let box = new Box3();\r\n box.setFromPoints([p2, p1].map((p: Vector3) => p.clone().applyMatrix4(this.OCSInv)));\r\n\r\n let px1 = AsVector2(box.min);\r\n let px3 = AsVector2(box.max);\r\n let px2 = new Vector2(px3.x, px1.y);\r\n let px4 = new Vector2(px1.x, px3.y);\r\n\r\n this.LineData = [\r\n { pt: px1, bul: 0 },\r\n { pt: px2, bul: 0 },\r\n { pt: px3, bul: 0 },\r\n { pt: px4, bul: 0 }];\r\n\r\n this.CloseMark = true;\r\n return this;\r\n }\r\n //多段线起点\r\n get StartPoint()\r\n {\r\n if (this._LineData.length > 0)\r\n return AsVector3(this._LineData[0].pt).applyMatrix4(this.OCS);\r\n return new Vector3();\r\n }\r\n set StartPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n\r\n if (this._LineData.length === 0)\r\n this.AddVertexAt(0, AsVector2(p));\r\n else if (this._LineData.length === 1)\r\n this.SetPointAt(0, AsVector2(p));\r\n else\r\n {\r\n let bul = this.GetBuilgeAt(0);\r\n if (bul !== 0)\r\n {\r\n let arc = this.GetCurveAtParam(0) as Arc;\r\n arc.StartPoint = p;\r\n //前面线的凸度调整\r\n this.SetBulgeAt(0, Math.tan(arc.AllAngle / 4) * Math.sign(bul));\r\n }\r\n this.SetPointAt(0, AsVector2(p));\r\n }\r\n }\r\n get EndPoint()\r\n {\r\n if (this._ClosedMark) return this.StartPoint;\r\n if (this._LineData.length > 0)\r\n return AsVector3(this._LineData[this.EndParam].pt).applyMatrix4(this.OCS);\r\n return new Vector3();\r\n }\r\n set EndPoint(p: Vector3)\r\n {\r\n if (this._LineData.length < 2 || this.CloseMark)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n\r\n let bul = this.GetBuilgeAt(this.EndParam - 1);\r\n if (bul !== 0)\r\n {\r\n let arc = this.GetCurveAtParam(this.EndParam - 1) as Arc;\r\n arc.ApplyMatrix(this.OCSInv);\r\n arc.EndPoint = p;\r\n //前面线的凸度调整\r\n this.SetBulgeAt(this.EndParam - 1, Math.tan(arc.AllAngle / 4) * Math.sign(bul));\r\n }\r\n this.SetPointAt(this.EndParam, AsVector2(p));\r\n }\r\n\r\n get CurveCount(): number\r\n {\r\n return this.EndParam;\r\n }\r\n\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n\r\n /**\r\n * 表示最后一条曲线的终止参数,使用该参数可以直接遍历到多段线的所有子线段. for(i 1 && (equalv3(this.StartPoint, this.EndPoint, 1e-4)));\r\n }\r\n set CloseMark(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = v;\r\n this.Update();\r\n }\r\n\r\n DigestionCloseMark()\r\n {\r\n if (this._ClosedMark && this._LineData.length > 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = false;\r\n\r\n if (!equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt))\r\n this._LineData.push({ pt: AsVector2(this._LineData[0].pt), bul: 0 });\r\n }\r\n }\r\n\r\n get Length()\r\n {\r\n return this.Explode().reduce((l, cu) => l + cu.Length, 0);\r\n }\r\n\r\n /**\r\n * 获得指定参数所在的点.\r\n * 当曲线存在闭合标志时,参数必须在曲线内部.\r\n * 当曲线不存在闭合标志时,参数允许延伸出曲线.\r\n *\r\n * @param {number} param 参数\r\n * @returns {Vector3} 三维点,可为空\r\n * @memberof Polyline\r\n */\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n if (param === Math.floor(param) && this.ParamOnCurve(param))\r\n return AsVector3(this.GetPoint2dAt(FixIndex(param, this.NumberOfVertices))).applyMatrix4(this.OCS);\r\n let cu: Curve = this.GetCurveAtParam(param);\r\n if (cu)\r\n return cu.GetPointAtParam(this.GetCurveParamAtParam(param));\r\n return undefined;\r\n }\r\n\r\n GetDistAtParam(param: number): number\r\n {\r\n if (this._ClosedMark && !this.ParamOnCurve(param))\r\n return NaN;\r\n\r\n //参数 整数\r\n let paramFloor = Math.floor(param);\r\n //需要计算的曲线个数\r\n let cuCout = paramFloor > this.EndParam ? this.EndParam : paramFloor;\r\n\r\n let dist = 0;\r\n //首先计算完整曲线的长度\r\n for (let i = 0; i < cuCout; i++)\r\n {\r\n dist += this.GetCurveAtIndex(i).Length;\r\n }\r\n\r\n //参数已经大于索引,证明参数在线外.\r\n if (paramFloor !== cuCout)\r\n {\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCout);\r\n }\r\n else if (param > paramFloor)\r\n {\r\n let lastParam = param - paramFloor;\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(lastParam);\r\n }\r\n\r\n return dist;\r\n }\r\n GetPointAtDistance(dist: number): Vector3\r\n {\r\n let param = this.GetParamAtDist(dist);\r\n return this.GetPointAtParam(param);\r\n }\r\n\r\n /**\r\n * 返回参数所在的点. 如果曲线不闭合,会试图返回延伸点参数\r\n *\r\n * @param {Vector3} pt\r\n * @returns {number}\r\n * @memberof Polyline\r\n */\r\n GetParamAtPoint(pt: Vector3): number\r\n {\r\n let cus = this.Explode();\r\n if (cus.length === 0) return NaN;\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let param = cu.GetParamAtPoint(pt);\r\n if (cu.ParamOnCurve(param))\r\n return i + param; //返回点在曲线内部的参数\r\n }\r\n\r\n //当曲线闭合时,不需要延伸首尾去判断参数\r\n if (this._ClosedMark) return NaN;\r\n\r\n //起点终点参数集合\r\n let seParams: number[] = [];\r\n //点在第一条曲线上的参数\r\n let startParam = cus[0].GetParamAtPoint(pt);\r\n if (!isNaN(startParam) && startParam < 0)\r\n seParams.push(startParam);\r\n //点在最后一条线上的参数\r\n let endParam = cus[cus.length - 1].GetParamAtPoint(pt);\r\n if (!isNaN(endParam) && endParam > 0)\r\n seParams.push(endParam + this.EndParam - 1);\r\n\r\n if (seParams.length == 1)\r\n {\r\n return seParams[0];\r\n }\r\n else if (seParams.length == 2)\r\n {\r\n //返回较近的参数\r\n if (pt.distanceToSquared(this.StartPoint)\r\n < pt.distanceToSquared(this.EndPoint))\r\n return seParams[0];\r\n else\r\n return seParams[1];\r\n }\r\n return NaN;\r\n }\r\n GetParamAtDist(dist: number): number\r\n {\r\n let cus = this.Explode();\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let len = cu.Length;\r\n if (dist <= len)\r\n return i + cu.GetParamAtDist(dist);\r\n else if (equaln(dist, len, 1e-8))\r\n return i + 1;\r\n dist -= len;\r\n }\r\n if (!this._ClosedMark)\r\n return cus.length + cus[cus.length - 1].GetParamAtDist(dist);\r\n\r\n return NaN;\r\n }\r\n GetDistAtPoint(pt: Vector3): number\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n if (!this.ParamOnCurve(param)) return NaN;\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n /**\r\n * 返回曲线的一阶导数.\r\n * 当曲线闭合(标志)且点不在曲线上.\r\n * 或者曲线不闭合(标志) 且点不在曲线上也不在延伸上\r\n *\r\n * @param {(number | Vector3)} param\r\n * @returns {Vector3}\r\n * @memberof Polyline\r\n */\r\n GetFistDeriv(param: number | Vector3): Vector3\r\n {\r\n if (param instanceof Vector3)\r\n param = this.GetParamAtPoint(param);\r\n\r\n if (isNaN(param))\r\n return undefined;\r\n\r\n let cu = this.GetCurveAtParam(param);\r\n\r\n if (!cu) return undefined;\r\n\r\n return cu.GetFistDeriv(this.GetCurveParamAtParam(param));\r\n }\r\n GetSplitCurves(param: number[] | number): Array\r\n {\r\n //参数需要转化为参数数组\r\n let params: number[];\r\n if (typeof param == \"number\")\r\n params = [param];\r\n else\r\n params = param;\r\n\r\n //校验参数在曲线中,修正参数\r\n let endParam = this.EndParam;\r\n params = params.filter(p => this.ParamOnCurve(p) && p > -1e-6)\r\n .map(a =>\r\n {\r\n if (a < 0) return 0;\r\n if (a > endParam) return endParam;\r\n if (equaln(a, Math.floor(a + 0.5), 1e-8))\r\n return Math.floor(a + 0.5);\r\n return a;\r\n });\r\n //排序\r\n params.sort((a, b) => a - b);\r\n let hasEndParam = arrayLast(params) === this.EndParam;\r\n //必须加入最后一个参数,保证切割后的曲线完整\r\n if (!hasEndParam)\r\n params.push(this.EndParam);\r\n arrayRemoveDuplicateBySort(params, (e1, e2) => equaln(e1, e2, 1e-8));\r\n params = params.filter(p => this.ParamOnCurve(p));\r\n if (params.length === 0)\r\n return [];\r\n\r\n //判断是否存在0参数\r\n let hasZeroParam = params[0] === 0;\r\n if (hasZeroParam)\r\n params.shift();\r\n\r\n let { pts, buls } = this.PtsBuls;\r\n\r\n //返回的多段线集合\r\n let pls: Polyline[] = [];\r\n\r\n let len = 0;//已经走过的参数长度(整数)\r\n\r\n //上一个切割参数的位置 0-1\r\n let prePa = 0;\r\n for (let pa of params)\r\n {\r\n //参数所在点\r\n let pt = AsVector2(this.GetPointAtParam(pa).applyMatrix4(this.OCSInv));\r\n pa -= len;\r\n let pafloor = Math.floor(pa);\r\n len += pafloor;\r\n\r\n let plData: PolylineProps[] = [];\r\n\r\n //添加点\r\n for (let i = 0; i < pafloor; i++)\r\n {\r\n if (i === 0 && !equaln(buls[0], 0, 1e-8))\r\n {\r\n buls[0] = Math.tan((1 - prePa) * Math.atan(buls[0]));\r\n }\r\n plData.push({ pt: pts[0], bul: buls[0] });\r\n pts.shift();\r\n buls.shift();\r\n }\r\n\r\n if (equaln(pa, pafloor, 1e-8))//如果pa在点上\r\n {\r\n plData.push({ pt: pts[0].clone(), bul: buls[0] });\r\n }\r\n else //在曲线上\r\n {\r\n let bul: number = buls[0];\r\n if (!equaln(bul, 0, 1e-6))\r\n bul = Math.tan((pa - pafloor - (0 === pafloor ? prePa : 0)) * Math.atan(buls[0])); //->凸度\r\n\r\n //加入顶点+凸度\r\n plData.push({ pt: pts[0].clone(), bul });\r\n //终点\r\n plData.push({ pt, bul: 0 });\r\n\r\n //修正剩余的点表和凸度表\r\n pts[0].copy(pt);\r\n }\r\n\r\n prePa = pa - pafloor;\r\n if (plData.length > 1)\r\n {\r\n let pl = new Polyline(plData).ApplyMatrix(this.OCS);\r\n pl.ColorIndex = this.ColorIndex;\r\n pls.push(pl);\r\n }\r\n }\r\n\r\n //当曲线为闭合曲线,并且不存在0切割参数时,首尾连接曲线\r\n if (this._ClosedMark && !hasZeroParam && !hasEndParam)\r\n {\r\n let lastPl = pls[pls.length - 1];\r\n if (equalv2(arrayLast(lastPl._LineData).pt, pls[0]._LineData[0].pt))\r\n lastPl._LineData.pop();\r\n\r\n lastPl._LineData.push(...pls[0]._LineData);\r\n\r\n pls.shift();\r\n }\r\n return pls;\r\n }\r\n\r\n //未完善\r\n GetCurveAtParamRange(startParam: number, endParam: number): Array\r\n {\r\n let sfloor = Math.floor(startParam + 0.5);\r\n if (equaln(sfloor, startParam, 1e-8)) startParam = sfloor;\r\n else sfloor = Math.floor(startParam);\r\n let efloor = Math.floor(endParam + 0.5);\r\n if (equaln(efloor, endParam, 1e-8)) endParam = efloor;\r\n else efloor = Math.floor(efloor);\r\n\r\n const GetCurve = (index: number) =>\r\n {\r\n let d = this._LineData[index];\r\n let next = this._LineData[index + 1];\r\n if (!equaln(d.bul, 0, 1e-8))\r\n return new Arc().ParseFromBul(d.pt, next.pt, d.bul);\r\n else\r\n return new Line(AsVector3(d.pt), AsVector3(next.pt));\r\n };\r\n\r\n let lined: PolylineProps[] = [];\r\n if (startParam === sfloor)\r\n {\r\n let d = this._LineData[sfloor];\r\n lined.push({ pt: d.pt.clone(), bul: d.bul });\r\n }\r\n else\r\n {\r\n let d = this._LineData[sfloor];\r\n let cu = GetCurve(sfloor);\r\n let remParam = startParam - sfloor;\r\n let p = cu.GetPointAtParam(remParam);\r\n let bul = d.bul;\r\n if (!equaln(bul, 0))\r\n bul = Math.tan(Math.atan(bul) * (1 - remParam));\r\n lined.push({ pt: AsVector2(p), bul: bul });\r\n }\r\n\r\n for (let i = sfloor + 1; i < efloor; i++)\r\n {\r\n let d = this._LineData[i];\r\n lined.push({ pt: d.pt.clone(), bul: d.bul });\r\n }\r\n\r\n if (efloor !== endParam)\r\n {\r\n let d = this.LineData[efloor];\r\n let remParam = endParam - efloor;\r\n let cu = GetCurve(efloor);\r\n let p = cu.GetPointAtParam(remParam);\r\n let bul = d.bul;\r\n if (!equaln(bul, 0))\r\n {\r\n arrayLast(lined).bul = Math.tan(Math.atan(bul) * remParam);\r\n bul = Math.tan(Math.atan(bul) * (1 - remParam));\r\n }\r\n lined.push({ pt: AsVector2(p), bul });\r\n }\r\n\r\n let pl = new Polyline(lined);\r\n pl.OCS = this.OCSNoClone;\r\n return;\r\n }\r\n\r\n Extend(newParam: number)\r\n {\r\n if (this.CloseMark || this.ParamOnCurve(newParam)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let ptIndex: number;\r\n let bulIndex: number;\r\n\r\n if (newParam < 0)\r\n {\r\n ptIndex = 0;\r\n bulIndex = 0;\r\n }\r\n else if (newParam > this.EndParam)\r\n {\r\n ptIndex = this.EndParam;\r\n bulIndex = ptIndex - 1;\r\n }\r\n\r\n //修改顶点\r\n this._LineData[ptIndex].pt = AsVector2(this.GetPointAtParam(newParam).applyMatrix4(this.OCSInv));\r\n\r\n //修改凸度\r\n let oldBul = this._LineData[bulIndex].bul;\r\n if (oldBul != 0)\r\n this._LineData[bulIndex].bul = Math.tan(Math.atan(oldBul) * (1 + newParam - ptIndex));\r\n\r\n this.Update();\r\n }\r\n\r\n //const this\r\n MatrixAlignTo2(toMatrix: Matrix4)\r\n {\r\n if (!matrixIsCoplane(this._Matrix, toMatrix, 1e-4))\r\n return this.PtsBuls;\r\n\r\n let m = matrixAlignCoordSys(this._Matrix, toMatrix);\r\n\r\n let z1 = this.Normal;\r\n let z2 = new Vector3().setFromMatrixColumn(toMatrix, 2);\r\n let isMirror = equalv3(z1, z2.negate());\r\n\r\n let pts: Vector2[] = [];\r\n let buls: number[] = [];\r\n for (let d of this._LineData)\r\n {\r\n let p = AsVector2(AsVector3(d.pt).applyMatrix4(m));\r\n pts.push(p);\r\n buls.push(isMirror ? -d.bul : d.bul);\r\n }\r\n return { pts, buls };\r\n }\r\n\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-4)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (this._ClosedMark)\r\n return Status.False;\r\n\r\n let [sp, ep, cuSp, cuEp] = [this.StartPoint, this.EndPoint, cu.StartPoint, cu.EndPoint];\r\n\r\n let ocsInv = this.OCSInv;\r\n let [cuSp2, cuEp2] = [cuSp, cuEp].map(p => AsVector2(p.clone().applyMatrix4(ocsInv)));\r\n\r\n if (this._LineData.length === 0)\r\n {\r\n if (cu instanceof Line)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: cu.Bul });\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (cu instanceof Polyline)\r\n {\r\n let f = new CADFiler();\r\n cu.WriteFile(f);\r\n this.ReadFile(f);\r\n }\r\n else\r\n return Status.False;\r\n }\r\n else\r\n {\r\n enum LinkType\r\n {\r\n None = 0,\r\n SpSp = 1,\r\n SpEp = 2,\r\n EpSp = 3,\r\n EpEp = 4,\r\n };\r\n\r\n let spspDisSq = cuSp.distanceToSquared(sp);\r\n let spepDisSq = cuSp.distanceToSquared(ep);\r\n let epspDisSq = cuEp.distanceToSquared(sp);\r\n let epepDisSq = cuEp.distanceToSquared(ep);\r\n let minDis = tolerance * tolerance;\r\n\r\n let linkType = LinkType.None;\r\n\r\n if (spspDisSq < minDis)\r\n {\r\n linkType = LinkType.SpSp;\r\n minDis = spspDisSq;\r\n }\r\n\r\n if (spepDisSq < minDis)\r\n {\r\n linkType = LinkType.SpEp;\r\n minDis = spepDisSq;\r\n }\r\n\r\n if (epspDisSq < minDis)\r\n {\r\n linkType = LinkType.EpSp;\r\n minDis = epspDisSq;\r\n }\r\n\r\n if (epepDisSq < minDis)\r\n linkType = LinkType.EpEp;\r\n\r\n if (linkType === LinkType.None)\r\n return Status.False;\r\n\r\n if (cu instanceof Line)\r\n {\r\n if (linkType === LinkType.SpSp)\r\n {\r\n this._LineData.unshift({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n this._LineData.unshift({ pt: cuSp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n }\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n let dir = equalv3(this.Normal, cu.Normal.negate()) ? -1 : 1;\r\n let bul = cu.Bul * dir;\r\n if (linkType === LinkType.SpSp)\r\n {\r\n this._LineData.unshift({ pt: cuEp2, bul: -bul });\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n arrayLast(this._LineData).bul = bul;\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n this._LineData.unshift({ pt: cuSp2, bul: bul });\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n arrayLast(this._LineData).bul = -bul;\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n }\r\n }\r\n else if (cu instanceof Polyline)\r\n {\r\n if (cu.CloseMark) return Status.False;\r\n\r\n let { pts, buls } = this.PtsBuls;\r\n\r\n if (linkType === LinkType.SpSp)\r\n {\r\n cu.Reverse();\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n cuPtsBul.pts.pop();\r\n cuPtsBul.buls.pop();\r\n pts = cuPtsBul.pts.concat(pts);\r\n buls = cuPtsBul.buls.concat(buls);\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n pts.pop();\r\n buls.pop();\r\n\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n pts = pts.concat(cuPtsBul.pts);\r\n buls = buls.concat(cuPtsBul.buls);\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n cuPtsBul.pts.pop();\r\n cuPtsBul.buls.pop();\r\n pts = cuPtsBul.pts.concat(pts);\r\n buls = cuPtsBul.buls.concat(buls);\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n pts.pop();\r\n buls.pop();\r\n\r\n cu.Reverse();\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n pts = pts.concat(cuPtsBul.pts);\r\n buls = buls.concat(cuPtsBul.buls);\r\n }\r\n\r\n this._LineData.length = 0;\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n this._LineData.push({ pt: pts[i], bul: buls[i] });\r\n }\r\n }\r\n else\r\n return Status.False;\r\n }\r\n\r\n //在上面的其他分支已经返回了假 所以这里直接返回真.\r\n this.Update();\r\n return Status.True;\r\n }\r\n\r\n /**\r\n * 将曲线数组组合成多段线\r\n * @param curves 已经使用CurveLinked的数组,总是首尾相连\r\n * @returns\r\n */\r\n static Combine(curves: Curve[], tolerance = 1e-5): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n pl.OCS = ComputerCurvesNormalOCS(curves);\r\n\r\n for (let cu of curves)\r\n pl.Join(cu, false, tolerance);\r\n\r\n let d = pl.LineData;\r\n if (d.length > 1)\r\n {\r\n let ld = arrayLast(d).pt;\r\n if (equalv2(d[0].pt, ld, tolerance))\r\n ld.copy(d[0].pt);\r\n }\r\n\r\n return pl;\r\n }\r\n /**首尾相连的曲线直接连接 */\r\n static FastCombine(curves: Curve[], tolerance = 1e-5): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n pl.OCS = ComputerCurvesNormalOCS(curves);\r\n\r\n let ocsInv = pl.OCSInv;\r\n\r\n let lineData: PolylineProps[] = [];\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let cu = curves[i];\r\n let bul = 0;\r\n if (cu instanceof Arc)\r\n bul = cu.Bul;\r\n\r\n lineData.push({\r\n pt: AsVector2(cu.StartPoint.applyMatrix4(ocsInv)),\r\n bul\r\n });\r\n\r\n if (i === curves.length - 1)\r\n {\r\n lineData.push({\r\n pt: AsVector2(cu.EndPoint.applyMatrix4(ocsInv)),\r\n bul: 0\r\n });\r\n }\r\n }\r\n\r\n if (lineData.length > 1)\r\n {\r\n let ld = arrayLast(lineData).pt;\r\n if (equalv2(lineData[0].pt, ld, tolerance))\r\n ld.copy(lineData[0].pt);\r\n }\r\n pl.LineData = lineData;\r\n return pl;\r\n }\r\n\r\n PtOnCurve(pt: Vector3): boolean\r\n {\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let c = this.GetCurveAtIndex(i);\r\n if (c.PtOnCurve(pt))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let c = this.GetCurveAtIndex(i);\r\n if (c.PtOnCurve3(p, fuzz))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n PtInCurve(pt: Vector3)\r\n {\r\n return this.IsClose && IsPointInPolyLine(this, pt);\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.GetClosestPointTo2(pt, extend ? ExtendType.Both : ExtendType.None);\r\n }\r\n GetClosestPointTo2(pt: Vector3, extType: ExtendType): Vector3\r\n {\r\n //当曲线空时,返回空\r\n if (this.EndParam < 1) return undefined;\r\n //当有闭合标志时,曲线在任何位置都不延伸\r\n if (this._ClosedMark) extType = ExtendType.None;\r\n\r\n //最近点\r\n let ptC = undefined;\r\n //最近点的距离\r\n let ptCDist = Infinity;\r\n\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n\r\n //前延伸\r\n if (i === 0 && (extType & ExtendType.Front) > 0)\r\n {\r\n let ptCFirst = cu.GetClosestPointTo(pt, true);\r\n if (cu.GetParamAtPoint(ptCFirst) <= 1)\r\n {\r\n ptC = ptCFirst;\r\n ptCDist = ptC.distanceToSquared(pt);\r\n }\r\n if (extType === ExtendType.Front)\r\n continue;\r\n }\r\n\r\n let ptCloseNew: Vector3; //新的最近点\r\n\r\n //后延伸 (此处与前延伸分开if 如果线只有一段,那么前后延伸都能同时触发)\r\n if (i === (this.EndParam - 1) && (extType & ExtendType.Back) > 0)\r\n {\r\n let ptCLast = cu.GetClosestPointTo(pt, true);\r\n if (cu.GetParamAtPoint(ptCLast) >= 0)\r\n ptCloseNew = ptCLast;\r\n else //如果延伸之后并不在曲线或者曲线的后延伸上\r\n ptCloseNew = cu.EndPoint;\r\n }\r\n else\r\n {\r\n ptCloseNew = cu.GetClosestPointTo(pt, false);\r\n }\r\n\r\n let newDist = ptCloseNew.distanceToSquared(pt);\r\n if (newDist < ptCDist)\r\n {\r\n ptC = ptCloseNew;\r\n ptCDist = newDist;\r\n }\r\n }\r\n\r\n return ptC;\r\n }\r\n //偏移\r\n GetOffsetCurves(offsetDist: number): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist);\r\n let curves = polyOffestUtil.Do();\r\n for (let cu of curves)\r\n cu.ColorIndex = this.ColorIndex;\r\n return curves;\r\n }\r\n GetFeedingToolPath(offsetDist: number, offsetDistSq = (offsetDist ** 2) * 2.1): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq);\r\n return polyOffestUtil.Do();\r\n }\r\n /**\r\n * 分解\r\n */\r\n Explode(): Curve[]\r\n {\r\n let exportCus: Curve[] = [];\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n exportCus.push(this.GetCurveAtIndex(i));\r\n }\r\n return exportCus;\r\n }\r\n\r\n /**\r\n * 根据参数得到参数所在的子曲线.\r\n *\r\n * 当曲线存在闭合标志时,参数必须在曲线内部,否则返回空.\r\n *\r\n * @param {number} param 参数值\r\n * @returns {Curve} 曲线(直线或者圆弧) 或空\r\n * @memberof Polyline\r\n */\r\n GetCurveAtParam(param: number): Curve\r\n {\r\n if (this._ClosedMark && !this.ParamOnCurve(param))\r\n return undefined;\r\n\r\n if (param < 0)\r\n return this.GetCurveAtIndex(0);\r\n else if (param >= this.EndParam)\r\n return this.GetCurveAtIndex(this.EndParam - 1);\r\n else return this.GetCurveAtIndex(Math.floor(param));\r\n }\r\n\r\n /**\r\n * 得到参数在子曲线中的表示\r\n *\r\n * @param {number} param 参数在多段线中表示\r\n * @returns {number} 参数在子曲线中表示\r\n * @memberof Polyline\r\n */\r\n GetCurveParamAtParam(param: number): number\r\n {\r\n if (param >= this.EndParam) param -= this.EndParam - 1;\r\n else if (param > 0) param -= Math.floor(param);\r\n\r\n return param;\r\n }\r\n\r\n /**\r\n * 获得曲线,来自索引位置.\r\n * @param {number} i 索引位置 整数\r\n */\r\n GetCurveAtIndex(i: number): Curve\r\n {\r\n if (i >= this._LineData.length) return undefined;\r\n\r\n if (!this.ParamOnCurve(i)) return undefined;\r\n\r\n if (!this._ClosedMark && i === this._LineData.length - 1) return undefined;\r\n\r\n let d1 = this._LineData[i];\r\n let d2 = this._LineData[FixIndex(i + 1, this._LineData)];\r\n\r\n let curve: Curve;\r\n if (equaln(d1.bul, 0, 1e-8))\r\n curve = new Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCS);\r\n else\r\n curve = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCS);\r\n\r\n curve.ColorIndex = this._Color;\r\n return curve;\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-5)\r\n {\r\n return IntersectPolylineAndCurve(this, curve, intType, tolerance);\r\n }\r\n\r\n //计算自交点.\r\n IntersectSelf(): number[]\r\n {\r\n let cus = this.Explode();\r\n if (cus.length === 0) return [];\r\n\r\n let intParams: number[] = [];\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n for (let j = i + 2; j < cus.length; j++)\r\n {\r\n let c2 = cus[j];\r\n let pts = c.IntersectWith(c2, IntersectOption.OnBothOperands);\r\n\r\n for (let p of pts)\r\n {\r\n intParams.push(i + c.GetParamAtPoint(p));\r\n intParams.push(j + c2.GetParamAtPoint(p));\r\n }\r\n }\r\n }\r\n return intParams;\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n let box = new Box3Ext();\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n box.union(cu.BoundingBox);\r\n }\r\n return box;\r\n }\r\n\r\n /**\r\n * 得到曲线有用的点表和凸度(闭合曲线首尾重复)\r\n */\r\n get PtsBuls(): { pts: Vector2[], buls: number[]; }\r\n {\r\n let pts: Vector2[] = [];\r\n let buls: number[] = [];\r\n\r\n if (this._LineData.length === 0)\r\n return { pts, buls };\r\n\r\n for (let data of this._LineData)\r\n {\r\n pts.push(data.pt.clone());\r\n buls.push(data.bul);\r\n }\r\n //闭合且起点不等于终点\r\n if (this._ClosedMark &&\r\n !this._LineData[0].pt.equals(arrayLast(this._LineData).pt))\r\n {\r\n pts.push(pts[0].clone());\r\n buls.push(buls[0]);\r\n }\r\n\r\n return { pts, buls };\r\n }\r\n get IsBulge()\r\n {\r\n if (!this.IsClose) return false;\r\n\r\n let refDir = Math.sign(this.Area2);\r\n let c1: Curve;\r\n let c2: Curve;\r\n\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n c1 = this.GetCurveAtIndex(i);\r\n c2 = this.GetCurveAtIndex(FixIndex(i + 1, this.EndParam));\r\n\r\n let len1 = c1.Length;\r\n let len2 = c2.Length;\r\n let minLen = Math.min(len1, len2) * 0.2;\r\n\r\n let p = c1.EndPoint;\r\n let p1: Vector3;\r\n let p2: Vector3;\r\n\r\n if (c1 instanceof Arc)\r\n {\r\n let dir = c1.IsClockWise ? -1 : 1;\r\n if (dir !== refDir)\r\n return false;\r\n p1 = c1.GetPointAtDistance(len1 - minLen);\r\n }\r\n else\r\n p1 = c1.StartPoint;\r\n\r\n if (c2 instanceof Arc)\r\n {\r\n let dir = c2.IsClockWise ? -1 : 1;\r\n if (dir !== refDir)\r\n return false;\r\n p2 = c2.GetPointAtDistance(minLen);\r\n }\r\n else\r\n p2 = c2.EndPoint;\r\n\r\n let vec1 = p.clone().sub(p1);\r\n let vec2 = p2.sub(p);\r\n let dir = Math.sign(vec1.cross(vec2).z);\r\n\r\n if (dir !== 0 && dir !== refDir)\r\n return false;\r\n }\r\n return true;\r\n }\r\n get Shape()\r\n {\r\n let { pts, buls } = this.PtsBuls;\r\n let curve = CreateBoardUtil.CreatePath(pts, buls);\r\n return curve;\r\n }\r\n get SVG()\r\n {\r\n let sp = this.StartPoint;\r\n let str = `M${sp.x} ${sp.y} `;\r\n for (let i = 1; i <= this.EndParam; i++)\r\n {\r\n let bul = this.GetBuilgeAt(i - 1);\r\n let p = this.GetPointAtParam(i);\r\n if (bul === 0)\r\n str += `L${p.x} ${p.y} `;\r\n else\r\n {\r\n let arc = this.GetCurveAtIndex(i - 1) as Arc;\r\n str += `A ${arc.Radius} ${arc.Radius} 0 ${Math.abs(bul) >= 1 ? 1 : 0} ${arc.IsClockWise ? 0 : 1} ${p.x} ${p.y}`;\r\n }\r\n }\r\n return str;\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let shape = this.Shape;\r\n\r\n let geo = BufferGeometryUtils.CreateFromPts(shape.getPoints(50).map(AsVector3));\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry().setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let obj = new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n return obj;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let shape = this.Shape;\r\n let pts = shape.getPoints(50).map(AsVector3);\r\n let plObj = en as TLine;\r\n let geo = plObj.geometry as BufferGeometry;\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts))\r\n {\r\n updateGeometry(plObj, BufferGeometryUtils.CreateFromPts(pts));\r\n }\r\n }\r\n\r\n GetDragPointCount(drag: DragPointType): number\r\n {\r\n if (drag === DragPointType.Grip)\r\n {\r\n let count = this.EndParam * 2 + 1;\r\n if (this.CloseMark) count--;\r\n return count;\r\n }\r\n else\r\n {\r\n return this._LineData.length;\r\n }\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n let midPts = [];\r\n let enParam = this.EndParam;\r\n for (let i = 0.5; i < enParam; i++)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n p && midPts.push(p);\r\n }\r\n return midPts;\r\n case ObjectSnapMode.Nea:\r\n {\r\n let nea: Vector3[] = [];\r\n for (let cu of this.Explode())\r\n {\r\n let neaa = cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n if (neaa)\r\n nea.push(...neaa);\r\n }\r\n return nea;\r\n }\r\n case ObjectSnapMode.Ext:\r\n {\r\n let cp = this.GetClosestPointTo(pickPoint, true);\r\n if (cp)\r\n return [cp];\r\n break;\r\n }\r\n case ObjectSnapMode.Cen:\r\n let cenPts: Vector3[] = [];\r\n for (let i = 0; i < this._LineData.length; i++)\r\n {\r\n let data = this._LineData[i];\r\n if (!equaln(data.bul, 0))\r\n {\r\n let cu = this.GetCurveAtIndex(i) as Arc;\r\n if (cu)//end bul !== 0 但是并没有圆弧\r\n cenPts.push(cu.Center);\r\n }\r\n }\r\n return cenPts;\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n let cp = this.GetClosestPointTo(pickPoint, false);\r\n if (!cp) return [];\r\n let cparam = this.GetParamAtPoint(cp);\r\n let cu = this.GetCurveAtParam(cparam);\r\n if (cu)\r\n {\r\n let closestPt = cu.GetClosestPointTo(lastPoint, true);\r\n if (closestPt && this.PtOnCurve(closestPt))\r\n return [closestPt];\r\n }\r\n }\r\n case ObjectSnapMode.Tan:\r\n if (lastPoint)\r\n {\r\n let clostPt = this.GetClosestPointTo(pickPoint, false);\r\n if (!clostPt) return [];\r\n let par = this.GetParamAtPoint(clostPt);\r\n let cu = this.GetCurveAtParam(par);\r\n if (cu instanceof Arc)\r\n return cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint);\r\n return [];\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let ptList: Vector3[] = [];\r\n if (this._LineData.length < 2)\r\n return ptList;\r\n\r\n let enParam = this.EndParam;\r\n if (this.CloseMark) enParam -= 0.5;\r\n for (let i = 0; i < enParam + 0.5; i += 0.5)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n ptList.push(p);\r\n }\r\n return ptList;\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let moveVLoc = AsVector2(moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n\r\n let calcIndexList = indexList;\r\n if (indexList.length > 1)\r\n {\r\n let centerIndexes = indexList.filter(i => i % 2 === 0);\r\n if (centerIndexes.length > 0)\r\n calcIndexList = centerIndexes;\r\n }\r\n\r\n for (let index of calcIndexList)\r\n {\r\n if (index % 2 === 0)\r\n {\r\n let cuIndex = index / 2;\r\n\r\n let ptCout = this._LineData.length;\r\n\r\n let frontIndex = cuIndex - 1;\r\n if (this._ClosedMark)\r\n frontIndex = FixIndex(frontIndex, ptCout);\r\n\r\n if (frontIndex >= 0 && this.GetBuilgeAt(frontIndex))\r\n {\r\n let arc = this.GetCurveAtIndex(frontIndex) as Arc;\r\n arc.MoveGripPoints([2], moveVec);\r\n this._LineData[frontIndex].bul = arc.Bul;\r\n }\r\n if ((cuIndex !== ptCout - 1) && this.GetBuilgeAt(cuIndex))\r\n {\r\n let arc = this.GetCurveAtIndex(cuIndex) as Arc;\r\n arc.MoveGripPoints([0], moveVec);\r\n this._LineData[cuIndex].bul = arc.Bul;\r\n }\r\n this._LineData[cuIndex].pt.add(moveVLoc);\r\n }\r\n else\r\n {\r\n let ptIndex = (index - 1) / 2;\r\n let nextIndex = (FixIndex(ptIndex + 1, this._LineData));\r\n let d = this._LineData[ptIndex];\r\n if (d.bul == 0)\r\n {\r\n this._LineData[ptIndex].pt.add(moveVLoc);\r\n this._LineData[nextIndex].pt.add(moveVLoc);\r\n }\r\n else\r\n {\r\n let arc = this.GetCurveAtIndex(ptIndex) as Arc;\r\n arc.MoveGripPoints([1], moveVec);\r\n this._LineData[ptIndex].bul = arc.Bul;\r\n }\r\n }\r\n }\r\n\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n let ocs = this.OCS;\r\n let ptList: Vector3[] = [];\r\n for (let data of this._LineData)\r\n {\r\n ptList.push(AsVector3(data.pt).applyMatrix4(ocs));\r\n }\r\n return ptList;\r\n }\r\n\r\n /**\r\n * 范围拉伸(stretch),对夹点进行拉伸.\r\n * 如果对圆弧的一侧进行拉伸,那么修改bul\r\n *\r\n * @param {Array} indexList\r\n * @param {Vector3} vec\r\n * @memberof Polyline\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n //本地坐标系移动向量\r\n let moveVLoc = vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv));\r\n\r\n let ptCout = this._LineData.length;\r\n\r\n for (let index of indexList)\r\n {\r\n if (index >= ptCout)\r\n throw \"在拉伸多段线顶点时,尝试拉伸不存在的顶点!(通常是因为模块中的板轮廓被破坏,导致的顶点丢失!)\";\r\n\r\n let frontIndex = index - 1;\r\n let nextIndex = index + 1;\r\n if (this._ClosedMark)\r\n {\r\n frontIndex = FixIndex(frontIndex, ptCout);\r\n nextIndex = FixIndex(nextIndex, ptCout);\r\n }\r\n\r\n /**\r\n * 根据新的拉伸点修改凸度.\r\n *\r\n * @param {number} nextIndex 隔壁点索引\r\n * @param {number} bulIndex 需要修改凸度位置的索引\r\n * @returns\r\n */\r\n const ChangeBul = (nextIndex: number, bulIndex: number) =>\r\n {\r\n //需要修改的点的数据\r\n let d = this._LineData[bulIndex];\r\n if (d === undefined || d.bul == 0) return;\r\n\r\n //如果隔壁点不在拉伸列表中\r\n if (indexList.indexOf(nextIndex) === -1)\r\n {\r\n let needChangeP = this.GetPointAtParam(index);\r\n let notChangeP = this.GetPointAtParam(nextIndex);\r\n\r\n //原先的弦长的一半\r\n let oldChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5;\r\n\r\n //弓高\r\n let arcHeight = oldChordLengthHalf * d.bul;\r\n\r\n needChangeP.add(vec);\r\n\r\n let newChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5;\r\n\r\n d.bul = arcHeight / newChordLengthHalf;\r\n }\r\n };\r\n\r\n ChangeBul(frontIndex, frontIndex);\r\n ChangeBul(nextIndex, index);\r\n\r\n //修改顶点\r\n this._LineData[index].pt.add(AsVector2(moveVLoc));\r\n }\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._LineData.length = 0;\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let v = new Vector2().fromArray(file.Read());\r\n let bul = file.Read();\r\n\r\n this._LineData.push({ pt: v, bul: bul });\r\n }\r\n if (ver > 1)\r\n this._ClosedMark = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n file.Write(this._LineData.length);\r\n\r\n for (let l of this._LineData)\r\n {\r\n file.Write(l.pt.toArray());\r\n file.Write(l.bul);\r\n }\r\n file.Write(this._ClosedMark);\r\n }\r\n}\r\n\r\nexport const TempPolyline = new Polyline();\r\n","import { Matrix4, Vector3 } from 'three';\r\nimport { arrayRemoveDuplicateBySort } from '../Common/ArrayExt';\r\nimport { Arc } from '../DatabaseServices/Entity/Arc';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Line } from '../DatabaseServices/Entity/Line';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { comparePoint, equaln, equalv3 } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 相交延伸选项.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum IntersectOption\r\n{\r\n /**\r\n * 两者都不延伸\r\n */\r\n OnBothOperands = 0,\r\n /**\r\n * 延伸自身\r\n */\r\n ExtendThis = 1,\r\n /**\r\n * 延伸参数\r\n */\r\n ExtendArg = 2,\r\n /**\r\n * 延伸两者\r\n */\r\n ExtendBoth = 3,\r\n}\r\n\r\nexport interface IntersectResult\r\n{\r\n pt: Vector3,\r\n thisParam: number,\r\n argParam: number,\r\n}\r\n\r\n//延伸自身还是参数反转\r\nexport function reverseIntersectOption(intType: IntersectOption)\r\n{\r\n if (intType === IntersectOption.ExtendThis)\r\n intType = IntersectOption.ExtendArg;\r\n else if (intType === IntersectOption.ExtendArg)\r\n intType = IntersectOption.ExtendThis;\r\n return intType;\r\n}\r\n/**\r\n * 校验相交点是否满足延伸选项\r\n * 算法会计算无限延伸状态下的曲线交点,调用该方法进行校验返回校验后的点表\r\n *\r\n * @param {Vector3[]} intRes 相交点.曲线当作完全状态下的相交点\r\n * @param {Curve} c1 曲线1 由this参数传入\r\n * @param {Curve} c2 曲线2 由arg 参数传入\r\n * @param {Intersect} extType 延伸选项.\r\n * @returns {Array} 校验完成后的点表\r\n */\r\nfunction CheckPointOnCurve(intRes: IntersectResult[], c1: Curve, c2: Curve, extType: IntersectOption, tolerance = 1e-6): Array\r\n{\r\n return intRes.filter(r =>\r\n {\r\n if (!(extType & IntersectOption.ExtendThis))\r\n if (!c1.ParamOnCurve(r.thisParam, tolerance))\r\n return false;\r\n\r\n if (!(extType & IntersectOption.ExtendArg))\r\n if (!c2.ParamOnCurve(r.argParam, tolerance))\r\n return false;\r\n return true;\r\n });\r\n}\r\nexport function IntersectCircleAndCircle(cu1: Circle | Arc, cu2: Circle | Arc): IntersectResult[]\r\n{\r\n if (!cu1.IsCoplaneTo(cu2)) return [];\r\n\r\n let c1OcsInv = cu1.OCSInv;\r\n let c1Ocs = cu1.OCS;\r\n\r\n let center1 = cu1.Center.applyMatrix4(c1OcsInv);\r\n let center2 = cu2.Center.applyMatrix4(c1OcsInv);\r\n let radius1 = cu1.Radius;\r\n let radius2 = cu2.Radius;\r\n\r\n let pts: IntersectResult[] = [];\r\n let dist = center2.distanceTo(center1);\r\n\r\n if (dist < Math.abs(radius1 - radius2) - 1e-3\r\n || dist > (radius1 + radius2 + 1e-3))\r\n return pts;\r\n if (equaln(dist, 0, 1e-6)) return pts;\r\n\r\n let dstsqr = dist * dist;\r\n let r1sqr = radius1 * radius1;\r\n let r2sqr = radius2 * radius2;\r\n\r\n let a = (dstsqr - r2sqr + r1sqr) / (2 * dist);\r\n let h = Math.sqrt(Math.abs(r1sqr - (a * a)));\r\n\r\n let ratio_a = a / dist;\r\n let ratio_h = h / dist;\r\n\r\n let dx = center2.x - center1.x;\r\n let dy = center2.y - center1.y;\r\n\r\n let phix = center1.x + (ratio_a * dx);\r\n let phiy = center1.y + (ratio_a * dy);\r\n\r\n dx *= ratio_h;\r\n dy *= ratio_h;\r\n\r\n let p1 = new Vector3(phix + dy, phiy - dx);\r\n let p2 = new Vector3(phix - dy, phiy + dx);\r\n p1.applyMatrix4(c1Ocs);\r\n p2.applyMatrix4(c1Ocs);\r\n\r\n pts.push({\r\n pt: p1,\r\n thisParam: cu1.GetParamAtPoint(p1),\r\n argParam: cu2.GetParamAtPoint(p1),\r\n });\r\n if (!equalv3(p1, p2))//防止点重复\r\n pts.push({\r\n pt: p2,\r\n thisParam: cu1.GetParamAtPoint(p2),\r\n argParam: cu2.GetParamAtPoint(p2),\r\n });\r\n\r\n return pts;\r\n}\r\n/**\r\n * 计算圆与圆弧的交点.\r\n *\r\n * @export\r\n * @param {Circle} circle 圆\r\n * @param {Arc} arc 圆弧\r\n * @param {IntersectOption} extType 延伸选项\r\n * @returns 交点集合\r\n */\r\nexport function IntersectCircleAndArc(circle: Circle, arc: Arc, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let pts = IntersectCircleAndCircle(circle, arc);\r\n return CheckPointOnCurve(pts, circle, arc, extType | IntersectOption.ExtendThis, tolerance);\r\n}\r\n\r\n/**\r\n * 计算圆弧与圆弧的交点\r\n *\r\n * @export\r\n * @param {Arc} arc1 圆弧\r\n * @param {Arc} arc2 圆弧\r\n * @param {IntersectOption} extType 延伸选项\r\n * @returns 交点集合\r\n */\r\nexport function IntersectArcAndArc(arc1: Arc, arc2: Arc, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let pts = IntersectCircleAndCircle(arc1, arc2);\r\n return CheckPointOnCurve(pts, arc1, arc2, extType, tolerance);\r\n}\r\n\r\nexport function IntersectEllipseAndLine(l: Line, el: Ellipse, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let pts = IntersectLineAndEllipseFor2D(l, el);\r\n return CheckPointOnCurve(pts, l, el, extType, tolerance);\r\n}\r\n\r\n/**\r\n * 通用方法:计算直线与圆的交点,默认延伸全部\r\n *\r\n * @export\r\n * @param {Line} line 直线\r\n * @param {(Circle | Arc)} circle 圆或圆弧\r\n * @returns 交点集合\r\n */\r\nfunction IntersectLineAndCircleOrArc(line: Line, circle: Circle | Arc): IntersectResult[]\r\n{\r\n let lineOrg = line.StartPoint;\r\n let lineDirection = line.EndPoint.sub(lineOrg);\r\n let dirLen = lineDirection.length();\r\n if (equaln(dirLen, 0)) return [];\r\n lineDirection.divideScalar(dirLen);\r\n\r\n let diff = lineOrg.clone().sub(circle.Center);\r\n let a0 = diff.dot(diff) - circle.Radius ** 2;\r\n let a1 = lineDirection.dot(diff);\r\n let discr = a1 ** 2 - a0;\r\n\r\n if (equaln(discr, 0, 1e-7))\r\n {\r\n let pt = lineOrg.add(lineDirection.multiplyScalar(-a1));\r\n\r\n return [{\r\n pt,\r\n thisParam: -a1 / dirLen,\r\n argParam: circle.GetParamAtPoint(pt)\r\n }];\r\n }\r\n else if (discr > 0)\r\n {\r\n let root = Math.sqrt(discr);\r\n let p1 = lineOrg.clone().add(lineDirection.clone().multiplyScalar(-a1 + root));\r\n let p2 = lineOrg.add(lineDirection.multiplyScalar(-a1 - root));\r\n\r\n return [\r\n {\r\n pt: p1,\r\n thisParam: (-a1 + root) / dirLen,\r\n argParam: circle.GetParamAtPoint(p1)\r\n }, {\r\n pt: p2,\r\n thisParam: (-a1 - root) / dirLen,\r\n argParam: circle.GetParamAtPoint(p2)\r\n }\r\n ];\r\n }\r\n return [];\r\n}\r\n\r\n//直线和圆\r\nexport function IntersectLineAndCircle(line: Line, circle: Circle, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let ptArr = IntersectLineAndCircleOrArc(line, circle);\r\n return CheckPointOnCurve(ptArr, line, circle, extType | IntersectOption.ExtendArg);\r\n}\r\n//直线和圆弧\r\nexport function IntersectLineAndArc(line: Line, arc: Arc, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let ptArr = IntersectLineAndCircleOrArc(line, arc);\r\n return CheckPointOnCurve(ptArr, line, arc, extType, tolerance);\r\n}\r\n//直线和直线\r\nexport function IntersectLAndLFor2D(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3): Vector3\r\n{\r\n let dx1 = p1.x - p2.x;\r\n let dx2 = p3.x - p4.x;\r\n let dx3 = p4.x - p2.x;\r\n let dy1 = p1.y - p2.y;\r\n let dy2 = p3.y - p4.y;\r\n let dy3 = p4.y - p2.y;\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);\r\n\r\n if (equaln(det, 0.0, 1e-5))\r\n {\r\n // if (equaln(dx2 * dy3, dy2 * dx3, 1e-5))\r\n // {\r\n // return midPoint(midPoint(p1, p2), midPoint(p3, p4));\r\n // }\r\n return;\r\n }\r\n\r\n let pt = new Vector3;\r\n let ratio = ((dx1 * dy3) - (dy1 * dx3)) / det;\r\n pt.x = (ratio * dx2) + p4.x;\r\n pt.y = (ratio * dy2) + p4.y;\r\n\r\n return pt;\r\n}\r\n\r\nexport function IntersectLAndLFor2D2(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3): Vector3[]\r\n{\r\n let dx1 = p1.x - p2.x;\r\n let dx2 = p3.x - p4.x;\r\n let dx3 = p4.x - p2.x;\r\n let dy1 = p1.y - p2.y;\r\n let dy2 = p3.y - p4.y;\r\n let dy3 = p4.y - p2.y;\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);\r\n\r\n if (equaln(det, 0.0, 1e-5))\r\n {\r\n if (equaln(dx2 * dy3, dy2 * dx3, 1e-5))\r\n return [p1, p2, p3, p4];\r\n return [];\r\n }\r\n\r\n let pt = new Vector3;\r\n let ratio = ((dx1 * dy3) - (dy1 * dx3)) / det;\r\n pt.x = (ratio * dx2) + p4.x;\r\n pt.y = (ratio * dy2) + p4.y;\r\n\r\n return [pt];\r\n}\r\n\r\nexport function IntersectLine3AndLine3(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3, epsilon = 1e-6)\r\n{\r\n let pts = ShortestLine3AndLine3(p1, p2, p3, p4);\r\n if (pts) return pts[0];\r\n}\r\n\r\n/**\r\n * 三维中两行之间最短的直线\r\n * ref:https://stackoverflow.com/questions/2316490/the-algorithm-to-find-the-point-of-intersection-of-two-3d-line-segment\r\n * ref:http://paulbourke.net/geometry/pointlineplane/\r\n * ref:http://paulbourke.net/geometry/pointlineplane/calclineline.cs\r\n *\r\n * @export\r\n * @param {Vector3} p1 l1.start\r\n * @param {Vector3} p2 l1.end\r\n * @param {Vector3} p3 l2.start\r\n * @param {Vector3} p4 l2.end\r\n * @returns 交点集合\r\n */\r\nfunction ShortestLine3AndLine3(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3, epsilon = 1e-6)\r\n{\r\n let p43 = p4.clone().sub(p3);\r\n if (p43.lengthSq() < epsilon)\r\n return;\r\n let p21 = p2.clone().sub(p1);\r\n if (p21.lengthSq() < epsilon)\r\n return;\r\n\r\n let p13 = p1.clone().sub(p3);\r\n\r\n let d1343 = p13.x * p43.x + p13.y * p43.y + p13.z * p43.z;\r\n let d4321 = p43.x * p21.x + p43.y * p21.y + p43.z * p21.z;\r\n let d1321 = p13.x * p21.x + p13.y * p21.y + p13.z * p21.z;\r\n let d4343 = p43.x * p43.x + p43.y * p43.y + p43.z * p43.z;\r\n let d2121 = p21.x * p21.x + p21.y * p21.y + p21.z * p21.z;\r\n\r\n let denom = d2121 * d4343 - d4321 * d4321;\r\n if (Math.abs(denom) < epsilon)\r\n return;\r\n let numer = d1343 * d4321 - d1321 * d4343;\r\n\r\n let mua = numer / denom;\r\n let mub = (d1343 + d4321 * (mua)) / d4343;\r\n\r\n let resultSegmentPoint1 = new Vector3();\r\n resultSegmentPoint1.x = p1.x + mua * p21.x;\r\n resultSegmentPoint1.y = p1.y + mua * p21.y;\r\n resultSegmentPoint1.z = p1.z + mua * p21.z;\r\n let resultSegmentPoint2 = new Vector3();\r\n resultSegmentPoint2.x = p3.x + mub * p43.x;\r\n resultSegmentPoint2.y = p3.y + mub * p43.y;\r\n resultSegmentPoint2.z = p3.z + mub * p43.z;\r\n\r\n return [resultSegmentPoint1, resultSegmentPoint2];\r\n}\r\n\r\n//直线和直线\r\nexport function IntersectLineAndLine(l1: Line, l2: Line, extType: IntersectOption, fuzz = 1e-4): IntersectResult[]\r\n{\r\n let [pt1, pt2, pt3, pt4] = [l1.StartPoint, l1.EndPoint, l2.StartPoint, l2.EndPoint];\r\n\r\n let ipts: Vector3[];\r\n if (equaln(pt1.z, 0, fuzz) && equaln(pt2.z, 0, fuzz) && equaln(pt3.z, 0, fuzz) && equaln(pt4.z, 0, fuzz))\r\n {\r\n ipts = IntersectLAndLFor2D2(pt1, pt2, pt3, pt4);\r\n ipts.sort(comparePoint(\"xy\"));\r\n arrayRemoveDuplicateBySort(ipts, (p1, p2) => equalv3(p1, p2, fuzz));\r\n }\r\n else\r\n {\r\n ipts = ShortestLine3AndLine3(pt1, pt2, pt3, pt4);\r\n if (!ipts) return [];\r\n if (ipts.length === 2)\r\n ipts.pop();\r\n }\r\n\r\n let ints: IntersectResult[] = [];\r\n for (let pt of ipts)\r\n {\r\n let { closestPt: p1, param: param1 } = l1.GetClosestAtPoint(pt, true);\r\n if (!equalv3(pt, p1, fuzz)) return [];\r\n if (!(extType & IntersectOption.ExtendThis))\r\n if (!(l1.ParamOnCurve(param1, 0) || equalv3(pt1, pt, fuzz) || equalv3(pt2, pt, fuzz)))\r\n return [];\r\n let { closestPt: p2, param: param2 } = l2.GetClosestAtPoint(pt, true);\r\n if (!equalv3(pt, p2, fuzz)) return [];\r\n if (!(extType & IntersectOption.ExtendArg))\r\n if (!(l2.ParamOnCurve(param2, 0) || equalv3(pt3, pt, fuzz) || equalv3(pt4, pt, fuzz)))\r\n return [];\r\n ints.push({ pt, thisParam: param1, argParam: param2 });\r\n }\r\n return ints;\r\n}\r\n\r\nexport function IntersectPolylineAndCurve(pl: Polyline, cu: Curve, extType: IntersectOption, tolerance = 1e-6): IntersectResult[]\r\n{\r\n let cus: Curve[] = pl.Explode();\r\n let cus2: Curve[];\r\n if (cu instanceof Polyline)\r\n cus2 = cu.Explode();\r\n else\r\n cus2 = [cu];\r\n\r\n let intRes: IntersectResult[] = [];\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu1 = cus[i];\r\n for (let j = 0; j < cus2.length; j++)\r\n {\r\n let cu2 = cus2[j];\r\n let ext = extType;\r\n\r\n let isStart = i === 0;\r\n let isEnd = i === cus.length - 1;\r\n\r\n let isStart2 = j === 0;\r\n let isEnd2 = j === cus2.length - 1;\r\n\r\n //当曲线闭合时,或者当前的子曲线不是起始和不是结束,那么不延伸曲线.\r\n if (pl.CloseMark || !(isStart || isEnd))\r\n ext = ext & ~IntersectOption.ExtendThis;\r\n if ((cu instanceof Polyline && cu.CloseMark) || !(isStart2 || isEnd2))\r\n ext = ext & ~IntersectOption.ExtendArg;\r\n\r\n let ptPars = cu1.IntersectWith2(cu2, ext, tolerance).filter(r1 => intRes.every(r2 => !equalv3(r1.pt, r2.pt)));\r\n\r\n //校验延伸\r\n if (IntersectOption.ExtendThis & ext)\r\n {\r\n //如果曲线是起始又是结束,那么不校验.\r\n if (isStart && isEnd)\r\n {\r\n }\r\n else if (isStart)\r\n {\r\n ptPars = ptPars.filter(res => res.thisParam <= 1);\r\n }\r\n else if (isEnd)\r\n {\r\n ptPars = ptPars.filter(res => res.thisParam >= 0);\r\n }\r\n }\r\n if (IntersectOption.ExtendArg & ext)\r\n {\r\n //如果曲线是起始又是结束,那么不校验.\r\n if (isStart2 && isEnd2)\r\n {\r\n }\r\n else if (isStart2)\r\n {\r\n ptPars = ptPars.filter(res => res.argParam + j <= cu2.EndParam);\r\n }\r\n else if (isEnd2)\r\n {\r\n ptPars = ptPars.filter(res => res.argParam + j >= 0);\r\n }\r\n }\r\n\r\n intRes.push(...ptPars.map(r =>\r\n {\r\n return {\r\n pt: r.pt,\r\n thisParam: i + r.thisParam,\r\n argParam: j + r.argParam,\r\n };\r\n }));\r\n }\r\n }\r\n return intRes;\r\n}\r\n\r\nexport function IntersectLineAndEllipseFor2D(l: Line, el: Ellipse)\r\n{\r\n if (!l.IsCoplaneTo(el)) return [];\r\n\r\n let mat = new Matrix4().makeRotationZ(-el.Rotation).multiply(el.OCSInv);\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let sp = l.StartPoint.applyMatrix4(mat);\r\n let ep = l.EndPoint.applyMatrix4(mat);\r\n let pts: Vector3[] = [];\r\n if (equaln(sp.x, ep.x))\r\n {\r\n let c = sp.x;\r\n let j = (b ** 2) * (1 - (c ** 2) / (a ** 2));\r\n if (equaln(j, 0))\r\n {\r\n pts = [new Vector3(sp.x, 0)];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let y1 = Math.sqrt(j);\r\n let y2 = -Math.sqrt(j);\r\n pts = [\r\n new Vector3(c, y1),\r\n new Vector3(c, y2)\r\n ];\r\n }\r\n }\r\n else\r\n {\r\n let k = (sp.y - ep.y) / (sp.x - ep.x);\r\n let c = sp.y - sp.x * k;\r\n let j = (2 * a * a * k * c) * (2 * a * a * k * c) - 4 * (b * b + a * a * k * k) * a * a * (c * c - b * b);\r\n if (equaln(j, 0))\r\n {\r\n let x1 = -2 * k * c * a * a / (2 * (b * b + a * a * k * k));\r\n let y1 = k * x1 + c;\r\n pts = [new Vector3(x1, y1)];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let x1 = (-2 * k * c * a * a + Math.sqrt(j)) / (2 * (b * b + a * a * k * k));\r\n let y1 = k * x1 + c;\r\n let x2 = (-2 * k * c * a * a - Math.sqrt(j)) / (2 * (b * b + a * a * k * k));\r\n let y2 = k * x2 + c;\r\n pts = [\r\n new Vector3(x1, y1),\r\n new Vector3(x2, y2)\r\n ];\r\n }\r\n }\r\n\r\n let matInv = new Matrix4().getInverse(mat);\r\n return pts.map(p =>\r\n {\r\n let pt = p.applyMatrix4(matInv);\r\n return {\r\n pt,\r\n thisParam: l.GetParamAtPoint(pt),\r\n argParam: el.GetParamAtPoint(pt)\r\n };\r\n });\r\n}\r\nexport function IntersectEllipseAndCircleOrArc(el: Ellipse, cir: Circle | Arc, type: IntersectOption)\r\n{\r\n if (!el.IsCoplaneTo(cir)) return [];\r\n\r\n let a = Math.max(el.RadX, el.RadY);\r\n let dist = el.Center.distanceTo(cir.Center);\r\n\r\n let disVail = dist > (a + cir.Radius);\r\n\r\n if (disVail)\r\n return [];\r\n\r\n if (equalv3(el.Center, cir.Center))\r\n {\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let r = cir.Radius;\r\n let j = ((a * b) ** 2 - (b * r) ** 2) / (a ** 2 - b ** 2);\r\n let pts: Vector3[] = [];\r\n if (equaln(j, 0) || equaln(j, r ** 2))\r\n {\r\n if (equaln(j, 0))\r\n pts = [\r\n new Vector3(a, 0),\r\n new Vector3(-a, 0)\r\n ];\r\n else\r\n pts = [\r\n new Vector3(0, r),\r\n new Vector3(0, -r)\r\n ];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let y1 = Math.sqrt(j);\r\n let y2 = - Math.sqrt(j);\r\n let n = r ** 2 - j;\r\n let x1 = Math.sqrt(n);\r\n let x2 = - Math.sqrt(n);\r\n pts = [\r\n new Vector3(x1, y1),\r\n new Vector3(x1, y2),\r\n new Vector3(x2, y1),\r\n new Vector3(x2, y2),\r\n ];\r\n }\r\n let ro = new Matrix4().makeRotationZ(el.Rotation);\r\n let res = pts.map(p =>\r\n {\r\n let pt = p.applyMatrix4(ro).applyMatrix4(el.OCS);\r\n return {\r\n pt,\r\n thisParam: el.GetParamAtPoint(pt),\r\n argParam: cir.GetParamAtPoint(pt)\r\n };\r\n });\r\n return CheckPointOnCurve(res, el, cir, type);\r\n }\r\n else\r\n {\r\n let pts = el.Shape.getPoints(60);\r\n let lineData = pts.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n let pl = new Polyline(lineData);\r\n let cirClone = cir.Clone().ApplyMatrix(el.OCSInv);\r\n\r\n if (type === IntersectOption.ExtendBoth)\r\n type = IntersectOption.ExtendArg;\r\n else if (type !== IntersectOption.ExtendArg)\r\n type = IntersectOption.OnBothOperands;\r\n\r\n let intPts = IntersectPolylineAndCurve(pl, cirClone, type);\r\n intPts.forEach(r => r.pt.applyMatrix4(el.OCS));\r\n return intPts;\r\n }\r\n}\r\nexport function IntersectEllipse(el1: Ellipse, el2: Ellipse, type: IntersectOption)\r\n{\r\n if (!el1.IsCoplaneTo(el2)) return [];\r\n\r\n let isEqul = equalv3(el1.Center, el2.Center)\r\n && equaln(el1.RadX, el2.RadX)\r\n && equaln(el1.RadY, el2.RadY)\r\n && equalv3(el1.StartPoint, el2.StartPoint);\r\n\r\n if (isEqul)\r\n return [];\r\n\r\n let a1 = Math.max(el1.RadX, el1.RadY);\r\n let a2 = Math.max(el2.RadX, el2.RadY);\r\n\r\n let dist = el1.Center.distanceToSquared(el2.Center);\r\n if (dist > (a1 + a2) ** 2)\r\n {\r\n return [];\r\n }\r\n\r\n if (!el1.BoundingBox.intersectsBox(el2.BoundingBox))\r\n return [];\r\n\r\n let diffMat = el1.OCSInv.multiply(el2.OCS);\r\n let pts1 = el1.Shape.getPoints(60);\r\n let pts2 = el2.Shape.getPoints(60);\r\n\r\n let lineData1 = pts1.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n let lineData2 = pts2.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n\r\n let pl1 = new Polyline(lineData1);\r\n let pl2 = new Polyline(lineData2).ApplyMatrix(diffMat);\r\n\r\n let intPts = pl1.IntersectWith2(pl2, 0);\r\n intPts.forEach(r => r.pt.applyMatrix4(el1.OCS));\r\n return intPts;\r\n}\r\n","import { BufferGeometry, EllipseCurve, Line as TLine, Material, Matrix3, Matrix4, Object3D, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getArcOrCirNearPts, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { clamp } from '../../Common/Utils';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { angle, AsVector3, equaln, MoveMatrix, polar } from '../../Geometry/GeUtils';\r\nimport { IntersectCircleAndArc, IntersectCircleAndCircle, IntersectEllipseAndCircleOrArc, IntersectLineAndCircle, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Shape2 } from '../Shape2';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Arc } from './Arc';\r\nimport { Curve } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\nlet circleGeometry: BufferGeometry;\r\nfunction GetCircleGeometry()\r\n{\r\n if (!circleGeometry)\r\n circleGeometry = BufferGeometryUtils.CreateFromPts(\r\n new EllipseCurve(0, 0, 1, 1, 0, 2 * Math.PI, false, 0).getPoints(360).map(AsVector3)\r\n );\r\n return circleGeometry;\r\n}\r\n\r\n@Factory\r\nexport class Circle extends Curve\r\n{\r\n constructor(center?: Vector3, radius: number = 1e-6)\r\n {\r\n super();\r\n center && this._Matrix.setPosition(center);\r\n this._Radius = radius;\r\n }\r\n private _Radius: number;\r\n\r\n get Shape()\r\n {\r\n let sp = new Shape2();\r\n sp.ellipse(0, 0, this._Radius, this._Radius, 0, 2 * Math.PI, false, 0);\r\n return sp;\r\n }\r\n\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(v);\r\n this.Update();\r\n }\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Radius = clamp(v, 1e-9, 1e19);\r\n this.Update();\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Center = this.Center.applyMatrix4(m);\r\n this.Radius = this.Radius * m.getMaxScaleOnAxis();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n return this;\r\n }\r\n\r\n //******************** Curve function start*****************//\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get StartParam(): number\r\n {\r\n return 0;\r\n }\r\n get EndPoint(): Vector3\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get EndParam(): number\r\n {\r\n return 1;\r\n }\r\n PtInCurve(pt: Vector3)\r\n {\r\n return pt.distanceToSquared(this.Center) < Math.pow(this.Radius, 2);\r\n }\r\n get Area()\r\n {\r\n return Math.PI * this._Radius ** 2;\r\n }\r\n get Area2()\r\n {\r\n return Math.PI * this._Radius ** 2;\r\n }\r\n get Length()\r\n {\r\n return Math.PI * 2 * this._Radius;\r\n }\r\n\r\n get IsClose(): boolean\r\n {\r\n return true;\r\n }\r\n\r\n //曲线为顺时针\r\n get IsClockWise(): boolean { return false; }\r\n\r\n GetPointAtParam(param: number)\r\n {\r\n return (polar(new Vector3(), param * 2 * Math.PI, this._Radius) as Vector3).applyMatrix4(this._Matrix);\r\n }\r\n\r\n GetPointAtDistance(distance: number)\r\n {\r\n let param = distance / (Math.PI * 2 * this._Radius);\r\n return this.GetPointAtParam(param);\r\n }\r\n\r\n GetDistAtParam(param: number)\r\n {\r\n return Math.PI * 2 * this._Radius * param;\r\n }\r\n\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n GetParamAtDist(d: number)\r\n {\r\n return d / (Math.PI * 2 * this._Radius);\r\n }\r\n\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params: number[];\r\n if (param instanceof Array)\r\n {\r\n params = param.filter(p => this.ParamOnCurve(p));\r\n params.sort((a1, a2) => a2 - a1);//从大到小\r\n arrayRemoveDuplicateBySort(params);\r\n if (params.length < 2) return [];\r\n }\r\n else //圆不能被单个参数切割\r\n return [];\r\n\r\n //补上最后一个到第一个的弧\r\n params.unshift(arrayLast(params));\r\n\r\n let anglelist = params.map(param => Math.PI * 2 * param);\r\n\r\n let curvelist = new Array();\r\n for (let i = 0; i < anglelist.length - 1; i++)\r\n {\r\n let sa = anglelist[i];\r\n let ea = anglelist[i + 1];\r\n if (!equaln(sa, ea, 1e-6))\r\n {\r\n let arc = new Arc(new Vector3(), this._Radius, ea, sa, false);\r\n arc.ColorIndex = this.ColorIndex;\r\n arc.ApplyMatrix(this.OCS);\r\n curvelist.push(arc);\r\n }\r\n }\r\n return curvelist;\r\n }\r\n\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnCurve(pt))\r\n return NaN;\r\n return angle(pt.clone().applyMatrix4(this.OCSInv)) / (Math.PI * 2);\r\n }\r\n\r\n PtOnCurve(pt: Vector3)\r\n {\r\n return equaln(pt.distanceToSquared(this.Center), this._Radius * this._Radius, 1e-5);\r\n }\r\n GetOffsetCurves(offsetDist: number): Curve[]\r\n {\r\n if ((offsetDist + this._Radius) > 0)\r\n {\r\n let circle = this.Clone();\r\n circle.Radius = this._Radius + offsetDist;\r\n return [circle];\r\n }\r\n return [];\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption)\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectCircleAndArc(this, curve, intType);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType)));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectCircleAndCircle(this, curve);\r\n }\r\n if (curve instanceof Ellipse)\r\n {\r\n return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType));\r\n }\r\n if (curve instanceof Polyline)\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType)));\r\n return [];\r\n }\r\n //******************** Curve function end*****************//\r\n\r\n get BoundingBox(): Box3Ext\r\n {\r\n return new Box3Ext().setFromPoints(this.GetGripPoints());\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n let cirGeo = GetCircleGeometry();\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let geometry = new LineGeometry().setPositions(cirGeo.attributes.position.array as number[]);\r\n obj.add(new Line2(geometry, ColorMaterial.PrintLineMatrial));\r\n }\r\n else\r\n {\r\n let line = new TLine(cirGeo, ColorMaterial.GetLineMaterial(this._Color));\r\n obj.add(line);\r\n }\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n obj.children[0].scale.set(this._Radius, this._Radius, this._Radius);\r\n obj.children[0].updateMatrix();\r\n }\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material: Material)\r\n {\r\n if (type === RenderType.WireframePrint)\r\n {\r\n //TODO:打印线需要其他颜色?\r\n }\r\n else\r\n {\r\n let m = obj.children[0] as TLine;\r\n m.material = material ? material : ColorMaterial.GetLineMaterial(this._Color);\r\n return obj;\r\n }\r\n\r\n }\r\n\r\n GetDragPointCount(drag: DragPointType): number\r\n {\r\n if (drag === DragPointType.Grip)\r\n return 5;\r\n else\r\n return 1;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let pts = [\r\n new Vector3(),\r\n new Vector3(0, this._Radius),\r\n new Vector3(0, -this._Radius),\r\n new Vector3(-this._Radius, 0),\r\n new Vector3(this._Radius, 0),\r\n ];\r\n\r\n let ocs = this.OCS;\r\n pts.forEach(p => p.applyMatrix4(ocs));\r\n return pts;\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.Nea:\r\n {\r\n return getArcOrCirNearPts(this, pickPoint, viewXform);\r\n }\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n let l = new Line(this.Center, lastPoint);\r\n return l.IntersectWith(this, IntersectOption.ExtendBoth);\r\n }\r\n case ObjectSnapMode.Tan:\r\n let pts = GetTanPtsOnArcOrCircle(this, lastPoint);\r\n if (pts)\r\n return pts;\r\n case ObjectSnapMode.End:\r\n {\r\n let pts = this.GetGripPoints();\r\n pts.shift();\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n\r\n let pts = this.GetGripPoints();\r\n if (indexList.length > 0)\r\n {\r\n let index = indexList[0];\r\n let p = pts[index];\r\n if (p)\r\n {\r\n if (index > 0)\r\n {\r\n p.add(vec);\r\n this.Radius = p.distanceTo(this.Center);\r\n }\r\n else\r\n {\r\n this.Center = this.Center.add(vec);\r\n }\r\n }\r\n }\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n let pts = [new Vector3()];\r\n let ocs = this.OCS;\r\n pts.forEach(p => p.applyMatrix4(ocs));\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n let mat = MoveMatrix(vec);\r\n this.ApplyMatrix(mat);\r\n }\r\n }\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n if (typeof pt === \"number\")\r\n pt = this.GetPointAtParam(pt);\r\n else\r\n pt = pt.clone();\r\n\r\n pt.applyMatrix4(this.OCSInv);\r\n\r\n let an = angle(pt) + Math.PI * 0.5;\r\n\r\n return polar(new Vector3(), an, 1).applyMatrix4(new Matrix4().extractRotation(this.OCS));\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(this.OCS);\r\n if (equaln(pt.distanceToSquared(this.Center), 0, 1e-10))\r\n return this.GetPointAtParam(0);\r\n let l = new Line(this.Center, pt);\r\n let pts = l.IntersectWith(this, IntersectOption.ExtendBoth);\r\n pts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(pt) - p2.distanceToSquared(pt);\r\n });\r\n return pts[0];\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Radius = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);\r\n file.Write(this._Radius);\r\n }\r\n //#endregion\r\n}\r\n","\r\n/**\r\n * 一个简单的计数器实现,本质是使用一个Map来保存元素的个数\r\n * \r\n * 例:\r\n * let count = new Count();\r\n * count.AddCount(\"Test\", 1);\r\n * count.GetCount(\"Test\");//现在 Test 的个数为1\r\n */\r\nexport class Count\r\n{\r\n private m_CountMap = new WeakMap();\r\n GetCount(obj: any): number\r\n {\r\n let count = this.m_CountMap.get(obj);\r\n if (!count)\r\n {\r\n this.m_CountMap.set(obj, 0);\r\n count = 0;\r\n }\r\n return count;\r\n }\r\n AddCount(obj: any, add: number)\r\n {\r\n this.m_CountMap.set(obj, this.GetCount(obj) + add);\r\n }\r\n}\r\n","import { Vector3, MathUtils } from \"three\";\r\nimport { YAxis, ZAxis, equaln } from \"./GeUtils\";\r\n\r\n/**\r\n * 轨道控制的数学类,观察向量和角度的互相转换\r\n * 当x当抬头或者低头到90度时,触发万向锁.\r\n */\r\nexport class Orbit\r\n{\r\n //抬头低头 正数抬头 负数低头\r\n private phi: number = 0;//Φ\r\n\r\n //身体旋转 0为正右边 逆时针旋转\r\n theta: number = 0;//θ\r\n\r\n get RoX()\r\n {\r\n return this.phi;\r\n }\r\n set RoX(v)\r\n {\r\n this.phi = MathUtils.clamp(v, Math.PI * -0.49, Math.PI * 0.49);\r\n }\r\n\r\n /**\r\n * 使用旋转角度 计算观察向量\r\n * @param [outDirection] 引用传入,如果传入,那么就不构造新的向量\r\n * @returns 返回观察向量\r\n */\r\n UpdateDirection(outDirection = new Vector3()): Vector3\r\n {\r\n outDirection.z = Math.sin(this.phi);\r\n //归一化专用.\r\n let d = Math.abs(Math.cos(this.phi));\r\n\r\n outDirection.x = Math.cos(this.theta) * d;\r\n outDirection.y = Math.sin(this.theta) * d;\r\n\r\n return outDirection;\r\n }\r\n\r\n /**\r\n * 使用观察向量,计算旋转角度\r\n * @param dir 这个向量会被修改成单位向量.\r\n */\r\n SetFromDirection(dir: Vector3): void\r\n {\r\n dir.normalize();\r\n this.phi = Math.asin(dir.z);\r\n if (equaln(dir.x, 0) && equaln(dir.y, 0))\r\n if (dir.z > 0)\r\n this.theta = Math.PI * -0.5;\r\n else\r\n this.theta = Math.PI * 0.5;\r\n else\r\n this.theta = Math.atan2(dir.y, dir.x);\r\n }\r\n\r\n /**\r\n * 参考任意轴坐标系算法.\r\n * http://help.autodesk.com/view/ACD/2017/CHS/?guid=GUID-E19E5B42-0CC7-4EBA-B29F-5E1D595149EE\r\n */\r\n static ComputUpDirection(n: Vector3, ay: Vector3 = new Vector3(), ax: Vector3 = new Vector3()): Vector3\r\n {\r\n n.normalize();\r\n if (Math.abs(n.x) < 0.015625 && Math.abs(n.y) < 0.015625)\r\n ax.crossVectors(YAxis, n);\r\n else\r\n ax.crossVectors(ZAxis, n);\r\n ay.crossVectors(n, ax);\r\n ax.normalize();\r\n ay.normalize();\r\n return ay;\r\n }\r\n}\r\n","import { Box3, Line3, Matrix3, Matrix4, Vec2, Vector2, Vector3 } from 'three';\r\nimport { Arc } from '../DatabaseServices/Entity/Arc';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Line } from '../DatabaseServices/Entity/Line';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { IsPointInBowArc } from '../DatabaseServices/PointInPolyline';\r\nimport { Count } from '../Geometry/Count';\r\nimport { CurveMap, Vertice } from '../Geometry/CurveMap';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, isParallelTo, XAxis, ZeroVec, isPerpendicularityTo, YAxis, isIntersect } from '../Geometry/GeUtils';\r\nimport { Vec3 } from '../Geometry/IVec3';\r\nimport { Orbit } from '../Geometry/Orbit';\r\nimport { PlaneExt } from '../Geometry/Plane';\r\nimport { IntersectOption, IntersectResult } from '../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../GraphicsSystem/OffsetPolyline';\r\nimport { arrayLast, changeArrayStartIndex, equalArray } from './ArrayExt';\r\nimport { Status } from './Status';\r\nimport { FixIndex, LINK_FUZZ } from './Utils';\r\n\r\n//3点获取圆心\r\nexport function getCircleCenter(pt1: Vector3, pt2: Vector3, pt3: Vector3)\r\n{\r\n if (!(pt1 && pt2 && pt3))\r\n return;\r\n let A1 = pt1.x - pt2.x;\r\n let B1 = pt1.y - pt2.y;\r\n let C1 = (Math.pow(pt1.x, 2) - Math.pow(pt2.x, 2) + Math.pow(pt1.y, 2) - Math.pow(pt2.y, 2)) / 2;\r\n let A2 = pt3.x - pt2.x;\r\n let B2 = pt3.y - pt2.y;\r\n let C2 = (Math.pow(pt3.x, 2) - Math.pow(pt2.x, 2) + Math.pow(pt3.y, 2) - Math.pow(pt2.y, 2)) / 2;\r\n //令temp = A1*B2 - A2*B1\r\n let temp = A1 * B2 - A2 * B1;\r\n let center = new Vector3();\r\n //判断三点是否共线\r\n if (temp === 0)\r\n {\r\n //共线则将第一个点pt1作为圆心\r\n center.x = pt1.x;\r\n center.y = pt1.y;\r\n }\r\n else\r\n {\r\n //不共线则求出圆心:\r\n center.x = (C1 * B2 - C2 * B1) / temp;\r\n center.y = (A1 * C2 - A2 * C1) / temp;\r\n }\r\n\r\n return center;\r\n}\r\n\r\n// 弦长+切线获取圆心角\r\nexport function getCirAngleByChordAndTangent(chord: Vector3, tangentLine: Vector3)\r\n{\r\n let dir = tangentLine.clone().cross(chord).normalize();\r\n\r\n let ctAngle = chord.angleTo(tangentLine);\r\n\r\n // 圆心角\r\n let cirAng = Math.PI - 2 * Math.abs(ctAngle - Math.PI / 2);\r\n\r\n if (ctAngle > Math.PI / 2)\r\n {\r\n cirAng = Math.PI * 2 - cirAng;\r\n }\r\n return cirAng *= dir.z;\r\n}\r\n//行列式\r\nexport function getDeterminantFor2V(v1: Vector2, v2: Vector2): number\r\n{\r\n return v1.x * v2.y - v1.y * v2.x;\r\n}\r\n\r\nexport function getDeterminantFor3V(v1: Vector3, v2: Vector3, v3: Vector3)\r\n{\r\n let mat = new Matrix3();\r\n mat.set(v1.x, v1.y, v1.z, v2.x, v2.y, v2.z, v3.x, v3.y, v3.z);\r\n return mat.determinant();\r\n}\r\n\r\n/**\r\n * 曲线根据连接来分组,每组都是一条首尾相连的曲线表.\r\n *\r\n * @export\r\n * @param {Curve[]} cus 传入的分组的曲线表\r\n * @returns {Array>} 返回如下\r\n * [\r\n * [c1,c2,c3...],//后面的曲线的起点总是等于上一个曲线的终点\r\n * [c1,c2,c3...],\r\n * ]\r\n */\r\nexport function curveLinkGroup(cus: Curve[]): Array>\r\n{\r\n //返回的曲线组\r\n let groupCus = new Array>();\r\n\r\n //将封闭的曲线先提取出来\r\n cus = cus.filter(c =>\r\n {\r\n let isClose = c.IsClose;\r\n if (isClose)\r\n groupCus.push([c]);\r\n return !isClose;\r\n });\r\n if (cus.length === 0) return groupCus;\r\n //曲线节点图\r\n let cuMap = new CurveMap();\r\n cus.forEach(c => cuMap.AddCurveToMap(c));\r\n\r\n //曲线站点表\r\n let stands = cuMap.Stands;\r\n //曲线使用计数\r\n let cuCount = new Count();\r\n\r\n /**\r\n * 从站点的路线中任意取一条,加入到曲线数组中.\r\n *\r\n * @param {Curve[]} cus 已经连接的曲线列表\r\n * @param {boolean} isEndSeach true:从终点搜索,false:从起点搜索\r\n * @returns {Stand} 如果站点中存在可以取得的曲线,返回下个站点,否则返回undefined\r\n */\r\n function linkCurve(stand: Vertice, cus: Curve[], isEndSeach: boolean): Vertice | undefined\r\n {\r\n for (let route of stand.routes)\r\n {\r\n let cu = route.curve;\r\n if (cuCount.GetCount(cu) === 0)\r\n {\r\n if (isEndSeach)\r\n {\r\n //保证曲线总是从起点连接到终点\r\n if (!equalv3(cu.StartPoint, stand.position))\r\n cu.Reverse();\r\n cus.push(cu);\r\n }\r\n else\r\n {\r\n //保证曲线总是从起点连接到终点\r\n if (!equalv3(cu.EndPoint, stand.position))\r\n cu.Reverse();\r\n cus.unshift(cu);\r\n }\r\n\r\n cuCount.AddCount(cu, 1);\r\n return route.to;\r\n }\r\n }\r\n }\r\n\r\n for (let stand of stands)\r\n {\r\n let startStand = stand;\r\n let cus: Curve[] = []; //形成合并轮廓的曲线组\r\n while (startStand)\r\n startStand = linkCurve(startStand, cus, true);\r\n\r\n if (cus.length > 0)\r\n {\r\n startStand = cuMap.GetOnlyVertice(cus[0].StartPoint);\r\n while (startStand)\r\n startStand = linkCurve(startStand, cus, false);\r\n }\r\n\r\n if (cus.length > 0)\r\n groupCus.push(cus);\r\n }\r\n\r\n return groupCus;\r\n}\r\n\r\nexport function equalCurve(cu1: Curve, cu2: Curve, tolerance = 1e-4)\r\n{\r\n if ((cu1 instanceof Polyline) && (cu2 instanceof Polyline))\r\n {\r\n if (cu1.IsClose !== cu2.IsClose || !isParallelTo(cu1.Normal, cu2.Normal))\r\n return false;\r\n\r\n let area1 = cu1.Area2;\r\n let area2 = cu2.Area2;\r\n\r\n if (!equaln(Math.abs(area1), Math.abs(area2), 0.1))\r\n return false;\r\n\r\n let ptsBuls1 = cu1.PtsBuls;\r\n let ptsBuls2 = cu2.PtsBuls;\r\n\r\n let pts1 = ptsBuls1.pts;\r\n let pts2 = ptsBuls2.pts;\r\n let buls1 = ptsBuls1.buls;\r\n let buls2 = ptsBuls2.buls;\r\n\r\n let isEqualArea = equaln(area1, area2, 0.1);\r\n if (!equalv3(cu1.Normal, cu2.Normal))\r\n {\r\n if (isEqualArea)\r\n {\r\n pts2.reverse();\r\n buls2.reverse();\r\n buls2.push(buls2.shift());\r\n }\r\n else\r\n buls2 = buls2.map(bul => -bul);\r\n }\r\n else if (!isEqualArea)\r\n {\r\n pts2.reverse();\r\n buls2.reverse();\r\n buls2 = buls2.map(bul => -bul);\r\n buls2.push(buls2.shift());\r\n }\r\n\r\n if (cu1.IsClose && equalv2(pts1[0], arrayLast(pts1), tolerance))\r\n {\r\n pts1.pop();\r\n buls1.pop();\r\n }\r\n if (cu2.IsClose && equalv2(pts2[0], arrayLast(pts2), tolerance))\r\n {\r\n pts2.pop();\r\n buls2.pop();\r\n }\r\n\r\n let cu1Sp = AsVector2(cu1.StartPoint.applyMatrix4(cu2.OCSInv));\r\n\r\n let index = pts2.findIndex(p => equalv2(cu1Sp, p, tolerance));\r\n changeArrayStartIndex(buls2, index);\r\n changeArrayStartIndex(pts2, index);\r\n\r\n return equalArray(buls1, buls2, equaln) &&\r\n equalArray(pts1, pts2, (p1: Vector2, p2: Vector2) =>\r\n equalv3(\r\n AsVector3(p1).applyMatrix4(cu1.OCS),\r\n AsVector3(p2).applyMatrix4(cu2.OCS),\r\n tolerance\r\n )\r\n );\r\n }\r\n else if (cu1 instanceof Circle && cu2 instanceof Circle)\r\n {\r\n return equalv3(cu1.Center, cu2.Center) && equaln(cu1.Radius, cu2.Radius, 1e-6);\r\n }\r\n else if (cu1 instanceof Arc && cu2 instanceof Arc)\r\n {\r\n if (!equalv3(cu1.StartPoint, cu2.EndPoint)) cu1.Reverse();\r\n return equalv3(cu1.Center, cu2.Center)\r\n && equaln(cu1.Radius, cu2.Radius, 1e-6)\r\n && equaln(cu1.StartAngle, cu2.StartAngle)\r\n && equaln(cu1.EndAngle, cu2.EndAngle);\r\n }\r\n else if (cu1 instanceof Ellipse && cu2 instanceof Ellipse)\r\n {\r\n return equalv3(cu1.Center, cu2.Center)\r\n && equaln(cu1.RadX, cu2.RadX)\r\n && equaln(cu1.RadY, cu2.RadY)\r\n && equalv3(cu1.StartPoint, cu2.StartPoint);\r\n }\r\n else if (cu1 instanceof Line && cu2 instanceof Line)\r\n {\r\n let ps1 = [cu1.StartPoint, cu1.EndPoint];\r\n let ps2 = [cu2.StartPoint, cu2.EndPoint];\r\n return ps1.every(p => ps2.some(p1 => equalv3(p1, p)));\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n* 计算点在曲线前进方向的方位,左边或者右边\r\n*\r\n* @param {Curve} cu\r\n* @param {Vector3} pt\r\n* @returns {boolean} 左边为-1,右边为1\r\n*/\r\nexport function GetPointAtCurveDir(cu: Curve, pt: Vector3): number\r\n{\r\n if (cu instanceof Circle)\r\n return cu.PtInCurve(pt) ? -1 : 1;\r\n else if (cu instanceof Polyline)\r\n {\r\n let u = new OffsetPolyline(cu, 1);\r\n u.InitSubCurves();\r\n return u.GetPointAtCurveDir(pt.clone().applyMatrix4(cu.OCSInv).setZ(0));\r\n }\r\n //最近点\r\n let cp = cu.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-6)) return 0;\r\n //最近点参数\r\n let cparam = cu.GetParamAtPoint(cp);\r\n let dri = cu.GetFistDeriv(cparam);\r\n let cross = dri.cross(pt.clone().sub(cp)).applyMatrix4(cu.OCSInv);\r\n return -Math.sign(cross.z);\r\n}\r\n\r\n/**\r\n * 点在多段线的某个索引的圆弧(弓形)内\r\n *\r\n * @param {Polyline} pl\r\n * @param {number} index\r\n * @param {Vector3} pt\r\n * @returns {number}\r\n */\r\nfunction PointInPolylineArc(pl: Polyline, index: number, pt: Vector3): number\r\n{\r\n let bul = pl.GetBuilgeAt(index);\r\n if (equaln(bul, 0, 1e-8)) return 0;\r\n\r\n let arc = pl.GetCurveAtIndex(index) as Arc;\r\n\r\n if (IsPointInBowArc(arc, pt, true))\r\n return Math.sign(bul);\r\n\r\n return 0;\r\n}\r\n\r\nexport function ConverCircleToPolyline(cir: Circle): Polyline\r\n{\r\n //该写法不支持三维坐标系\r\n // let pl = new Polyline();\r\n // let bul = Math.tan(Math.PI * 0.125);\r\n // for (let i = 0; i < 4; i++)\r\n // {\r\n // let p = cir.GetPointAtParam(i * 0.25);\r\n // pl.AddVertexAt(i, Vec3DTo2D(p));\r\n // pl.SetBulgeAt(i, bul);\r\n // }\r\n // pl.CloseMark = true;\r\n // return pl;\r\n\r\n let arcs = cir.GetSplitCurves([0, 0.5]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCS;\r\n pl.Join(arcs[0]);\r\n pl.Join(arcs[1]);\r\n return pl;\r\n}\r\n\r\nexport function GetTanPtsOnArcOrCircle(cu: Arc | Circle, lastPoint?: Vector3)\r\n{\r\n if (lastPoint)\r\n {\r\n //ref:wykobi\r\n let ocsInv = cu.OCSInv;\r\n let v = lastPoint.clone().applyMatrix4(ocsInv);\r\n\r\n let lengthSq = v.lengthSq();\r\n let radiusSq = cu.Radius ** 2;\r\n\r\n if (lengthSq >= radiusSq)\r\n {\r\n let ratio = 1 / lengthSq;\r\n let deltaDist = Math.sqrt(lengthSq - radiusSq);\r\n\r\n let pts = [\r\n new Vector3(\r\n cu.Radius * (cu.Radius * v.x - v.y * deltaDist) * ratio,\r\n cu.Radius * (cu.Radius * v.y + v.x * deltaDist) * ratio,\r\n ),\r\n new Vector3(\r\n cu.Radius * (cu.Radius * v.x + v.y * deltaDist) * ratio,\r\n cu.Radius * (cu.Radius * v.y - v.x * deltaDist) * ratio,\r\n ),\r\n ];\r\n for (let p of pts)\r\n p.applyMatrix4(cu.OCS);\r\n return pts;\r\n }\r\n }\r\n}\r\n\r\nexport function CircleInternalTangentLines(cir0: Circle, cir1: Circle): Line[]\r\n{\r\n let c0 = new Vector3();\r\n let c1 = cir1.Center.applyMatrix4(cir0.OCSInv);\r\n\r\n let dist = c0.distanceTo(c1);\r\n\r\n if (dist - (cir0.Radius + cir1.Radius) < 0)\r\n return [];\r\n else if (equaln(dist - (cir0.Radius + cir1.Radius), 0))\r\n return [];\r\n else\r\n {\r\n let m = cir0.Radius / cir1.Radius;\r\n let h0 = (m * dist) / (m + 1);\r\n let h1 = dist / (m + 1);\r\n\r\n let i = new Vector3(\r\n (h1 * c0.x + h0 * c1.x) / dist,\r\n (h1 * c0.y + h0 * c1.y) / dist\r\n ).applyMatrix4(cir0.OCS);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(cir0, i);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(cir1, i);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\nexport function CircleOuterTangentLines(circle0: Circle, circle1: Circle): Line[]\r\n{\r\n let c0 = circle0.Center;\r\n let c1 = circle1.Center;\r\n\r\n let dist = c0.distanceTo(c1);\r\n\r\n let rd = Math.abs(circle0.Radius - circle1.Radius);\r\n if (dist < rd)\r\n return [];\r\n else if (equaln(Math.abs(dist - rd), 0))\r\n return [];\r\n else if (equaln(circle0.Radius, circle1.Radius))\r\n {\r\n let cp = circle0.GetClosestPointTo(c1, true);\r\n let derv = circle0.GetFistDeriv(cp).multiplyScalar(circle0.Radius);\r\n let dervn = derv.clone().negate();\r\n\r\n let c0p0 = c0.clone().add(derv);\r\n let c0p1 = c0.clone().add(dervn);\r\n\r\n let c1p0 = c1.clone().add(derv);\r\n let c1p1 = c1.clone().add(dervn);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n else\r\n {\r\n let c0 = new Vector3();\r\n let c1 = circle1.Center.applyMatrix4(circle0.OCSInv);\r\n\r\n let p: Vector3;\r\n if (circle0.Radius > circle1.Radius)\r\n p = new Vector3(\r\n c1.x * circle0.Radius - c0.x * circle1.Radius,\r\n c1.y * circle0.Radius - c0.y * circle1.Radius\r\n );\r\n else\r\n p = new Vector3(\r\n c0.x * circle1.Radius - c1.x * circle0.Radius,\r\n c0.y * circle1.Radius - c1.y * circle0.Radius\r\n );\r\n\r\n let diff = Math.abs(circle0.Radius - circle1.Radius);\r\n\r\n p.x /= diff;\r\n p.y /= diff;\r\n\r\n p.applyMatrix4(circle0.OCS);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(circle0, p);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(circle1, p);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\nexport function getArcOrCirNearPts(cu: Circle | Arc | Ellipse, pickPoint: Vector3, viewXform: Matrix3)\r\n{\r\n let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3);\r\n\r\n let plane = new PlaneExt(cu.Normal, cu.Center);\r\n\r\n let pickLocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true);\r\n\r\n if (pickLocal)\r\n {\r\n let x = new Vector3().fromArray(viewXform.elements, 0).add(pickLocal);\r\n let y = new Vector3().fromArray(viewXform.elements, 3).add(pickLocal);\r\n\r\n x = plane.intersectLine(new Line3(x, x.clone().add(viewNormal)), new Vector3(), true);\r\n y = plane.intersectLine(new Line3(y, y.clone().add(viewNormal)), new Vector3(), true);\r\n\r\n let lx = new Line(pickLocal, x);\r\n let ly = new Line(pickLocal, y);\r\n\r\n let ins = cu.IntersectWith(lx, IntersectOption.ExtendBoth);\r\n ins.push(...cu.IntersectWith(ly, IntersectOption.ExtendBoth));\r\n return ins;\r\n }\r\n else\r\n {\r\n let ptLocal = plane.projectPoint(pickPoint, new Vector3());\r\n let lz = new Line(ptLocal, ptLocal.clone().add(viewNormal));\r\n return cu.IntersectWith(lz, IntersectOption.ExtendBoth);\r\n }\r\n}\r\n\r\nexport function getTanPtsOnEllipse(cu: Ellipse, lastPoint: Vector3)\r\n{\r\n return [];\r\n}\r\n\r\nexport interface IRectInfo\r\n{\r\n isRect: boolean;\r\n size?: Vector3;\r\n box?: Box3;\r\n OCS?: Matrix4;\r\n}\r\n\r\nexport function IsRect(cu: Curve): IRectInfo\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (!cu.IsClose) return { isRect: false };\r\n\r\n let pts = cu.GetStretchPoints();\r\n\r\n if (pts.length < 4) return { isRect: false };\r\n\r\n let xVec: Vector3;\r\n let p1 = pts[0];\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n xVec = pts[i].clone().sub(p1).normalize();\r\n if (!equalv3(xVec, ZeroVec))\r\n break;\r\n }\r\n\r\n if (!xVec) return { isRect: false };\r\n\r\n let zVec = cu.Normal;\r\n let yVec = zVec.clone().cross(xVec).normalize();\r\n\r\n let rectOCS = new Matrix4().makeBasis(xVec, yVec, zVec);\r\n let rectOCSInv = new Matrix4().getInverse(rectOCS);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(rectOCSInv);\r\n\r\n let box = new Box3().setFromPoints(pts);\r\n\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x * size.y, cu.Area, 0.1))\r\n {\r\n return {\r\n isRect: true,\r\n size,\r\n box,\r\n OCS: rectOCS,\r\n };\r\n }\r\n }\r\n return { isRect: false };\r\n}\r\n\r\n/**用4个矩形点构造矩形 */\r\nexport function getRectFrom4Pts(pts: Vector3[])\r\n{\r\n if (pts.length !== 4) return;\r\n let p = pts.shift();\r\n pts.sort((p1, p2) => p.distanceTo(p1) - p.distanceTo(p2));\r\n pts.splice(1, 0, p);\r\n let lineData = pts.map(p =>\r\n {\r\n return {\r\n pt: new Vector2(p.x, p.y),\r\n bul: 0\r\n };\r\n });\r\n let l = new Polyline(lineData);\r\n l.CloseMark = true;\r\n return l;\r\n}\r\n\r\nexport function MergeCurvelist(cus: Curve[])\r\n{\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c1 = cus[i];\r\n let nextI = FixIndex(i + 1, cus);\r\n let c2 = cus[nextI];\r\n\r\n\r\n let status = equaln(c2.Length, 0, LINK_FUZZ) ? Status.True : c1.Join(c2, false, LINK_FUZZ);\r\n if (status === Status.True)\r\n {\r\n cus.splice(nextI, 1);\r\n i--;\r\n }\r\n else if (status === Status.ConverToCircle)\r\n {\r\n cus.length = 0;\r\n let a = c1 as Arc;\r\n cus.push(new Circle(a.Center, a.Radius));\r\n break;\r\n }\r\n }\r\n return cus;\r\n}\r\n\r\nexport function SwapParam(res: IntersectResult[]): IntersectResult[]\r\n{\r\n for (let r of res)\r\n [r.thisParam, r.argParam] = [r.argParam, r.thisParam];\r\n return res;\r\n}\r\n\r\nexport function ComputerCurvesNormalOCS(curves: Curve[], allowAutoCalc: boolean = true): Matrix4 | undefined\r\n{\r\n if (!curves || curves.length === 0) return;\r\n\r\n //准备计算多段线的法向量\r\n let normal: Vector3;\r\n let firstV: Vector3;\r\n for (let c of curves)\r\n {\r\n if (c instanceof Arc)\r\n {\r\n normal = c.Normal;\r\n break;\r\n }\r\n else if (firstV)\r\n {\r\n let v = c.GetFistDeriv(0);\r\n v.cross(firstV);\r\n if (!equalv3(v, ZeroVec))\r\n {\r\n normal = v.normalize();\r\n break;\r\n }\r\n }\r\n else\r\n {\r\n let cus = c.Explode() as Curve[];\r\n let ocs = ComputerCurvesNormalOCS(cus, false);\r\n if (ocs)\r\n return ocs;\r\n let fv = c.GetFistDeriv(0);\r\n if (fv && !equalv3(fv, ZeroVec, 1e-5))\r\n firstV = fv;\r\n }\r\n }\r\n\r\n if (!normal && !allowAutoCalc) return;\r\n\r\n let x = new Vector3();\r\n let y = new Vector3();\r\n if (!normal)\r\n {\r\n if (!firstV)\r\n return curves[0].OCS;\r\n\r\n normal = firstV.normalize();\r\n Orbit.ComputUpDirection(normal, y, x);\r\n [x, y, normal] = [normal, x, y];\r\n }\r\n else\r\n {\r\n if (equalv3(normal, curves[0].Normal.negate()))\r\n normal.negate();\r\n Orbit.ComputUpDirection(normal, y, x);\r\n }\r\n return new Matrix4().makeBasis(x, y, normal).setPosition(curves[0].StartPoint);\r\n}\r\n\r\n\r\nexport function Pts2Polyline(pts: (Vec3 | Vec2)[], isClose: boolean): Polyline\r\n{\r\n let pl = new Polyline();\r\n for (let i = 0; i < pts.length; i += 2)\r\n {\r\n let p1 = AsVector3(pts[i]);\r\n let arc: Arc | Line;\r\n let p2: Vector3;\r\n let p3: Vector3;\r\n\r\n if (isClose)\r\n {\r\n p2 = AsVector3(pts[FixIndex(i + 1, pts.length)]);\r\n p3 = AsVector3(pts[FixIndex(i + 2, pts.length)]);\r\n }\r\n else\r\n {\r\n if (i >= pts.length - 2) break;\r\n p2 = AsVector3(pts[i + 1]);\r\n p3 = AsVector3(pts[i + 2]);\r\n }\r\n let v1 = p1.clone().sub(p2);\r\n let v2 = p2.clone().sub(p3);\r\n\r\n if (equaln(v1.angleTo(v2), 0))\r\n arc = new Line(p1, p3);\r\n else\r\n arc = new Arc().FromThreePoint(p1, p2, p3);\r\n pl.Join(arc);\r\n }\r\n return pl;\r\n}\r\n\r\n/**获取矩形信息 */\r\nexport function GetRectData(cu: Curve): { isRect: boolean, size?: Vector3, box?: Box3, OCS?: Matrix4; }\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (!cu.IsClose) return { isRect: false };\r\n\r\n let pts = cu.GetStretchPoints();\r\n if (cu.Area2 < 0)\r\n pts.reverse();\r\n\r\n if (equalv3(pts[0], arrayLast(pts)))\r\n pts.pop();\r\n\r\n if (pts.length < 4) return { isRect: false };\r\n\r\n let xVec: Vector3;\r\n let p1 = pts[0];\r\n\r\n let originIndex = 0;\r\n\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n if (pts[i].y < p1.y)\r\n {\r\n p1 = pts[i];\r\n originIndex = i;\r\n }\r\n else if (equaln(pts[i].y, p1.y))\r\n {\r\n if (pts[i].x < p1.x)\r\n {\r\n p1 = pts[i];\r\n originIndex = i;\r\n }\r\n }\r\n }\r\n\r\n let tempPts = pts.splice(0, originIndex);\r\n pts.push(...tempPts);\r\n\r\n p1 = pts[0];\r\n\r\n\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n let v = pts[i].clone().sub(p1);\r\n if (equalv3(v, ZeroVec))\r\n continue;\r\n if (!xVec)\r\n xVec = v;\r\n else\r\n {\r\n if (isParallelTo(v, xVec))\r\n xVec.copy(v);\r\n else\r\n break;\r\n }\r\n }\r\n\r\n let yVec: Vector3;\r\n\r\n for (let i = pts.length - 1; i > 0; i--)\r\n {\r\n let v = pts[i].clone().sub(p1);\r\n if (equalv3(v, ZeroVec))\r\n continue;\r\n if (!yVec)\r\n yVec = v;\r\n else\r\n {\r\n if (isParallelTo(v, yVec))\r\n yVec.copy(v);\r\n else\r\n break;\r\n }\r\n }\r\n\r\n if (!xVec || !yVec) return { isRect: false };\r\n\r\n //2向量必须垂直\r\n if (!isPerpendicularityTo(xVec.clone().normalize(), yVec.clone().normalize()))\r\n return { isRect: false };\r\n\r\n if (yVec.length() > xVec.length())\r\n [xVec, yVec] = [yVec.negate(), xVec];\r\n\r\n if (xVec.angleTo(XAxis) > Math.PI / 4)\r\n [xVec, yVec] = [yVec.negate(), xVec];\r\n\r\n\r\n let rectOCS = new Matrix4().makeBasis(xVec.normalize(), yVec.normalize(), xVec.clone().cross(yVec));\r\n let rectOCSInv = new Matrix4().getInverse(rectOCS);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(rectOCSInv);\r\n\r\n let box = new Box3().setFromPoints(pts);\r\n\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x * size.y, cu.Area, 0.1))\r\n {\r\n return {\r\n isRect: true,\r\n size,\r\n box,\r\n OCS: rectOCS,\r\n };\r\n }\r\n }\r\n return { isRect: false };\r\n}\r\n\r\nconst PolylineSpliteRectFuzz = 1e-3;\r\n/**封闭多段线 分割成矩形 */\r\nexport function PolylineSpliteRect(outline: Polyline): Polyline[]\r\n{\r\n if (!outline.IsClose || IsRect(outline).isRect)\r\n return [outline];\r\n\r\n let firstDerv = outline.GetFistDeriv(0).normalize();\r\n if (!isParallelTo(firstDerv, XAxis, PolylineSpliteRectFuzz) && !isParallelTo(firstDerv, YAxis, PolylineSpliteRectFuzz)) return [outline];\r\n\r\n let cus = outline.Explode();\r\n let yCus: Curve[] = [];\r\n\r\n for (let c of cus)\r\n {\r\n if (c instanceof Arc) return [outline];\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (isParallelTo(derv, YAxis, PolylineSpliteRectFuzz))\r\n yCus.push(c);\r\n else\r\n if (!isParallelTo(derv, XAxis, PolylineSpliteRectFuzz))\r\n {\r\n return [outline];\r\n }\r\n }\r\n\r\n yCus.sort((c1, c2) => c1.StartPoint.x - c2.StartPoint.x);\r\n\r\n\r\n let rects: Polyline[] = [];\r\n\r\n for (let i = 0; i < yCus.length - 1; i++)\r\n {\r\n let c1 = yCus[i];\r\n let c2 = yCus[i + 1];\r\n\r\n let x1 = c1.StartPoint.x;\r\n let x2 = c2.StartPoint.x;\r\n if (equaln(x1, x2))\r\n continue;\r\n\r\n let y1: number;\r\n let y2: number;\r\n\r\n let res = c1.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n\r\n let res2 = c2.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n let pars = [...res.map(r => Math.floor(r.argParam)), ...res2.map(r => Math.floor(r.argParam))];\r\n pars = [...new Set(pars)];\r\n pars.sort((a, b) => a - b);\r\n\r\n let ys: number[] = [];\r\n for (let par of pars)\r\n {\r\n let c = outline.GetCurveAtParam(par);\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, PolylineSpliteRectFuzz))\r\n {\r\n let x3 = c.StartPoint.x;\r\n let x4 = c.EndPoint.x;\r\n if (x3 > x4)\r\n [x3, x4] = [x4, x3];\r\n if (isIntersect(x1, x2, x3, x4, -PolylineSpliteRectFuzz))\r\n ys.push(c.StartPoint.y);\r\n }\r\n }\r\n\r\n if (ys.length < 2) return [outline];\r\n\r\n ys.sort((a, b) => a - b);\r\n\r\n y1 = ys[0];\r\n y2 = arrayLast(ys);\r\n\r\n rects.push(new Polyline().RectangleFrom2Pt(new Vector3(x1, y1), new Vector3(x2, y2)));\r\n }\r\n\r\n return rects;\r\n\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Matrix3, Matrix4, Object3D, Shape, Vector2, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getArcOrCirNearPts, getCircleCenter, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { matrixSetVector, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { angle, AsVector3, clampRad, equaln, equalv3, midPoint, MoveMatrix, polar } from '../../Geometry/GeUtils';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\n/**\r\n * 圆弧实体类\r\n * 与ACAD不同,这个类加入了时针变量,并且默认构造的圆弧为顺时针圆弧.\r\n *\r\n * 关于时针圆弧:\r\n * 起始圆弧到终止圆弧总是在0-2PI之间.(一个完整的圆).\r\n * 圆弧的绘制从起始圆弧绘制到终止圆弧. 按照时针绘制.\r\n * 参考计算圆弧的完整角度方法查看该计算方式.\r\n */\r\n@Factory\r\nexport class Arc extends Curve\r\n{\r\n constructor(center: Vector3 = new Vector3(), radius: number = 0.1, startAngle: number = 0.1, endAngle: number = 0, clockwise = true)\r\n {\r\n super();\r\n this._Matrix.setPosition(center);\r\n this._Radius = radius;\r\n this._StartAngle = clampRad(startAngle);\r\n this._EndAngle = clampRad(endAngle);\r\n this._Clockwise = clockwise;\r\n }\r\n private _Radius: number;\r\n private _StartAngle: number;\r\n private _EndAngle: number;\r\n /**\r\n * 曲线为顺时针\r\n */\r\n private _Clockwise = true;\r\n\r\n get Shape()\r\n {\r\n let sp = new Shape();\r\n sp.absarc(0, 0, this._Radius, this._StartAngle, this._EndAngle, this._Clockwise);\r\n return sp;\r\n }\r\n\r\n get Center()\r\n {\r\n return this.Position;\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.Position = v;\r\n }\r\n\r\n get Normal()\r\n {\r\n return new Vector3().setFromMatrixColumn(this._Matrix, 2);\r\n }\r\n set Normal(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n matrixSetVector(this._Matrix, 2, v);\r\n this.Update();\r\n }\r\n\r\n get Area(): number\r\n {\r\n return 0.5 * this.AllAngle * this.Radius * this.Radius;\r\n }\r\n //获得曲线的面积,逆时针为正,顺时针为负.\r\n get Area2(): number\r\n {\r\n let clockwise = this._Clockwise ? -1 : 1;\r\n return 0.5 * this.AllAngle * this.Radius * this.Radius * clockwise;\r\n }\r\n get IsClose(): boolean\r\n {\r\n return false;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n let pts = [this.StartPoint, this.EndPoint];\r\n\r\n //TODO:考虑三维圆弧.\r\n let addPts = [\r\n this.Center.add(new Vector3(this._Radius, 0)),\r\n this.Center.add(new Vector3(0, this._Radius)),\r\n this.Center.add(new Vector3(-this._Radius, 0)),\r\n this.Center.add(new Vector3(0, -this._Radius)),\r\n ];\r\n addPts.forEach(p =>\r\n {\r\n if (this.PtOnCurve(p))\r\n pts.push(p);\r\n });\r\n return new Box3().setFromPoints(pts);\r\n }\r\n\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Radius = v <= 0 ? 1e-19 : v;\r\n this.Update();\r\n }\r\n\r\n get IsClockWise()\r\n {\r\n return this._Clockwise;\r\n }\r\n set IsClockWise(v: boolean)\r\n {\r\n if (v !== this._Clockwise)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Clockwise = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get StartAngle()\r\n {\r\n return this._StartAngle;\r\n }\r\n set StartAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartAngle = v;\r\n this.Update();\r\n }\r\n\r\n get EndAngle()\r\n {\r\n return this._EndAngle;\r\n }\r\n set EndAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndAngle = v;\r\n this.Update();\r\n }\r\n\r\n //******************** Curve function start*****************//\r\n get StartPoint()\r\n {\r\n return polar(new Vector3(), this._StartAngle, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n set StartPoint(v: Vector3)\r\n {\r\n let vTemp = v.clone().applyMatrix4(this.OCSInv);\r\n this.StartAngle = angle(vTemp);\r\n }\r\n get EndPoint()\r\n {\r\n return polar(new Vector3(), this._EndAngle, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n set EndPoint(v: Vector3)\r\n {\r\n let vTemp = v.clone().applyMatrix4(this.OCSInv);\r\n this.EndAngle = angle(vTemp);\r\n }\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return 1;\r\n }\r\n get Length()\r\n {\r\n return this.AllAngle * this._Radius;\r\n }\r\n\r\n GetParamAtPoint2(pt: Vector3): number\r\n {\r\n return this.GetParamAtAngle(this.GetAngleAtPoint(pt));\r\n }\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n let param = this.GetParamAtPoint2(p);\r\n return this.ParamOnCurve(param, fuzz);\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Center = this.Center.applyMatrix4(m);\r\n this.Radius = this.Radius * m.getMaxScaleOnAxis();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this._Clockwise = !this._Clockwise;\r\n this.StartPoint = sp;\r\n this.EndPoint = ep;\r\n return this;\r\n }\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.GetAngleAtParam(param);\r\n return polar(new Vector3(), an, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n GetPointAtDistance(distance: number)\r\n {\r\n let len = this.Length;\r\n if (len == 0) return;\r\n return this.GetPointAtParam(distance / len);\r\n }\r\n\r\n GetDistAtParam(param: number)\r\n {\r\n return Math.abs(param * this.Length);\r\n }\r\n\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n GetParamAtPoint(pt: Vector3)\r\n {\r\n if (this._Radius == 0 ||\r\n this.AllAngle == 0 ||\r\n !equaln(pt.distanceTo(this.Center), this._Radius, 1e-6))\r\n return NaN;\r\n\r\n return this.GetParamAtAngle(this.GetAngleAtPoint(pt));\r\n }\r\n\r\n /**\r\n * 利用角度计算该角度在圆弧中代表的参数.\r\n * 如果角度在圆弧内,那么返回0-1\r\n * 如果角度不在圆弧内,那么尝试返回离圆弧起始或者结束的较近的参数\r\n *\r\n * @param {number} an\r\n * @returns\r\n * @memberof Arc\r\n */\r\n GetParamAtAngle(an: number)\r\n {\r\n //如果以pt为终点,那么所有的角度为\r\n let ptAllAn = this.ComputeAnlge(an);\r\n let allAn = this.AllAngle;\r\n\r\n //减去圆弧角度,剩余角度的一半\r\n let surplusAngleHalf = Math.PI - allAn / 2;\r\n\r\n if (ptAllAn > allAn + surplusAngleHalf)//返回负数\r\n return ((ptAllAn - allAn) - (surplusAngleHalf * 2)) / allAn;\r\n else//返回正数\r\n return ptAllAn / allAn;\r\n }\r\n\r\n /**\r\n * 根据角度获得参数,不过在这里我们可以指定我们是要获取前面的参数还是后面的参数(正负)\r\n * @param an\r\n * @param [isStart] true:返回负数,false 返回正数\r\n * @returns\r\n */\r\n GetParamAtAngle2(an: number, isStart = true)\r\n {\r\n //如果以pt为终点,那么所有的角度为\r\n let ptAllAn = this.ComputeAnlge(an);\r\n let allAn = this.AllAngle;\r\n\r\n //减去圆弧角度,剩余角度的一半\r\n let surplusAngleHalf = Math.PI - allAn / 2;\r\n\r\n if (isStart)//返回负数\r\n return ((ptAllAn - allAn) - (surplusAngleHalf * 2)) / allAn;\r\n else//返回正数\r\n return ptAllAn / allAn;\r\n }\r\n\r\n GetAngleAtPoint(pt: Vector3)\r\n {\r\n let ptTmp = pt.clone().applyMatrix4(this.OCSInv);\r\n return angle(ptTmp);\r\n }\r\n\r\n GetAngleAtParam(param: number)\r\n {\r\n return clampRad(this._StartAngle + param * this.AllAngle * (this._Clockwise ? -1 : 1));\r\n }\r\n\r\n GetSplitCurves(param: number[] | number): Arc[]\r\n {\r\n let params = this.SplitParamSort(param);\r\n //角度列表\r\n let ans = params.map(p => this.GetAngleAtParam(p));\r\n //返回圆弧表\r\n let arcs: Arc[] = [];\r\n for (let i = 0; i < ans.length - 1; i++)\r\n {\r\n let arc = this.Clone() as Arc;\r\n arc.ColorIndex = this.ColorIndex;\r\n arc.StartAngle = ans[i];\r\n arc.EndAngle = ans[i + 1];\r\n arcs.push(arc);\r\n }\r\n return arcs;\r\n }\r\n GetOffsetCurves(offsetDist: number)\r\n {\r\n if (this._Clockwise) offsetDist *= -1;\r\n if ((offsetDist + this._Radius) > 0)\r\n {\r\n let arc = this.Clone() as Arc;\r\n arc.Radius = offsetDist + this._Radius;\r\n return [arc];\r\n }\r\n return [];\r\n }\r\n Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < 0)\r\n {\r\n this._StartAngle = this.GetAngleAtParam(newParam);\r\n }\r\n else if (newParam > 1)\r\n {\r\n this._EndAngle = this.GetAngleAtParam(newParam);\r\n }\r\n this.Update();\r\n }\r\n\r\n Join(cu: Curve): Status\r\n {\r\n if (cu instanceof Arc)\r\n {\r\n //非常小的圆弧直接结束\r\n if (cu.AllAngle < 5e-6) return Status.False;\r\n\r\n if (equalv3(cu.Center, this.Center) && equaln(cu._Radius, this._Radius))\r\n {\r\n this.WriteAllObjectRecord();\r\n let [sa, ea] = [cu.StartAngle, cu.EndAngle];\r\n if (cu._Clockwise != this._Clockwise)\r\n [sa, ea] = [ea, sa];\r\n\r\n let allAn = this.AllAngle;\r\n let saAllan = this.ComputeAnlge(sa);\r\n let eaAllan = this.ComputeAnlge(ea);\r\n\r\n if (equaln(sa, this._StartAngle)) //this起点对起点\r\n {\r\n if (eaAllan > allAn)\r\n this.EndAngle = ea;\r\n\r\n return Status.True;\r\n }\r\n else if (equaln(sa, this._EndAngle))//this终点对起点\r\n {\r\n if (eaAllan < allAn || equaln(ea, this._StartAngle))\r\n return Status.ConverToCircle;\r\n else\r\n this.EndAngle = ea;\r\n\r\n return Status.True;\r\n }\r\n else if (equaln(ea, this.StartAngle))//this起点对终点\r\n {\r\n if (saAllan < allAn)\r\n return Status.ConverToCircle;\r\n else\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n else if (equaln(ea, this._EndAngle))//this终点对终点\r\n {\r\n if (saAllan > allAn)\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n else if (this.ParamOnCurve(this.GetParamAtAngle(sa)))\r\n {\r\n if (eaAllan < saAllan)\r\n return Status.ConverToCircle;\r\n else if (eaAllan > allAn)\r\n this.EndAngle = ea;\r\n return Status.True;\r\n }\r\n else if (this.ParamOnCurve(this.GetParamAtAngle(ea)))\r\n {\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n\r\n //使用按负方向去计算它的参数\r\n let saParam: number;\r\n if (saAllan > allAn)\r\n saParam = (saAllan - Math.PI * 2) / allAn;\r\n else\r\n saParam = saAllan / allAn;\r\n\r\n let eaParam: number;\r\n if (eaAllan > saAllan && saAllan > allAn)\r\n eaParam = (eaAllan - Math.PI * 2) / allAn;\r\n else\r\n eaParam = eaAllan / allAn;\r\n\r\n let pMin = Math.max(0, saParam);\r\n let pMax = Math.min(1, eaParam);\r\n\r\n if (pMin <= pMax + 1e-5)\r\n {\r\n if (saParam < 0)\r\n this.StartAngle = sa;\r\n if (eaParam > 1)\r\n this.EndAngle = ea;\r\n return Status.True;\r\n }\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Clockwise = !this._Clockwise;\r\n [this._StartAngle, this._EndAngle] = [this._EndAngle, this._StartAngle];\r\n return this;\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4)\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectArcAndArc(this, curve, intType);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndArc(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return SwapParam(IntersectCircleAndArc(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Polyline)\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance));\r\n\r\n if (curve instanceof Ellipse)\r\n return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType));\r\n return [];\r\n }\r\n\r\n /**\r\n * 计算出圆弧所包含的角度\r\n *\r\n * @readonly\r\n * @type {number}\r\n * @memberof Arc\r\n */\r\n get AllAngle(): number\r\n {\r\n return this.ComputeAnlge(this._EndAngle);\r\n }\r\n\r\n get Bul(): number\r\n {\r\n if (equaln(this.AllAngle, Math.PI * 2))\r\n return 1;\r\n return Math.tan(this.AllAngle * 0.25) * (this.IsClockWise ? -1 : 1);\r\n }\r\n\r\n /**\r\n * 计算所包含的角度\r\n *\r\n * @private\r\n * @param {number} endAngle 结束的角度\r\n * @returns\r\n * @memberof Arc\r\n */\r\n ComputeAnlge(endAngle: number)\r\n {\r\n //顺时针\r\n if (this._Clockwise)\r\n {\r\n if (this._StartAngle > endAngle)\r\n return this.StartAngle - endAngle;\r\n else //越过0点绘制圆弧\r\n return (Math.PI * 2) - (endAngle - this._StartAngle);\r\n }\r\n else\r\n {\r\n if (endAngle > this._StartAngle)\r\n return endAngle - this._StartAngle;\r\n else\r\n return (Math.PI * 2) - (this._StartAngle - endAngle);\r\n }\r\n }\r\n\r\n /**\r\n * 解析两点和凸度所构成的圆弧\r\n *\r\n * @param {Vector2} p1\r\n * @param {Vector2} p2\r\n * @param {number} bul 凸度,在cad中,凸度为 <(四分之一圆心角)的正切值>\r\n */\r\n ParseFromBul(p1: Vector3 | Vector2, p2: Vector3 | Vector2, bul: number): Arc\r\n {\r\n if (p1 instanceof Vector2)\r\n p1 = AsVector3(p1);\r\n if (p2 instanceof Vector2)\r\n p2 = AsVector3(p2);\r\n\r\n let ocsInv = this.OCSInv;\r\n p1 = p1.clone().applyMatrix4(ocsInv);\r\n p2 = p2.clone().applyMatrix4(ocsInv);\r\n\r\n //弦向量\r\n let chordV = p2.clone().sub(p1);\r\n //弦角度\r\n let chordAn = angle(chordV);\r\n //弦长度/2\r\n let chordLengthHalf = chordV.length() / 2;\r\n\r\n let allAngle = Math.atan(bul) * 4;\r\n let HalfAngle = allAngle * 0.5;\r\n //半径\r\n this._Radius = chordLengthHalf / Math.sin(HalfAngle);\r\n\r\n //指向圆心的角度\r\n let toCenterAn = chordAn + Math.PI * 0.5;//弦角度转90\r\n\r\n //圆心\r\n let center = midPoint(p1, p2);\r\n polar(center, toCenterAn, this._Radius - (bul * chordLengthHalf));\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n\r\n this._Radius = Math.abs(this._Radius);\r\n\r\n this._StartAngle = angle(p1.clone().sub(center));\r\n this._EndAngle = angle(p2.clone().sub(center));\r\n\r\n this._Clockwise = bul < 0;\r\n\r\n return this;\r\n }\r\n FromThreePoint(pt1: Vector3, pt2: Vector3, pt3: Vector3)\r\n {\r\n if (!(pt1 && pt2 && pt3))\r\n return;\r\n\r\n let ocsInv = this.OCSInv;\r\n pt1 = pt1.clone().applyMatrix4(ocsInv);\r\n pt2 = pt2.clone().applyMatrix4(ocsInv);\r\n pt3 = pt3.clone().applyMatrix4(ocsInv);\r\n\r\n let center = getCircleCenter(pt1, pt2, pt3);\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n //用圆心和其中一个点求距离得到半径:\r\n this._Radius = center.distanceTo(pt1);\r\n //起始角度 端点角度\r\n this._StartAngle = angle(pt1.clone().sub(center));\r\n this._EndAngle = angle(pt3.clone().sub(center));\r\n //求出向量p1->p2,p1->p3\r\n let p1 = pt2.clone().sub(pt1);\r\n let p2 = pt3.clone().sub(pt1);\r\n\r\n this._Clockwise = p1.cross(p2).z < 0;\r\n return this;\r\n }\r\n\r\n /**\r\n * 重载: 初始化绘制实体.\r\n *\r\n * @param {RenderType} [renderType=RenderType.Wireframe]\r\n */\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let geo = BufferGeometryUtils.CreateFromPts(this.Shape.getPoints(60).map(AsVector3));\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry();\r\n geometry.setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n //更新Geometry\r\n private UpdateGeometry(geo: BufferGeometry)\r\n {\r\n let pts = this.Shape.getPoints(60).map(AsVector3);\r\n BufferGeometryUtils.UpdatePts(geo, pts);\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n *\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n * @memberof Arc\r\n */\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let geo = obj[\"geometry\"] as BufferGeometry;\r\n this.UpdateGeometry(geo);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return [this.StartPoint, this.EndPoint];\r\n case ObjectSnapMode.Mid:\r\n return [this.GetPointAtParam(0.5)];\r\n case ObjectSnapMode.Nea:\r\n return getArcOrCirNearPts(this, pickPoint, viewXform)\r\n .filter(p => this.PtOnCurve(p));\r\n case ObjectSnapMode.Ext:\r\n return [this.GetClosestPointTo(pickPoint, true)];\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n let l = new Line(this.Center, lastPoint);\r\n return l.IntersectWith(this, IntersectOption.ExtendBoth).filter(p => this.PtOnCurve(p));\r\n }\r\n case ObjectSnapMode.Tan:\r\n let pts = GetTanPtsOnArcOrCircle(this, lastPoint);\r\n if (pts)\r\n return pts.filter(p => this.PtOnCurve(p));\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [\r\n this.StartPoint,\r\n this.GetPointAtParam(0.5),\r\n this.EndPoint,\r\n this.Center.clone(),\r\n ];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n this.WriteAllObjectRecord();\r\n let ptsArr = this.GetGripPoints();\r\n let index = indexList[0];\r\n let p = ptsArr[index];\r\n if (p)\r\n {\r\n p.add(vec);\r\n if (index > 2)\r\n this.Center = this.Center.add(vec);\r\n else\r\n this.FromThreePoint(ptsArr[0], ptsArr[1], ptsArr[2]);\r\n this.Update();\r\n }\r\n }\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length === 0)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n if (indexList.length === 2)\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n else\r\n for (let index of indexList)\r\n {\r\n let pts = [this.StartPoint, this.EndPoint];\r\n let [sp, ep] = pts;\r\n\r\n let oldChordLengthHalf = sp.distanceTo(ep) * 0.5;\r\n\r\n let arcHeight = oldChordLengthHalf * this.Bul;\r\n\r\n pts[index].add(vec);\r\n\r\n let newChordLengthHalf = sp.distanceTo(ep) * 0.5;\r\n\r\n let newBul = arcHeight / newChordLengthHalf;\r\n\r\n //根据凸度构造新的弧\r\n this.ParseFromBul(sp, ep, newBul);\r\n this.Update();\r\n }\r\n }\r\n\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n let an: number;\r\n if (typeof pt === \"number\")\r\n an = this.GetAngleAtParam(pt);\r\n else\r\n an = angle(pt.clone().applyMatrix4(this.OCSInv));\r\n\r\n an += Math.PI * 0.5 * (this._Clockwise ? -1 : 1);\r\n\r\n let ocs = new Matrix4().extractRotation(this.OCS);\r\n return polar(new Vector3(), an, this._Radius).applyMatrix4(ocs);\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n let l = new Line(this.Center, pt);\r\n let inPts: Vector3[] = this.IntersectWith(l, extend ? IntersectOption.ExtendBoth : IntersectOption.ExtendArg);\r\n if (inPts.length < 2)\r\n inPts.push(this.StartPoint, this.EndPoint);\r\n return inPts.reduce((p1, p2) => p1.distanceToSquared(pt) < p2.distanceToSquared(pt) ? p1 : p2);\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n if (ver === 1)\r\n {\r\n this.Center = new Vector3().fromArray(file.Read());\r\n this.Normal = new Vector3().fromArray(file.Read());\r\n }\r\n this._Radius = file.Read();\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n this._Clockwise = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n file.Write(this._Radius);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.Write(this._Clockwise);\r\n }\r\n //#endregion\r\n}\r\n","\r\ntype LogFunction = (message?: any, ...optionalParams: any[]) => void;\r\n\r\nexport const _LogInjectFunctions: LogFunction[] = [];\r\n\r\nexport function Log(message?: any, ...optionalParams: any[]): void\r\n{\r\n for (let f of _LogInjectFunctions)\r\n f(message, ...optionalParams);\r\n}\r\n\r\nexport const LogEnable = {\r\n Display: false\r\n};\r\n","\r\n\r\nlet instanceMap = new Map();\r\n\r\n/**\r\n * 构造单例类的静态类.\r\n * # Example:\r\n * class A extends Singleton(){};\r\n * //获得单例\r\n * let a = A.GetInstance();\r\n */\r\nexport class Singleton\r\n{\r\n protected constructor() { }\r\n\r\n //FIXME: https://github.com/Microsoft/TypeScript/issues/5863\r\n static GetInstance(): T\r\n {\r\n if (instanceMap.has(this))\r\n return instanceMap.get(this);\r\n //@ts-ignore\r\n let __instance__ = new this.prototype.constructor();\r\n instanceMap.set(this, __instance__);\r\n return __instance__;\r\n }\r\n}\r\n","import { Geometry, Matrix4, Vector3 } from \"three\";\r\n\r\nexport function ScaleUV(geo: Geometry, scale = 1e-3)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n uv.multiplyScalar(scale);\r\n }\r\n }\r\n }\r\n}\r\nexport function ScaleUV2(geo: Geometry, ocs: Matrix4, xScale = 1e-3, yScale = 1e-3, isInvert = false)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n let p = new Vector3(uv.x, uv.y).applyMatrix4(ocs);\r\n uv.x = p.x;\r\n uv.y = p.y;\r\n if (isInvert)\r\n {\r\n uv.x /= yScale;\r\n uv.y /= xScale;\r\n }\r\n else\r\n {\r\n uv.x /= xScale;\r\n uv.y /= yScale;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { Matrix3, Matrix4, Path, Shape as TShape, Vector3, Box3 } from 'three';\r\nimport { arrayRemoveIf } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Contour } from './Contour';\r\nimport { Circle } from './Entity/Circle';\r\nimport { Curve } from './Entity/Curve';\r\nimport { Polyline } from './Entity/Polyline';\r\nimport { equaln } from '../Geometry/GeUtils';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\n\r\nexport class Shape\r\n{\r\n private _Outline: Contour;\r\n private _Holes: Contour[] = [];\r\n private _Shape: TShape = new TShape();\r\n constructor(out?: Contour, hols?: Contour[])\r\n {\r\n this._Outline = out || new Contour();\r\n hols && this._Holes.push(...hols);\r\n }\r\n\r\n get Outline()\r\n {\r\n return this._Outline;\r\n }\r\n get Holes()\r\n {\r\n return this._Holes;\r\n }\r\n get Area()\r\n {\r\n let outlineArea = this._Outline.Area;\r\n let holeArea = this._Holes.map(l => l.Area).reduce((a1, a2) => a1 + a2, 0);\r\n return outlineArea - holeArea;\r\n }\r\n get BoundingBox()\r\n {\r\n return this._Outline.BoundingBox;\r\n }\r\n set Outline(cus: Contour)\r\n {\r\n this._Outline = cus;\r\n this.UpdateShape();\r\n }\r\n set Holes(cus: Contour[])\r\n {\r\n this._Holes = cus;\r\n this.UpdateShape();\r\n }\r\n get Shape()\r\n {\r\n this.UpdateShape();\r\n return this._Shape;\r\n }\r\n get Position()\r\n {\r\n return this._Outline.Curve.Position;\r\n }\r\n set Position(p: Vector3)\r\n {\r\n let vec = p.clone().sub(this._Outline.Curve.Position);\r\n this._Outline.Curve.Position = p;\r\n for (let h of this._Holes)\r\n h.Curve.Position = h.Curve.Position.add(vec);\r\n }\r\n Z0()\r\n {\r\n this._Outline.Curve.Z0();\r\n for (let h of this._Holes)\r\n h.Curve.Z0();\r\n return this;\r\n }\r\n\r\n MatrixPlanarizere()\r\n {\r\n this._Outline.Curve.MatrixPlanarizere();\r\n for (let h of this._Holes)\r\n h.Curve.MatrixPlanarizere();\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n this._Outline.Curve.ApplyMatrix(m);\r\n this._Holes.forEach(h => h.Curve.ApplyMatrix(m));\r\n return this;\r\n }\r\n ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n\r\n let cu = this.Outline.Curve;\r\n let cus = this._Holes.map(h => h.Curve);\r\n cus.unshift(cu);\r\n for (let c of cus)\r\n {\r\n c.ApplyMatrix(c.OCS);\r\n c.ApplyMatrix(m);\r\n c.ApplyMatrix(c.OCSInv);\r\n }\r\n\r\n return this;\r\n }\r\n Explode()\r\n {\r\n let cus: Curve[] = [];\r\n let contours: Contour[] = [this._Outline, ...this._Holes];\r\n for (let con of contours)\r\n {\r\n if (con.Curve instanceof Polyline)\r\n cus.push(...con.Curve.Explode());\r\n else\r\n cus.push(con.Curve.Clone());\r\n }\r\n return cus;\r\n }\r\n Clone()\r\n {\r\n let shape = new Shape();\r\n shape.Outline = this._Outline.Clone();\r\n shape.Holes = this.Holes.map(h => h.Clone());\r\n return shape;\r\n }\r\n SetColor(color: number)\r\n {\r\n this._Outline.Curve.ColorIndex = color;\r\n this._Holes.forEach(h => h.Curve.ColorIndex = color);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let cus: Curve[] = [this._Outline.Curve];\r\n for (let h of this._Holes)\r\n {\r\n cus.push(h.Curve);\r\n }\r\n let pts: Vector3[] = [];\r\n for (let c of cus)\r\n {\r\n pts.push(...c.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints()\r\n {\r\n let pts = this.Outline.Curve.GetGripPoints();\r\n for (let h of this._Holes)\r\n {\r\n pts.push(...h.Curve.GetGripPoints());\r\n }\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n let i = indexList[0];\r\n let outlineIndex = this._Outline.Curve.GetGripPoints().length;\r\n\r\n let cu = this._Outline.Curve;\r\n\r\n if (i >= outlineIndex)\r\n {\r\n for (let h of this._Holes)\r\n {\r\n let len = h.Curve.GetGripPoints().length;\r\n if (indexList[0] < outlineIndex + len)\r\n {\r\n indexList = [indexList[0] - outlineIndex];\r\n cu = h.Curve;\r\n break;\r\n }\r\n outlineIndex += len;\r\n }\r\n }\r\n cu.MoveGripPoints(indexList, vec);\r\n }\r\n GetStretchPoints()\r\n {\r\n let pts = this.Outline.Curve.GetStretchPoints();\r\n for (let h of this._Holes)\r\n {\r\n pts.push(...h.Curve.GetStretchPoints());\r\n }\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n let outlen = 0;\r\n for (let cu of [this._Outline.Curve, ...this._Holes.map(h => h.Curve)])\r\n {\r\n let count = cu.GetStretchPoints().length;\r\n let refIndex = outlen + count;\r\n let curIndexs = [];\r\n while (indexList.length)\r\n {\r\n if (indexList[0] < refIndex)\r\n curIndexs.push(indexList.shift() - outlen);\r\n else\r\n break;\r\n }\r\n cu.MoveStretchPoints(curIndexs, vec);\r\n\r\n if (indexList.length === 0)\r\n break;\r\n\r\n outlen += count;\r\n }\r\n }\r\n //交集 如果成功返回一个面域 失败返回0个\r\n IntersectionBoolOperation(targetShape: Shape): Shape[]\r\n {\r\n let resOutlines = this._Outline.IntersectionBoolOperation(targetShape._Outline);\r\n let cus = this.targetOutlineSubHoleOutline(resOutlines, Shape.mergeContours([...this._Holes, ...targetShape._Holes]));\r\n return Shape.pairHoleAndOutline(cus);\r\n }\r\n\r\n //并集,如果成功返回1个形状,不成功返回2个形状\r\n UnionBoolOperation(targetShape: Shape, checkIntersect = false): Shape[]\r\n {\r\n if (checkIntersect && !this.BoundingBox.intersectsBox(targetShape.BoundingBox, 1e-3)) return [this, targetShape];\r\n\r\n let { contours, holes } = this._Outline.UnionBoolOperation(targetShape._Outline);\r\n\r\n let shapes: Shape[] = [];\r\n\r\n //提取出所有的孔洞, 目标线段孔洞和原线段差,如果孔洞和目标相减后有被包围轮廓,应把这个单独提取出来作为形状\r\n let unionHoles: Contour[] = [];\r\n\r\n //合并运算时提取出运算后的孔洞和形状\r\n const pickUpHoleOrShape = (srcHoles: Contour[], tarHoles: Contour[], outline: Contour) =>\r\n {\r\n srcHoles.forEach(cu =>\r\n {\r\n let tmpContours = cu.SubstactBoolOperation(outline).sort((a, b) => b.Area - a.Area);\r\n let isAllContainered = tmpContours.length > 1 && tmpContours.slice(1).every((cu, index) => tmpContours[0].CuInOutline(cu.Curve));\r\n\r\n //洞是否被最大的洞包含,是,则把被包含的洞都提取出来加入形状数组\r\n if (isAllContainered)\r\n {\r\n shapes.push(...this.targetOutlinesSubHoles(tmpContours.slice(1).map(c => new Shape(c)), tarHoles.map(c => new Shape(c))));\r\n } else\r\n unionHoles.push(...tmpContours);\r\n });\r\n\r\n };\r\n pickUpHoleOrShape(targetShape._Holes, this._Holes, this._Outline);\r\n pickUpHoleOrShape(this._Holes, targetShape._Holes, targetShape._Outline);\r\n targetShape._Holes.forEach(cu =>\r\n {\r\n this._Holes.forEach(c =>\r\n {\r\n unionHoles.push(...c.IntersectionBoolOperation(cu));\r\n });\r\n });\r\n\r\n shapes.push(...this.targetOutlinesSubHoles(contours.map(c => new Shape(c, holes)), unionHoles.map(c => new Shape(c))));\r\n return shapes;\r\n }\r\n\r\n /**\r\n * 如果完全被减掉,就返回0个.其他的返回1个或者n个\r\n * @param targetShapes 已经是合并后的形状数组\r\n */\r\n SubstactBoolOperation(targetShapes: Shape[])\r\n {\r\n let originOutline = this.Outline;\r\n let targetOutlines = targetShapes.map(s => s.Outline);\r\n const { holes, outlines } = originOutline.GetSubtractListByMoreTargets(targetOutlines);\r\n holes.push(...this.Holes);\r\n\r\n let newShapes: Shape[] = [];\r\n\r\n if (outlines.length === 1 && equaln(outlines[0].Area, originOutline.Area))\r\n {\r\n newShapes = [new Shape(outlines[0], Shape.mergeContours(holes))];\r\n }\r\n else if (holes.length === 0)\r\n {\r\n newShapes = outlines.map(o => new Shape(o));\r\n }\r\n else\r\n {\r\n for (let outline of outlines)\r\n newShapes.push(...new Shape(outline).SubstactBoolOperation(holes.map(h => new Shape(h))));\r\n }\r\n\r\n let holeShape = this.Holes.map(h => new Shape(h));\r\n\r\n for (let target of targetShapes)\r\n {\r\n let tmpInterList: Contour[] = [];\r\n if (target.Holes.length === 0) continue;\r\n for (let hole of target.Holes)\r\n {\r\n let list = hole.IntersectionBoolOperation(originOutline);\r\n tmpInterList.push(...list);\r\n }\r\n\r\n for (let ot of tmpInterList)\r\n {\r\n let subShapes: Shape[] = [];\r\n subShapes.push(...holeShape);\r\n for (let t of targetShapes)\r\n {\r\n if (t !== target)\r\n subShapes.push(new Shape(t.Outline));\r\n }\r\n\r\n newShapes.push(...new Shape(ot).SubstactBoolOperation(subShapes));\r\n }\r\n\r\n }\r\n\r\n return newShapes;\r\n }\r\n Equal(targetShape: Shape)\r\n {\r\n if (this._Outline.Equal(targetShape._Outline))\r\n {\r\n return this._Holes.length === targetShape._Holes.length\r\n && this._Holes.every(h1 =>\r\n targetShape._Holes.some(h2 => h1.Equal(h2))\r\n );\r\n }\r\n return false;\r\n }\r\n private targetOutlinesSubHoles(targetShapes: Shape[], holeShapes: Shape[])\r\n {\r\n let resultShapes: Shape[] = [];\r\n for (let ts of targetShapes)\r\n {\r\n let res = ts.SubstactBoolOperation(holeShapes);\r\n resultShapes.push(...res);\r\n }\r\n return resultShapes;\r\n\r\n }\r\n /**\r\n * 目标轮廓减去洞\r\n *\r\n * @private\r\n * @param {Contour[]} tarContours 轮廓列表\r\n * @param {Contour[]} holes 洞列表\r\n * @returns {Contour[]} 新的轮廓列表\r\n * @memberof Shape\r\n */\r\n private targetOutlineSubHoleOutline(tarContours: Contour[], holes: Contour[]): Contour[]\r\n {\r\n if (!holes.length)\r\n return tarContours;\r\n\r\n let resultContours: Contour[] = [];\r\n\r\n for (let minuendContour of tarContours)\r\n {\r\n //需要被差集的形状列表\r\n let tmpContour: Contour[] = [minuendContour];\r\n for (let hole of holes)\r\n {\r\n //缓存差集生成的轮廓\r\n let tmps: Contour[] = [];\r\n tmpContour.forEach(r =>\r\n {\r\n let cus = r.SubstactBoolOperation(hole);\r\n tmps.push(...cus);\r\n });\r\n tmpContour = tmps;//使用新生成的进行下一轮计算\r\n }\r\n resultContours.push(...tmpContour);\r\n }\r\n\r\n return resultContours;\r\n }\r\n\r\n //整理轮廓数组,匹配洞和外轮廓\r\n static pairHoleAndOutline(contours: Contour[]): Shape[]\r\n {\r\n let shapes: Shape[] = [];\r\n contours.sort((a, b) => b.Area - a.Area);\r\n while (contours.length)\r\n {\r\n //洞列表\r\n let tmpHoles: Contour[] = [];\r\n let outline: Contour = contours.shift();\r\n\r\n //取出包含的洞\r\n arrayRemoveIf(contours, (con: Contour) =>\r\n {\r\n let bisIn = outline.CuInOutline(con.Curve);\r\n if (bisIn) tmpHoles.push(con);\r\n return bisIn;\r\n });\r\n let holes: Contour[] = Shape.removeBeContaineredHoles(tmpHoles);\r\n shapes.push(new Shape(outline, holes));\r\n }\r\n return shapes;\r\n }\r\n /**\r\n * 合并洞,本质是使用(并集算法)将可以并集的洞合并在一起,减少洞的数量.\r\n * canSidewipe 用于走刀,擦边的是否合并\r\n */\r\n static mergeContours(holes: Contour[], canSidewipe = true): Contour[]\r\n {\r\n if (holes.length <= 1) return holes;\r\n let rets: Contour[] = [];//返回的合并轮廓\r\n let cache = new Map();\r\n\r\n while (holes.length > 0)\r\n {\r\n let c = holes.shift();//取第一个\r\n let b1 = cache.get(c);\r\n if (!b1)\r\n {\r\n b1 = c.BoundingBox;\r\n cache.set(c, b1);\r\n }\r\n\r\n while (true)\r\n {\r\n //剩余的 不相交的形状表 remaining\r\n let remHoles = holes.filter(ic =>\r\n {\r\n let b2 = cache.get(ic);\r\n if (!b2)\r\n {\r\n b2 = ic.BoundingBox;\r\n cache.set(ic, b2);\r\n }\r\n\r\n if (!IntersectBox2(b1, b2))\r\n return true;\r\n\r\n let unions = c.UnionBoolOperation(ic);\r\n\r\n if (unions.holes.length > 0)\r\n console.warn(\"未知情况\");\r\n\r\n if (unions.contours.length === 1)//并集成功\r\n {\r\n if (!canSidewipe)\r\n {\r\n if (equaln(c.Area + ic.Area, unions.contours[0].Area, 0.1))\r\n return true;\r\n }\r\n c = unions.contours[0]; //更新c\r\n b1 = c.BoundingBox;\r\n cache.set(c, b1);\r\n }\r\n\r\n return unions.contours.length !== 1; //过滤出并集失败的形状\r\n });\r\n\r\n //如果c和剩余的轮廓都不相交,那么退出\r\n if (remHoles.length === holes.length)\r\n {\r\n rets.push(c); //c已经是一个独立的轮廓,不和任意轮廓相交(不能合并了)\r\n break;//退出循环.下一个\r\n }\r\n else\r\n holes = remHoles; //更新为剩下的轮廓列表\r\n }\r\n }\r\n\r\n return rets;\r\n }\r\n\r\n /**\r\n * 移除被包含的洞.(移除无效的洞,已经被更大的洞包含)\r\n *\r\n * @private\r\n * @param {Contour[]} tmpHoles 洞列表\r\n * @returns {Contour[]} 返回的洞列表都不会互相包含.\r\n * @memberof Shape\r\n */\r\n private static removeBeContaineredHoles(tmpHoles: Contour[]): Contour[]\r\n {\r\n let holes: Contour[] = [];\r\n if (tmpHoles.length <= 1) return tmpHoles;\r\n tmpHoles.sort((a, b) => b.Area - a.Area);\r\n while (tmpHoles.length)\r\n {\r\n let srcHole = tmpHoles.shift();\r\n holes.push(srcHole);\r\n\r\n //移除包含的洞\r\n arrayRemoveIf(tmpHoles, h => srcHole.CuInOutline(h.Curve));\r\n }\r\n return holes;\r\n }\r\n UpdateShape()\r\n {\r\n this._Shape = this.Outline.Shape;\r\n for (let h of this._Holes)\r\n {\r\n if (h.Curve instanceof Polyline)\r\n h.Curve.UpdateMatrixTo(this.Outline.Curve.OCS);\r\n\r\n if (h.Curve instanceof Circle)\r\n {\r\n let sp = new Path();\r\n let cen = h.Curve.Center.applyMatrix4(this.Outline.Curve.OCSInv);\r\n sp.ellipse(cen.x, cen.y, h.Curve.Radius, h.Curve.Radius, 0, 2 * Math.PI, false, 0);\r\n this._Shape.holes.push(sp);\r\n }\r\n else\r\n this._Shape.holes.push(h.Shape);\r\n }\r\n }\r\n //读写文件\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();//1\r\n this._Outline = Contour.CreateContour([file.ReadObject() as Curve]);\r\n\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n this._Holes.push(\r\n Contour.CreateContour([file.ReadObject() as Curve])\r\n );\r\n }\r\n\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.WriteObject(this._Outline.Curve);\r\n file.Write(this._Holes.length);\r\n this._Holes.forEach(h => file.WriteObject(h.Curve));\r\n }\r\n}\r\n","import { BoolOpeartionType } from '../GraphicsSystem/BoolOperateUtils';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Shape } from './Shape';\r\nimport { Matrix4 } from 'three';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\n\r\n\r\nexport class ShapeManager\r\n{\r\n private _ShapeList: Shape[] = [];\r\n get ShapeList()\r\n {\r\n return this._ShapeList.slice();\r\n }\r\n get ShapeCount()\r\n {\r\n return this._ShapeList.length;\r\n }\r\n get ShapeArea()\r\n {\r\n return this._ShapeList.map(s => s.Area).reduce((a1, a2) => a1 + a2, 0);\r\n }\r\n AppendShapeList(shapes: Shape | Shape[])\r\n {\r\n Array.isArray(shapes) ? this._ShapeList.push(...shapes) : this._ShapeList.push(shapes);\r\n return this;\r\n }\r\n Clear()\r\n {\r\n this._ShapeList.length = 0;\r\n }\r\n BoolOper(otherMg: ShapeManager, booltype: BoolOpeartionType)\r\n {\r\n switch (booltype)\r\n {\r\n case BoolOpeartionType.Intersection:\r\n return this.IntersectionBoolOperation(otherMg);\r\n case BoolOpeartionType.Union:\r\n return this.UnionBoolOperation(otherMg);\r\n case BoolOpeartionType.Subtract:\r\n return this.SubstactBoolOperation(otherMg);\r\n }\r\n }\r\n //交集 如果成功返回一个面域 失败返回0个\r\n IntersectionBoolOperation(target: ShapeManager)\r\n {\r\n let shapes: Shape[] = [];\r\n for (let srcShape of this._ShapeList)\r\n {\r\n for (let tarShape of target._ShapeList)\r\n {\r\n let tmpShapes = srcShape.IntersectionBoolOperation(tarShape);\r\n shapes.push(...tmpShapes);\r\n }\r\n }\r\n this.Clear();\r\n this._ShapeList = shapes;\r\n return this._ShapeList.length > 0;\r\n }\r\n //并集,如果有一个形状并集成功,就成功\r\n UnionBoolOperation(targetMg: ShapeManager)\r\n {\r\n let isSuccess = false;\r\n let srcShapes = this._ShapeList;\r\n let tarShapes = targetMg._ShapeList;\r\n\r\n let alones: Shape[] = [];//孤立的形状\r\n\r\n const boxCache = new WeakMap();\r\n\r\n for (let src of srcShapes)\r\n {\r\n let notUnions: Shape[] = [];//未被合并的形状列表 来自tarShapes\r\n let srcBox = src.BoundingBox;\r\n for (let tar of tarShapes)\r\n {\r\n let tarBox = boxCache.get(tar);\r\n if (!tarBox)\r\n {\r\n tarBox = tar.BoundingBox;\r\n boxCache.set(tar, tarBox);\r\n }\r\n if (!IntersectBox2(srcBox, tarBox))\r\n {\r\n notUnions.push(tar);\r\n continue;\r\n }\r\n let unions = src.UnionBoolOperation(tar);\r\n if (unions.length === 1)//并集成功\r\n {\r\n isSuccess = true;\r\n src = unions[0];//src设置为 合并完的形状\r\n }\r\n else//并集失败\r\n notUnions.push(tar); //设置为未计算\r\n }\r\n\r\n //如果发现src和任意一个形状并集成功,那么\r\n if (notUnions.length != tarShapes.length)\r\n {\r\n notUnions.push(src); //加入src 进行下一轮\r\n tarShapes = notUnions;\r\n }\r\n else\r\n alones.push(src);//它是孤独的一个形状\r\n }\r\n\r\n this._ShapeList = alones.concat(tarShapes);\r\n return isSuccess;\r\n }\r\n SubstactBoolOperation(target: ShapeManager)\r\n {\r\n let newShapes: Shape[] = [];\r\n for (let s of this._ShapeList)\r\n {\r\n let ss = s.SubstactBoolOperation(target.ShapeList);\r\n newShapes.push(...ss);\r\n }\r\n this._ShapeList = newShapes;\r\n return true;\r\n }\r\n\r\n /**\r\n * 与region.ApplyMatrix不同的是,这个是直接操作内部对象.\r\n * 通常用来计算布尔运算时需要真实的移动这个位置.\r\n * 并且将不会刷新显示\r\n *\r\n * @param {Matrix4} mat4\r\n * @memberof ShapeManager\r\n */\r\n ApplyMatrix(mat4: Matrix4)\r\n {\r\n for (let s of this._ShapeList)\r\n {\r\n s.Outline.Curve.ApplyMatrix(mat4);\r\n s.Holes.forEach(o => o.Curve.ApplyMatrix(mat4));\r\n }\r\n\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();//1\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let obj = new Shape();\r\n obj.ReadFile(file);\r\n this._ShapeList.push(obj);\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.ShapeList.length);\r\n for (let s of this.ShapeList)\r\n {\r\n s.WriteFile(file);\r\n }\r\n }\r\n}\r\n","import { Box3, BufferGeometry, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Vector2, Vector3 } from 'three';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils, BufferGeometryUtils as BufferGeometryUtils2 } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector3, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { ScaleUV } from '../../Geometry/UVUtils';\r\nimport { BoolOpeartionType } from '../../GraphicsSystem/BoolOperateUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { Shape } from '../Shape';\r\nimport { ShapeManager } from '../ShapeManager';\r\nimport { Curve } from './Curve';\r\nimport { Entity } from './Entity';\r\n\r\n@Factory\r\nexport class Region extends Entity\r\n{\r\n static CreateFromCurves(cus: Curve[]): Region | undefined\r\n {\r\n let shapes = Contour.GetAllContour(cus).map(out => new Shape(out));\r\n if (shapes.length > 0)\r\n {\r\n let reg = new Region();\r\n //MarkX:曲线同面域一起移动\r\n reg.ApplyMatrix(shapes[0].Outline.Curve.OCS);\r\n reg.ShapeManager.AppendShapeList(shapes);\r\n return reg;\r\n }\r\n }\r\n\r\n constructor(private _ShapeManager: ShapeManager = new ShapeManager())\r\n {\r\n super();\r\n }\r\n\r\n //如果需要修改获取到的属性,需要Clone后进行操作,否则会对原实体进行破坏\r\n get ShapeManager()\r\n {\r\n return this._ShapeManager;\r\n }\r\n get Area()\r\n {\r\n return this.ShapeManager.ShapeArea;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3();\r\n for (let s of this._ShapeManager.ShapeList)\r\n box.union(s.BoundingBox);\r\n return box;\r\n }\r\n Explode()\r\n {\r\n let shapeList = this._ShapeManager.ShapeList;\r\n if (shapeList.length <= 1)\r\n {\r\n return shapeList[0].Explode();\r\n }\r\n else\r\n {\r\n let regs: Region[] = [];\r\n shapeList.forEach(s =>\r\n {\r\n let reg = new Region().ApplyMatrix(this.OCS);\r\n reg.ShapeManager.AppendShapeList(s);\r\n regs.push(reg);\r\n });\r\n return regs;\r\n }\r\n }\r\n\r\n /**\r\n * 对于布尔操作,这个将会变换内部轮廓到对方坐标系.\r\n * 并且这个变换不会更新图形绘制.\r\n * @param {Matrix4} m\r\n * @memberof Region\r\n */\r\n ShapeApplyMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ShapeManager.ApplyMatrix(m);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let pts: Vector3[] = [];\r\n for (let s of this._ShapeManager.ShapeList)\r\n {\r\n pts.push(...s.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let pts: Vector3[] = [];\r\n for (let s of this._ShapeManager.ShapeList)\r\n pts.push(...s.GetStretchPoints());\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let moveVLoc = moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv));\r\n this.ApplyMatrix(MoveMatrix(moveVLoc));\r\n }\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n //面域移动,组成面域的曲线也要移动 MarkX:曲线同面域一起移动\r\n this._ShapeManager.ShapeList.forEach(s => s.ApplyMatrix(m));\r\n return super.ApplyMatrix(m);\r\n }\r\n\r\n get Position()\r\n {\r\n return super.Position;\r\n }\r\n set Position(pt: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let moveX = pt.x - this._Matrix.elements[12];\r\n let moveY = pt.y - this._Matrix.elements[13];\r\n let moveZ = pt.z - this._Matrix.elements[14];\r\n this._Matrix.setPosition(pt);\r\n this._SpaceOCS.elements[12] += moveX;\r\n this._SpaceOCS.elements[13] += moveY;\r\n this._SpaceOCS.elements[14] += moveZ;\r\n\r\n let m = new Matrix4().setPosition(moveX, moveY, moveZ);\r\n for (let s of this.ShapeManager.ShapeList)\r\n s.ApplyMatrix(m);\r\n\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.ApplyScaleMatrix(m);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n\r\n //Z轴归0\r\n Z0()\r\n {\r\n super.Z0();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.Z0();\r\n\r\n return this;\r\n }\r\n MatrixPlanarizere()\r\n {\r\n super.MatrixPlanarizere();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.MatrixPlanarizere();\r\n return this;\r\n }\r\n\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n return this;\r\n }\r\n /**\r\n * 请注意:该计算会操作otherRegion的矩阵\r\n * @param {Region} otherRegion\r\n * @param {BoolOpeartionType} boolType\r\n */\r\n BooleanOper(otherRegion: Region, boolType: BoolOpeartionType): boolean\r\n {\r\n if (this.IsCoplaneTo(otherRegion))\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldOcs = this.OCS;\r\n\r\n //把形状曲线转移到二维屏幕计算后还原回来\r\n this.ShapeApplyMatrix(this.OCSInv);\r\n otherRegion.ShapeApplyMatrix(this.OCSInv);\r\n let isSuccess = this._ShapeManager.BoolOper(otherRegion._ShapeManager, boolType);\r\n this.ShapeApplyMatrix(oldOcs);\r\n this.Update();\r\n return isSuccess;\r\n }\r\n return false;\r\n }\r\n\r\n private _MeshGeometry: BufferGeometry;\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n this.UpdateGeometry();\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n this.UpdateGeometry();\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private UpdateGeometry()\r\n {\r\n let shapeList = this._ShapeManager.ShapeList;\r\n\r\n let edgePts: Vector3[] = [];\r\n let meshGeoms: BufferGeometry[] = [];\r\n\r\n const AddEdgePts = (pts: Vector2[], diffMat: Matrix4) =>\r\n {\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = AsVector3(pts[i]);\r\n p.applyMatrix4(diffMat);\r\n edgePts.push(p);\r\n if (i !== 0 && i !== pts.length - 1)\r\n edgePts.push(p);\r\n }\r\n };\r\n\r\n for (let i = 0; i < shapeList.length; i++)\r\n {\r\n let shape = shapeList[i];\r\n let geometry = new ShapeGeometry(shape.Shape, 60);//60 可以优化.\r\n let diffMat = this.OCSInv.clone().multiply(shape.Outline.Curve.OCSNoClone);\r\n geometry.applyMatrix4(diffMat);\r\n ScaleUV(geometry);\r\n meshGeoms.push(new BufferGeometry().fromGeometry(geometry));\r\n\r\n let shapeInfo = shape.Shape.extractPoints(60);\r\n\r\n let pts = shapeInfo.shape;\r\n AddEdgePts(pts, diffMat);\r\n\r\n let holePtss = shapeInfo.holes;\r\n for (let holePts of holePtss)\r\n AddEdgePts(holePts, diffMat);\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(edgePts);\r\n this._MeshGeometry = BufferGeometryUtils2.MergeBufferGeometries(meshGeoms);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n this._MeshGeometry.computeVertexNormals();\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(0));\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return new Object3D().add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n mesh,\r\n );\r\n }\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return obj.add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n mesh,\r\n );\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(0);\r\n }\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (type === RenderType.Wireframe || type === RenderType.Print)\r\n {\r\n let line = obj as LineSegments;\r\n line.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Conceptual)\r\n {\r\n for (let i = 0; i < obj.children.length; i++)\r\n {\r\n if (i % 2 === 0)\r\n {\r\n let l = obj.children[i] as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj.children[i] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n for (let m of obj.children)\r\n {\r\n let mesh = m as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._ShapeManager.Clear();\r\n this._ShapeManager.ReadFile(file);\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n this._ShapeManager.WriteFile(file);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { ConverCircleToPolyline } from \"../../Common/CurveUtils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\n\r\n/**\r\n * 把板件炸开成面域,0,1为正反面,其余的为边面(没有圆弧面)\r\n */\r\nexport function Board2Regions(br: Board): Region[]\r\n{\r\n let ocs = br.OCS;\r\n\r\n let cu = br.ContourCurve.Clone();\r\n\r\n if (cu instanceof Circle)\r\n cu = ConverCircleToPolyline(cu);\r\n\r\n let frontReg = Region.CreateFromCurves([cu.Clone()]);\r\n let regFrontOcs = ocs.clone();\r\n regFrontOcs.setPosition(br.Position.add(br.Normal.multiplyScalar(br.Thickness)));\r\n frontReg.ApplyMatrix(regFrontOcs);\r\n\r\n let backReg = Region.CreateFromCurves([cu.Flip()]);\r\n backReg.ApplyMatrix(ocs);\r\n\r\n let resultRegs = [frontReg, backReg];\r\n\r\n //edges\r\n let lines = cu.Explode().filter(c => c instanceof Line);\r\n\r\n\r\n for (let l of lines)\r\n {\r\n let rectPl = new Polyline().Rectangle(l.Length, br.Thickness);\r\n let reg = Region.CreateFromCurves([rectPl]);\r\n if (!reg) continue;\r\n\r\n let p = l.StartPoint.applyMatrix4(ocs);\r\n let x = l.GetFistDeriv(0).transformDirection(ocs);\r\n let y = br.Normal;\r\n let z = new Vector3().crossVectors(x, y);\r\n\r\n let mtx = new Matrix4().makeBasis(x, y, z).setPosition(p);\r\n reg.ApplyMatrix(mtx);\r\n resultRegs.push(reg);\r\n }\r\n\r\n return resultRegs;\r\n}\r\n","\r\n/**统一板件属性key的命名,修改值会导致无法 .xxx该属性 */\r\nexport enum EBoardKeyList\r\n{\r\n Height = \"height\",\r\n Width = \"width\",\r\n Thick = \"thickness\",\r\n RoomName = \"roomName\",\r\n CabinetName = \"cabinetName\",\r\n BrMat = \"boardName\", //板材\r\n Mat = \"material\", //材料\r\n Color = \"color\",\r\n Lines = \"lines\", //纹路\r\n ProcessGroup = \"ProcessGroup\",\r\n BigHole = \"bigHoleDir\",\r\n /**\r\n * 排钻类型,当没有定义每个边的排钻数据时,使用统一的排钻类型\r\n */\r\n DrillType = \"drillType\",\r\n ComposingFace = \"composingFace\",\r\n /**\r\n * 封边数组,定义每个边的封边信息\r\n */\r\n HighSealed = \"highSealed\",\r\n UpSealed = \"sealedUp\",\r\n DownSealed = \"sealedDown\",\r\n LeftSealed = \"sealedLeft\",\r\n RightSealed = \"sealedRight\",\r\n KnifeRad = \"knifeRadius\",\r\n SpliteHeight = \"spliteHeight\",\r\n SpliteWidth = \"spliteWidth\",\r\n SpliteThickness = \"spliteThickness\",\r\n}\r\n","import { BoardProcessOption } from \"../../UI/Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { CADFiler } from \"../../DatabaseServices/CADFiler\";\r\n\r\n/**序列化板件数据 */\r\nexport function serializeBoardData(file: CADFiler, processData: BoardProcessOption)\r\n{\r\n file.Write(processData[EBoardKeyList.RoomName]);\r\n file.Write(processData[EBoardKeyList.CabinetName]);\r\n file.Write(processData[EBoardKeyList.BrMat]);\r\n file.Write(processData[EBoardKeyList.Mat]);\r\n file.Write(processData[EBoardKeyList.Color]);\r\n file.Write(processData[EBoardKeyList.Lines]);\r\n file.Write(processData[EBoardKeyList.BigHole]);\r\n file.Write(processData[EBoardKeyList.DrillType]);\r\n file.Write(processData[EBoardKeyList.ComposingFace]);\r\n file.Write(processData[EBoardKeyList.HighSealed].length);\r\n for (let n of processData[EBoardKeyList.HighSealed])\r\n {\r\n file.Write(n.size);\r\n }\r\n file.Write(processData[EBoardKeyList.UpSealed]);\r\n file.Write(processData[EBoardKeyList.DownSealed]);\r\n file.Write(processData[EBoardKeyList.LeftSealed]);\r\n file.Write(processData[EBoardKeyList.RightSealed]);\r\n file.Write(processData.spliteHeight);\r\n file.Write(processData.spliteWidth);\r\n file.Write(processData.spliteThickness);\r\n\r\n file.Write(processData.highDrill.length);\r\n for (let n of processData.highDrill)\r\n file.Write(n);\r\n\r\n file.Write(processData.frontDrill);\r\n file.Write(processData.backDrill);\r\n file.Write(processData.remarks.length);\r\n for (let d of processData.remarks)\r\n {\r\n file.Write(d[0]);\r\n file.Write(d[1]);\r\n }\r\n}\r\n\r\n//反序列化板件数据\r\nexport function deserializationBoardData(file: CADFiler, processData: BoardProcessOption, ver: number)\r\n{\r\n processData[EBoardKeyList.RoomName] = file.Read();\r\n processData[EBoardKeyList.CabinetName] = file.Read();\r\n processData[EBoardKeyList.BrMat] = file.Read();\r\n processData[EBoardKeyList.Mat] = file.Read();\r\n processData[EBoardKeyList.Color] = file.Read();\r\n processData[EBoardKeyList.Lines] = file.Read();\r\n processData[EBoardKeyList.BigHole] = file.Read();\r\n processData[EBoardKeyList.DrillType] = file.Read();\r\n processData[EBoardKeyList.ComposingFace] = file.Read();\r\n\r\n let count = file.Read();\r\n processData[EBoardKeyList.HighSealed].length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let size = file.Read();\r\n if (ver < 4)\r\n {\r\n file.Read();\r\n }\r\n processData[EBoardKeyList.HighSealed].push({ size });\r\n }\r\n\r\n processData[EBoardKeyList.UpSealed] = file.Read();\r\n processData[EBoardKeyList.DownSealed] = file.Read();\r\n processData[EBoardKeyList.LeftSealed] = file.Read();\r\n processData[EBoardKeyList.RightSealed] = file.Read();\r\n processData.spliteHeight = file.Read();\r\n processData.spliteWidth = file.Read();\r\n processData.spliteThickness = file.Read();\r\n\r\n count = file.Read();\r\n processData.highDrill = file.ReadArray(count);\r\n\r\n processData.frontDrill = file.Read();\r\n processData.backDrill = file.Read();\r\n\r\n if (ver >= 7)\r\n {\r\n let count = file.Read();\r\n processData.remarks.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n processData.remarks.push(d);\r\n }\r\n }\r\n}\r\n","import { ExtrudeBufferGeometry, UVGenerator, Vector2 } from \"three\";\r\n\r\nclass BoardUVGenerator implements UVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n\r\n return [\r\n new Vector2(a_x, a_y),\r\n new Vector2(b_x, b_y),\r\n new Vector2(c_x, c_y)\r\n ];\r\n }\r\n generateSideWallUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number, indexD: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var a_z = vertices[indexA * 3 + 2];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var b_z = vertices[indexB * 3 + 2];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n var c_z = vertices[indexC * 3 + 2];\r\n var d_x = vertices[indexD * 3];\r\n var d_y = vertices[indexD * 3 + 1];\r\n var d_z = vertices[indexD * 3 + 2];\r\n let pts: Vector2[];\r\n if (Math.abs(a_y - b_y) < 0.01)\r\n {\r\n pts = [\r\n new Vector2(a_z - 1, a_x),\r\n new Vector2(b_z - 1, b_x),\r\n new Vector2(c_z - 1, c_x),\r\n new Vector2(d_z - 1, d_x)\r\n ];\r\n\r\n }\r\n else\r\n {\r\n pts = [\r\n new Vector2(a_z - 1, a_y),\r\n new Vector2(b_z - 1, b_y),\r\n new Vector2(c_z - 1, c_y),\r\n new Vector2(d_z - 1, d_y)\r\n ];\r\n }\r\n return pts;\r\n }\r\n}\r\n\r\nclass BoardUVGenerator2 extends BoardUVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n\r\n return [\r\n new Vector2(a_y, a_x),\r\n new Vector2(b_y, b_x),\r\n new Vector2(c_y, c_x)\r\n ];\r\n }\r\n}\r\n\r\nexport let boardUVGenerator = new BoardUVGenerator();\r\nexport let boardUVGenerator2 = new BoardUVGenerator2();\r\n","import { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ObjectId } from \"../../DatabaseServices/ObjectId\";\r\n\r\nexport enum BoardType\r\n{\r\n Layer = 0, //层板\r\n Vertical = 1, //立板\r\n Behind = 2 //背板\r\n}\r\n\r\n/**\r\n *勿随意更改属性名,若更改,需更改对应UI模态框的属性和检验方法的key\r\n *\r\n */\r\nexport interface IBaseOption\r\n{\r\n version?: number;\r\n}\r\n\r\n//板件数据,配置信息+加工信息\r\nexport interface BoardData\r\n{\r\n boardConfig: BoardConfigOption;\r\n boardProcess: BoardProcessOption;\r\n}\r\n//排钻类型\r\nexport enum DrillType\r\n{\r\n Yes = \"排\",\r\n None = \"不排\",\r\n More = \"**多种**\",\r\n Invail = \"无效配置\",\r\n}\r\n//偏心轮类型\r\nexport enum FaceDirection\r\n{\r\n Front = 0,\r\n Back = 1,\r\n}\r\n\r\n//纹路类型\r\nexport enum LinesType\r\n{\r\n /** 正纹 */\r\n Positive = 0,\r\n /** 反纹 */\r\n Reverse = 1,\r\n /** 可翻转 */\r\n CanReversal = 2,\r\n}\r\n\r\n// 排版面\r\nexport enum ComposingType\r\n{\r\n Positive, Reverse, Arbitrary\r\n}\r\n/**\r\n *背板靠上还是靠下\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum BehindHeightPositon\r\n{\r\n ForTop = \"top\", //靠上\r\n ForBottom = \"bottom\",//靠下\r\n AllHeight = \"all\" //总高\r\n}\r\n\r\n/**\r\n *板件相对位置\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum BrRelativePos\r\n{\r\n Front = \"front\",\r\n Back = \"back\",\r\n Top = \"top\",\r\n Bottom = \"bottom\",\r\n Left = \"left\",\r\n Right = \"right\",\r\n Div = \"div\"\r\n}\r\n\r\nexport interface IHighSealedItem\r\n{\r\n size: number;\r\n}\r\n\r\nexport interface BoardProcessOption extends IBaseOption\r\n{\r\n [EBoardKeyList.RoomName]?: string;\r\n [EBoardKeyList.CabinetName]?: string;//柜名\r\n [EBoardKeyList.BrMat]?: string;//板材名\r\n [EBoardKeyList.Mat]?: string;//材料\r\n [EBoardKeyList.Color]?: string;\r\n [EBoardKeyList.Lines]?: LinesType;//纹路\r\n [EBoardKeyList.ProcessGroup]?: ObjectId[];//纹路\r\n [EBoardKeyList.BigHole]?: FaceDirection;//大孔面\r\n [EBoardKeyList.DrillType]?: string;//排钻类型\r\n [EBoardKeyList.ComposingFace]?: ComposingType;//排版面\r\n [EBoardKeyList.HighSealed]?: IHighSealedItem[];//封边数据\r\n [EBoardKeyList.UpSealed]?: string;//封边上下左右\r\n [EBoardKeyList.DownSealed]?: string;\r\n [EBoardKeyList.LeftSealed]?: string;\r\n [EBoardKeyList.RightSealed]?: string;\r\n [EBoardKeyList.SpliteHeight]?: string;//拆单高/宽/厚\r\n [EBoardKeyList.SpliteWidth]?: string;\r\n [EBoardKeyList.SpliteThickness]?: string;\r\n highDrill?: string[];\r\n frontDrill: boolean;\r\n backDrill: boolean;\r\n remarks: [string, string][];\r\n useBoardProcessOption?: boolean;\r\n}\r\n\r\n/**\r\n *板件参数\r\n */\r\nexport interface BoardConfigOption extends IBaseOption\r\n{\r\n type: BoardType;\r\n name: string;\r\n thickness?: number;\r\n height?: number;\r\n width?: number;\r\n}\r\nexport interface SideBoardOption extends BoardConfigOption\r\n{\r\n spaceSize?: number; //空间宽度\r\n leftShrink: number; //左侧板内缩\r\n rightShrink: number;\r\n}\r\n\r\n/**\r\n *背板参数\r\n *\r\n * @export\r\n * @interface BehindBoardOption\r\n * @extends {BoardConfigOption}\r\n */\r\nexport interface BehindBoardOption extends BoardConfigOption\r\n{\r\n //上下左右延伸\r\n leftExt: number;\r\n rightExt: number;\r\n topExt: number;\r\n bottomExt: number;\r\n //板件位置\r\n boardPosition: BehindHeightPositon;\r\n moveDist: number;\r\n\r\n spaceSize?: number;\r\n count?: number;\r\n //板件相对位置\r\n boardRelative?: BrRelativePos;\r\n calcHeight: string;//高度表达式\r\n calcSpaceSize: string;\r\n calcMoveDist: string;\r\n}\r\n\r\n/**\r\n *层板参数\r\n *\r\n * @export\r\n * @interface LayerBoardOption\r\n * @extends {BoardConfigOption}\r\n */\r\nexport interface LayerBoardOption extends BoardConfigOption\r\n{\r\n calcHeight: string;\r\n frontShrink: number;\r\n leftShrink: number;\r\n rightShrink: number;\r\n isTotalLength: boolean;\r\n isActive: boolean;\r\n spaceSize?: number;\r\n count?: number;\r\n boardRelative?: BrRelativePos;\r\n calcSpaceSize: string;\r\n calcFrontShrink: string;\r\n calcLeftShrink: string;\r\n calcRightShrink: string;\r\n}\r\n\r\n/**\r\n *层板钉参数\r\n *\r\n * @export\r\n * @interface LayerNailOption\r\n */\r\nexport interface LayerNailOption extends IBaseOption\r\n{\r\n isDraw: boolean; //是否绘制\r\n addCount: number;//增\r\n dist: number;\r\n isGroup: boolean;\r\n isInBack: boolean; //是否在背板绘制\r\n front: number;\r\n behind: number;\r\n count: number;\r\n rad: number;\r\n length: number;\r\n depth: number;\r\n}\r\n\r\n/**\r\n *立板参数\r\n */\r\nexport interface VerticalBoardOption extends BoardConfigOption\r\n{\r\n frontShrink: number; //前缩\r\n bottomShrink: number;//底缩\r\n isTotalLength: boolean; //是否取总高\r\n isTotalWidth: boolean;//是否取总宽\r\n count?: number;\r\n spaceSize?: number;\r\n boardRelative?: BrRelativePos;\r\n calcWidth: string; //板深表达式\r\n calcHeight: string;\r\n calcSpaceSize: string;\r\n calcFrontShrink: string;\r\n calcBottomShrink: string;\r\n}\r\nexport interface TBBoardOption extends BoardConfigOption\r\n{\r\n isDraw: boolean;\r\n frontDist: number; //前距\r\n behindDistance: number; //后距\r\n isWrapSide: boolean; //顶包侧\r\n useLFData: boolean;\r\n leftExt: number;\r\n rightExt: number;\r\n offset: number;//上留或者下留\r\n isDrawFooter?: boolean;\r\n footThickness?: number; //地脚厚\r\n footBehindShrink?: number;//内缩\r\n isDrawBackFooter?: boolean;\r\n footerOffset?: number;\r\n isDrawStrengthenStrip?: boolean;\r\n divCount?: number;\r\n}\r\nexport interface SingleBoardOption extends BoardConfigOption\r\n{\r\n rotateX: number;\r\n rotateY: number;\r\n rotateZ: number;\r\n\r\n}\r\nexport enum StripType\r\n{\r\n H = \"h\",\r\n V = \"v\",\r\n}\r\nexport interface ClosingStripOption extends BoardConfigOption\r\n{\r\n boardRelative: BrRelativePos;\r\n striptype: StripType;//收口条类型\r\n frontShrink: number; //前缩\r\n isDrawFuZhu: boolean; //是否绘制辅助条\r\n fzWidth: number;\r\n fzThickness: number;\r\n}\r\n\r\nexport interface IGrooveOption extends IBaseOption\r\n{\r\n grooveAddLength: string;//槽加长/宽/高\r\n grooveAddWidth: string;\r\n grooveAddDepth: string;\r\n knifeRadius?: string;\r\n}\r\n\r\nexport interface IShinkOption extends IBaseOption\r\n{\r\n left: number;\r\n right: number;\r\n front: number;\r\n back: number;\r\n isLREqual: boolean;\r\n isFBEqual: boolean;\r\n}\r\n\r\nexport type IUiOption = {\r\n [P in (keyof T)]: T[P] extends number ? string : T[P]\r\n};\r\n\r\nexport interface INailRule extends IBaseOption\r\n{\r\n startDist: number;\r\n endDist: number;\r\n count: number;\r\n}\r\n\r\nexport interface IHightDrillOption\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\nexport enum CurtailType\r\n{\r\n PerBr = \"0\",\r\n Total = \"1\",\r\n}\r\n\r\nexport interface IBoardBatchCurtailOption extends IBaseOption\r\n{\r\n type: CurtailType;\r\n front: number;\r\n back: number;\r\n left: number;\r\n right: number;\r\n moveBrs: boolean;\r\n}\r\n\r\nexport enum BoardOpenDir\r\n{\r\n Left = 1,\r\n Right = 2,\r\n Up = 3,\r\n Down = 4,\r\n None = 0,\r\n}\r\n\r\nexport type AnyObject = { [key: string]: any; };\r\n\r\n//见光面封边设置\r\nexport interface ISmoothEdgeOption extends IBaseOption\r\n{\r\n smoothEdge: number;//见光面\r\n edge: number;//非见光面\r\n scale: number;//见光比例\r\n filterArr: string[];//\r\n}\r\n\r\nexport interface IDrawBoardAutoCutOption\r\n{\r\n isAutoCut: boolean;//是否自动切割\r\n isRelevance: boolean;//是否关联切割\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\n\r\n//将嵌入的实体绘制对象添加到当前的绘制对象(由于内嵌的实体可能被重复引用)\r\nexport function AddEntityDrawObject(obj: Object3D, embedEntity: Entity, renderType: RenderType = RenderType.Wireframe)\r\n{\r\n let embedObject = embedEntity.GetDrawObjectFromRenderType(renderType);\r\n if (embedObject.parent)\r\n obj.children.push(embedObject);//为了避免这个内嵌实体加入到不同的Object中(因为我们有PrintObject),这个写法能行,是因为我们会在其他地方更新它的矩阵\r\n else\r\n obj.add(embedObject);\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\n\r\nlet x = new Vector3();\r\nlet y = new Vector3();\r\nlet z = new Vector3();\r\nexport function IsMirror(mtx: Matrix4): boolean\r\n{\r\n mtx.extractBasis(x, y, z);\r\n // for a true orthogonal, non-mirrored base, u.cross(v) == w\r\n // If they have an opposite direction then we are mirroring\r\n const mirrorvalue = x.cross(y).dot(z);\r\n const ismirror = (mirrorvalue < 0);\r\n return ismirror;\r\n}\r\n","export const _CSGDEBUG = false;\r\n\r\n/** Epsilon used during determination of near zero distances.\r\n * @default\r\n */\r\nexport const EPS = 1e-5;\r\n\r\n// Tag factory: we can request a unique tag through CSG.getTag()\r\nexport let staticTag = 1;\r\nexport const getTag = () => staticTag++;\r\n","import { Vector3 } from \"three\";\r\n/** Class Vector3D\r\n * Represents a 3D vector with X, Y, Z coordinates.\r\n */\r\nexport class Vector3D extends Vector3\r\n{\r\n clone()\r\n {\r\n return new Vector3D(this.x, this.y, this.z) as this;\r\n }\r\n // find a vector that is somewhat perpendicular to this one\r\n randomNonParallelVector()\r\n {\r\n let x = Math.abs(this.x);\r\n let y = Math.abs(this.y);\r\n let z = Math.abs(this.z);\r\n\r\n if (x <= y && x <= z)\r\n return new Vector3D(1, 0, 0);\r\n else if (y <= x && y <= z)\r\n return new Vector3D(0, 1, 0);\r\n else\r\n return new Vector3D(0, 0, 1);\r\n }\r\n\r\n toString()\r\n {\r\n return (\r\n \"(\" +\r\n this.x.toFixed(5) +\r\n \", \" +\r\n this.y.toFixed(5) +\r\n \", \" +\r\n this.z.toFixed(5) +\r\n \")\"\r\n );\r\n }\r\n}\r\n","import { Vector3D } from \"./Vector3\";\r\nimport { Vector2 } from \"three\";\r\n\r\nexport class Vector2D extends Vector2\r\n{\r\n // extend to a 3D vector by adding a z coordinate:\r\n toVector3D(z: number)\r\n {\r\n return new Vector3D(this.x, this.y, z);\r\n }\r\n clone()\r\n {\r\n return new Vector2D(this.x, this.y) as this;\r\n }\r\n // returns the vector rotated by 90 degrees clockwise\r\n normal()\r\n {\r\n return new Vector2D(this.y, -this.x);\r\n }\r\n\r\n cross(a: Vector2)\r\n {\r\n return this.x * a.y - this.y * a.x;\r\n }\r\n}\r\n","import { getTag } from \"../constants\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Matrix4 } from \"three\";\r\n\r\n// # class Vertex\r\n// Represents a vertex of a polygon. Use your own vertex class instead of this\r\n// one to provide additional features like texture coordinates and vertex\r\n// colors. Custom vertex classes need to provide a `pos` property\r\n// `flipped()`, and `interpolate()` methods that behave analogous to the ones\r\n// FIXME: And a lot MORE (see plane.fromVector3Ds for ex) ! This is fragile code\r\n// defined by `Vertex`.\r\nexport class Vertex3D\r\n{\r\n tag: number;\r\n constructor(public pos: Vector3D, public uv = new Vector2D()) { }\r\n\r\n clone()\r\n {\r\n return new Vertex3D(this.pos.clone(), this.uv.clone());\r\n }\r\n\r\n // Return a vertex with all orientation-specific data (e.g. vertex normal) flipped. Called when the\r\n // orientation of a polygon is flipped.\r\n flipped()\r\n {\r\n return this;\r\n }\r\n\r\n getTag()\r\n {\r\n let result = this.tag;\r\n if (!result)\r\n {\r\n result = getTag();\r\n this.tag = result;\r\n }\r\n return result;\r\n }\r\n\r\n // Create a new vertex between this vertex and `other` by linearly\r\n // interpolating all properties using a parameter of `t`. Subclasses should\r\n // override this to interpolate additional properties.\r\n interpolate(other: Vertex3D, t: number)\r\n {\r\n let pos = this.pos.clone().lerp(other.pos, t);\r\n let uv = this.uv.clone().lerp(other.uv, t);\r\n return new Vertex3D(pos, uv);\r\n }\r\n\r\n // Affine transformation of vertex. Returns a new Vertex\r\n\r\n transform(matrix4x4: Matrix4)\r\n {\r\n const newpos = this.pos.clone().applyMatrix4(matrix4x4);\r\n return new Vertex3D(newpos, this.uv);\r\n }\r\n}\r\n","import { Matrix4 } from \"three\";\r\nimport { equaln, equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { getTag } from \"../constants\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\n\r\n// # class Plane\r\n// Represents a plane in 3D space.\r\nexport class Plane\r\n{\r\n normal: Vector3D;\r\n w: number;\r\n tag: number;\r\n constructor(normal: Vector3D, w: number)\r\n {\r\n this.normal = normal;\r\n this.w = w;\r\n }\r\n\r\n flipped()\r\n {\r\n return new Plane(this.normal.clone().negate(), -this.w);\r\n }\r\n\r\n getTag()\r\n {\r\n if (!this.tag)\r\n this.tag = getTag();\r\n return this.tag;\r\n }\r\n\r\n coplanarTo(plane: Plane)\r\n {\r\n return equalv3(this.normal, plane.normal, 1e-4) && equaln(this.w, plane.w, 1e-4);\r\n }\r\n\r\n transform(matrix4x4: Matrix4)\r\n {\r\n // get two vectors in the plane:\r\n let r = this.normal.randomNonParallelVector();\r\n let u = this.normal.clone().cross(r);\r\n let v = this.normal.clone().cross(u);\r\n // get 3 points in the plane:\r\n let point1 = this.normal.clone().multiplyScalar(this.w);\r\n let point2 = u.add(point1);\r\n let point3 = v.add(point1);\r\n // transform the points:\r\n point1.applyMatrix4(matrix4x4);\r\n point2.applyMatrix4(matrix4x4);\r\n point3.applyMatrix4(matrix4x4);\r\n // and create a new plane from the transformed points:\r\n let newplane = Plane.fromVector3Ds(point1, point2, point3);\r\n if (IsMirror(matrix4x4))\r\n {\r\n // the transform is mirroring\r\n // We should mirror the plane:\r\n newplane = newplane.flipped();\r\n }\r\n return newplane;\r\n }\r\n\r\n splitLineBetweenPoints(p1: Vertex3D, p2: Vertex3D): Vertex3D\r\n {\r\n let direction = p2.pos.clone().sub(p1.pos);\r\n let labda = (this.w - this.normal.dot(p1.pos)) / this.normal.dot(direction);\r\n if (isNaN(labda)) labda = 0;\r\n if (labda > 1) labda = 1;\r\n if (labda < 0) labda = 0;\r\n let pos = p1.pos.clone().add(direction.multiplyScalar(labda));\r\n let uv = p1.uv.clone().lerp(p2.uv, labda);\r\n return new Vertex3D(pos, uv);\r\n }\r\n\r\n static fromVector3Ds(a: Vector3D, b: Vector3D, c: Vector3D)\r\n {\r\n let n = b.clone()\r\n .sub(a)\r\n .cross(c.clone().sub(a))\r\n .normalize();\r\n return new Plane(n, n.dot(a));\r\n }\r\n}\r\n","import { _CSGDEBUG, EPS } from \"../constants\";\r\nimport { Plane } from \"./Plane\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { Matrix4 } from \"three\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\n\r\nexport enum Type\r\n{\r\n CoplanarFront = 0,\r\n CoplanarBack = 1,\r\n Front = 2,\r\n Back = 3,\r\n Spanning = 4,\r\n}\r\n\r\n\r\ninterface SplitPolygonData\r\n{\r\n type: Type;\r\n front: Polygon;\r\n back: Polygon;\r\n}\r\n\r\n/** Class Polygon\r\n * Represents a convex polygon. The vertices used to initialize a polygon must\r\n * be coplanar and form a convex loop. They do not have to be `Vertex`\r\n * instances but they must behave similarly (duck typing can be used for\r\n * customization).\r\n *
\r\n * Each convex polygon has a `shared` property, which is shared between all\r\n * polygons that are clones of each other or were split from the same polygon.\r\n * This can be used to define per-polygon properties (such as surface color).\r\n *
\r\n * The plane of the polygon is calculated from the vertex coordinates if not provided.\r\n * The plane can alternatively be passed as the third argument to avoid calculations.\r\n *\r\n *表示凸多边形。 用于初始化多边形的顶点必须共面并形成凸环。\r\n *多边形是彼此克隆或从同一多边形分割的多边形。\r\n *这可用于定义每个多边形属性(例如表面颜色)。\r\n */\r\nexport class Polygon\r\n{\r\n cachedBoundingSphere: [Vector3D, number];\r\n cachedBoundingBox: [Vector3D, Vector3D];\r\n constructor(public vertices: Vertex3D[], public plane?: Plane)\r\n {\r\n if (!plane)\r\n this.plane = Plane.fromVector3Ds(vertices[0].pos, vertices[1].pos, vertices[2].pos);\r\n\r\n if (_CSGDEBUG)\r\n if (!this.checkIfConvex()) throw new Error(\"Not convex!\");\r\n }\r\n\r\n /** Check whether the polygon is convex. (it should be, otherwise we will get unexpected results)*/\r\n checkIfConvex(): boolean\r\n {\r\n return Polygon.verticesConvex(this.vertices, this.plane.normal);\r\n }\r\n\r\n // returns an array with a Vector3D (center point) and a radius\r\n\r\n boundingSphere()\r\n {\r\n if (!this.cachedBoundingSphere)\r\n {\r\n let box = this.boundingBox();\r\n let middle = box[0].clone().add(box[1]).multiplyScalar(0.5);\r\n let radius3 = box[1].clone().sub(middle);\r\n let radius = radius3.length();\r\n this.cachedBoundingSphere = [middle, radius];\r\n }\r\n return this.cachedBoundingSphere;\r\n }\r\n\r\n // returns an array of two Vector3Ds (minimum coordinates and maximum coordinates)\r\n\r\n boundingBox(): Vector3D[]\r\n {\r\n if (!this.cachedBoundingBox)\r\n {\r\n let minpoint: Vector3D;\r\n let maxpoint: Vector3D;\r\n let vertices = this.vertices;\r\n let numvertices = vertices.length;\r\n if (numvertices === 0)\r\n minpoint = new Vector3D(0, 0, 0);\r\n else\r\n minpoint = vertices[0].pos.clone();\r\n maxpoint = minpoint.clone();\r\n for (let i = 1; i < numvertices; i++)\r\n {\r\n let point = vertices[i].pos;\r\n minpoint.min(point);\r\n maxpoint.max(point);\r\n }\r\n this.cachedBoundingBox = [minpoint, maxpoint];\r\n }\r\n return this.cachedBoundingBox;\r\n }\r\n\r\n flipped()\r\n {\r\n let newvertices = this.vertices.map(v => v.flipped());\r\n newvertices.reverse();\r\n let newplane = this.plane.flipped();\r\n return new Polygon(newvertices, newplane);\r\n }\r\n\r\n // Affine transformation of polygon. Returns a new Polygon\r\n transform(matrix4x4: Matrix4)\r\n {\r\n let newvertices = this.vertices.map(v => v.transform(matrix4x4));\r\n let newplane = this.plane.transform(matrix4x4);\r\n if (IsMirror(matrix4x4))\r\n {\r\n // need to reverse the vertex order\r\n // in order to preserve the inside/outside orientation:\r\n newvertices.reverse();\r\n }\r\n return new Polygon(newvertices, newplane);\r\n }\r\n\r\n splitByPlane(plane: Plane): SplitPolygonData\r\n {\r\n let result: SplitPolygonData = { type: null, front: null, back: null };\r\n // cache in local lets (speedup):\r\n let planeNormal = plane.normal;\r\n let vertices = this.vertices;\r\n let numVertices = vertices.length;\r\n if (this.plane.coplanarTo(plane))\r\n {\r\n result.type = Type.CoplanarFront;\r\n }\r\n else\r\n {\r\n let thisW = plane.w;\r\n let hasFront = false;\r\n let hasBack = false;\r\n let vertexIsBack: boolean[] = [];\r\n let MINEPS = -EPS;\r\n for (let i = 0; i < numVertices; i++)\r\n {\r\n let t = planeNormal.dot(vertices[i].pos) - thisW;\r\n let isBack = t < 0;\r\n vertexIsBack.push(isBack);\r\n if (t > EPS) hasFront = true;\r\n if (t < MINEPS) hasBack = true;\r\n }\r\n if (!hasFront && !hasBack)\r\n {\r\n // all points coplanar\r\n let t = planeNormal.dot(this.plane.normal);\r\n result.type = t >= 0 ? Type.CoplanarFront : Type.CoplanarBack;\r\n }\r\n else if (!hasBack)\r\n result.type = Type.Front;\r\n else if (!hasFront)\r\n result.type = Type.Back;\r\n else\r\n {\r\n result.type = Type.Spanning;\r\n let frontVertices: Vertex3D[] = [];\r\n let backVertices: Vertex3D[] = [];\r\n let isBack = vertexIsBack[0];\r\n for (\r\n let vertexIndex = 0;\r\n vertexIndex < numVertices;\r\n vertexIndex++\r\n )\r\n {\r\n let vertex = vertices[vertexIndex];\r\n let nextVertexindex = vertexIndex + 1;\r\n if (nextVertexindex >= numVertices) nextVertexindex = 0;\r\n let nextIsBack = vertexIsBack[nextVertexindex];\r\n if (isBack === nextIsBack)\r\n {\r\n // line segment is on one side of the plane:\r\n if (isBack)\r\n backVertices.push(vertex);\r\n else\r\n frontVertices.push(vertex);\r\n }\r\n else\r\n {\r\n let intersectionVertex = plane.splitLineBetweenPoints(vertex, vertices[nextVertexindex]);\r\n if (isBack)\r\n {\r\n backVertices.push(vertex);\r\n backVertices.push(intersectionVertex);\r\n frontVertices.push(intersectionVertex);\r\n }\r\n else\r\n {\r\n frontVertices.push(vertex);\r\n frontVertices.push(intersectionVertex);\r\n backVertices.push(intersectionVertex);\r\n }\r\n }\r\n isBack = nextIsBack;\r\n } // for vertexindex\r\n // remove duplicate vertices:\r\n let EPS_SQUARED = EPS * EPS;\r\n arrayRemoveDuplicateBySort(backVertices, (v1, v2) =>\r\n {\r\n return v1.pos.distanceToSquared(v2.pos) < EPS_SQUARED;\r\n });\r\n arrayRemoveDuplicateBySort(frontVertices, (v1, v2) =>\r\n {\r\n return v1.pos.distanceToSquared(v2.pos) < EPS_SQUARED;\r\n });\r\n if (frontVertices.length >= 3)\r\n result.front = new Polygon(frontVertices, this.plane);\r\n if (backVertices.length >= 3)\r\n result.back = new Polygon(backVertices, this.plane);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n static verticesConvex(vertices: Vertex3D[], planenormal: Vector3D)\r\n {\r\n let count = vertices.length;\r\n if (count < 3) return false;\r\n\r\n let prevPrevPos = vertices[count - 2].pos;\r\n let prevPos = vertices[count - 1].pos;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let pos = vertices[i].pos;\r\n if (!Polygon.isConvexPoint(prevPrevPos, prevPos, pos, planenormal))\r\n return false;\r\n\r\n prevPrevPos = prevPos;\r\n prevPos = pos;\r\n }\r\n return true;\r\n }\r\n\r\n // 计算3点是否凸角\r\n static isConvexPoint(prevpoint: Vector3D, point: Vector3D, nextpoint: Vector3D, normal: Vector3D)\r\n {\r\n let crossproduct = point.clone().sub(prevpoint).cross(nextpoint.clone().sub(point));\r\n let crossdotnormal = crossproduct.dot(normal);\r\n return crossdotnormal >= 0;\r\n }\r\n}\r\n","import { EPS, _CSGDEBUG } from \"./constants\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Polygon, Type } from \"./math/Polygon3\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\n\r\n// # class PolygonTreeNode\r\n// This class manages hierarchical splits of polygons\r\n// At the top is a root node which doesn hold a polygon, only child PolygonTreeNodes\r\n// Below that are zero or more 'top' nodes; each holds a polygon. The polygons can be in different planes\r\n// splitByPlane() splits a node by a plane. If the plane intersects the polygon, two new child nodes\r\n// are created holding the splitted polygon.\r\n// getPolygons() retrieves the polygon from the tree. If for PolygonTreeNode the polygon is split but\r\n// the two split parts (child nodes) are still intact, then the unsplit polygon is returned.\r\n// This ensures that we can safely split a polygon into many fragments. If the fragments are untouched,\r\n// getPolygons() will return the original unsplit polygon instead of the fragments.\r\n// remove() removes a polygon from the tree. Once a polygon is removed, the parent polygons are invalidated\r\n// since they are no longer intact.\r\n// constructor creates the root node:\r\n//此类管理多边形的层次分割\r\n//顶部是一个根节点,它不包含多边形,只有子PolygonTreeNodes\r\n//下面是零个或多个“顶部”节点; 每个都有一个多边形。 多边形可以位于不同的平面中\r\n// splitByPlane()按平面拆分节点。 如果平面与多边形相交,则会有两个新的子节点\r\n//创建持有分割多边形。\r\n// getPolygons()从树中检索多边形。 如果对于PolygonTreeNode,则多边形被拆分但是\r\n//两个分割部分(子节点)仍然完好无损,然后返回未分割的多边形。\r\n//这确保我们可以安全地将多边形拆分为多个片段。 如果碎片未受影响,\r\n// getPolygons()将返回原始的未分割多边形而不是片段。\r\n// remove()从树中删除多边形。 删除多边形后,父多边形将失效\r\n//因为它们不再完好无损\r\n//构造函数创建根节点:\r\nclass PolygonTreeNode\r\n{\r\n parent: PolygonTreeNode;\r\n children: PolygonTreeNode[] = [];\r\n polygon: Polygon;\r\n removed: boolean = false;\r\n constructor(polygon?: Polygon)\r\n {\r\n this.polygon = polygon;\r\n }\r\n\r\n // fill the tree with polygons. Should be called on the root node only; child nodes must\r\n // always be a derivate (split) of the parent node.\r\n addPolygons(polygons: Polygon[])\r\n {\r\n // new polygons can only be added to root node; children can only be splitted polygons\r\n if (!this.isRootNode())\r\n throw new Error(\"Assertion failed\");\r\n\r\n for (let polygon of polygons)\r\n this.addChild(polygon);\r\n }\r\n\r\n // remove a node\r\n // - the siblings become toplevel nodes\r\n // - the parent is removed recursively\r\n\r\n remove()\r\n {\r\n if (this.removed) return;\r\n\r\n this.removed = true;\r\n\r\n if (_CSGDEBUG)\r\n {\r\n if (this.isRootNode()) throw new Error(\"Assertion failed\"); // can't remove root node\r\n if (this.children.length) throw new Error(\"Assertion failed\"); // we shouldn't remove nodes with children\r\n }\r\n\r\n // remove ourselves from the parent's children list:\r\n let parentschildren = this.parent.children;\r\n let i = parentschildren.indexOf(this);\r\n if (i < 0) throw new Error(\"Assertion failed\");\r\n parentschildren.splice(i, 1);\r\n\r\n // invalidate the parent's polygon, and of all parents above it:\r\n this.parent.recursivelyInvalidatePolygon();\r\n }\r\n\r\n isRemoved()\r\n {\r\n return this.removed;\r\n }\r\n\r\n isRootNode()\r\n {\r\n return !this.parent;\r\n }\r\n\r\n // invert all polygons in the tree. Call on the root node\r\n\r\n invert()\r\n {\r\n if (!this.isRootNode()) throw new Error(\"Assertion failed\"); // can only call this on the root node\r\n this.invertSub();\r\n }\r\n\r\n getPolygon(): Polygon\r\n {\r\n if (!this.polygon) throw new Error(\"Assertion failed\"); // doesn't have a polygon, which means that it has been broken down\r\n return this.polygon;\r\n }\r\n\r\n getPolygons(outPolygons: Polygon[] = []): Polygon[]\r\n {\r\n let children: PolygonTreeNode[] = [this];\r\n let queue = [children];\r\n for (let i = 0; i < queue.length; ++i)\r\n {\r\n // queue size can change in loop, don't cache length\r\n children = queue[i];\r\n for (let node of children)\r\n {\r\n if (node.polygon)\r\n // the polygon hasn't been broken yet. We can ignore the children and return our polygon:\r\n outPolygons.push(node.polygon);\r\n else\r\n // our polygon has been split up and broken, so gather all subpolygons from the children\r\n queue.push(node.children);\r\n }\r\n }\r\n\r\n return outPolygons;\r\n }\r\n\r\n // split the node by a plane; add the resulting nodes to the frontnodes and backnodes array\r\n // If the plane doesn't intersect the polygon, the 'this' object is added to one of the arrays\r\n // If the plane does intersect the polygon, two new child nodes are created for the front and back fragments,\r\n // and added to both arrays.\r\n\r\n splitByPlane(\r\n plane: Plane,\r\n coplanarFrontNodes: PolygonTreeNode[],\r\n coplanarBackNodes: PolygonTreeNode[],\r\n frontNodes: PolygonTreeNode[],\r\n backNodes: PolygonTreeNode[]\r\n )\r\n {\r\n if (this.children.length)\r\n {\r\n let queue = [this.children];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n // queue.length can increase, do not cache\r\n let nodes = queue[i];\r\n for (let j = 0, l = nodes.length; j < l; j++)\r\n {\r\n // ok to cache length\r\n let node = nodes[j];\r\n if (node.children.length)\r\n queue.push(node.children);\r\n else\r\n {\r\n // no children. Split the polygon:\r\n node.splitByPlaneNotChildren(plane, coplanarFrontNodes, coplanarBackNodes, frontNodes, backNodes);\r\n }\r\n }\r\n }\r\n }\r\n else\r\n {\r\n this.splitByPlaneNotChildren(plane, coplanarFrontNodes, coplanarBackNodes, frontNodes, backNodes);\r\n }\r\n }\r\n\r\n // only to be called for nodes with no children\r\n // 仅用于没有子节点的节点\r\n private splitByPlaneNotChildren(\r\n plane: Plane,\r\n coplanarFrontNodes: PolygonTreeNode[],\r\n coplanarBackNodes: PolygonTreeNode[],\r\n frontNodes: PolygonTreeNode[],\r\n backNodes: PolygonTreeNode[]\r\n )\r\n {\r\n if (!this.polygon) return;\r\n\r\n let polygon = this.polygon;\r\n let bound = polygon.boundingSphere();\r\n let sphereradius = bound[1] + EPS; // FIXME Why add imprecision?\r\n let planenormal = plane.normal;\r\n let spherecenter = bound[0];\r\n let d = planenormal.dot(spherecenter) - plane.w;\r\n if (d > sphereradius)\r\n frontNodes.push(this);\r\n else if (d < -sphereradius)\r\n backNodes.push(this);\r\n else\r\n {\r\n let splitresult = polygon.splitByPlane(plane);\r\n switch (splitresult.type)\r\n {\r\n case Type.CoplanarFront:\r\n coplanarFrontNodes.push(this);\r\n break;\r\n\r\n case Type.CoplanarBack:\r\n coplanarBackNodes.push(this);\r\n break;\r\n\r\n case Type.Front:\r\n frontNodes.push(this);\r\n break;\r\n\r\n case Type.Back:\r\n backNodes.push(this);\r\n break;\r\n\r\n case Type.Spanning:\r\n if (splitresult.front)\r\n {\r\n let frontNode = this.addChild(splitresult.front);\r\n frontNodes.push(frontNode);\r\n }\r\n if (splitresult.back)\r\n {\r\n let backNode = this.addChild(splitresult.back);\r\n backNodes.push(backNode);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // add child to a node\r\n // this should be called whenever the polygon is split\r\n // a child should be created for every fragment of the split polygon\r\n // returns the newly created child\r\n addChild(polygon: Polygon): PolygonTreeNode\r\n {\r\n let newchild = new PolygonTreeNode(polygon);\r\n newchild.parent = this;\r\n this.children.push(newchild);\r\n return newchild;\r\n }\r\n\r\n invertSub()\r\n {\r\n let queue: PolygonTreeNode[][] = [[this]];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n let children = queue[i];\r\n for (let j = 0, l = children.length; j < l; j++)\r\n {\r\n let node = children[j];\r\n if (node.polygon)\r\n node.polygon = node.polygon.flipped();\r\n queue.push(node.children);\r\n }\r\n }\r\n }\r\n\r\n recursivelyInvalidatePolygon()\r\n {\r\n let node: PolygonTreeNode = this;\r\n while (node.polygon)\r\n {\r\n node.polygon = null;\r\n if (node.parent)\r\n node = node.parent;\r\n }\r\n }\r\n}\r\n\r\n// # class Tree\r\n// This is the root of a BSP tree\r\n// We are using this separate class for the root of the tree, to hold the PolygonTreeNode root\r\n// The actual tree is kept in this.rootnode\r\nexport class Tree\r\n{\r\n polygonTree = new PolygonTreeNode();\r\n rootNode = new Node(null);\r\n constructor(polygons: Polygon[])\r\n {\r\n this.addPolygons(polygons);\r\n }\r\n\r\n invert()\r\n {\r\n this.polygonTree.invert();\r\n this.rootNode.invert();\r\n }\r\n\r\n // Remove all polygons in this BSP tree that are inside the other BSP tree\r\n /**\r\n * this 减去 tree 删除此BSP树中位于其他BSP树内的所有多边形\r\n * @param tree 不会被修改\r\n * @param [alsoRemovecoplanarFront=false] 同时删除共面\r\n */\r\n clipTo(tree: Tree, alsoRemovecoplanarFront = false)\r\n {\r\n this.rootNode.clipTo(tree, alsoRemovecoplanarFront);\r\n }\r\n\r\n allPolygons()\r\n {\r\n return this.polygonTree.getPolygons();\r\n }\r\n\r\n addPolygons(polygons: Polygon[])\r\n {\r\n if (polygons.length > 1e4)\r\n return;\r\n let polygonTreeNodes = polygons.map((p) => this.polygonTree.addChild(p));\r\n this.rootNode.addPolygonTreeNodes(polygonTreeNodes);\r\n }\r\n}\r\n\r\n// # class Node\r\n// Holds a node in a BSP tree. A BSP tree is built from a collection of polygons\r\n// by picking a polygon to split along.\r\n// Polygons are not stored directly in the tree, but in PolygonTreeNodes, stored in\r\n// this.polygontreenodes. Those PolygonTreeNodes are children of the owning\r\n// Tree.polygonTree\r\n// This is not a leafy BSP tree since there is\r\n// no distinction between internal and leaf nodes.\r\nclass Node\r\n{\r\n plane: Plane;\r\n front: Node;\r\n back: Node;\r\n polygonTreeNodes: PolygonTreeNode[] = [];\r\n parent: Node;\r\n constructor(parent: Node)\r\n {\r\n this.parent = parent;\r\n }\r\n\r\n // Convert solid space to empty space and empty space to solid space.\r\n invert()\r\n {\r\n let queue: Node[] = [this];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n let node = queue[i];\r\n if (node.plane) node.plane = node.plane.flipped();\r\n if (node.front) queue.push(node.front);\r\n if (node.back) queue.push(node.back);\r\n let temp = node.front;\r\n node.front = node.back;\r\n node.back = temp;\r\n }\r\n }\r\n\r\n // clip polygontreenodes to our plane\r\n // calls remove() for all clipped PolygonTreeNodes\r\n //将polygontreenodes剪辑到我们的飞机上\r\n //为所有剪切的PolygonTreeNodes调用remove()\r\n clipPolygons(polygonTreeNodes: PolygonTreeNode[], alsoRemoveCoplanarFront: boolean)\r\n {\r\n interface D\r\n {\r\n node: Node;\r\n polygonTreeNodes: PolygonTreeNode[];\r\n }\r\n\r\n let args: D = { node: this, polygonTreeNodes };\r\n let stack: D[] = [];\r\n\r\n do\r\n {\r\n let node = args.node;\r\n let polygonTreeNodes1 = args.polygonTreeNodes;\r\n\r\n // begin \"function\"\r\n if (node.plane)\r\n {\r\n let backnodes: PolygonTreeNode[] = [];\r\n let frontnodes: PolygonTreeNode[] = [];\r\n let coplanarfrontnodes = alsoRemoveCoplanarFront ? backnodes : frontnodes;\r\n let plane = node.plane;\r\n for (let node1 of polygonTreeNodes1)\r\n {\r\n if (!node1.isRemoved())\r\n node1.splitByPlane(plane, coplanarfrontnodes, backnodes, frontnodes, backnodes);\r\n }\r\n\r\n if (node.front && frontnodes.length > 0)\r\n stack.push({ node: node.front, polygonTreeNodes: frontnodes });\r\n\r\n let numbacknodes = backnodes.length;\r\n if (node.back && numbacknodes > 0)\r\n stack.push({ node: node.back, polygonTreeNodes: backnodes });\r\n else\r\n {\r\n // there's nothing behind this plane. Delete the nodes behind this plane:\r\n // 这架飞机背后什么也没有。 删除此平面后面的节点:\r\n for (let i = 0; i < numbacknodes; i++)\r\n backnodes[i].remove();\r\n }\r\n }\r\n args = stack.pop();\r\n }\r\n while (args);\r\n }\r\n\r\n // Remove all polygons in this BSP tree that are inside the other BSP tree\r\n // `tree`.\r\n clipTo(tree: Tree, alsoRemovecoplanarFront: boolean)\r\n {\r\n let node: Node = this;\r\n let stack: Node[] = [];\r\n do\r\n {\r\n if (node.polygonTreeNodes.length > 0)\r\n {\r\n tree.rootNode.clipPolygons(\r\n node.polygonTreeNodes,\r\n alsoRemovecoplanarFront\r\n );\r\n }\r\n if (node.front) stack.push(node.front);\r\n if (node.back) stack.push(node.back);\r\n node = stack.pop();\r\n }\r\n while (node);\r\n }\r\n\r\n addPolygonTreeNodes(polygonTreeNodes: PolygonTreeNode[])\r\n {\r\n interface D\r\n {\r\n node: Node;\r\n polygontreenodes: PolygonTreeNode[];\r\n }\r\n let args: D = { node: this, polygontreenodes: polygonTreeNodes };\r\n let stack: D[] = [];\r\n do\r\n {\r\n let node = args.node;\r\n polygonTreeNodes = args.polygontreenodes;\r\n\r\n if (polygonTreeNodes.length === 0)\r\n {\r\n args = stack.pop();\r\n continue;\r\n }\r\n if (!node.plane)\r\n {\r\n let bestplane = polygonTreeNodes[Math.floor(polygonTreeNodes.length / 2)].getPolygon().plane;\r\n node.plane = bestplane;\r\n }\r\n let frontNodes: PolygonTreeNode[] = [];\r\n let backNodes: PolygonTreeNode[] = [];\r\n\r\n for (let i = 0, n = polygonTreeNodes.length; i < n; ++i)\r\n {\r\n polygonTreeNodes[i].splitByPlane(\r\n node.plane,\r\n node.polygonTreeNodes,\r\n backNodes,\r\n frontNodes,\r\n backNodes\r\n );\r\n }\r\n\r\n if (frontNodes.length > 0)\r\n {\r\n if (!node.front) node.front = new Node(node);\r\n stack.push({ node: node.front, polygontreenodes: frontNodes });\r\n }\r\n if (backNodes.length > 0)\r\n {\r\n if (!node.back) node.back = new Node(node);\r\n stack.push({ node: node.back, polygontreenodes: backNodes });\r\n }\r\n\r\n args = stack.pop();\r\n }\r\n while (args);\r\n }\r\n\r\n getParentPlaneNormals(normals: Vector3D[], maxdepth: number)\r\n {\r\n if (maxdepth > 0)\r\n {\r\n if (this.parent)\r\n {\r\n normals.push(this.parent.plane.normal);\r\n this.parent.getParentPlaneNormals(normals, maxdepth - 1);\r\n }\r\n }\r\n }\r\n}\r\n","\r\n// //////////////////////////////\r\n// ## class fuzzyFactory\r\n// This class acts as a factory for objects. We can search for an object with approximately\r\n// the desired properties (say a rectangle with width 2 and height 1)\r\n// The lookupOrCreate() method looks for an existing object (for example it may find an existing rectangle\r\n// with width 2.0001 and height 0.999. If no object is found, the user supplied callback is\r\n// called, which should generate a new object. The new object is inserted into the database\r\n// so it can be found by future lookupOrCreate() calls.\r\n// Constructor:\r\n// numdimensions: the number of parameters for each object\r\n// for example for a 2D rectangle this would be 2\r\n// tolerance: The maximum difference for each parameter allowed to be considered a match\r\nexport class FuzzyFactory\r\n{\r\n lookuptable: {};\r\n multiplier: number;\r\n constructor(numdimensions: number, tolerance: number)\r\n {\r\n this.lookuptable = {};\r\n this.multiplier = 1.0 / tolerance;\r\n }\r\n\r\n // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */});\r\n // Performs a fuzzy lookup of the object with the specified elements.\r\n // If found, returns the existing object\r\n // If not found, calls the supplied callback function which should create a new object with\r\n // the specified properties. This object is inserted in the lookup database.\r\n lookupOrCreate(els: number[], object: T): T\r\n {\r\n let hash = \"\";\r\n let multiplier = this.multiplier;\r\n for (let el of els)\r\n {\r\n let valueQuantized = Math.round(el * multiplier);\r\n hash += valueQuantized + \"/\";\r\n }\r\n if (hash in this.lookuptable) return this.lookuptable[hash];\r\n else\r\n {\r\n let hashparts = els.map(el =>\r\n {\r\n let q0 = Math.floor(el * multiplier);\r\n let q1 = q0 + 1;\r\n return [\"\" + q0 + \"/\", \"\" + q1 + \"/\"];\r\n });\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n hash = \"\";\r\n hashparts.forEach(hashpart =>\r\n {\r\n hash += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this.lookuptable[hash] = object;\r\n }\r\n return object;\r\n }\r\n }\r\n}\r\n","import { FuzzyFactory } from \"./FuzzyFactory\";\r\nimport { EPS } from \"./constants\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\n\r\nexport class FuzzyCSGFactory\r\n{\r\n vertexfactory = new FuzzyFactory(3, EPS);\r\n planefactory = new FuzzyFactory(4, EPS);\r\n constructor() { }\r\n\r\n getVertex(sourcevertex: Vertex3D): Vertex3D\r\n {\r\n let elements = [sourcevertex.pos.x, sourcevertex.pos.y, sourcevertex.pos.z];\r\n let result = this.vertexfactory.lookupOrCreate(elements, sourcevertex);\r\n return result;\r\n }\r\n\r\n getPlane(sourceplane: Plane): Plane\r\n {\r\n let elements: number[] = [sourceplane.normal.x, sourceplane.normal.y, sourceplane.normal.z, sourceplane.w];\r\n let result = this.planefactory.lookupOrCreate(elements, sourceplane);\r\n return result;\r\n }\r\n\r\n getPolygon(sourcePolygon: Polygon, outputPolygon = sourcePolygon): Polygon\r\n {\r\n let newPlane = this.getPlane(sourcePolygon.plane);\r\n let newVertices = sourcePolygon.vertices.map(vertex => this.getVertex(vertex));\r\n // two vertices that were originally very close may now have become\r\n // truly identical (referring to the same Vertex object).\r\n // Remove duplicate vertices:\r\n let newVerticesDedup: Vertex3D[] = [];//新的顶点列表(已过滤重复)\r\n if (newVertices.length > 0)\r\n {\r\n let prevVertexTag = newVertices[newVertices.length - 1].getTag();\r\n for (let vertex of newVertices)\r\n {\r\n let vertextag = vertex.getTag();\r\n if (vertextag !== prevVertexTag)\r\n newVerticesDedup.push(vertex);\r\n prevVertexTag = vertextag;\r\n }\r\n }\r\n // If it's degenerate, remove all vertices:\r\n if (newVerticesDedup.length < 3)\r\n newVerticesDedup = [];\r\n\r\n outputPolygon.vertices = newVertices;\r\n outputPolygon.plane = newPlane;\r\n return outputPolygon;\r\n }\r\n}\r\n","import { FuzzyCSGFactory } from \"../FuzzyFactory3d\";\r\nimport { FuzzyCAGFactory } from \"../FuzzyFactory2d\";\r\nimport { CSG } from \"../CSG\";\r\nimport { CAG } from \"../CAG\";\r\nimport { EPS } from \"../constants\";\r\nimport { Polygon } from \"../math/Polygon3\";\r\n\r\n/**\r\n * Returns a cannoicalized version of the input csg : ie every very close\r\n * points get deduplicated\r\n * \r\n * 返回删除重复点的csg,重复点将被合并\r\n */\r\nexport function canonicalizeCSG(csg: CSG): CSG\r\n{\r\n const factory = new FuzzyCSGFactory();\r\n let result = CSGFromCSGFuzzyFactory(factory, csg);\r\n result.isCanonicalized = true;\r\n result.isRetesselated = csg.isRetesselated;\r\n return result;\r\n}\r\n\r\nexport function canonicalizeCAG(cag: CAG)\r\n{\r\n let factory = new FuzzyCAGFactory();\r\n let result = CAGFromCAGFuzzyFactory(factory, cag);\r\n result.isCanonicalized = true;\r\n return result;\r\n}\r\n\r\nexport function CSGFromCSGFuzzyFactory(factory: FuzzyCSGFactory, sourcecsg: CSG)\r\n{\r\n let newpolygons: Polygon[] = sourcecsg.polygons.filter(poly =>\r\n {\r\n return factory.getPolygon(poly).vertices.length >= 3;\r\n });\r\n return new CSG(newpolygons);\r\n}\r\n\r\nfunction CAGFromCAGFuzzyFactory(factory: FuzzyCAGFactory, sourcecag: CAG)\r\n{\r\n let newsides = sourcecag.sides\r\n .map(side => factory.getSide(side))\r\n // remove bad sides (mostly a user input issue)\r\n .filter((side) => side.length() > EPS);\r\n return new CAG(newsides);\r\n};\r\n","import { Vector3D } from \"../math/Vector3\";\r\nimport { CSG } from \"../CSG\";\r\n/**\r\n * Returns an array of Vector3D, providing minimum coordinates and maximum coordinates\r\n * of this solid.\r\n * @example\r\n * let bounds = A.getBounds()\r\n * let minX = bounds[0].x\r\n */\r\nexport function bounds(csg: CSG): Vector3D[]\r\n{\r\n if (!csg.cachedBoundingBox)\r\n {\r\n let minpoint: Vector3D;\r\n let maxpoint: Vector3D;\r\n let polygons = csg.polygons;\r\n let numpolygons = polygons.length;\r\n for (let i = 0; i < numpolygons; i++)\r\n {\r\n let polygon = polygons[i];\r\n let bounds = polygon.boundingBox();\r\n if (i === 0)\r\n {\r\n minpoint = bounds[0].clone();\r\n maxpoint = bounds[1].clone();\r\n }\r\n else\r\n {\r\n minpoint.min(bounds[0]);\r\n maxpoint.max(bounds[1]);\r\n }\r\n }\r\n // FIXME: not ideal, we are mutating the input, we need to move some of it out\r\n csg.cachedBoundingBox = [minpoint, maxpoint];\r\n }\r\n return csg.cachedBoundingBox;\r\n};\r\n","import { Vector2D } from \"./math/Vector2\";\r\n\r\nexport function fnNumberSort(a, b)\r\n{\r\n return a - b;\r\n}\r\n\r\nexport const solve2Linear = function (a: number, b: number, c: number, d: number, u: number, v: number)\r\n{\r\n let det = a * d - b * c;\r\n let invdet = 1.0 / det;\r\n let x = u * d - b * v;\r\n let y = -u * c + a * v;\r\n x *= invdet;\r\n y *= invdet;\r\n return [x, y];\r\n};\r\n\r\nexport function insertSorted(array: T[], element: T, comparefunc: (a: T, b: T) => number)\r\n{\r\n let leftbound = 0;\r\n let rightbound = array.length;\r\n while (rightbound > leftbound)\r\n {\r\n let testindex = Math.floor((leftbound + rightbound) / 2);\r\n let testelement = array[testindex];\r\n let compareresult = comparefunc(element, testelement);\r\n if (compareresult > 0)\r\n // element > testelement\r\n leftbound = testindex + 1;\r\n else\r\n rightbound = testindex;\r\n }\r\n array.splice(leftbound, 0, element);\r\n}\r\n\r\n// Get the x coordinate of a point with a certain y coordinate, interpolated between two\r\n// points (CSG.Vector2D).\r\n// Interpolation is robust even if the points have the same y coordinate\r\nexport function interpolateBetween2DPointsForY(point1: Vector2D, point2: Vector2D, y: number)\r\n{\r\n let f1 = y - point1.y;\r\n let f2 = point2.y - point1.y;\r\n if (f2 < 0)\r\n {\r\n f1 = -f1;\r\n f2 = -f2;\r\n }\r\n let t: number;\r\n if (f1 <= 0)\r\n t = 0.0;\r\n else if (f1 >= f2)\r\n t = 1.0;\r\n else if (f2 < 1e-10)\r\n // FIXME Should this be CSG.EPS?\r\n t = 0.5;\r\n else\r\n t = f1 / f2;\r\n let result = point1.x + t * (point2.x - point1.x);\r\n return result;\r\n}\r\n","import { Vector2D } from \"./Vector2\";\r\n\r\n/** class Line2D\r\n * Represents a directional line in 2D space\r\n * A line is parametrized by its normal vector (perpendicular to the line, rotated 90 degrees counter clockwise)\r\n * and w. The line passes through the point .times(w).\r\n * Equation: p is on line if normal.dot(p)==w\r\n */\r\nexport class Line2D\r\n{\r\n normal: Vector2D;\r\n w: number;\r\n constructor(normal: Vector2D, w: number)\r\n {\r\n this.normal = normal.clone();\r\n let l = this.normal.length();\r\n w *= l;\r\n this.normal.normalize();\r\n this.w = w;\r\n }\r\n\r\n direction()\r\n {\r\n return this.normal;\r\n }\r\n static fromPoints(p1: Vector2D, p2: Vector2D)\r\n {\r\n let direction = p2.clone().sub(p1);\r\n let normal = direction\r\n .normal()\r\n .negate()\r\n .normalize();\r\n let w = p1.dot(normal);\r\n return new Line2D(normal, w);\r\n }\r\n}\r\n","import { Plane } from \"./Plane\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vector3D } from \"./Vector3\";\r\n\r\n/** class OrthoNormalBasis\r\n * Reprojects points on a 3D plane onto a 2D plane\r\n * or from a 2D plane back onto the 3D plane\r\n */\r\n\r\nexport class OrthoNormalBasis\r\n{\r\n v: Vector3D;\r\n u: Vector3D;\r\n planeorigin: Vector3D;\r\n constructor(public plane: Plane, rightVector: Vector3D = plane.normal.randomNonParallelVector())\r\n {\r\n this.v = plane.normal.clone().cross(rightVector).normalize();\r\n this.u = this.v.clone().cross(plane.normal);\r\n this.plane = plane;\r\n this.planeorigin = plane.normal.clone().multiplyScalar(plane.w);\r\n }\r\n to2D(vec3: Vector3D)\r\n {\r\n return new Vector2D(vec3.dot(this.u), vec3.dot(this.v));\r\n }\r\n\r\n to3D(vec2: Vector2D)\r\n {\r\n return this.planeorigin.clone()\r\n .add(this.u.clone().multiplyScalar(vec2.x))\r\n .add(this.v.clone().multiplyScalar(vec2.y));\r\n }\r\n}\r\n","import { EPS } from \"../constants\";\r\nimport { fnNumberSort, insertSorted, interpolateBetween2DPointsForY } from \"../utils\";\r\nimport { Line2D } from \"./Line2\";\r\nimport { OrthoNormalBasis } from \"./OrthoNormalBasis\";\r\nimport { Polygon } from \"./Polygon3\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\n\r\n//在这个文件中 Top 表示的是 y最小.\r\n// Bottom 表示的是 y最大\r\n\r\ninterface ActivePolygon\r\n{\r\n polygonindex: number;\r\n leftvertexindex: number;\r\n rightvertexindex: number;\r\n\r\n topleft: Vector2D;\r\n bottomleft: Vector2D;\r\n\r\n topright: Vector2D;\r\n bottomright: Vector2D;\r\n}\r\n\r\ninterface OutPolygon\r\n{\r\n topleft: Vector2D;\r\n topright: Vector2D;\r\n bottomleft: Vector2D;\r\n bottomright: Vector2D;\r\n leftline: Line2D;\r\n rightline: Line2D;\r\n outpolygon?: { leftpoints: Vector2D[]; rightpoints: Vector2D[]; };\r\n leftlinecontinues?: boolean;\r\n rightlinecontinues?: boolean;\r\n}\r\n\r\n//一组共面多边形的Retesselation函数。 请参阅此文件顶部的介绍。\r\nexport function reTesselateCoplanarPolygons(sourcePolygons: Polygon[], destpolygons: Polygon[] = []): void\r\n{\r\n let numPolygons = sourcePolygons.length;\r\n if (numPolygons < 2)\r\n {\r\n destpolygons.push(...sourcePolygons);\r\n return;\r\n }\r\n\r\n let plane = sourcePolygons[0].plane;\r\n let orthobasis = new OrthoNormalBasis(plane);\r\n\r\n // let xcoordinatebins = {}\r\n let yCoordinateBins: { [key: number]: number; } = {}; //整数map\r\n let yCoordinateBinningFactor = (1.0 / EPS) * 10;\r\n\r\n let polygonVertices2d: (Vector2D[])[] = []; // (Vector2[])[];\r\n let polygonTopVertexIndexes: number[] = []; // 每个多边形最顶层顶点的索引数组 minIndex\r\n let topY2PolygonIndexes: { [key: number]: number[]; } = {}; // Map\r\n let yCoordinateToPolygonIndexes: { [key: string]: { [key: number]: boolean; }; } = {}; // Map > Y坐标映射所有的多边形\r\n\r\n //将多边形转换为2d点表 polygonVertices2d\r\n //建立y对应的多边形Map yCoordinateToPolygonIndexes\r\n for (let polygonIndex = 0; polygonIndex < numPolygons; polygonIndex++)\r\n {\r\n let poly3d = sourcePolygons[polygonIndex];\r\n let numVertices = poly3d.vertices.length;\r\n\r\n if (numVertices === 0) continue;\r\n\r\n let vertices2d: Vector2D[] = []; //Vector2d[];\r\n let minIndex = -1;\r\n let miny: number, maxy: number;\r\n for (let i = 0; i < numVertices; i++)\r\n {\r\n let pos2d = orthobasis.to2D(poly3d.vertices[i].pos);\r\n // perform binning of y coordinates: If we have multiple vertices very\r\n // close to each other, give them the same y coordinate:\r\n let yCoordinatebin = Math.floor(pos2d.y * yCoordinateBinningFactor);\r\n let newy: number;\r\n if (yCoordinatebin in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin];\r\n else if (yCoordinatebin + 1 in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin + 1];\r\n else if (yCoordinatebin - 1 in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin - 1];\r\n else\r\n {\r\n newy = pos2d.y;\r\n yCoordinateBins[yCoordinatebin] = pos2d.y;\r\n }\r\n pos2d = new Vector2D(pos2d.x, newy);\r\n vertices2d.push(pos2d);\r\n if (i === 0 || newy < miny)\r\n {\r\n miny = newy;\r\n minIndex = i;\r\n }\r\n if (i === 0 || newy > maxy) maxy = newy;\r\n\r\n if (!(newy in yCoordinateToPolygonIndexes))\r\n yCoordinateToPolygonIndexes[newy] = {};\r\n\r\n yCoordinateToPolygonIndexes[newy][polygonIndex] = true;\r\n }\r\n\r\n //退化多边形,所有顶点都具有相同的y坐标。 从现在开始忽略它:\r\n if (miny >= maxy) continue;\r\n\r\n if (!(miny in topY2PolygonIndexes)) topY2PolygonIndexes[miny] = [];\r\n\r\n topY2PolygonIndexes[miny].push(polygonIndex);\r\n\r\n // reverse the vertex order:\r\n vertices2d.reverse();\r\n minIndex = numVertices - minIndex - 1;\r\n polygonVertices2d.push(vertices2d);\r\n polygonTopVertexIndexes.push(minIndex);\r\n }\r\n\r\n //所有的y坐标,从小到大排序\r\n let yCoordinates: string[] = [];\r\n for (let ycoordinate in yCoordinateToPolygonIndexes)\r\n yCoordinates.push(ycoordinate);\r\n yCoordinates.sort(fnNumberSort);\r\n\r\n //迭代y坐标 从低到高\r\n\r\n // activepolygons :'active'的源多边形,即与y坐标相交\r\n // 多边形是从左往右排序的\r\n // activepolygons 中的每个元素都具有以下属性:\r\n // polygonindex 源多边形的索引(即sourcepolygons的索引 和polygonvertices2d数组)\r\n // leftvertexindex 左边 在当前y坐标处或刚好在当前y坐标之上\r\n // rightvertexindex 右边\r\n // topleft bottomleft 与当前y坐标交叉的多边形左侧的坐标\r\n // topright bottomright 与当前y坐标交叉的多边形右侧的坐标\r\n\r\n let activePolygons: ActivePolygon[] = [];\r\n let prevOutPolygonRow: OutPolygon[] = []; //上一个输出多边形行?\r\n for (let yindex = 0; yindex < yCoordinates.length; yindex++)\r\n {\r\n let yCoordinateStr = yCoordinates[yindex];\r\n let yCoordinate = Number(yCoordinateStr);\r\n\r\n // 用当前的y 更新 activePolygons\r\n // - 删除以y坐标结尾的所有多边形 删除polygon maxy = y 的多边形\r\n // - 更新 leftvertexindex 和 rightvertexindex (指向当前顶点索引)\r\n // 在多边形的左侧和右侧\r\n\r\n // 迭代在Y坐标处有一个角的所有多边形\r\n let polygonIndexeSwithCorner = yCoordinateToPolygonIndexes[yCoordinateStr];\r\n for (\r\n let activePolygonIndex = 0;\r\n activePolygonIndex < activePolygons.length;\r\n activePolygonIndex++\r\n )\r\n {\r\n let activepolygon = activePolygons[activePolygonIndex];\r\n let polygonindex = activepolygon.polygonindex;\r\n\r\n if (!polygonIndexeSwithCorner[polygonindex])//如果不在角内\r\n continue;\r\n\r\n //多边形在此y坐标处有一个角\r\n let vertices2d = polygonVertices2d[polygonindex];\r\n let numvertices = vertices2d.length;\r\n let newleftvertexindex = activepolygon.leftvertexindex;\r\n let newrightvertexindex = activepolygon.rightvertexindex;\r\n\r\n //看看我们是否需要增加 leftvertexindex 或减少 rightvertexindex :\r\n while (true)\r\n {\r\n let nextleftvertexindex = newleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n if (vertices2d[nextleftvertexindex].y !== yCoordinate) break;\r\n newleftvertexindex = nextleftvertexindex;\r\n }\r\n //减少 rightvertexindex\r\n let nextrightvertexindex = newrightvertexindex - 1;\r\n if (nextrightvertexindex < 0)\r\n nextrightvertexindex = numvertices - 1;\r\n if (vertices2d[nextrightvertexindex].y === yCoordinate)\r\n newrightvertexindex = nextrightvertexindex;\r\n\r\n if (\r\n newleftvertexindex !== activepolygon.leftvertexindex //有向上更新\r\n && newleftvertexindex === newrightvertexindex //指向同一个点\r\n )\r\n {\r\n\r\n // We have increased leftvertexindex or decreased rightvertexindex, and now they point to the same vertex\r\n // This means that this is the bottom point of the polygon. We'll remove it:\r\n //我们增加了leftvertexindex或减少了rightvertexindex,现在它们指向同一个顶点\r\n //这意味着这是多边形的底点。 我们将删除它:\r\n activePolygons.splice(activePolygonIndex, 1);\r\n --activePolygonIndex;\r\n } else\r\n {\r\n activepolygon.leftvertexindex = newleftvertexindex;\r\n activepolygon.rightvertexindex = newrightvertexindex;\r\n activepolygon.topleft = vertices2d[newleftvertexindex];\r\n activepolygon.topright = vertices2d[newrightvertexindex];\r\n let nextleftvertexindex = newleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n activepolygon.bottomleft = vertices2d[nextleftvertexindex];\r\n let nextrightvertexindex = newrightvertexindex - 1;\r\n if (nextrightvertexindex < 0) nextrightvertexindex = numvertices - 1;\r\n activepolygon.bottomright = vertices2d[nextrightvertexindex];\r\n }\r\n }\r\n\r\n let nextYCoordinate: number; // number y\r\n if (yindex >= yCoordinates.length - 1)\r\n {\r\n // last row, all polygons must be finished here:\r\n // 最后一行,所有多边形必须在这里完成:\r\n activePolygons = [];\r\n }\r\n else // yindex < ycoordinates.length-1\r\n {\r\n nextYCoordinate = Number(yCoordinates[yindex + 1]);\r\n let middleYCoordinate = 0.5 * (yCoordinate + nextYCoordinate);\r\n // update activepolygons by adding any polygons that start here:\r\n // 添加从这里开始的多边形 到 activePolygons\r\n let startingPolygonIndexes = topY2PolygonIndexes[yCoordinateStr];\r\n for (let polygonindex_key in startingPolygonIndexes)\r\n {\r\n let polygonindex = startingPolygonIndexes[polygonindex_key];\r\n let vertices2d = polygonVertices2d[polygonindex];\r\n let numvertices = vertices2d.length;\r\n let topVertexIndex = polygonTopVertexIndexes[polygonindex];\r\n // the top of the polygon may be a horizontal line. In that case topvertexindex can point to any point on this line.\r\n // Find the left and right topmost vertices which have the current y coordinate:\r\n // 顶部可以是一条直线,寻找最左边的点和最右边的点\r\n let topleftvertexindex = topVertexIndex;\r\n while (true)\r\n {\r\n let i = topleftvertexindex + 1;\r\n if (i >= numvertices) i = 0;\r\n if (vertices2d[i].y !== yCoordinate) break;\r\n if (i === topVertexIndex) break; // should not happen, but just to prevent endless loops\r\n topleftvertexindex = i;\r\n }\r\n let toprightvertexindex = topVertexIndex;\r\n while (true)\r\n {\r\n let i = toprightvertexindex - 1;\r\n if (i < 0) i = numvertices - 1;\r\n if (vertices2d[i].y !== yCoordinate) break;\r\n if (i === topleftvertexindex) break; // should not happen, but just to prevent endless loops\r\n toprightvertexindex = i;\r\n }\r\n\r\n let nextleftvertexindex = topleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n let nextrightvertexindex = toprightvertexindex - 1;\r\n if (nextrightvertexindex < 0) nextrightvertexindex = numvertices - 1;\r\n let newactivepolygon: ActivePolygon = {\r\n polygonindex: polygonindex,\r\n leftvertexindex: topleftvertexindex,\r\n rightvertexindex: toprightvertexindex,\r\n topleft: vertices2d[topleftvertexindex],\r\n topright: vertices2d[toprightvertexindex],\r\n bottomleft: vertices2d[nextleftvertexindex],\r\n bottomright: vertices2d[nextrightvertexindex]\r\n };\r\n\r\n //二分插入\r\n insertSorted(activePolygons, newactivepolygon, function (el1: ActivePolygon, el2: ActivePolygon)\r\n {\r\n let x1 = interpolateBetween2DPointsForY(\r\n el1.topleft,\r\n el1.bottomleft,\r\n middleYCoordinate\r\n );\r\n let x2 = interpolateBetween2DPointsForY(\r\n el2.topleft,\r\n el2.bottomleft,\r\n middleYCoordinate\r\n );\r\n if (x1 > x2) return 1;\r\n if (x1 < x2) return -1;\r\n return 0;\r\n });\r\n }\r\n }\r\n\r\n //#region\r\n // if( (yindex === ycoordinates.length-1) || (nextycoordinate - ycoordinate > EPS) )\r\n // if(true)\r\n // {\r\n\r\n let newOutPolygonRow: OutPolygon[] = []; //输出多边形\r\n\r\n // Build the output polygons for the next row in newOutPolygonRow:\r\n //现在 activepolygons 是最新的\r\n //为 newOutPolygonRow 中的下一行构建输出多边形:\r\n for (let activepolygonKey in activePolygons)\r\n {\r\n let activepolygon = activePolygons[activepolygonKey];\r\n\r\n let x = interpolateBetween2DPointsForY(\r\n activepolygon.topleft,\r\n activepolygon.bottomleft,\r\n yCoordinate\r\n );\r\n let topleft = new Vector2D(x, yCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topright,\r\n activepolygon.bottomright,\r\n yCoordinate\r\n );\r\n let topright = new Vector2D(x, yCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topleft,\r\n activepolygon.bottomleft,\r\n nextYCoordinate\r\n );\r\n let bottomleft = new Vector2D(x, nextYCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topright,\r\n activepolygon.bottomright,\r\n nextYCoordinate\r\n );\r\n let bottomright = new Vector2D(x, nextYCoordinate);\r\n let outPolygon = {\r\n topleft: topleft,\r\n topright: topright,\r\n bottomleft: bottomleft,\r\n bottomright: bottomright,\r\n leftline: Line2D.fromPoints(topleft, bottomleft),\r\n rightline: Line2D.fromPoints(bottomright, topright)\r\n };\r\n\r\n if (newOutPolygonRow.length > 0)\r\n {\r\n let prevoutpolygon =\r\n newOutPolygonRow[newOutPolygonRow.length - 1];\r\n let d1 = outPolygon.topleft.distanceTo(prevoutpolygon.topright);\r\n let d2 = outPolygon.bottomleft.distanceTo(\r\n prevoutpolygon.bottomright\r\n );\r\n if (d1 < EPS && d2 < EPS)\r\n {\r\n // we can join this polygon with the one to the left:\r\n outPolygon.topleft = prevoutpolygon.topleft;\r\n outPolygon.leftline = prevoutpolygon.leftline;\r\n outPolygon.bottomleft = prevoutpolygon.bottomleft;\r\n newOutPolygonRow.splice(newOutPolygonRow.length - 1, 1);\r\n }\r\n }\r\n\r\n newOutPolygonRow.push(outPolygon);\r\n }\r\n\r\n if (yindex > 0)\r\n {\r\n // try to match the new polygons against the previous row:\r\n //尝试将新多边形与上一行匹配:\r\n let prevContinuedIndexes: { [key: number]: boolean; } = {};\r\n let matchedIndexes: { [key: number]: boolean; } = {};\r\n for (let i = 0; i < newOutPolygonRow.length; i++)\r\n {\r\n let thispolygon = newOutPolygonRow[i];\r\n for (let ii = 0; ii < prevOutPolygonRow.length; ii++)\r\n {\r\n if (!matchedIndexes[ii])\r\n {\r\n // not already processed?\r\n // We have a match if the sidelines are equal or if the top coordinates\r\n // are on the sidelines of the previous polygon\r\n let prevpolygon = prevOutPolygonRow[ii];\r\n if (prevpolygon.bottomleft.distanceTo(thispolygon.topleft) < EPS)\r\n {\r\n if (prevpolygon.bottomright.distanceTo(thispolygon.topright) < EPS)\r\n {\r\n // Yes, the top of this polygon matches the bottom of the previous:\r\n matchedIndexes[ii] = true;\r\n // Now check if the joined polygon would remain convex:\r\n let d1 = thispolygon.leftline.direction().x - prevpolygon.leftline.direction().x;\r\n let d2 = thispolygon.rightline.direction().x - prevpolygon.rightline.direction().x;\r\n let leftlinecontinues = Math.abs(d1) < EPS;\r\n let rightlinecontinues = Math.abs(d2) < EPS;\r\n let leftlineisconvex = leftlinecontinues || d1 >= 0;\r\n let rightlineisconvex = rightlinecontinues || d2 >= 0;\r\n if (leftlineisconvex && rightlineisconvex)\r\n {\r\n // yes, both sides have convex corners:\r\n // This polygon will continue the previous polygon\r\n thispolygon.outpolygon = prevpolygon.outpolygon;\r\n thispolygon.leftlinecontinues = leftlinecontinues;\r\n thispolygon.rightlinecontinues = rightlinecontinues;\r\n prevContinuedIndexes[ii] = true;\r\n }\r\n break;\r\n }\r\n }\r\n } // if(!prevcontinuedindexes[ii])\r\n } // for ii\r\n } // for i\r\n for (let ii = 0; ii < prevOutPolygonRow.length; ii++)\r\n {\r\n if (!prevContinuedIndexes[ii])\r\n {\r\n // polygon ends here\r\n // Finish the polygon with the last point(s):\r\n let prevpolygon = prevOutPolygonRow[ii];\r\n prevpolygon.outpolygon.rightpoints.push(prevpolygon.bottomright);\r\n if (prevpolygon.bottomright.distanceTo(prevpolygon.bottomleft) > EPS)\r\n {\r\n // polygon ends with a horizontal line:\r\n prevpolygon.outpolygon.leftpoints.push(prevpolygon.bottomleft);\r\n }\r\n // reverse the left half so we get a counterclockwise circle:\r\n prevpolygon.outpolygon.leftpoints.reverse();\r\n let points2d = prevpolygon.outpolygon.rightpoints.concat(prevpolygon.outpolygon.leftpoints);\r\n\r\n let vertices = points2d.map(v => new Vertex3D(orthobasis.to3D(v)));\r\n let polygon = new Polygon(vertices, plane);\r\n destpolygons.push(polygon);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < newOutPolygonRow.length; i++)\r\n {\r\n let thispolygon = newOutPolygonRow[i];\r\n if (!thispolygon.outpolygon)\r\n {\r\n // polygon starts here:\r\n thispolygon.outpolygon = {\r\n leftpoints: [],\r\n rightpoints: []\r\n };\r\n thispolygon.outpolygon.leftpoints.push(thispolygon.topleft);\r\n if (thispolygon.topleft.distanceTo(thispolygon.topright) > EPS)\r\n {\r\n // we have a horizontal line at the top:\r\n thispolygon.outpolygon.rightpoints.push(thispolygon.topright);\r\n }\r\n }\r\n else\r\n {\r\n // continuation of a previous row\r\n if (!thispolygon.leftlinecontinues)\r\n {\r\n thispolygon.outpolygon.leftpoints.push(thispolygon.topleft);\r\n }\r\n if (!thispolygon.rightlinecontinues)\r\n {\r\n thispolygon.outpolygon.rightpoints.push(thispolygon.topright);\r\n }\r\n }\r\n }\r\n\r\n prevOutPolygonRow = newOutPolygonRow;\r\n // }\r\n //#endregion\r\n } // for yindex\r\n}\r\n","import { CSG } from \"../CSG\";\r\nimport { FuzzyCSGFactory } from \"../FuzzyFactory3d\";\r\nimport { Polygon } from \"../math/Polygon3\";\r\nimport { reTesselateCoplanarPolygons } from \"../math/reTesselateCoplanarPolygons\";\r\n\r\nexport function reTesselate(csg: CSG): CSG\r\n{\r\n if (csg.isRetesselated) return csg;\r\n\r\n let polygonsPerPlane: { [key: number]: Polygon[]; } = {};\r\n let isCanonicalized = csg.isCanonicalized;\r\n let fuzzyfactory = new FuzzyCSGFactory();\r\n\r\n for (let polygon of csg.polygons)\r\n {\r\n let plane = polygon.plane;\r\n if (!isCanonicalized)\r\n {\r\n // in order to identify polygons having the same plane, we need to canonicalize the planes\r\n // We don't have to do a full canonizalization (including vertices), to save time only do the planes and the shared data:\r\n plane = fuzzyfactory.getPlane(plane);\r\n }\r\n let tag = plane.getTag();\r\n if (!(tag in polygonsPerPlane)) polygonsPerPlane[tag] = [polygon];\r\n else polygonsPerPlane[tag].push(polygon);\r\n }\r\n\r\n let destpolygons: Polygon[] = [];\r\n for (let planetag in polygonsPerPlane)\r\n {\r\n let sourcepolygons = polygonsPerPlane[planetag];\r\n reTesselateCoplanarPolygons(sourcepolygons, destpolygons);\r\n }\r\n let resultCSG = new CSG(destpolygons);\r\n resultCSG.isRetesselated = true;\r\n return resultCSG;\r\n};\r\n","import { Matrix4 } from \"three\";\r\nimport { IsMirror } from \"./math/IsMirrot\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\nimport { Tree } from \"./trees\";\r\nimport { canonicalizeCSG } from \"./utils/canonicalize\";\r\nimport { bounds } from \"./utils/csgMeasurements\";\r\nimport { reTesselate } from \"./utils/retesellate\";\r\n\r\n/** Class CSG\r\n * Holds a binary space partition tree representing a 3D solid. Two solids can\r\n * be combined using the `union()`, `subtract()`, and `intersect()` methods.\r\n * @constructor\r\n */\r\nexport class CSG\r\n{\r\n /** # 是否已精简重复点 */\r\n isCanonicalized: boolean = false;\r\n /** # 是否已合并轮廓 */\r\n isRetesselated: boolean = false;\r\n cachedBoundingBox: Vector3D[];\r\n constructor(public polygons: Polygon[] = [])\r\n {\r\n }\r\n /**\r\n * Return a new CSG solid representing the space in either this solid or\r\n * in the given solids. Neither this solid nor the given solids are modified.\r\n * @param {CSG[]} csg - list of CSG objects\r\n * @returns {CSG} new CSG object\r\n * @example\r\n * let C = A.union(B)\r\n * @example\r\n * +-------+ +-------+\r\n * | | | |\r\n * | A | | |\r\n * | +--+----+ = | +----+\r\n * +----+--+ | +----+ |\r\n * | B | | |\r\n * | | | |\r\n * +-------+ +-------+\r\n */\r\n union(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n {\r\n csgs = csg.slice(0);\r\n csgs.push(this);\r\n }\r\n else csgs = [this, csg];\r\n\r\n let i: number;\r\n // combine csg pairs in a way that forms a balanced binary tree pattern\r\n for (i = 1; i < csgs.length; i += 2)\r\n {\r\n csgs.push(csgs[i - 1].unionSub(csgs[i]));\r\n }\r\n return csgs[i - 1].reTesselated().canonicalized();\r\n }\r\n\r\n unionSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n if (!this.mayOverlap(csg))\r\n return this.unionForNonIntersecting(csg);\r\n\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.clipTo(b);\r\n\r\n // b.clipTo(a, true); // ERROR: this doesn't work\r\n b.clipTo(a);\r\n b.invert();\r\n b.clipTo(a);\r\n b.invert();\r\n\r\n let newpolygons = [...a.allPolygons(), ...b.allPolygons()];\r\n let resultCSG = new CSG(newpolygons);\r\n if (retesselate) resultCSG = resultCSG.reTesselated();\r\n if (canonicalize) resultCSG = resultCSG.canonicalized();\r\n return resultCSG;\r\n }\r\n\r\n // Like union, but when we know that the two solids are not intersecting\r\n // Do not use if you are not completely sure that the solids do not intersect!\r\n unionForNonIntersecting(csg: CSG): CSG\r\n {\r\n let newpolygons = [...this.polygons, ...csg.polygons];\r\n let result = new CSG(newpolygons);\r\n result.isCanonicalized = this.isCanonicalized && csg.isCanonicalized;\r\n result.isRetesselated = this.isRetesselated && csg.isRetesselated;\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid representing space in this solid but\r\n * not in the given solids. Neither this solid nor the given solids are modified.\r\n * @returns new CSG object\r\n * @example\r\n * let C = A.subtract(B)\r\n * @example\r\n * +-------+ +-------+\r\n * | | | |\r\n * | A | | |\r\n * | +--+----+ = | +--+\r\n * +----+--+ | +----+\r\n * | B |\r\n * | |\r\n * +-------+\r\n */\r\n subtract(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n csgs = csg;\r\n else\r\n csgs = [csg];\r\n let result: CSG = this;\r\n for (let i = 0; i < csgs.length; i++)\r\n {\r\n let islast = i === csgs.length - 1;\r\n result = result.subtractSub(csgs[i], islast, islast);\r\n }\r\n return result;\r\n }\r\n\r\n subtractSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.invert();\r\n a.clipTo(b);\r\n b.clipTo(a, true);\r\n a.addPolygons(b.allPolygons());\r\n a.invert();\r\n let result = new CSG(a.allPolygons());\r\n // if (retesselate) result = result.reTesselated();\r\n // if (canonicalize) result = result.canonicalized();\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid representing space in both this solid and\r\n * in the given solids. Neither this solid nor the given solids are modified.\r\n * let C = A.intersect(B)\r\n * @returns new CSG object\r\n * @example\r\n * +-------+\r\n * | |\r\n * | A |\r\n * | +--+----+ = +--+\r\n * +----+--+ | +--+\r\n * | B |\r\n * | |\r\n * +-------+\r\n */\r\n intersect(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n csgs = csg;\r\n else\r\n csgs = [csg];\r\n let result: CSG = this;\r\n for (let i = 0; i < csgs.length; i++)\r\n {\r\n let islast = i === csgs.length - 1;\r\n result = result.intersectSub(csgs[i], islast, islast);\r\n }\r\n return result;\r\n }\r\n\r\n intersectSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.invert();\r\n b.clipTo(a);\r\n b.invert();\r\n a.clipTo(b);\r\n b.clipTo(a);\r\n a.addPolygons(b.allPolygons());\r\n a.invert();\r\n let result = new CSG(a.allPolygons());\r\n // if (retesselate) result = result.reTesselated();\r\n // if (canonicalize) result = result.canonicalized();\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid with solid and empty space switched.\r\n * This solid is not modified.\r\n */\r\n invert(): CSG\r\n {\r\n let flippedpolygons = this.polygons.map(p => p.flipped());\r\n return new CSG(flippedpolygons);\r\n }\r\n\r\n // Affine transformation of CSG object. Returns a new CSG object\r\n transform1(matrix4x4: Matrix4)\r\n {\r\n let newpolygons = this.polygons.map(p =>\r\n {\r\n return p.transform(matrix4x4);\r\n });\r\n let result = new CSG(newpolygons);\r\n result.isCanonicalized = this.isCanonicalized;\r\n result.isRetesselated = this.isRetesselated;\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid that is transformed using the given Matrix.\r\n * Several matrix transformations can be combined before transforming this solid.\r\n * @param {CSG.Matrix4x4} matrix4x4 - matrix to be applied\r\n * @returns {CSG} new CSG object\r\n * @example\r\n * var m = new CSG.Matrix4x4()\r\n * m = m.multiply(CSG.Matrix4x4.rotationX(40))\r\n * m = m.multiply(CSG.Matrix4x4.translation([-.5, 0, 0]))\r\n * let B = A.transform(m)\r\n */\r\n transform(matrix4x4: Matrix4): this\r\n {\r\n let ismirror = IsMirror(matrix4x4);\r\n let transformedvertices = {};\r\n let transformedplanes = {};\r\n let newpolygons = this.polygons.map(p =>\r\n {\r\n let newplane: Plane;\r\n let plane = p.plane;\r\n let planetag = plane.getTag();\r\n if (planetag in transformedplanes)\r\n {\r\n newplane = transformedplanes[planetag];\r\n } else\r\n {\r\n newplane = plane.transform(matrix4x4);\r\n transformedplanes[planetag] = newplane;\r\n }\r\n let newvertices = p.vertices.map(v =>\r\n {\r\n let newvertex: Vertex3D;\r\n let vertextag = v.getTag();\r\n if (vertextag in transformedvertices)\r\n {\r\n newvertex = transformedvertices[vertextag];\r\n }\r\n else\r\n {\r\n newvertex = v.transform(matrix4x4);\r\n transformedvertices[vertextag] = newvertex;\r\n }\r\n return newvertex;\r\n });\r\n if (ismirror) newvertices.reverse();\r\n return new Polygon(newvertices, newplane);\r\n });\r\n let result = new CSG(newpolygons);\r\n result.isRetesselated = this.isRetesselated;\r\n result.isCanonicalized = this.isCanonicalized;\r\n return result as this;\r\n }\r\n canonicalized()\r\n {\r\n if (this.isCanonicalized) return this;\r\n return canonicalizeCSG(this);\r\n }\r\n reTesselated()\r\n {\r\n if (this.isRetesselated) return this;\r\n return reTesselate(this);\r\n }\r\n\r\n //如果两个实体有可能重叠,返回true\r\n mayOverlap(csg: CSG): boolean\r\n {\r\n if (this.polygons.length === 0 || csg.polygons.length === 0)\r\n return false;\r\n\r\n let mybounds = bounds(this);\r\n let otherbounds = bounds(csg);\r\n if (mybounds[1].x < otherbounds[0].x) return false;\r\n if (mybounds[0].x > otherbounds[1].x) return false;\r\n if (mybounds[1].y < otherbounds[0].y) return false;\r\n if (mybounds[0].y > otherbounds[1].y) return false;\r\n if (mybounds[1].z < otherbounds[0].z) return false;\r\n if (mybounds[0].z > otherbounds[1].z) return false;\r\n return true;\r\n }\r\n\r\n toTriangles(): Polygon[]\r\n {\r\n let polygons: Polygon[] = [];\r\n for (let poly of this.polygons)\r\n {\r\n let firstVertex = poly.vertices[0];\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n polygons.push(\r\n new Polygon(\r\n [\r\n firstVertex,\r\n poly.vertices[i + 1],\r\n poly.vertices[i + 2]\r\n ],\r\n poly.plane\r\n )\r\n );\r\n }\r\n }\r\n return polygons;\r\n }\r\n}\r\n","import { BufferGeometry, Face3, Geometry, Vector2, Vector3 } from \"three\";\r\nimport { equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { CSG } from \"./CSG\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Vector2D } from \"./math/Vector2\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\n\r\nexport function Geometry2CSG(geometry: Geometry | BufferGeometry): CSG\r\n{\r\n if (geometry instanceof BufferGeometry)\r\n geometry = new Geometry().fromBufferGeometry(geometry);\r\n\r\n let polygons: Polygon[] = [];\r\n for (let i = 0; i < geometry.faces.length; i++)\r\n {\r\n let face = geometry.faces[i];\r\n let faceVertexUvs = geometry.faceVertexUvs[0][i];\r\n let vertices: Vertex3D[] = [];\r\n\r\n if (face instanceof Face3)\r\n {\r\n let uv = faceVertexUvs ? faceVertexUvs[0].clone() : null;\r\n let vertex1 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.a]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex1);\r\n\r\n uv = faceVertexUvs ? faceVertexUvs[1].clone() : null;\r\n let vertex2 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.b]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex2);\r\n\r\n uv = faceVertexUvs ? faceVertexUvs[2].clone() : null;\r\n let vertex3 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.c]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex3);\r\n }\r\n\r\n let polygon = new Polygon(vertices);\r\n let normal = Vector3DToVector3(polygon.plane.normal);\r\n if (!isNaN(polygon.plane.w) && !equalv3(normal, new Vector3()))\r\n polygons.push(polygon);\r\n }\r\n\r\n return new CSG(polygons);\r\n}\r\n\r\nexport function CSG2Geometry(csg: CSG): Geometry\r\n{\r\n let geo = new Geometry;\r\n let uvs: Vector2[][] = geo.faceVertexUvs[0];\r\n\r\n for (let poly of csg.polygons)\r\n {\r\n let normal = Vector3DToVector3(poly.plane.normal);\r\n if (equalv3(normal, ZeroVec)) continue;\r\n for (let v of poly.vertices)\r\n {\r\n v.tag = geo.vertices.length;\r\n geo.vertices.push(Vector3DToVector3(v.pos));\r\n }\r\n\r\n let firstVertex = poly.vertices[0];\r\n\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n let [a, b, c] = [\r\n firstVertex.tag,\r\n poly.vertices[i + 1].tag,\r\n poly.vertices[i + 2].tag\r\n ];\r\n let f = new Face3(a, b, c, normal);\r\n\r\n geo.faces.push(f);\r\n uvs.push([\r\n Vector2DToVector2(firstVertex.uv),\r\n Vector2DToVector2(poly.vertices[i + 1].uv),\r\n Vector2DToVector2(poly.vertices[i + 2].uv)\r\n ]);\r\n }\r\n }\r\n return geo;\r\n}\r\n\r\nfunction Vector3ToVector3D(v: Vector3): Vector3D\r\n{\r\n return new Vector3D(v.x, v.y, v.z);\r\n}\r\n\r\nexport function Vector3DToVector3(v: Vector3D): Vector3\r\n{\r\n return new Vector3(v.x, v.y, v.z);\r\n}\r\nfunction Vector2DToVector2(v: Vector2D): Vector2\r\n{\r\n return new Vector2(v.x, v.y);\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ToFixed } from \"../Common/Utils\";\r\nimport { CSG } from \"../csg/core/CSG\";\r\nimport { Polygon } from \"../csg/core/math/Polygon3\";\r\nimport { Vec3 } from \"./IVec3\";\r\n\r\n/**\r\n * 解决 THREEBSP(CSG) 产生的结果没有办法得到分裂的个数.\r\n * 本类分析了THREEBSP的组合情况.\r\n * \r\n * Example:\r\n * \r\n * let topology = new BSPGroupParse(csg);\r\n * topology.parse();\r\n */\r\nexport class BSPGroupParse\r\n{\r\n constructor(bsp?: CSG, public fractionDigits = 1)\r\n {\r\n if (bsp)\r\n for (let poly of bsp.polygons)\r\n this.Add(poly);\r\n }\r\n Add(poly: Polygon)\r\n {\r\n let strs = poly.vertices.map(p => this.GenerateP(p.pos));\r\n let str0 = strs[0];\r\n let s0 = this.Get(str0);\r\n for (let i = 1; i < strs.length; i++)\r\n {\r\n let stri = strs[i];\r\n s0.add(stri);\r\n this.Get(stri).add(str0);\r\n }\r\n }\r\n\r\n /**\r\n * 返回组合点\r\n */\r\n Parse(): Vector3[][]\r\n {\r\n let set = new Set([...this.map.keys()]);\r\n let res: Vector3[][] = [];\r\n while (set.size > 0)\r\n {\r\n let fp = set[Symbol.iterator]().next().value;\r\n set.delete(fp);\r\n let cset = new Set();\r\n cset.add(fp);\r\n this.GetPts(fp, cset, set);\r\n let pts = [...cset].map(str =>\r\n {\r\n let v3 = this.vecMap.get(str);\r\n return new Vector3(v3.x, v3.y, v3.z);\r\n });\r\n res.push(pts);\r\n }\r\n return res;\r\n }\r\n private map = new Map>();\r\n private Get(vstr: string): Set\r\n {\r\n if (!this.map.has(vstr))\r\n {\r\n let s = new Set();\r\n this.map.set(vstr, s);\r\n return s;\r\n }\r\n return this.map.get(vstr);\r\n }\r\n private GetPts(p: string, cset: Set, oset: Set)\r\n {\r\n let strs = this.map.get(p);\r\n for (let str of strs)\r\n {\r\n if (!cset.has(str))\r\n {\r\n cset.add(str);\r\n oset.delete(str);\r\n this.GetPts(str, cset, oset);\r\n }\r\n }\r\n }\r\n private vecMap = new Map();\r\n private GenerateP(v: Vec3)\r\n {\r\n let str = [v.x, v.y, v.z].map(n => ToFixed(n, this.fractionDigits)).join(\",\");\r\n this.vecMap.set(str, v);\r\n return str;\r\n }\r\n}\r\n","import { BufferGeometry, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { equalv3 } from \"./GeUtils\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\n\r\nexport function GenerateExtrudeEdgeGeometry(contourPoints: Vector3[][], height: number): BufferGeometry\r\n{\r\n let pts: Vector3[] = [];\r\n for (let cs of contourPoints)\r\n pts.push(...GenerateExtrudeEdgeGeometryPoints(cs, height));\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return geo;\r\n}\r\n\r\nfunction GenerateExtrudeEdgeGeometryPoints(contourPoints: Vector3[], height: number): Vector3[]\r\n{\r\n if (contourPoints.length < 3) return [];\r\n if (equalv3(contourPoints[0], arrayLast(contourPoints)))\r\n contourPoints.pop();\r\n let pts: Vector3[] = [];\r\n let hpts = contourPoints.map(p => new Vector3(p.x, p.y, height));\r\n let count = contourPoints.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n pts.push(contourPoints[i], contourPoints[FixIndex(i + 1, count)], hpts[i], hpts[FixIndex(i + 1, count)], contourPoints[i], hpts[i]);\r\n }\r\n return pts;\r\n}\r\n\r\nexport function GenerateBoxEdgeGeometry(length: number, width: number, height: number): BufferGeometry\r\n{\r\n let pts = [new Vector3(), new Vector3(length), new Vector3(length, width), new Vector3(0, width)];\r\n return GenerateExtrudeEdgeGeometry([pts], height);\r\n}\r\n","import { arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { Status } from \"../../Common/Status\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\n\r\nexport function SimplifyPolyline(polyline: Polyline)\r\n{\r\n let curves = polyline.Explode();\r\n\r\n let oldCount = curves.length;\r\n curves = arrayRemoveDuplicateBySort(curves, (c1, c2) =>\r\n {\r\n return c1.Join(c2) !== Status.False;\r\n });\r\n\r\n if (oldCount === curves.length) return;\r\n\r\n polyline.Erase();\r\n\r\n if (curves.length === 1)\r\n return curves[0];\r\n else\r\n {\r\n let pl = new Polyline;\r\n for (let cu of curves)\r\n pl.Join(cu);\r\n return pl;\r\n }\r\n}\r\n","import { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { Vec3 } from \"../../Geometry/IVec3\";\r\nimport { IntersectOption } from \"../IntersectWith\";\r\n\r\n/**\r\n * V型刀走刀数据,第一刀直接扎进去,最后一刀提刀\r\n * @param polyline\r\n * @param feedingDepth 走刀深度\r\n * @param knifAngle 通常为60度.按弧度表示\r\n */\r\nexport function VKnifToolPath(polyline: Polyline, feedingDepth: number, knifAngle: number): { pt: Vec3, bul: number; }[]\r\n{\r\n let x = feedingDepth * Math.tan(knifAngle);\r\n let cus = polyline.Explode();\r\n arrayRemoveIf(cus, c => c.Length < 0.01);\r\n\r\n let offsetx = [x, -x];\r\n\r\n let ptsbul: { pt: Vec3, bul: number; }[] = [];\r\n\r\n let isClose = polyline.IsClose;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let nextIndex = FixIndex(i + 1, cus.length);\r\n let c1 = cus[i];\r\n let c2 = cus[nextIndex];\r\n\r\n let d = { pt: c1.StartPoint, bul: 0 };\r\n\r\n let curP = c1.EndPoint;\r\n\r\n if (c1 instanceof Arc)\r\n {\r\n d.bul = c1.Bul;\r\n c1 = new Line(curP.clone().sub(c1.GetFistDeriv(1).multiplyScalar(100)), curP);\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(c2.StartPoint, c2.StartPoint.add(c2.GetFistDeriv(0).multiplyScalar(100)));\r\n\r\n ptsbul.push(d);\r\n\r\n if (!isClose && i === cus.length - 1)//最后一条\r\n {\r\n ptsbul.push({ pt: c1.EndPoint, bul: 0 });\r\n break;\r\n }\r\n\r\n //圆弧与直线相切,此时不要提刀\r\n if (isParallelTo(c1.GetFistDeriv(0), c2.GetFistDeriv(0))) continue;\r\n\r\n //提刀\r\n for (let x of offsetx)\r\n {\r\n let co1 = c1.GetOffsetCurves(x)[0];\r\n let co2 = c2.GetOffsetCurves(x)[0];\r\n\r\n if (!co1 || !co2) continue;\r\n\r\n let ipts = co1.IntersectWith(co2, IntersectOption.ExtendBoth);\r\n\r\n if (ipts.length === 0) continue;\r\n\r\n if (co1.PtOnCurve(ipts[0])) continue;\r\n\r\n //抬刀路径\r\n ptsbul.push({ pt: curP, bul: 0 });\r\n ptsbul.push({ pt: ipts[0].setZ(feedingDepth), bul: 0 });\r\n }\r\n }\r\n\r\n if (isClose)\r\n {\r\n //第一刀\r\n ptsbul.unshift(ptsbul[ptsbul.length - 1]);//, ptsbul[ptsbul.length - 2]\r\n }\r\n return ptsbul;\r\n}\r\n","export enum Intent\r\n{\r\n NONE = \"none\",\r\n PRIMARY = \"primary\",\r\n SUCCESS = \"success\",\r\n WARNING = \"warning\",\r\n DANGER = \"danger\",\r\n}\r\n\r\nexport interface IToasterOption\r\n{\r\n message: string | string[],\r\n timeout: number;\r\n intent: Intent;\r\n key?: string;\r\n}\r\n\r\n\r\ntype ToasterFunction = (option: IToasterOption) => void;\r\n\r\nexport const ToasterInjectFunctions: ToasterFunction[] = [];\r\n\r\nexport function Toaster(option: IToasterOption): void\r\n{\r\n for (let f of ToasterInjectFunctions)\r\n f(option);\r\n}\r\n","import { Factory } from '../CADFactory';\r\nimport { Entity } from '../Entity/Entity';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { CADFiler } from '../CADFiler';\r\n\r\n@Factory\r\nexport class Hole extends Entity\r\n{\r\n @AutoRecord FId: ObjectId;\r\n @AutoRecord MId: ObjectId;\r\n protected _Height: number;\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this._Height !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n if (ver <= 4)\r\n {\r\n //临时兼容旧图纸排钻,更新旧图纸后去掉兼容代码\r\n file['readIndex']--;\r\n }\r\n else\r\n {\r\n this._Height = file.Read();\r\n this.FId = file.ReadSoftObjectId();\r\n this.MId = file.ReadSoftObjectId();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(5);//ver\r\n file.Write(this._Height);\r\n file.WriteSoftObjectId(this.FId);\r\n file.WriteSoftObjectId(this.MId);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, CylinderBufferGeometry, Float32BufferAttribute, LineSegments, Matrix4, Mesh, Object3D, Shape as TShape, Vector3, Matrix3 } from \"three\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory, CADFactory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Hole } from \"./Hole\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Circle } from \"../Entity/Circle\";\r\n\r\nexport enum GangDrillType\r\n{\r\n /**偏心轮 */\r\n Pxl = 0,\r\n /**连接杆 */\r\n Ljg = 1,\r\n /**预埋件 */\r\n Ymj = 2,\r\n /**层板钉 */\r\n Nail = 3,\r\n /** 木销 */\r\n Wood = 4,\r\n /** 通孔 */\r\n TK = 5,\r\n WoodPXL = 6,\r\n}\r\n\r\nlet TempCircle1 = new Circle();\r\nlet TempCircle2 = new Circle();\r\n\r\n@Factory\r\nexport class CylinderHole extends Hole\r\n{\r\n private _Radius: number = 1;\r\n private type: GangDrillType = GangDrillType.Pxl;\r\n constructor()\r\n {\r\n super();\r\n this._Color = 1;\r\n }\r\n static CreateCylHole(radius: number, height: number, type: GangDrillType)\r\n {\r\n let drill = new CylinderHole();\r\n drill.Height = height;\r\n drill._Radius = radius;\r\n drill.type = type;\r\n return drill;\r\n }\r\n get Type()\r\n {\r\n return this.type;\r\n }\r\n set Type(t: GangDrillType)\r\n {\r\n if (this.type !== t)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.type = t;\r\n }\r\n }\r\n\r\n set Radius(r: number)\r\n {\r\n if (r !== this._Radius)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._MeshGeometry = null;\r\n this._EdgeGeometry = null;\r\n this._Radius = r;\r\n this.Update();\r\n }\r\n }\r\n get Height()\r\n {\r\n return super.Height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this._Height !== v)\r\n {\r\n this._MeshGeometry = null;\r\n this._EdgeGeometry = null;\r\n super.Height = v;\r\n }\r\n }\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3(new Vector3(-this._Radius, -this._Radius, 0), new Vector3(this._Radius, this._Radius, this._Height));\r\n return box.applyMatrix4(this.OCS);\r\n }\r\n private _MeshGeometry: CylinderBufferGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n this._MeshGeometry = FastDrillingMeshGeometry(this.Radius, this.Height);\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this._EdgeGeometry = FastDrillingEdgeGeometry(this._Radius, this.Height);\r\n return this._EdgeGeometry;\r\n }\r\n GetGripPoints()\r\n {\r\n let cir = new Circle(new Vector3(), this._Radius);\r\n let pts = cir.GetGripPoints();\r\n pts.push(...pts.map(p => p.clone().add(new Vector3(0, 0, this.Height))));\r\n return pts.map(p => p.applyMatrix4(this.OCS));\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n TempCircle1.Radius = this.Radius;\r\n TempCircle1.OCS = this._Matrix;\r\n TempCircle2.Radius = this.Radius;\r\n TempCircle2.OCS = this._Matrix;\r\n TempCircle2.Position = TempCircle2.Position.add(this.Normal.multiplyScalar(this.Height));\r\n\r\n for (let c of [TempCircle2, TempCircle1])\r\n {\r\n pts.push(...c.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n InitDrawObject(renderType: RenderType)\r\n {\r\n return this.GetObject3DByRenderType(renderType);\r\n }\r\n private GetObject3DByRenderType(renderType: RenderType)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n else\r\n return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n obj.add(this.GetObject3DByRenderType(type));\r\n }\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D)\r\n {\r\n if (type === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._Radius = file.Read();\r\n if (ver <= 4)\r\n {\r\n //临时兼容旧排钻\r\n this._Height = file.Read();\r\n this.type = file.Read();\r\n this.FId = file.ReadSoftObjectId();\r\n this.MId = file.ReadSoftObjectId();\r\n }\r\n else\r\n {\r\n this.type = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(5);//ver\r\n file.Write(this._Radius);\r\n file.Write(this.type);\r\n }\r\n}\r\n\r\nlet cache = new Map();\r\nlet ro = new Matrix4();\r\nro.makeRotationX(Math.PI / 2);\r\nexport function FastDrillingMeshGeometry(radius: number, height: number)\r\n{\r\n let key = `${radius},${height}`;\r\n if (cache.has(key))\r\n return cache.get(key);\r\n let geo = new CylinderBufferGeometry(radius, radius, height, 8, 1);\r\n geo.applyMatrix4(ro);\r\n geo.translate(0, 0, height / 2);\r\n cache.set(key, geo);\r\n return geo;\r\n}\r\n\r\nlet cache2 = new Map();\r\nexport function FastDrillingEdgeGeometry(radius: number, height: number): BufferGeometry\r\n{\r\n let key = `${radius},${height}`;\r\n if (cache2.has(key))\r\n return cache2.get(key);\r\n\r\n let sp = new TShape();\r\n sp.ellipse(0, 0, radius, radius, 0, 2 * Math.PI, false, 0);\r\n\r\n let pts = sp.getPoints(4);\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = pts[i];\r\n let np = pts[FixIndex(i + 1, pts.length)];\r\n coords.push(p.x, p.y, 0, np.x, np.y, 0);//bottom\r\n coords.push(p.x, p.y, height, np.x, np.y, height);//top\r\n coords.push(p.x, p.y, 0, p.x, p.y, height);//edge\r\n }\r\n\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n cache2.set(key, geo);\r\n return geo;\r\n}\r\n\r\nCADFactory.RegisterObjectAlias(CylinderHole, \"GangDrill\");\r\n","import { IBaseOption } from \"./BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\n\r\nexport enum EWineRackType\r\n{\r\n Oblique = 0,\r\n Upright = 1,\r\n}\r\n\r\nexport enum EWRackArrayType\r\n{\r\n ByWidth = 0,\r\n ByCount = 1,\r\n Fixed = 2, //固定\r\n}\r\n\r\n/**铺满方式 */\r\nexport enum EFullType\r\n{\r\n ByHeight = 0,\r\n ByWidth = 1,\r\n Symmetry = 2,\r\n}\r\n\r\n/**高度优先时靠左还是靠右 */\r\nexport enum EFullDir\r\n{\r\n Left = 0,\r\n Right = 1,\r\n}\r\n\r\nexport interface IWineRackOption extends IBaseOption\r\n{\r\n type: EWineRackType;\r\n arrayType: EWRackArrayType;\r\n fullType: EFullType;\r\n isFull: boolean;\r\n fullDir: EFullDir;\r\n isLock: boolean;\r\n heightCount: number;\r\n widthCount: number;\r\n isTotalDepth: boolean;\r\n depth: number; //格子深\r\n calcDepth: string;\r\n gripWidth: number; //格子宽度\r\n boardThick: number;\r\n grooveWidthAdd: number;\r\n leftEdge: number;\r\n rightEdge: number;\r\n topEdge: number;\r\n bottomEdge: number;\r\n frontCut: number;\r\n leftCut: number;\r\n rightCut: number;\r\n topCut: number;\r\n grooveLengthAdd: number;\r\n isDrawLy: boolean;\r\n isDrawVer: boolean;\r\n brThick2: number; //补板厚\r\n}\r\n\r\nexport interface IR2WROption\r\n{\r\n depth: number;\r\n addLen: number;\r\n knifeRadius: number;\r\n [EBoardKeyList.UpSealed]: number;\r\n [EBoardKeyList.DownSealed]: number;\r\n [EBoardKeyList.LeftSealed]: number;\r\n [EBoardKeyList.RightSealed]: number;\r\n}\r\n","import { LinesType, FaceDirection, ComposingType, IBaseOption } from \"./BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\n\r\nexport const DRILL_KEYS = [\"downDrill\", \"rightDrill\", \"upDrill\", \"leftDrill\"];\r\n\r\nexport interface IBoardFindOption extends IBaseOption\r\n{\r\n condition: IFindCondition;\r\n compareType: ICompareType;\r\n tolerance: ITolerance;\r\n layer: string;\r\n [EBoardKeyList.Height]: string;\r\n [EBoardKeyList.Width]: string;\r\n [EBoardKeyList.Thick]: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n brName: string; //板名\r\n [EBoardKeyList.BrMat]: string; //板材\r\n [EBoardKeyList.Mat]: string;\r\n [EBoardKeyList.Color]: string;\r\n [EBoardKeyList.Lines]: LinesType;\r\n [EBoardKeyList.BigHole]: FaceDirection;\r\n [EBoardKeyList.DrillType]: string;\r\n [EBoardKeyList.ComposingFace]: ComposingType;\r\n [EBoardKeyList.UpSealed]: string;\r\n [EBoardKeyList.DownSealed]: string;\r\n [EBoardKeyList.LeftSealed]: string;\r\n [EBoardKeyList.RightSealed]: string;\r\n highDrill: string[];\r\n upDownDrill: [boolean, boolean];\r\n isClose: boolean;\r\n remarks: [string, string][];\r\n isChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: string;\r\n}\r\nexport interface IFindCondition\r\n{\r\n layer: boolean;\r\n [EBoardKeyList.Height]: boolean;\r\n [EBoardKeyList.Width]: boolean;\r\n [EBoardKeyList.Thick]: boolean;\r\n useWood: boolean;\r\n useDrill: boolean;\r\n useNail: boolean;\r\n useDoor: boolean;\r\n useDim: boolean;\r\n useSpecial: boolean;\r\n useModeling: boolean;\r\n [EBoardKeyList.RoomName]: boolean;\r\n [EBoardKeyList.CabinetName]: boolean;\r\n brName: boolean;\r\n [EBoardKeyList.Mat]: boolean;\r\n [EBoardKeyList.Lines]: boolean;\r\n [EBoardKeyList.BigHole]: boolean;\r\n [EBoardKeyList.DrillType]: boolean;\r\n useKeyWord: boolean;\r\n [EBoardKeyList.ComposingFace]: boolean;\r\n [EBoardKeyList.UpSealed]: boolean;\r\n [EBoardKeyList.DownSealed]: boolean;\r\n [EBoardKeyList.LeftSealed]: boolean;\r\n [EBoardKeyList.RightSealed]: boolean;\r\n upDrill: boolean;\r\n downDrill: boolean;\r\n leftDrill: boolean;\r\n rightDrill: boolean;\r\n useZhengFanDrill: boolean;\r\n useChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: boolean;\r\n}\r\n\r\nexport interface ICompareType\r\n{\r\n [EBoardKeyList.Height]: ECompareType;\r\n [EBoardKeyList.Width]: ECompareType;\r\n [EBoardKeyList.Thick]: ECompareType;\r\n [EBoardKeyList.RoomName]: ECompareType;\r\n [EBoardKeyList.CabinetName]: ECompareType;\r\n brName: ECompareType;\r\n [EBoardKeyList.BrMat]: ECompareType;\r\n [EBoardKeyList.Mat]: ECompareType;\r\n [EBoardKeyList.Color]: ECompareType;\r\n [EBoardKeyList.Lines]: ECompareType;\r\n [EBoardKeyList.BigHole]: ECompareType;\r\n [EBoardKeyList.DrillType]: ECompareType;\r\n [EBoardKeyList.ComposingFace]: ECompareType;\r\n [EBoardKeyList.KnifeRad]: ECompareType;\r\n}\r\nexport interface ITolerance\r\n{\r\n [EBoardKeyList.Height]: string;\r\n [EBoardKeyList.Width]: string;\r\n [EBoardKeyList.Thick]: string;\r\n [EBoardKeyList.KnifeRad]: string;\r\n}\r\n\r\nexport enum EFindType\r\n{\r\n Find = 0,\r\n Modify = 1,\r\n FindMaxSize = 2,\r\n FindSplite = 3,\r\n GetOption = 4,\r\n RemoveModeling = 5,\r\n RemoveSpecialShape = 6,\r\n RemoveModelingAndSpecial = 7,\r\n ModifyHardware = 8,\r\n FindMinSize = 9,\r\n}\r\n\r\nexport enum ECompareType\r\n{\r\n Equal = \"=\",\r\n UnEqual = \"!=\",\r\n Greater = \">=\",\r\n Less = \"<=\"\r\n}\r\n","import { IBaseOption } from \"./BoardInterface\";\r\n\r\nexport enum ELatticeArrayType\r\n{\r\n ByWidth = 0,\r\n ByCount = 1,\r\n}\r\n\r\nexport interface ILatticeOption extends IBaseOption\r\n{\r\n arrayType: ELatticeArrayType;\r\n gripWidth: number;\r\n gripDepth: number;\r\n widthCount: number;\r\n depthCount: number;\r\n knifeRad: number,\r\n thickness: number,\r\n arcLen: number;\r\n downDist: number;\r\n space: number; //四周间隙\r\n grooveAddWidth: number; //齿加宽\r\n upSealed: number;\r\n downSealed: number;\r\n leftSealed: number;\r\n rightSealed: number;\r\n isAuto: boolean; //自动识别弧长\r\n isChange: boolean; //左右侧板跟随变化\r\n isOpenCut: boolean;\r\n upCut: number;\r\n downCut: number;\r\n}\r\n","import { INeedUpdateParams } from \"../Components/Template/TemplateComponent\";\r\nimport { IBaseOption } from \"./BoardInterface\";\r\n\r\nexport interface IDoorAndDrawerConfigOption extends IBaseOption\r\n{\r\n col: number;\r\n row: number;\r\n isAllSelect: boolean; //是否行列全选\r\n topOffset: number; //上留空\r\n bottomOffset: number; //下留空\r\n doorPosType: DoorPosType;\r\n offset: number; //内偏移\r\n topExt: number;\r\n bottomExt: number;\r\n leftExt: number;\r\n rightExt: number;\r\n topSpace: number; //间隙\r\n bottomSpace: number;\r\n leftSpace: number;\r\n rightSpace: number;\r\n midSpace: number;\r\n thickness: number; //立板厚度\r\n depth: number; //立板深度\r\n isAuto: boolean; //智能识别\r\n boardName: string; //柜名\r\n handleAngle: number; //拉手\r\n handleHorPos: HandleHorPos; //水平位置距离\r\n horSpacing: number;\r\n handleVePos: HandleVePos; // 垂直位置距离\r\n veSpacing: number;\r\n upOffsetExpr: string;\r\n downOffsetExpr: string;\r\n}\r\n\r\n/**\r\n * 门板数据接口\r\n */\r\nexport interface IDoorConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n doorThickness: number; //门板厚度\r\n topBrSeal: number; //层板封边\r\n bottomBrSeal: number;\r\n leftBrSeal: number;\r\n rightBrSeal: number;\r\n topDoorSeal: number; //门板封边\r\n bottomDoorSeal: number;\r\n leftDoorSeal: number;\r\n rightDoorSeal: number;\r\n hingeCount: number; //铰链\r\n hindeTopDist: number;\r\n hindeBottomDist: number;\r\n}\r\n\r\n/**\r\n * 抽屉数据接口\r\n */\r\nexport interface IDrawerConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n drawerTotalDepth: number; //抽屉总深\r\n trackDepth: number; //轨道深度\r\n isAutoSelectTrack: boolean;\r\n isLockTopOffset: boolean;\r\n isLockBottomOffset: boolean;\r\n}\r\n\r\n//门板位置类型\r\nexport enum DoorPosType\r\n{\r\n Out = 0, //外盖\r\n In = 1,\r\n}\r\n\r\nexport enum HandleHorPos\r\n{\r\n Left = 0,\r\n Right = 1,\r\n Mid = 2,\r\n}\r\nexport enum HandleVePos\r\n{\r\n Top = 0,\r\n Bottom = 1,\r\n Mid = 2,\r\n}\r\n//门板开门类型\r\nexport enum DoorOpenDir\r\n{\r\n Left = \"lf\",\r\n Right = \"rt\",\r\n Top = \"tp\",\r\n Bottom = \"bm\",\r\n None = \"none\",\r\n}\r\n\r\n//抽屉门板信息\r\nexport interface IDrawerInfo extends IBaseOption\r\n{\r\n row: number,\r\n col: number,\r\n divWidth: number, //预览UI尺寸\r\n divHeight: number,\r\n showWidth: string, //UI展示数据\r\n showHeight: string,\r\n width: number, //门板计算尺寸\r\n height: number,\r\n isLockWidth: boolean,\r\n isLockHeight: boolean,\r\n isSelect: boolean;\r\n tempInfo: ISelectTempInfo;\r\n marginRight?: number;\r\n}\r\n\r\nexport interface IDoorInfo extends IDrawerInfo\r\n{\r\n openDir: DoorOpenDir,\r\n\r\n isDrawLayer: boolean;\r\n isDrawVer: boolean;\r\n}\r\n\r\nexport interface IDrawerDoorTempInfo\r\n{\r\n name: string;\r\n id: string;\r\n logo?: string;\r\n props?: INeedUpdateParams[];\r\n title?: string;\r\n isHandle?: boolean;\r\n tagName?: string;\r\n isKuGan?: boolean;\r\n}\r\n\r\n/**选择的模板信息,temp-抽屉或门板,handletemp-拉手模板,其他是铰链模板 */\r\nexport interface ISelectTempInfo\r\n{\r\n temp: IDrawerDoorTempInfo;\r\n handleTemp: IDrawerDoorTempInfo;\r\n hingeTemp?: IDrawerDoorTempInfo;\r\n [key: string]: IDrawerDoorTempInfo;\r\n}\r\n\r\n/**抽屉一定要有的参数 */\r\nexport const DrawerTempParName = [\"ZYS\", \"YYS\", \"SYS\", \"XYS\"];\r\n/**禁止改的属性 */\r\nexport const DisableChangeParName = [\"L\", \"W\", \"H\", \"ZYS\", \"YYS\", \"SYS\", \"XYS\", \"ZG\", \"YG\", \"SG\", \"XG\"];\r\n\r\n/**门板需要的参数 */\r\nexport const DoorNeedParamNames = [\"L\", \"W\", \"H\", \"PX\", \"PY\", \"PZ\", \"RX\", \"RY\", \"RZ\", \"SG\", \"XG\", \"ZG\", \"YG\", \"XBH\", \"BH\"];\r\n","import { IBaseOption } from \"../../Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\n\r\nexport interface IHardwareOption extends IBaseOption\r\n{\r\n name: string;\r\n unit: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n costExpr: string;\r\n actualExpr: string;\r\n model: string;\r\n factory: string;\r\n brand: string;\r\n spec: string;\r\n comments: string;\r\n isHole: boolean;\r\n}\r\n\r\nexport interface ICylMetalsOption extends IHardwareOption\r\n{\r\n rad: number;\r\n height: number;\r\n count: string;\r\n}\r\n\r\nexport interface IExtMetalsOption extends IHardwareOption\r\n{\r\n thickness: number;\r\n knifeRad: number;\r\n addLen: number;\r\n isHole: boolean;\r\n count: string;\r\n}\r\n\r\nexport enum EMetalsType\r\n{\r\n Metals = \"五金\",\r\n Comp = \"组件\",\r\n}\r\n\r\nexport interface ICompHardwareOption extends IHardwareOption\r\n{\r\n type: EMetalsType;\r\n isSplite: boolean;\r\n isSplitePrice: boolean;\r\n color: string;\r\n [EBoardKeyList.Mat]: string;\r\n count: string;\r\n}\r\n\r\nexport interface IToplineOption extends IHardwareOption\r\n{\r\n addLen: string;\r\n}\r\n","import { LayerBoardOption, BrRelativePos, VerticalBoardOption, BehindBoardOption, BehindHeightPositon, TBBoardOption, LayerNailOption, SingleBoardOption, ClosingStripOption, StripType, LinesType, FaceDirection, ComposingType, IBoardBatchCurtailOption, CurtailType, BoardProcessOption, SideBoardOption, BoardType } from \"../UI/Store/BoardInterface\";\r\nimport { IWineRackOption, EWineRackType, EWRackArrayType, EFullType, EFullDir } from \"../UI/Store/WineRackInterface\";\r\nimport { IBoardFindOption, ECompareType } from \"../UI/Store/BoardFindInterface\";\r\nimport { ILatticeOption, ELatticeArrayType } from \"../UI/Store/LatticeInterface\";\r\nimport { HandleVePos, DoorPosType, HandleHorPos, IDrawerConfigOption, IDoorConfigOption } from \"../UI/Store/DoorInterface\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { ICylMetalsOption, IExtMetalsOption, ICompHardwareOption, EMetalsType, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { Curve2RecOption } from \"../Add-on/twoD2threeD/Modals/Curve2RecModal\";\r\nimport { IUpdateBoardInfosOption } from \"../UI/Components/Board/UpdateBoardInfointerface\";\r\nimport { IRec2BrOption } from \"../Add-on/twoD2threeD/R2bInterface\";\r\n\r\nexport const DefaultLayerBoardConfig: LayerBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"层板\",\r\n frontShrink: 0,\r\n leftShrink: 0,\r\n rightShrink: 0,\r\n calcHeight: \"W\",\r\n isTotalLength: true,\r\n boardRelative: BrRelativePos.Div,\r\n thickness: 18,\r\n count: 1,\r\n spaceSize: 300,\r\n isActive: false,\r\n calcSpaceSize: \"0\",\r\n calcFrontShrink: \"0\",\r\n calcLeftShrink: \"0\",\r\n calcRightShrink: \"0\",\r\n};\r\nObject.freeze(DefaultLayerBoardConfig);\r\n\r\nexport const DefaultVerticalBoardConfig: VerticalBoardOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"立板\",\r\n frontShrink: 0,\r\n bottomShrink: 0,\r\n calcWidth: \"W\",\r\n calcHeight: \"H\",\r\n isTotalLength: true,\r\n isTotalWidth: true,\r\n boardRelative: BrRelativePos.Div,\r\n thickness: 18,\r\n count: 1,\r\n spaceSize: 0,\r\n calcSpaceSize: \"0\",\r\n calcBottomShrink: \"0\",\r\n calcFrontShrink: \"0\",\r\n};\r\nObject.freeze(DefaultVerticalBoardConfig);\r\n\r\nexport const DefaultBehindBoardConfig: BehindBoardOption = {\r\n version: 2,\r\n type: BoardType.Behind,\r\n name: \"背板\",\r\n leftExt: 0,\r\n rightExt: 0,\r\n topExt: 0,\r\n bottomExt: 0,\r\n thickness: 18,\r\n boardPosition: BehindHeightPositon.AllHeight,\r\n calcHeight: \"H\",\r\n moveDist: 0,\r\n boardRelative: BrRelativePos.Back,\r\n spaceSize: 0,\r\n count: 1,\r\n calcSpaceSize: \"0\",\r\n calcMoveDist: \"0\",\r\n};\r\nObject.freeze(DefaultBehindBoardConfig);\r\n\r\nexport const DefaultWineRackConfig: IWineRackOption = {\r\n version: 1,\r\n type: EWineRackType.Oblique,\r\n arrayType: EWRackArrayType.ByWidth,\r\n fullType: EFullType.ByWidth,\r\n isFull: false,\r\n isLock: false,\r\n fullDir: EFullDir.Left,\r\n heightCount: 3.5,\r\n widthCount: 3.5,\r\n isTotalDepth: true,\r\n depth: 0,\r\n gripWidth: 100,\r\n calcDepth: \"W\",\r\n boardThick: 18,\r\n grooveWidthAdd: 0,\r\n leftEdge: 1,\r\n rightEdge: 1,\r\n topEdge: 1,\r\n bottomEdge: 1,\r\n frontCut: 0,\r\n leftCut: 0,\r\n rightCut: 0,\r\n topCut: 0,\r\n grooveLengthAdd: 3,\r\n isDrawLy: false,\r\n isDrawVer: false,\r\n brThick2: 18,\r\n};\r\nObject.freeze(DefaultWineRackConfig);\r\n\r\nexport const DefaultTopBoardOption: TBBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"顶板\",\r\n isDraw: true,\r\n thickness: 18,\r\n frontDist: 0,\r\n behindDistance: 0,\r\n isWrapSide: false,\r\n useLFData: true,\r\n leftExt: 0,\r\n rightExt: 0,\r\n offset: 0,\r\n};\r\nObject.freeze(DefaultTopBoardOption);\r\n\r\nexport const DefaultBottomBoardOption: TBBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"底板\",\r\n isDraw: true,\r\n thickness: 18,\r\n frontDist: 0,\r\n behindDistance: 0,\r\n isWrapSide: false,\r\n useLFData: true,\r\n leftExt: 0,\r\n rightExt: 0,\r\n offset: 80,\r\n footThickness: 18,\r\n isDrawFooter: true,\r\n footBehindShrink: 0,\r\n isDrawBackFooter: false,\r\n isDrawStrengthenStrip: false,\r\n footerOffset: 0,\r\n divCount: 1,\r\n};\r\nObject.freeze(DefaultBottomBoardOption);\r\n\r\nexport const DefaultSideBoardOption: SideBoardOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"\",\r\n height: 2000,\r\n width: 600,\r\n thickness: 18,\r\n spaceSize: 1200,\r\n leftShrink: 0,\r\n rightShrink: 0,\r\n};\r\nObject.freeze(DefaultSideBoardOption);\r\n\r\nexport const DefaultSingleBoardOption: SingleBoardOption = {\r\n version: 1,\r\n name: \"层板\",\r\n type: BoardType.Layer,\r\n height: 1200,\r\n width: 600,\r\n thickness: 18,\r\n rotateX: 0,\r\n rotateY: 0,\r\n rotateZ: 0\r\n};\r\nObject.freeze(DefaultSingleBoardOption);\r\n\r\nexport const DefaultClosingStripOption: ClosingStripOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"收口条\",\r\n striptype: StripType.H,\r\n boardRelative: BrRelativePos.Left,\r\n width: 54,\r\n thickness: 18,\r\n frontShrink: 0,\r\n isDrawFuZhu: true,\r\n fzWidth: 80,\r\n fzThickness: 18,\r\n};\r\nObject.freeze(DefaultClosingStripOption);\r\n\r\nexport const DefaultBoardFindOption: IBoardFindOption = {\r\n version: 5,\r\n condition: {\r\n layer: false,\r\n height: false,\r\n width: false,\r\n thickness: false,\r\n useWood: false,\r\n useDrill: false,\r\n useNail: false,\r\n useDoor: false,\r\n useDim: false,\r\n useSpecial: false,\r\n useModeling: false,\r\n roomName: false,\r\n cabinetName: false,\r\n brName: false,\r\n material: false,\r\n lines: false,\r\n bigHoleDir: false,\r\n drillType: false,\r\n useKeyWord: false,\r\n composingFace: false,\r\n sealedUp: false,\r\n sealedDown: false,\r\n sealedLeft: false,\r\n sealedRight: false,\r\n upDrill: false,\r\n downDrill: false,\r\n leftDrill: false,\r\n rightDrill: false,\r\n useZhengFanDrill: false,\r\n useChaidan: false,\r\n [EBoardKeyList.KnifeRad]: false,\r\n },\r\n compareType: {\r\n height: ECompareType.Equal,\r\n width: ECompareType.Equal,\r\n thickness: ECompareType.Equal,\r\n roomName: ECompareType.Equal,\r\n cabinetName: ECompareType.Equal,\r\n brName: ECompareType.Equal,\r\n [EBoardKeyList.Mat]: ECompareType.Equal,\r\n [EBoardKeyList.Color]: ECompareType.Equal,\r\n [EBoardKeyList.BrMat]: ECompareType.Equal,\r\n lines: ECompareType.Equal,\r\n bigHoleDir: ECompareType.Equal,\r\n drillType: ECompareType.Equal,\r\n composingFace: ECompareType.Equal,\r\n [EBoardKeyList.KnifeRad]: ECompareType.Equal,\r\n\r\n },\r\n tolerance: {\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n },\r\n layer: \"0\",\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n brName: \"\",\r\n [EBoardKeyList.BrMat]: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n drillType: \"\",\r\n composingFace: ComposingType.Positive,\r\n sealedUp: \"\",\r\n sealedDown: \"\",\r\n sealedLeft: \"\",\r\n sealedRight: \"\",\r\n highDrill: [],\r\n upDownDrill: [true, true],\r\n isClose: false,\r\n remarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n isChaidan: false,\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n};\r\nObject.freeze(DefaultBoardFindOption);\r\n\r\nexport const DefaultLatticOption: ILatticeOption = {\r\n version: 1,\r\n arrayType: ELatticeArrayType.ByWidth,\r\n gripWidth: 100,\r\n gripDepth: 100,\r\n widthCount: 3,\r\n depthCount: 4,\r\n knifeRad: 3,\r\n thickness: 18,\r\n arcLen: 50,\r\n downDist: 0,\r\n space: 0.2,\r\n grooveAddWidth: 0.2,\r\n upSealed: 1,\r\n downSealed: 1,\r\n leftSealed: 1,\r\n rightSealed: 1,\r\n isAuto: true,\r\n isChange: true,\r\n isOpenCut: false,\r\n upCut: 0,\r\n downCut: 4,\r\n};\r\nObject.freeze(DefaultLatticOption);\r\n\r\nexport const DefaultDoorOption: IDoorConfigOption = {\r\n version: 3,\r\n col: 2,\r\n row: 1,\r\n isAllSelect: true,\r\n topOffset: 0,\r\n bottomOffset: 0,\r\n doorPosType: DoorPosType.Out,\r\n offset: 0,\r\n topExt: 18,\r\n bottomExt: 18,\r\n leftExt: 18,\r\n rightExt: 18,\r\n topSpace: 2,\r\n bottomSpace: 2,\r\n leftSpace: 2,\r\n rightSpace: 2,\r\n midSpace: 2,\r\n thickness: 18,\r\n depth: 0,\r\n isAuto: true,\r\n boardName: \"\",\r\n doorThickness: 18,\r\n topBrSeal: 1,\r\n bottomBrSeal: 1,\r\n leftBrSeal: 1,\r\n rightBrSeal: 1,\r\n topDoorSeal: 1,\r\n bottomDoorSeal: 1,\r\n leftDoorSeal: 1,\r\n rightDoorSeal: 1,\r\n handleAngle: 0,\r\n handleHorPos: HandleHorPos.Right,\r\n horSpacing: 50,\r\n handleVePos: HandleVePos.Mid,\r\n veSpacing: 10,\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n downOffsetExpr: \"0\",\r\n upOffsetExpr: \"0\",\r\n};\r\nObject.freeze(DefaultDoorOption);\r\n\r\nexport const DefaultDrawerOption: IDrawerConfigOption = {\r\n version: 4,\r\n col: 1,\r\n row: 1,\r\n isAllSelect: true,\r\n topOffset: 0,\r\n bottomOffset: 0,\r\n doorPosType: DoorPosType.Out,\r\n offset: 0,\r\n topExt: 18,\r\n bottomExt: 18,\r\n leftExt: 18,\r\n rightExt: 18,\r\n topSpace: 2,\r\n bottomSpace: 2,\r\n leftSpace: 2,\r\n rightSpace: 2,\r\n midSpace: 2,\r\n thickness: 18,\r\n depth: 0,\r\n isAuto: true,\r\n boardName: \"\",\r\n handleAngle: 90,\r\n handleHorPos: HandleHorPos.Mid,\r\n horSpacing: 10,\r\n handleVePos: HandleVePos.Mid,\r\n veSpacing: 10,\r\n drawerTotalDepth: 0,\r\n trackDepth: 0,\r\n isAutoSelectTrack: true,\r\n isLockTopOffset: false,\r\n isLockBottomOffset: false,\r\n downOffsetExpr: \"0\",\r\n upOffsetExpr: \"0\",\r\n};\r\nObject.freeze(DefaultDrawerOption);\r\n\r\nexport const DefaultBoardBatchCurtailOption: IBoardBatchCurtailOption = {\r\n version: 1,\r\n type: CurtailType.Total,\r\n front: 0,\r\n back: 0,\r\n left: 0,\r\n right: 0,\r\n moveBrs: false,\r\n};\r\nObject.freeze(DefaultBoardBatchCurtailOption);\r\n\r\nexport const DefaultLatticeConfig: ILatticeOption = {\r\n arrayType: ELatticeArrayType.ByWidth,\r\n gripWidth: 100,\r\n gripDepth: 100,\r\n widthCount: 3,\r\n depthCount: 4,\r\n knifeRad: 3,\r\n thickness: 18,\r\n arcLen: 50,\r\n downDist: 0,\r\n space: 0.5,\r\n grooveAddWidth: 0,\r\n upSealed: 1,\r\n downSealed: 0,\r\n leftSealed: 0,\r\n rightSealed: 0,\r\n isAuto: true,\r\n isChange: true,\r\n isOpenCut: false,\r\n upCut: 0,\r\n downCut: 4,\r\n};\r\nObject.freeze(DefaultLatticeConfig);\r\n\r\nexport const DefaultNailOption: LayerNailOption = {\r\n version: 1,\r\n isDraw: true,\r\n addCount: 0,\r\n dist: 50,\r\n isGroup: false,\r\n isInBack: false,\r\n front: 50,\r\n behind: 50,\r\n count: 2,\r\n rad: 2.5,\r\n length: 34,\r\n depth: 11\r\n};\r\nObject.freeze(DefaultNailOption);\r\n\r\nexport const DefaultCylinederMetalsOption: ICylMetalsOption = {\r\n version: 2,\r\n rad: 50,\r\n height: 200,\r\n name: \"圆柱体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*R*R*3.14\",\r\n actualExpr: \"L*R*R*3.14*3\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n comments: \"\",\r\n isHole: true,\r\n};\r\nObject.freeze(DefaultCylinederMetalsOption);\r\nexport const DefaultExtruderMetalsOption: IExtMetalsOption = {\r\n version: 1,\r\n thickness: 100,\r\n knifeRad: 0,\r\n isHole: true,\r\n addLen: 0,\r\n name: \"拉伸实体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*W*H*100\",\r\n actualExpr: \"L*W*H*200\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n comments: \"\",\r\n};\r\nObject.freeze(DefaultExtruderMetalsOption);\r\nexport const DefaultCompositeMetalsOption: ICompHardwareOption = {\r\n version: 2,\r\n type: EMetalsType.Metals,\r\n isSplite: false,\r\n isSplitePrice: false,\r\n name: \"复合实体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*W*H*100\",\r\n actualExpr: \"L*W*H*300\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n color: \"\",\r\n material: \"\",\r\n comments: \"\",\r\n isHole: true,\r\n};\r\nObject.freeze(DefaultCompositeMetalsOption);\r\nexport const DefaultToplineMetalsOption: IToplineOption = {\r\n version: 3,\r\n name: \"顶线\",\r\n unit: \"毫米\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"\",\r\n actualExpr: \"\",\r\n model: \"\",\r\n factory: \"\",\r\n brand: \"\",\r\n spec: \"\",\r\n comments: \"\",\r\n addLen: \"0\",\r\n isHole: false,\r\n};\r\nObject.freeze(DefaultToplineMetalsOption);\r\n\r\nexport const DefaultBoardProcessOption: BoardProcessOption = {\r\n version: 3,\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n boardName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n drillType: \"\",\r\n composingFace: ComposingType.Arbitrary,\r\n highSealed: [],\r\n sealedUp: \"1\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n spliteHeight: \"\",\r\n spliteWidth: \"\",\r\n spliteThickness: \"\",\r\n highDrill: [],\r\n frontDrill: true,\r\n backDrill: true,\r\n remarks: [],\r\n useBoardProcessOption: true,\r\n};\r\nObject.freeze(DefaultBoardProcessOption);\r\n\r\nexport const DefaultCurve2RecOption: Curve2RecOption = {\r\n version: 1,\r\n isSaveMax: false,\r\n isSaveSmall: true,\r\n width: 90,\r\n isAnaly: true,\r\n gap: 3\r\n};\r\nObject.freeze(DefaultCurve2RecOption);\r\n\r\nexport const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {\r\n [EBoardKeyList.RoomName]: \"\",\r\n [EBoardKeyList.CabinetName]: \"\",\r\n [EBoardKeyList.Lines]: LinesType.Positive,\r\n [EBoardKeyList.BigHole]: FaceDirection.Front,\r\n [EBoardKeyList.DrillType]: \"\",\r\n [EBoardKeyList.ComposingFace]: ComposingType.Arbitrary,\r\n upDownDrill: [true, true],\r\n [EBoardKeyList.UpSealed]: \"1\",//封边上下左右\r\n [EBoardKeyList.DownSealed]: \"1\",\r\n [EBoardKeyList.LeftSealed]: \"1\",\r\n [EBoardKeyList.RightSealed]: \"1\",\r\n [EBoardKeyList.KnifeRad]: \"3\",\r\n remarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n [EBoardKeyList.BrMat]: \"\",\r\n [EBoardKeyList.Mat]: \"\",\r\n [EBoardKeyList.Color]: \"\",\r\n grooveAddDepth: \"0\",\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n highDrill: [],\r\n condition: {\r\n [EBoardKeyList.RoomName]: false,\r\n [EBoardKeyList.CabinetName]: false,\r\n [EBoardKeyList.Lines]: true,\r\n [EBoardKeyList.BigHole]: true,\r\n [EBoardKeyList.DrillType]: true,\r\n [EBoardKeyList.ComposingFace]: true,\r\n [EBoardKeyList.UpSealed]: true,\r\n [EBoardKeyList.DownSealed]: true,\r\n [EBoardKeyList.LeftSealed]: true,\r\n [EBoardKeyList.RightSealed]: true,\r\n useZhengFanDrill: true,\r\n remarks: true,\r\n [EBoardKeyList.KnifeRad]: true,\r\n [EBoardKeyList.Mat]: true,\r\n grooveAddDepth: true,\r\n grooveAddLength: true,\r\n grooveAddWidth: true,\r\n upDrill: true,\r\n downDrill: true,\r\n leftDrill: true,\r\n rightDrill: true,\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption = {\r\n count: 1,\r\n isHor: false,\r\n depth: 0,\r\n isDefault: true,\r\n leftDist: 0,\r\n rightDist: 0,\r\n};\r\nObject.freeze(DefaultKuGanOption);\r\n\r\nexport const DefaultR2bOption: IRec2BrOption = {\r\n version: 2,\r\n cabinetDeep: 400,\r\n cabinetBrThick: 18,\r\n cabinetCurtail: 0,\r\n backBrThick: 18,\r\n backBrBiggerThanHeight: 200,\r\n backBrBiggerThanWidth: 200,\r\n backBrFrontMove: 0,\r\n backBrLeftExtend: 0,\r\n backBrRightExtend: 0,\r\n backBrUpExtend: 0,\r\n backBrDownExtend: 0,\r\n verticalBrShrink: 0,\r\n layerBrShrink: 0,\r\n topBrShrink: 0,\r\n bottomBrShrink: 0,\r\n groundLineBrShrink: 0,\r\n farLeftVerticalBrName: \"左侧板\",\r\n farRightVerticalBrName: \"右侧板\",\r\n topMostLayerBrName: \"顶板\",\r\n bottomMostLayerBrName: \"底板\",\r\n bottomMostBackBrName: \"地脚线\",\r\n stripeBrName: \"收口条\",\r\n cabinetName: \"\",\r\n isfarLeftVerticalBrName: true,//最左侧立板名称\r\n isfarRightVerticalBrName: true,\r\n istopMostLayerBrName: true,\r\n isbottomMostLayerBrName: true,\r\n isbottomMostBackBrName: true,\r\n isstripeBrName: true,\r\n iscabinetName: false,//修改柜名\r\n isMultiBackBr: false,\r\n grooveOption: {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n },\r\n roomName: \"\",\r\n boardMatName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n drillType: \"\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n sealedUp: \"1\",\r\n backBrUseTemplate: false,\r\n backBrTemplate: null,\r\n remarks: Array.from({ length: 12 }, () => [\"\", \"\"]),\r\n maxThickness: 20,\r\n useBrName: true,\r\n configName: \"\",\r\n backBrName: \"背板\",\r\n behindIsRelative: false,\r\n footerThickness: 18,\r\n};\r\nObject.freeze(DefaultR2bOption);\r\n","export function equaln(v1: number, v2: number, fuzz = 1e-5)\r\n{\r\n return Math.abs(v1 - v2) <= fuzz;\r\n}\r\n\r\nexport function FixIndex(index: number, arr: Array | number)\r\n{\r\n let count = (arr instanceof Array) ? arr.length : arr;\r\n if (index < 0)\r\n return count + index;\r\n else if (index >= count)\r\n return index - count;\r\n else\r\n return index;\r\n}\r\n\r\n/**\r\n * @param compart 如果t2大于t1那么返回t2\r\n * @returns 索引\r\n */\r\nexport function Max(arr: T[], compart: (t1: T, t2: T) => boolean): number\r\n{\r\n let best: T = arr[0];\r\n let bestIndex = 0;\r\n for (let i = 1; i < arr.length; i++)\r\n {\r\n let t1 = arr[i];\r\n if (compart(best, t1))\r\n {\r\n best = t1;\r\n bestIndex = i;\r\n }\r\n }\r\n return bestIndex;\r\n}\r\n","import { Face3, Geometry, Line3, Matrix4, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector3, equalv3 } from \"./GeUtils\";\r\nimport { PlaneExt } from \"./Plane\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\n\r\n/**\r\n * 使用轮廓和扫描路径构建扫描几何体,实现衣柜中的顶线或者地脚线之类的实体.\r\n * 该几何体需要轮廓和路径的起始截面垂直,否则构造的实体将会错误.\r\n */\r\nexport class SweepGeometry extends Geometry\r\n{\r\n edgePts: number[] = [];\r\n constructor(contour: Polyline, path: Curve)\r\n {\r\n super();\r\n\r\n this.AddShape(contour, path);\r\n this.computeVertexNormals();\r\n this.computeFaceNormals();\r\n }\r\n\r\n AddShape(contour: Polyline, path: Curve)\r\n {\r\n //路径点表\r\n let pathPts2d = path.Shape.getPoints(8);\r\n let pathPts = pathPts2d.map(AsVector3);\r\n arrayRemoveDuplicateBySort(pathPts, equalv3);\r\n for (let p of pathPts)\r\n p.applyMatrix4(path.OCS);\r\n\r\n let shapePts2d = contour.Shape.getPoints(3);\r\n if (!ShapeUtils.isClockWise(shapePts2d)) shapePts2d.reverse();\r\n\r\n //轮廓点表\r\n let shapePts3d = shapePts2d.map(AsVector3);\r\n\r\n for (let p of shapePts3d)\r\n p.applyMatrix4(contour.OCS);\r\n\r\n let isClosePath = path.IsClose;\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[0], pathPts[pathPts.length - 2], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[0], undefined, pathPts[1]));\r\n //遍历所有的路径节点进行顶点投射\r\n for (let i = 1; i < pathPts.length; i++)\r\n {\r\n if (i === pathPts.length - 1)\r\n {\r\n if (isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n private BuildSideFaces(shapePts2d: Vector2[], pathPts2d: Vector2[], pathPts: Vector3[], verts: Vector3[][])\r\n {\r\n let addCount = 0; //补充个数\r\n shapePts2d[0][\"_mask_\"] = true;\r\n for (let p of shapePts2d) if (p[\"_mask_\"]) addCount++;\r\n let sumCount = addCount + shapePts2d.length; //实际个数\r\n const f4 = (a: number, b: number, c: number, d: number, uvs: Vector2[]) =>\r\n {\r\n let f1 = new Face3(a, b, c);\r\n let f2 = new Face3(b, d, c);\r\n this.faces.push(f1, f2);\r\n this.faceVertexUvs[0].push([uvs[0].clone(), uvs[1].clone(), uvs[2].clone()], [uvs[1].clone(), uvs[3].clone(), uvs[2].clone()]);\r\n };\r\n let vs: number[] = [0]; //vs 对应 y轴\r\n for (let i = 1; i < shapePts2d.length; i++)\r\n vs.push((vs[i - 1] + shapePts2d[i].distanceTo(shapePts2d[i - 1]) * 1e-3));\r\n\r\n let lastStartX = 0;\r\n for (let pathIndex = 0; pathIndex < verts.length; pathIndex++)\r\n {\r\n let pts = verts[pathIndex];\r\n let pts2 = verts[FixIndex(pathIndex + 1, verts)];\r\n\r\n let startIndex = this.vertices.length;\r\n let pBase = pts[0];\r\n let p1 = pathPts[pathIndex];\r\n let p2 = pathPts[FixIndex(pathIndex + 1, pathPts.length)];\r\n let p1Dir = p2.clone().sub(p1).normalize();\r\n\r\n let tempStartX = 0;\r\n\r\n for (let contourIndex = 0; contourIndex < shapePts2d.length; contourIndex++)\r\n {\r\n let p1 = pts[contourIndex];\r\n let p2 = pts2[contourIndex];\r\n let p2d = shapePts2d[contourIndex];\r\n\r\n if (pathIndex !== verts.length - 1)\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.edgePts.push(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z);\r\n\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.vertices.push(p1); //补点\r\n\r\n if (pathIndex !== verts.length - 1)\r\n {\r\n let curIndex = this.vertices.length;\r\n let nextIndex = startIndex + FixIndex(curIndex - startIndex + 1, sumCount);\r\n let curIndex2 = curIndex + sumCount;\r\n let nextIndex2 = nextIndex + sumCount;\r\n\r\n let x1 = lastStartX + p1.clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n let x2 = lastStartX + pts[FixIndex(contourIndex + 1, shapePts2d)].clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n\r\n let x3 = lastStartX + p2.clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n let x4 = lastStartX + pts2[FixIndex(contourIndex + 1, shapePts2d)].clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n\r\n if (contourIndex === 0)\r\n tempStartX = x3;\r\n\r\n let v1 = vs[contourIndex];\r\n let v2 = vs[FixIndex(contourIndex + 1, vs)];\r\n let uvs = [\r\n new Vector2(v1, x1),\r\n new Vector2(v2, x2),\r\n new Vector2(v1, x3),\r\n new Vector2(v2, x4),\r\n ];\r\n f4(curIndex, nextIndex, curIndex2, nextIndex2, uvs);\r\n }\r\n this.vertices.push(p1);\r\n }\r\n lastStartX = tempStartX;\r\n\r\n if (pathPts2d[FixIndex(pathIndex + 1, verts)][\"_mask_\"])\r\n {\r\n for (let contourIndex = 0; contourIndex < shapePts2d.length; contourIndex++)\r\n {\r\n let p1 = pts2[contourIndex];\r\n let p2d = shapePts2d[contourIndex];\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.vertices.push(p1); //补点\r\n this.vertices.push(p1);\r\n\r\n let p2 = pts2[FixIndex(contourIndex + 1, pts2)];\r\n this.edgePts.push(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private BuildLid(shapePts2d: Vector2[], verts: Vector3[][])\r\n {\r\n //轮廓三角网格索引\r\n let faces = ShapeUtils.triangulateShape(shapePts2d, []);\r\n for (let v of shapePts2d) v.multiplyScalar(1e-3);//作为uvs\r\n let lastIndex = this.vertices.length;\r\n this.vertices.push(...verts[0].map(p => p.clone()));\r\n this.vertices.push(...verts[verts.length - 1].map(p => p.clone()));\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n this.faces.push(new Face3(lastIndex + a, lastIndex + b, lastIndex + c));\r\n let uvs = faces[i].map(index => shapePts2d[index].clone());\r\n this.faceVertexUvs[0].push(uvs);\r\n this.faces.push(new Face3(lastIndex + verts[0].length + c, lastIndex + verts[0].length + b, lastIndex + verts[0].length + a));\r\n this.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n\r\n //构建线框\r\n for (let i = 0; i < shapePts2d.length; i++)\r\n {\r\n let nextIndex = FixIndex(i + 1, shapePts2d);\r\n\r\n let pts1 = verts[0];\r\n let p0 = pts1[i];\r\n let p1 = pts1[nextIndex];\r\n this.edgePts.push(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z);\r\n\r\n let pts2 = verts[verts.length - 1];\r\n p0 = pts2[i];\r\n p1 = pts2[nextIndex];\r\n this.edgePts.push(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 将轮廓变换到`路径上某个点`.\r\n *\r\n * @param {Vector3[]} contourPts 原始的轮廓点(在世界坐标系)\r\n * @param {Vector3} normal 路径法向量\r\n * @param {Vector3} curP 路径上当前点\r\n * @param {Vector3} [preP] 路径的前一个点\r\n * @param {Vector3} [nextP] 路径下一个点\r\n * @returns 变换后的轮廓点表\r\n */\r\nfunction ProjectionToPlane(contourPts: Vector3[], normal: Vector3, curP: Vector3, preP?: Vector3, nextP?: Vector3): Vector3[]\r\n{\r\n let pts: Vector3[];\r\n if (!preP && nextP)\r\n {\r\n let mat = ContourTransfromToPath(curP, normal, nextP.clone().sub(curP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n }\r\n else if (!nextP && preP)\r\n {\r\n let mat = ContourTransfromToPath(curP, normal, curP.clone().sub(preP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n }\r\n else if (nextP && preP)\r\n {\r\n let dir = curP.clone().sub(preP).normalize();\r\n let v2 = nextP.clone().sub(curP).normalize();\r\n //角平分线向量\r\n let v = dir.clone().sub(v2);\r\n //v1v2pm向量\r\n let nv1v2 = dir.clone().cross(v2);\r\n let norm = nv1v2.cross(v);\r\n\r\n //角平分线的平面\r\n let plane = new PlaneExt(norm, curP);\r\n\r\n let mat = ContourTransfromToPath(preP, normal, dir);\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n pts = pts.map(p => plane.intersectLine(new Line3(p, p.clone().add(dir)), new Vector3(), true));\r\n }\r\n return pts;\r\n}\r\n\r\n/**\r\n * 计算轮廓变换到`路径上某个点`的矩阵\r\n *\r\n * @param {Vector3} pt 路径上的点\r\n * @param {Vector3} norm 曲线法向量\r\n * @param {Vector3} dir 点前进的方向.\r\n * @returns {Matrix4}\r\n */\r\nfunction ContourTransfromToPath(pt: Vector3, norm: Vector3, dir: Vector3): Matrix4\r\n{\r\n let vy = norm;\r\n let vz = dir.normalize();\r\n let vx = vz.clone().cross(vy);\r\n\r\n let mat = new Matrix4();\r\n mat.makeBasis(vx, vy, vz);\r\n mat.setPosition(pt);\r\n return mat;\r\n}\r\n","import { BufferGeometry, CatmullRomCurve3, Line, MathUtils, Matrix3, Object3D, Shape, Vector3 } from 'three';\r\nimport { arrayLast } from '../Common/ArrayExt';\r\nimport { ColorMaterial } from '../Common/ColorPalette';\r\nimport { Pts2Polyline } from '../Common/CurveUtils';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../Geometry/BufferGeometryUtils';\r\nimport { equalv3 } from '../Geometry/GeUtils';\r\nimport { RenderType } from '../GraphicsSystem/RenderType';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Curve } from './Entity/Curve';\r\n\r\n@Factory\r\nexport class Spline extends Curve\r\n{\r\n private _PointList: Vector3[];\r\n private _ClosedMark: boolean = false;\r\n constructor(points?: Vector3[])\r\n {\r\n super();\r\n this._PointList = points || [];\r\n }\r\n\r\n get Shape()\r\n {\r\n return new Shape();\r\n }\r\n get Curve3()\r\n {\r\n return new CatmullRomCurve3(this.Points);\r\n }\r\n\r\n get Length()\r\n {\r\n return this.Curve3.getLength();\r\n }\r\n\r\n get Points()\r\n {\r\n return this._PointList;\r\n }\r\n set Points(v: Vector3[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._PointList = v.map(p => p.clone().applyMatrix4(this.OCSInv));\r\n this.Update();\r\n }\r\n //闭合标志\r\n get CloseMark(): boolean\r\n {\r\n return this._ClosedMark;\r\n }\r\n //曲线是否闭合\r\n get IsClose(): boolean\r\n {\r\n return this.CloseMark || (equalv3(this.StartPoint, this.EndPoint, 1e-4)) && this.EndParam > 1;\r\n }\r\n set CloseMark(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = v;\r\n this.Update();\r\n }\r\n get StartPoint()\r\n {\r\n return this._PointList[0];\r\n }\r\n get EndPoint()\r\n {\r\n return arrayLast(this._PointList);\r\n }\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return this._PointList.length - 1;\r\n }\r\n GetGripPoints()\r\n {\r\n return this._PointList.map(p => p.clone().applyMatrix4(this.OCS));\r\n }\r\n GetStretchPoints()\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n this._PointList[index].add(vec);\r\n }\r\n this.Update();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n this._PointList[index].add(vec);\r\n }\r\n this.Update();\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let geometry = new BufferGeometry().setFromPoints(this.Curve3.getPoints(60));\r\n return new Line(geometry, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let spl = en as Line;\r\n if (this.CloseMark && !equalv3(this._PointList[0], arrayLast(this._PointList)))\r\n this._PointList.push(this._PointList[0].clone());\r\n let curve = this.Curve3;\r\n\r\n let pts = curve.getPoints(this.Points.length * 10);\r\n if (!BufferGeometryUtils.UpdatePts(spl.geometry as BufferGeometry, pts))\r\n {\r\n spl.geometry.dispose();\r\n spl.geometry = BufferGeometryUtils.CreateFromPts(pts);\r\n }\r\n }\r\n Convert2Polyline(count = 0)\r\n {\r\n let curve3 = this.Curve3;\r\n\r\n //修正个数\r\n if (!count) count = Math.floor(curve3.getLength() / 30);\r\n count = MathUtils.clamp(count, this._PointList.length * 5, this._PointList.length * 20);\r\n\r\n if ((count & 1) === 1)\r\n count++;\r\n\r\n let pts = curve3.getPoints(count);\r\n\r\n let isClose = this.IsClose;\r\n if (isClose) pts.pop();\r\n\r\n let pl = Pts2Polyline(pts, isClose);\r\n pl.CloseMark = isClose;\r\n pl.ApplyMatrix(this.OCS);\r\n return pl;\r\n\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n let count = file.Read();\r\n this._PointList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this._PointList.push(new Vector3().fromArray(file.Read()));\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.Write(this._PointList.length);\r\n this._PointList.forEach(p => file.Write(p.toArray()));\r\n }\r\n}\r\n","import { Vector3, Matrix4 } from 'three';\r\n\r\n// Quote from:\r\n// https://github.com/Mugen87/yume/blob/master/src/javascript/engine/etc/OBB.js\r\n// 即obb.js(本项目中已存在)\r\n\r\n// Reference material:\r\n//https://stackoverflow.com/questions/28499800/oriented-box-intersection-in-threejs\r\n//http://www.cnblogs.com/iamzhanglei/archive/2012/06/07/2539751.html\r\n//https://github.com/Mugen87/yume/blob/master/src/javascript/engine/etc/OBB.js\r\n\r\nexport class OBB\r\n{\r\n _EPSILON = 1e-3;\r\n\r\n public center: Vector3;\r\n\r\n constructor(public ocs: Matrix4, public halfSizes: Vector3)\r\n {\r\n this.center = halfSizes.clone().applyMatrix4(ocs);\r\n }\r\n\r\n intersectsOBB(obb: OBB, is2D?: boolean, ucsInv?: Matrix4): boolean\r\n {\r\n let newCenter: Vector3;\r\n let newObbCenter: Vector3;\r\n let cs: Matrix4;\r\n let obbcs: Matrix4;\r\n if (is2D)\r\n {\r\n let mtx1 = new Matrix4().multiplyMatrices(ucsInv, this.ocs);\r\n let mtx2 = new Matrix4().multiplyMatrices(ucsInv, obb.ocs);\r\n cs = mtx1;\r\n obbcs = mtx2;\r\n cs.elements[14] = 0;\r\n obbcs.elements[14] = 0;\r\n newCenter = this.halfSizes.clone().applyMatrix4(cs);\r\n newObbCenter = obb.halfSizes.clone().applyMatrix4(obbcs);\r\n }\r\n let xAxisA = new Vector3();\r\n let yAxisA = new Vector3();\r\n let zAxisA = new Vector3();\r\n\r\n let xAxisB = new Vector3();\r\n let yAxisB = new Vector3();\r\n let zAxisB = new Vector3();\r\n\r\n let translation = new Vector3();\r\n\r\n let vector = new Vector3();\r\n\r\n let axisA: Vector3[] = [];\r\n let axisB: Vector3[] = [];\r\n let rotationMatrix = [[], [], []];\r\n let rotationMatrixAbs = [[], [], []];\r\n\r\n let halfSizeA: number, halfSizeB: number;\r\n let t: number, i: number;\r\n\r\n // extract each axis\r\n (cs ?? this.ocs).extractBasis(xAxisA, yAxisA, zAxisA);\r\n (obbcs ?? obb.ocs).extractBasis(xAxisB, yAxisB, zAxisB);\r\n\r\n // push basis vectors into arrays, so you can access them via indices\r\n axisA.push(xAxisA, yAxisA, zAxisA);\r\n axisB.push(xAxisB, yAxisB, zAxisB);\r\n\r\n // get displacement vector\r\n vector.subVectors(newObbCenter ?? obb.center, newCenter ?? this.center);\r\n\r\n // express the translation vector in the coordinate frame of the current\r\n // OBB (this)\r\n for (i = 0; i < 3; i++)\r\n {\r\n translation.setComponent(i, vector.dot(axisA[i]));\r\n }\r\n\r\n // generate a rotation matrix that transforms from world space to the\r\n // OBB's coordinate space\r\n for (i = 0; i < 3; i++)\r\n {\r\n for (let j = 0; j < 3; j++)\r\n {\r\n rotationMatrix[i][j] = axisA[i].dot(axisB[j]);\r\n rotationMatrixAbs[i][j] = Math.abs(rotationMatrix[i][j]) + this._EPSILON;\r\n }\r\n }\r\n\r\n // test the three major axes of this OBB\r\n for (i = 0; i < 3; i++)\r\n {\r\n vector.set(rotationMatrixAbs[i][0], rotationMatrixAbs[i][1], rotationMatrixAbs[i][2]);\r\n\r\n halfSizeA = this.halfSizes.getComponent(i);\r\n halfSizeB = obb.halfSizes.dot(vector);\r\n\r\n if (Math.abs(translation.getComponent(i)) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n // test the three major axes of other OBB\r\n for (i = 0; i < 3; i++)\r\n {\r\n vector.set(rotationMatrixAbs[0][i], rotationMatrixAbs[1][i], rotationMatrixAbs[2][i]);\r\n\r\n halfSizeA = this.halfSizes.dot(vector);\r\n halfSizeB = obb.halfSizes.getComponent(i);\r\n\r\n vector.set(rotationMatrix[0][i], rotationMatrix[1][i], rotationMatrix[2][i]);\r\n t = translation.dot(vector);\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n // test the 9 different cross-axes\r\n\r\n // A.x B.x\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][0] + this.halfSizes.z * rotationMatrixAbs[1][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[0][2] + obb.halfSizes.z * rotationMatrixAbs[0][1];\r\n\r\n t = translation.z * rotationMatrix[1][0] - translation.y * rotationMatrix[2][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.x < cross> B.y\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][1] + this.halfSizes.z * rotationMatrixAbs[1][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[0][2] + obb.halfSizes.z * rotationMatrixAbs[0][0];\r\n\r\n t = translation.z * rotationMatrix[1][1] - translation.y * rotationMatrix[2][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.x B.z\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][2] + this.halfSizes.z * rotationMatrixAbs[1][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[0][1] + obb.halfSizes.y * rotationMatrixAbs[0][0];\r\n\r\n t = translation.z * rotationMatrix[1][2] - translation.y * rotationMatrix[2][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.x\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][0] + this.halfSizes.z * rotationMatrixAbs[0][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[1][2] + obb.halfSizes.z * rotationMatrixAbs[1][1];\r\n\r\n t = translation.x * rotationMatrix[2][0] - translation.z * rotationMatrix[0][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.y\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][1] + this.halfSizes.z * rotationMatrixAbs[0][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[1][2] + obb.halfSizes.z * rotationMatrixAbs[1][0];\r\n\r\n t = translation.x * rotationMatrix[2][1] - translation.z * rotationMatrix[0][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.z\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][2] + this.halfSizes.z * rotationMatrixAbs[0][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[1][1] + obb.halfSizes.y * rotationMatrixAbs[1][0];\r\n\r\n t = translation.x * rotationMatrix[2][2] - translation.z * rotationMatrix[0][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.x\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][0] + this.halfSizes.y * rotationMatrixAbs[0][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[2][2] + obb.halfSizes.z * rotationMatrixAbs[2][1];\r\n\r\n t = translation.y * rotationMatrix[0][0] - translation.x * rotationMatrix[1][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.y\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][1] + this.halfSizes.y * rotationMatrixAbs[0][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[2][2] + obb.halfSizes.z * rotationMatrixAbs[2][0];\r\n\r\n t = translation.y * rotationMatrix[0][1] - translation.x * rotationMatrix[1][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.z\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][2] + this.halfSizes.y * rotationMatrixAbs[0][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[2][1] + obb.halfSizes.y * rotationMatrixAbs[2][0];\r\n\r\n t = translation.y * rotationMatrix[0][2] - translation.x * rotationMatrix[1][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // no separating axis exists, so the two OBB don't intersect\r\n return true;\r\n }\r\n\r\n // setFromObject(obj: THREE.Mesh): OBB;\r\n // setFromAABB(aabb: THREE.Box3): OBB;\r\n\r\n // setFromSphere(sphere: THREE.Shape): OBB;\r\n\r\n // closestPoint(point: THREE.Vector3): THREE.Vector3\r\n // isPointContained(point: THREE.Vector3): boolean\r\n // isAABBContained(aabb: THREE.Box3): boolean\r\n // isLineContained(line: THREE.Line3): boolean\r\n // isTriangleContained(tarianlg: THREE.Triangle): boolean\r\n // intersectsAABB(box: THREE.Box3): boolean\r\n // intersectsSphere(sphere: THREE.Sphere): boolean\r\n // intersectsOBB(box: OBB): boolean;\r\n // intersectsPlane(plane: Plane): boolean\r\n // intersectsRay(ray: Ray): boolean\r\n // intersectRay(ray: Ray): Vector3\r\n // intersectSphere(sphere: Sphere): Vector3\r\n // size(optionalTarget: Vector3): Vector3\r\n\r\n // translate(offset: Vector3): OBB\r\n\r\n // copy(obb: OBB): OBB\r\n // clone(obb: OBB): OBB\r\n\r\n}\r\n","import { BoxBufferGeometry, BufferGeometry, Float32BufferAttribute, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, Line3, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { Log } from \"../../Common/Log\";\r\nimport { tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equalv3, isParallelTo, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { SweepGeometry } from '../../Geometry/SweepGeometry';\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from '../Entity/Polyline';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Spline } from \"../Spline\";\r\nimport { FixIndex } from './../../Common/Utils';\r\nimport { OBB } from './../../Geometry/OBB/obb';\r\nimport { PlaneExt } from './../../Geometry/Plane';\r\n\r\n@Factory\r\nexport class SweepSolid extends Entity\r\n{\r\n static UseRectFakerContour = false;\r\n\r\n private _Contour: Polyline;\r\n private _PathCurve: Curve;\r\n constructor(contour?: Polyline, pathCurve?: Curve)\r\n {\r\n super();\r\n this._Contour = contour;\r\n this._PathCurve = pathCurve;\r\n\r\n if (this._Contour && this._Contour.Id)\r\n this._Contour = this._Contour.Clone();\r\n\r\n if (this._Contour && this._PathCurve)\r\n {\r\n this.TransfromPathToWCS();\r\n this.OCS = this._PathCurve.OCS;\r\n this._SpaceOCS.copy(this._PathCurve.OCS);\r\n this._PathCurve.ApplyMatrix(this._PathCurve.OCSInv);\r\n }\r\n }\r\n\r\n Explode()\r\n {\r\n return [this._Contour.Clone(), this._PathCurve.Clone()];\r\n }\r\n\r\n get Contour()\r\n {\r\n return this._Contour;\r\n }\r\n get Path()\r\n {\r\n return this._PathCurve;\r\n }\r\n Reverse()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._PathCurve.Reverse();\r\n this.Update();\r\n }\r\n /**保持路径左下角在0点 */\r\n private PathTo0()\r\n {\r\n let min = this._PathCurve.BoundingBox.min;\r\n this._PathCurve.Position = this._PathCurve.Position.sub(min);\r\n this.OCS = this.OCS.multiply(MoveMatrix(min));\r\n }\r\n /**\r\n * 将轮廓变换到wcs空间,当用户选定某个与扫描线起点相切的轮廓时.\r\n */\r\n private TransfromPathToWCS()\r\n {\r\n if (equalv3(this._Contour.Normal, new Vector3(0, 0, 1)))\r\n return;\r\n\r\n let fDir = this._PathCurve.GetFistDeriv(0);\r\n if (isParallelTo(fDir, this._Contour.Normal))\r\n {\r\n //构建回家的矩阵\r\n let toWcsMat4Inv = new Matrix4();\r\n let zv = fDir.normalize();\r\n let yv = this._PathCurve.Normal;\r\n let xv = zv.clone().cross(yv);\r\n\r\n toWcsMat4Inv.makeBasis(xv, yv, zv);\r\n toWcsMat4Inv.setPosition(this._PathCurve.StartPoint);\r\n\r\n let toWcsMat4 = new Matrix4().getInverse(toWcsMat4Inv);\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n\r\n let z = this._Contour.StartPoint.z;\r\n if (IsPointInPolyLine(this._Contour, new Vector3(0, 0, z)))\r\n {\r\n let z = this._Contour.StartPoint.z;\r\n this._Contour.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -z)));\r\n return;\r\n }\r\n else\r\n this._Contour.ApplyMatrix(toWcsMat4Inv);\r\n }\r\n\r\n let lDir = this._PathCurve.GetFistDeriv(this._PathCurve.EndParam);\r\n if (isParallelTo(lDir, this._Contour.Normal))\r\n {\r\n //再次构建回家的矩阵\r\n let toWcsMat4Inv = new Matrix4();\r\n let zv = lDir.negate().normalize();\r\n let yv = this._PathCurve.Normal;\r\n let xv = zv.clone().cross(yv);\r\n\r\n toWcsMat4Inv.makeBasis(xv, yv, zv);\r\n toWcsMat4Inv.setPosition(this._PathCurve.EndPoint);\r\n\r\n let toWcsMat4 = new Matrix4().getInverse(toWcsMat4Inv);\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n\r\n let z = this._Contour.StartPoint.z;\r\n if (IsPointInPolyLine(this._Contour, new Vector3(0, 0, z)))\r\n {\r\n let z = this._Contour.StartPoint.z;\r\n this._Contour.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -z)));\r\n\r\n this._PathCurve.Reverse();\r\n return;\r\n }\r\n else\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n }\r\n Log(\"错误:提供的轮廓没有和路径垂直!\");\r\n }\r\n private _MeshGeometry: SweepGeometry;\r\n private _lineGeo: LineGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n try\r\n {\r\n let contour = this._Contour;\r\n if (SweepSolid.UseRectFakerContour && contour.EndParam > 10)\r\n {\r\n let box = contour.BoundingBox;\r\n contour = new Polyline().RectangleFrom2Pt(box.min, box.max);\r\n }\r\n\r\n this._MeshGeometry = new SweepGeometry(contour, this._PathCurve);\r\n this._EdgeGeometry = new BufferGeometry().setAttribute('position', new Float32BufferAttribute(this._MeshGeometry.edgePts, 3));\r\n this.getLineGeo(this._MeshGeometry.edgePts);\r\n this._MeshGeometry.edgePts = undefined;\r\n return this._MeshGeometry;\r\n }\r\n catch (error)\r\n {\r\n return new BoxBufferGeometry(1000, 1000, 1000);\r\n }\r\n }\r\n getLineGeo(pts: number[])\r\n {\r\n this._lineGeo = new LineGeometry();\r\n let lineSegments = new Float32Array(pts);\r\n var instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n this._lineGeo.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n this._lineGeo.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n }\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n return new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n else if (renderType === RenderType.Print)\r\n {\r\n let mat2 = ColorMaterial.GetPrintConceptualMaterial();\r\n let meshGeo = this.MeshGeometry;\r\n let mesh = new Mesh(meshGeo, mat2);\r\n let line = new Line2(this._lineGeo, ColorMaterial.PrintLineMatrial);\r\n return new Object3D().add(line, mesh);\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(this._PathCurve.DrawObject);\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, this.MeshMaterial),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n Object3DRemoveAll(obj);\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n Object3DRemoveAll(obj);\r\n obj.add((this._PathCurve.DrawObject));\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n Object3DRemoveAll(obj);\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, this.MeshMaterial),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D)\r\n {\r\n if (type === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Physical2)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n if (!this.MeshGeometry.boundingBox)\r\n this.MeshGeometry.computeBoundingBox();\r\n\r\n return this.MeshGeometry.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\r\n get OBB(): OBB\r\n {\r\n let box = this.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n return new OBB(MoveMatrix(box.min), size.multiplyScalar(0.5));\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetEndPoint();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this._PathCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n if (snapMode === ObjectSnapMode.Mid)\r\n return [...pts, ...this.GetMidPoints()];\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n let pts = this._PathCurve.GetGripPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n GetStretchPoints()\r\n {\r\n let pts = this._PathCurve.GetStretchPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n private UpdateEndMtx(dir: Vector3, pos: Vector3)\r\n {\r\n let y = this.Normal;\r\n let roMat = new Matrix4().extractRotation(this.OCS);\r\n let z = dir.applyMatrix4(roMat);\r\n let x = z.clone().cross(y);\r\n tempMatrix1.makeBasis(x, y, z);\r\n tempMatrix1.setPosition(pos.applyMatrix4(this.OCS));\r\n }\r\n private GetEndPoint()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n let cus: Curve[];\r\n if (this._PathCurve instanceof Polyline)\r\n cus = this._PathCurve.Explode() as Curve[];\r\n else\r\n cus = [this._PathCurve];\r\n\r\n let roMat = new Matrix4().extractRotation(this.OCS);\r\n\r\n const pts: Vector3[] = [];\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let l1 = cus[i];\r\n let l2: Curve;\r\n if (this._PathCurve.IsClose)\r\n {\r\n l2 = cus[FixIndex(i + 1, cus.length)];\r\n }\r\n else\r\n {\r\n l2 = cus[i + 1];\r\n if (i === 0)\r\n {\r\n this.UpdateEndMtx(l1.GetFistDeriv(0).normalize(), l1.StartPoint);\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n }\r\n\r\n let p = l1.EndPoint;\r\n let d1 = l1.GetFistDeriv(1).normalize();\r\n this.UpdateEndMtx(d1.clone(), p);\r\n\r\n if (l2)\r\n {\r\n let d2 = l2.GetFistDeriv(0).normalize().applyMatrix4(roMat);\r\n d1.applyMatrix4(roMat);\r\n d2.add(d1).normalize();\r\n if (isParallelTo(d1, d2))\r\n {\r\n if (l1 instanceof Line && l2 instanceof Line)\r\n {\r\n }\r\n else\r\n {\r\n let ps = conPts.map(p => p.clone().applyMatrix4(tempMatrix1));\r\n pts.push(...ps);\r\n }\r\n continue;\r\n }\r\n p.copy(l1.EndPoint);\r\n //角平分线的平面;\r\n let plane = new PlaneExt(d2, p.applyMatrix4(this.OCS));\r\n let ps = conPts.map(p => p.clone().applyMatrix4(tempMatrix1));\r\n pts.push(...ps.map(p => plane.intersectLine(new Line3(p.clone().sub(d1.clone().multiplyScalar(-100)), p.clone().add(d1)), new Vector3(), true)));\r\n }\r\n else\r\n {\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n }\r\n return pts;\r\n }\r\n private GetMidPoints()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n const pts: Vector3[] = [];\r\n\r\n for (let i = 0.5; i < this._PathCurve.EndParam; i++)\r\n {\r\n let p = this._PathCurve.GetPointAtParam(i);\r\n let d1 = this._PathCurve.GetFistDeriv(i).normalize();\r\n this.UpdateEndMtx(d1, p);\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n return pts;\r\n\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this.IfPathIsLineThenZ0Vector(vec);\r\n\r\n this._PathCurve.MoveGripPoints(indexList,\r\n vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n this.Update();\r\n }\r\n\r\n //如果路径是直线,我们在这里避免vec传递z轴信息\r\n private IfPathIsLineThenZ0Vector(vec: Vector3)\r\n {\r\n if (this._PathCurve instanceof Line)\r\n {\r\n let ocsinv = this._PathCurve.OCSInv.setPosition(0, 0, 0);\r\n vec.applyMatrix4(ocsinv).setZ(0);\r\n vec.applyMatrix4(this._PathCurve.OCSNoClone);\r\n }\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this.IfPathIsLineThenZ0Vector(vec);\r\n\r\n this._PathCurve.MoveStretchPoints(indexList,\r\n vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._Contour = file.ReadObject() as Polyline;\r\n this._PathCurve = file.ReadObject() as Curve;\r\n\r\n if (this._Contour instanceof Spline || this._PathCurve instanceof Spline)\r\n {\r\n this._isErase = true;\r\n Log(\"放样实体是样条线生成的,自动删除它!\");\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.WriteObject(this._Contour);\r\n file.WriteObject(this._PathCurve);\r\n }\r\n}\r\n","import { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { DefaultToplineMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { Matrix4 } from \"three\";\r\nimport { SweepSolid } from '../3DSolid/SweepSolid';\r\nimport { GetPointAtCurveDir } from \"../../Common/CurveUtils\";\r\nimport { ZAxis, isPerpendicularityTo, equalv3, rotatePoint, equaln } from \"../../Geometry/GeUtils\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\n\r\n@Factory\r\nexport class HardwareTopline extends SweepSolid\r\n{\r\n @AutoRecord HardwareOption = { ...DefaultToplineMetalsOption };\r\n @AutoRecord DataList: [string, string][] = [];\r\n private _contourRotation = 0;\r\n get ContourRotation()\r\n {\r\n return this._contourRotation;\r\n }\r\n private _ContourWidth: number;\r\n private get Contours()\r\n {\r\n let c = this.Path;\r\n let conBox = this.Contour.BoundingBox;\r\n let cMin = conBox.min;\r\n let cMax = conBox.max;\r\n let y = ZAxis;\r\n let z = c.GetFistDeriv(0).normalize();\r\n let x = z.clone().cross(y);\r\n let mat = new Matrix4().makeBasis(x, y, z);\r\n mat.setPosition(c.StartPoint);\r\n [cMin, cMax].forEach(p => p.applyMatrix4(mat).setZ(0));\r\n\r\n let firstCurve: Curve;\r\n if (c instanceof Polyline)\r\n firstCurve = c.GetCurveAtParam(0);\r\n else\r\n firstCurve = c;\r\n\r\n let closePt = firstCurve.GetClosestPointTo(cMin, false);\r\n let offset = cMin.distanceTo(closePt);\r\n let dir = GetPointAtCurveDir(firstCurve, cMin);\r\n let cus = this.Path.GetOffsetCurves(offset * dir);\r\n let l1 = cus[0] ?? this.Path.Clone();\r\n\r\n closePt = firstCurve.GetClosestPointTo(cMax, false);\r\n let offset2 = cMax.distanceTo(closePt);\r\n dir = GetPointAtCurveDir(firstCurve, cMax);\r\n cus = this.Path.GetOffsetCurves(offset2 * dir);\r\n let l2 = cus[0] ?? this.Path.Clone();\r\n\r\n this._ContourWidth = offset + offset2;\r\n return [l1, l2];\r\n }\r\n /**\r\n *延伸取最大最小轮廓每段首尾到前面线段,取最长线段作为分段长\r\n *\r\n */\r\n get Segmentations()\r\n {\r\n const [l1, l2] = this.Contours;\r\n if (!(l1 instanceof Polyline))\r\n return [l1];\r\n\r\n let cus1 = l1.Explode() as Curve[];\r\n let cus2 = l2.Explode() as Curve[];\r\n\r\n [cus1, cus2] = cus1.length < cus2.length ? [cus2, cus1] : [cus1, cus2];\r\n\r\n let sgs: Curve[] = [];\r\n\r\n const AddSgs = (c1: Curve, c2: Curve) =>\r\n {\r\n sgs.push(c1.Length > c2.Length ? c1 : c2);\r\n };\r\n\r\n const ExtendCurve = (c: Curve, refC: Curve, isPre) =>\r\n {\r\n let pts = c.IntersectWith2(refC, IntersectOption.ExtendBoth).filter(r =>\r\n {\r\n if (isPre)\r\n return r.thisParam < 0;\r\n else\r\n return r.thisParam > 1;\r\n });\r\n if (isPre)\r\n {\r\n pts.sort((r1, r2) => r2.thisParam - r1.thisParam);\r\n if (pts.length > 0 && pts[0].thisParam < 0)\r\n c.Extend(pts[0].thisParam);\r\n }\r\n else\r\n {\r\n pts.sort((r1, r2) => r1.thisParam - r2.thisParam);\r\n if (pts.length > 0 && pts[0].thisParam > 1)\r\n c.Extend(pts[0].thisParam);\r\n }\r\n };\r\n const IsNoRelativeCurve = (c1: Curve, c2: Curve) =>\r\n {\r\n if ((c1 instanceof Line) !== (c2 instanceof Line))\r\n return true;\r\n\r\n let midPt = c1.GetPointAtParam(0.5);\r\n let closePt = c2.GetClosestPointTo(midPt, false);\r\n return !closePt || !equaln(midPt.distanceTo(closePt), this._ContourWidth, 1e-3);\r\n };\r\n\r\n const HasRelativeCurveAndChange = (target: Curve, cs: Curve[], isChange = false) =>\r\n {\r\n let index = cs.findIndex(c => !IsNoRelativeCurve(c, target));\r\n if (index !== -1)\r\n {\r\n if (isChange && l1.IsClose)\r\n cs.unshift(...cs.splice(index));\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n\r\n if (cus1.length !== cus2.length)\r\n arrayRemoveIf(cus2, c => !HasRelativeCurveAndChange(c, cus1));\r\n\r\n for (let i = 0; i < cus1.length; i++)\r\n {\r\n let c1 = cus1[i];\r\n let c2 = cus2[i];\r\n\r\n if (cus1.length !== cus2.length)\r\n {\r\n if (IsNoRelativeCurve(c1, c2))\r\n {\r\n sgs.push(c1);\r\n cus1.splice(i, 1);\r\n i--;\r\n continue;\r\n }\r\n }\r\n else\r\n {\r\n //第一段验证是否是关联段,不关联重置数组顺序\r\n if (i === 0)\r\n {\r\n if (IsNoRelativeCurve(c1, c2))\r\n {\r\n if (!HasRelativeCurveAndChange(c1, cus2, true))\r\n {\r\n console.error(\"错误\");\r\n return cus1;\r\n }\r\n i--;\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n let nextC1: Curve;\r\n\r\n if (l1.IsClose)\r\n {\r\n nextC1 = cus1[FixIndex(i + 1, cus1.length)];\r\n }\r\n else\r\n {\r\n if (i < cus1.length - 1)\r\n {\r\n nextC1 = cus1[i + 1];\r\n }\r\n }\r\n\r\n if (nextC1)\r\n {\r\n let derv = c1.GetFistDeriv(0).normalize();\r\n let derv2 = nextC1.GetFistDeriv(0).normalize();\r\n\r\n if (isPerpendicularityTo(derv, derv2) && isPerpendicularityTo(derv, c1.StartPoint.sub(c2.StartPoint).normalize()))\r\n {\r\n AddSgs(c1, c2);\r\n continue;\r\n }\r\n }\r\n\r\n let nextDerv1 = c1.GetFistDeriv(1).normalize();\r\n let nextDerv2 = c2.GetFistDeriv(1).normalize();\r\n let preDerv1 = c1.GetFistDeriv(0).normalize();\r\n let preDerv2 = c2.GetFistDeriv(0).normalize();\r\n [nextDerv1, nextDerv2, preDerv1, preDerv2].forEach(d => rotatePoint(d, Math.PI / 2));\r\n\r\n let preRefLine1 = new Line(c1.StartPoint, c1.StartPoint.add(preDerv1));\r\n let preRefLine2 = new Line(c2.StartPoint, c2.StartPoint.add(preDerv2));\r\n\r\n let nextRefLine1 = new Line(c1.EndPoint, c1.EndPoint.add(nextDerv1));\r\n let nextRefLine2 = new Line(c2.EndPoint, c2.EndPoint.add(nextDerv2));\r\n\r\n ExtendCurve(c1, nextRefLine2, false);\r\n ExtendCurve(c2, nextRefLine1, false);\r\n\r\n ExtendCurve(c1, preRefLine2, true);\r\n ExtendCurve(c2, preRefLine1, true);\r\n\r\n AddSgs(c1, c2);\r\n }\r\n\r\n return sgs;\r\n }\r\n get MaxLength()\r\n {\r\n return this.Segmentations.reduce((len, c) => len + c.Length, 0);\r\n }\r\n set ContourRotation(ro: number)\r\n {\r\n if (ro === this._contourRotation)\r\n return;\r\n let diffRo = ro - this._contourRotation;\r\n this._contourRotation = ro;\r\n let mat = new Matrix4().makeRotationZ(diffRo);\r\n this.Contour.ApplyMatrix(mat);\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n\r\n this._contourRotation = file.Read();\r\n\r\n this.HardwareOption.addLen = file.Read();\r\n this.HardwareOption.name = file.Read();\r\n this.HardwareOption.roomName = file.Read();\r\n this.HardwareOption.cabinetName = file.Read();\r\n this.HardwareOption.costExpr = file.Read();\r\n this.HardwareOption.actualExpr = file.Read();\r\n this.HardwareOption.model = file.Read();\r\n this.HardwareOption.factory = file.Read();\r\n this.HardwareOption.brand = file.Read();\r\n this.HardwareOption.spec = file.Read();\r\n this.HardwareOption.comments = file.Read();\r\n\r\n let count = file.Read();\r\n this.DataList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n this.DataList.push(d);\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n\r\n file.Write(this._contourRotation);\r\n\r\n file.Write(this.HardwareOption.addLen);\r\n file.Write(this.HardwareOption.name);\r\n file.Write(this.HardwareOption.roomName);\r\n file.Write(this.HardwareOption.cabinetName);\r\n file.Write(this.HardwareOption.costExpr);\r\n file.Write(this.HardwareOption.actualExpr);\r\n file.Write(this.HardwareOption.model);\r\n file.Write(this.HardwareOption.factory);\r\n file.Write(this.HardwareOption.brand);\r\n file.Write(this.HardwareOption.spec);\r\n file.Write(this.HardwareOption.comments);\r\n\r\n file.Write(this.DataList.length);\r\n for (let data of this.DataList)\r\n {\r\n file.Write(data[0]);\r\n file.Write(data[1]);\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ParseExpr, safeEval } from \"../../Common/eval\";\r\nimport { Intent, Toaster } from \"../../Common/Toaster\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Hole } from \"../../DatabaseServices/3DSolid/Hole\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { GroupRecord } from \"../../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\n\r\nexport interface ICountType\r\n{\r\n name?: string;\r\n count: number;\r\n entity?: T;\r\n count2?: number | string;\r\n unit?: string;\r\n length?: number;\r\n}\r\nexport type GetCountOption = { sealGruopKey: (block: Board) => string; };\r\nclass LookOverBoardInfosTool\r\n{\r\n private drillTypeMap: Map = new Map();\r\n private sealMap: Map = new Map();\r\n private boardMap = new Map();\r\n GetCount(brs: (Board | IHardwareType)[], options: GetCountOption = null)\r\n {\r\n let drillCount: ICountType[] = [];\r\n let sealCount: ICountType[] = [];\r\n let hardwareCount: ICountType[] = [];\r\n let areaCount: ICountType[] = [];\r\n\r\n this.drillTypeMap.clear();\r\n this.sealMap.clear();\r\n this.Update(brs, options);\r\n if (this.drillTypeMap.size > 0)\r\n for (let [k, v] of this.drillTypeMap)\r\n {\r\n if (v[0] instanceof Hole)\r\n if (k === \"木销\")\r\n drillCount.push({ name: k, count: v.length });\r\n else if (k === \"层板钉\")\r\n drillCount.push({ name: k, count: v.length });\r\n else\r\n drillCount.push({ name: k, count: v.length });\r\n else\r\n {\r\n this.ParseHardwareCount(k, v as IHardwareType[], hardwareCount);\r\n }\r\n }\r\n hardwareCount.sort((h1, h2) => h1.name.localeCompare(h2.name));\r\n //加入封边信息\r\n for (let [k, v] of this.sealMap)\r\n {\r\n sealCount.push({ name: k, count: v / 1000, unit: \"米\" });\r\n }\r\n\r\n for (let [k, bs] of this.boardMap)\r\n {\r\n areaCount.push({\r\n entity: bs[0],\r\n count: bs.length,\r\n count2: this.GetBoardsArea(bs)\r\n });\r\n }\r\n\r\n return { drillCount, hardwareCount, sealCount, areaCount };\r\n };\r\n private Update(ens: (Board | IHardwareType)[], options: GetCountOption = null)\r\n {\r\n //计算排钻个数\r\n const addDrillToMap = (spiteName: string, d: Hole | IHardwareType) =>\r\n {\r\n if (!this.drillTypeMap.has(spiteName))\r\n this.drillTypeMap.set(spiteName, [d]);\r\n else\r\n {\r\n let ds = this.drillTypeMap.get(spiteName);\r\n if (!ds.includes(d))\r\n ds.push(d);\r\n }\r\n };\r\n\r\n const brsProps: Board[] = [];\r\n const hardwares: IHardwareType[] = [];\r\n\r\n for (let e of ens)\r\n {\r\n if (e instanceof Board)\r\n brsProps.push(e);\r\n else\r\n hardwares.push(e);\r\n }\r\n for (let h of hardwares)\r\n {\r\n let { name, unit, factory, spec, model, brand } = h.HardwareOption;\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(h, spec)},${model},${brand}`, h);\r\n }\r\n\r\n this.UpdateBoardMap(brsProps);\r\n\r\n for (let b of brsProps)\r\n {\r\n let dlist = b.DrillList;\r\n if (equaln(b.ContourCurve.Area, 0))\r\n {\r\n Toaster({\r\n message: `${b.BoardProcessOption.roomName} ${b.BoardProcessOption.cabinetName} ${b.Name}轮廓有有问题,请检查`,\r\n timeout: 3000,\r\n intent: Intent.DANGER,\r\n });\r\n continue;\r\n }\r\n\r\n for (let [id, idList] of dlist)\r\n {\r\n for (let ids of idList)\r\n {\r\n for (let objId of ids)\r\n {\r\n let gd = objId.Object;\r\n if (!gd?.IsErase)\r\n {\r\n if (gd instanceof CylinderHole)\r\n switch (gd.Type)\r\n {\r\n case GangDrillType.Ljg:\r\n let spiteName = (gd.GroupId?.Object as GroupRecord)?.Name ?? \"未命名\";\r\n //读取拆单名\r\n addDrillToMap(spiteName, gd);\r\n break;\r\n case GangDrillType.Wood:\r\n addDrillToMap(\"木销\", gd);\r\n break;\r\n }\r\n else\r\n {\r\n //TODO:统计自定义排钻\r\n if (gd instanceof ExtrudeHole)\r\n {\r\n if (gd?.GroupId?.Object)\r\n {\r\n let name = (gd.GroupId.Object as GroupRecord).Name;\r\n let ents = (gd.GroupId.Object as GroupRecord).Entitys;\r\n addDrillToMap(name, ents[0].Object as Hole);\r\n }\r\n else\r\n {\r\n Toaster({ message: `柜名:${b.BoardProcessOption.cabinetName} 板名:${b.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // 被复制的层板钉暂未加入LayerNails数组 等做好关联后解除注释\r\n if (b.LayerNails.length > 0)\r\n for (let objId of b.LayerNails)\r\n {\r\n if (!objId?.IsErase)\r\n addDrillToMap(\"层板钉\", objId.Object as CylinderHole);\r\n }\r\n\r\n //分析五金\r\n for (const mId of b.RelativeHardware)\r\n {\r\n let metal = mId?.Object as IHardwareType;\r\n if (metal && !metal.IsErase && metal.HardwareOption)\r\n {\r\n let { name, unit, factory, spec, model, brand } = metal.HardwareOption;\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(metal, spec)},${model},${brand}`, metal);\r\n }\r\n }\r\n\r\n //封边\r\n let sealData = Production.GetBoardSealingData(b);\r\n let color = b.BoardProcessOption[EBoardKeyList.Color];\r\n\r\n for (let data of sealData)\r\n {\r\n if (equaln(0, data.size)) continue;\r\n let k = `${data.size}-${FixedNotZero(b.Thickness, 2)}-${color}`;\r\n if (options)\r\n {\r\n k += options.sealGruopKey(b);\r\n }\r\n let len = this.sealMap.get(k);\r\n if (!len)\r\n this.sealMap.set(k, data.length);\r\n else\r\n this.sealMap.set(k, len += data.length);\r\n }\r\n }\r\n };\r\n ParseSpec(en: IHardwareType | Vector3, spec: string, len?: number)\r\n {\r\n let size = en instanceof Vector3 ? en : en.BoundingBoxInOCS.getSize(new Vector3);\r\n return ParseExpr(spec, { L: len ?? size.x, W: size.y, H: size.z }) || \"[ 无 ]\";\r\n }\r\n ParseHardwareCount(k: string, v: IHardwareType[], hardwareCount: ICountType[])\r\n {\r\n if (v.length > 0)\r\n {\r\n if (!(v[0] instanceof HardwareTopline))\r\n {\r\n let count2 = v.reduce((v: number, d: HardwareCompositeEntity) =>\r\n {\r\n let size = d.BoundingBoxInOCS.getSize(new Vector3);\r\n let c = safeEval(d.HardwareOption.count, { L: size.x, W: size.y, H: size.z }) ?? 0;\r\n return v + c;\r\n }, 0);\r\n hardwareCount.push({ name: k.split(\",\")[0], count: v.length, entity: v[0], count2: FixedNotZero(count2, 2) });\r\n }\r\n else\r\n {\r\n let map = new Map();\r\n let name = k.split(\",\")[0];\r\n let addLen = (v[0] as HardwareTopline).HardwareOption.addLen;\r\n for (let d of v)\r\n {\r\n let e = d as HardwareTopline;\r\n let cus = e.Segmentations;\r\n for (let cu of cus)\r\n {\r\n let len = parseFloat(FixedNotZero(cu.Length, 2));\r\n if (map.has(len))\r\n {\r\n map.set(len, map.get(len) + 1);\r\n }\r\n else\r\n {\r\n map.set(len, 1);\r\n }\r\n }\r\n }\r\n\r\n for (let [len, count] of map)\r\n {\r\n let count2 = parseFloat(FixedNotZero(len + parseFloat(addLen), 2));\r\n hardwareCount.push({ name, count, entity: v[0], count2, length: count2 });\r\n }\r\n }\r\n }\r\n }\r\n private UpdateBoardMap(brs: Board[])\r\n {\r\n this.boardMap.clear();\r\n for (let b of brs)\r\n {\r\n let thickness = this.GetBoardThickness(b);\r\n let brMat = b.BoardProcessOption[EBoardKeyList.BrMat];\r\n let mat = b.BoardProcessOption[EBoardKeyList.Mat];\r\n let color = b.BoardProcessOption[EBoardKeyList.Color];\r\n let key = `${thickness}-${brMat}-${mat}-${color}`;\r\n let list = this.boardMap.get(key);\r\n if (!list)\r\n {\r\n list = [];\r\n this.boardMap.set(key, list);\r\n }\r\n list.push(b);\r\n }\r\n }\r\n GetBoardThickness(br: Board)\r\n {\r\n let size = Production.GetSpiteSize(br);\r\n if (size)\r\n return FixedNotZero(size.spliteThickness, 2);\r\n else\r\n return FixedNotZero(br.Thickness, 2);\r\n }\r\n GetBoardsArea(brs: Board[])\r\n {\r\n return brs.reduce((area, b) =>\r\n {\r\n let size = Production.GetSpiteSize(b);\r\n let ar: number;\r\n if (size)\r\n ar = size.spliteHeight * size.spliteWidth / 1e6;\r\n else\r\n ar = b.Width * b.Height / 1e6;\r\n ar = parseFloat(ar.toFixed(3));\r\n return area + ar;\r\n }, 0).toFixed(2);\r\n }\r\n}\r\n\r\nexport const lookOverBoardInfosTool = new LookOverBoardInfosTool();\r\n","import { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { safeEval } from \"../Common/eval\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { FixIndex, LINK_FUZZ } from \"../Common/Utils\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { angle, equaln, equalv3, isParallelTo, SelectNearP, XAxis } from \"../Geometry/GeUtils\";\r\nimport { Production } from \"../Production/Product\";\r\nimport { IHighSealedItem } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectOption } from \"./IntersectWith\";\r\n\r\n/**\r\n *曲线列表分段\r\n * @l-arc-l,l-arc-arc-l,l-arc-l-arc-l....\r\n */\r\nexport function ParagraphCulist(cus: Curve[])\r\n{\r\n let newCulist: Curve[][] = [];\r\n let usedCu: WeakSet = new WeakSet();\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (cu: Curve, originCu: Curve, cuList: Curve[], isBack: boolean) =>\r\n {\r\n const cuIsLine = cu instanceof Line;\r\n const originCuIsLine = originCu instanceof Line;\r\n\r\n if (usedCu.has(cu))\r\n return false;\r\n\r\n if (originCuIsLine !== cuIsLine)\r\n {\r\n if (originCuIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(1)))\r\n return false;\r\n }\r\n }\r\n\r\n if (cuIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(1), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n }\r\n }\r\n else if (cuIsLine)\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(cu.GetFistDeriv(0).normalize(), originCu.GetFistDeriv(0).normalize()))\r\n return false;\r\n let pts = [originCu.StartPoint, originCu.EndPoint];\r\n let pts2 = [cu.StartPoint, cu.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))\r\n return false;\r\n }\r\n if (isBack)\r\n cuList.push(cu);\r\n else\r\n cuList.unshift(cu);\r\n usedCu.add(cu);\r\n return true;\r\n };\r\n let caclCus = cus.slice().filter(c => !equaln(c.Length, 0));\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let originCu = caclCus.shift();\r\n if (usedCu.has(originCu))\r\n continue;\r\n\r\n let originCus = [originCu];\r\n usedCu.add(originCu);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], originCu, originCus, true))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === cus.length - 1)\r\n {\r\n originCu = originCus[0];\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], originCu, originCus, false))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n }\r\n newCulist.push(originCus);\r\n }\r\n cus.length = 0;\r\n //同组多条曲线连接为多段线\r\n for (let g of newCulist)\r\n {\r\n if (g.length === 1)\r\n cus.push(g[0]);\r\n else\r\n {\r\n let pl = new Polyline();\r\n for (let c of g)\r\n {\r\n pl.Join(c);\r\n }\r\n cus.push(pl);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n *计算封边\r\n */\r\nexport function CalcEdgeSealing(cus: Curve[])\r\n{\r\n if (cus.length <= 1)\r\n return;\r\n let oldLine: Curve;\r\n let firstLine = cus[0].Clone();\r\n let oldLen = cus.length;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let frontLine = cus[i];\r\n let laterIndex = FixIndex(i + 1, cus);\r\n let laterLine = cus[laterIndex];\r\n if (!frontLine || !laterLine || cus.length < 2)\r\n {\r\n return false;\r\n }\r\n\r\n let dist = frontLine.EndPoint.distanceToSquared(laterLine.StartPoint);\r\n if (dist < LINK_FUZZ ** 2)\r\n {\r\n if (frontLine instanceof Line && laterLine instanceof Line)\r\n {\r\n if (frontLine.PtOnCurve(laterLine.EndPoint))\r\n {\r\n cus.splice(laterIndex, 1);\r\n if (laterIndex === 0)\r\n firstLine = cus[0].Clone();\r\n i -= 2;\r\n }\r\n else if (laterLine.PtOnCurve(frontLine.StartPoint))\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n }\r\n }\r\n continue;\r\n }\r\n\r\n let refLine = oldLine ?? frontLine;\r\n let refLine2 = i === cus.length - 1 ? firstLine : laterLine;\r\n let iPts = refLine.IntersectWith(refLine2, IntersectOption.ExtendBoth);\r\n let tPts = iPts.filter(p =>\r\n refLine.PtOnCurve(p)\r\n && refLine2.PtOnCurve(p)\r\n );\r\n\r\n let iPt = SelectNearP(tPts.length > 0 ? tPts : iPts, refLine.EndPoint);\r\n if (!iPt)\r\n {\r\n //没交点,如果删过线,则尝试继续连接\r\n if (cus.length !== oldLen && cus.length > 2)\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n continue;\r\n }\r\n else\r\n return false;\r\n }\r\n let par = refLine.GetParamAtPoint(iPt);\r\n //前面线的点无效直接删除\r\n if (par < 1e-6)\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n }\r\n else\r\n frontLine.EndPoint = iPt;\r\n oldLine = null;\r\n par = laterLine.GetParamAtPoint(iPt);\r\n\r\n //后面线点无效,如果是起始线,则删除,否则缓存原始线,继续尝试连接\r\n if (par > 1 - 1e-6)\r\n {\r\n if (laterIndex === 0)\r\n {\r\n cus.shift();\r\n firstLine = cus[0].Clone();\r\n i -= 2;\r\n continue;\r\n }\r\n else\r\n oldLine = laterLine.Clone();\r\n }\r\n\r\n laterLine.StartPoint = iPt;\r\n }\r\n return true;\r\n}\r\n\r\nexport function GetBoardHighSeal(br: Board, sealcus: Curve[])\r\n{\r\n let highSeals = br.BoardProcessOption.highSealed.slice().filter(d => d.size !== null && d.size !== undefined);\r\n let sealDown = parseFloat(br.BoardProcessOption[EBoardKeyList.DownSealed]);\r\n let sealUp = parseFloat(br.BoardProcessOption[EBoardKeyList.UpSealed]);\r\n let sealLeft = parseFloat(br.BoardProcessOption[EBoardKeyList.LeftSealed]);\r\n let sealRight = parseFloat(br.BoardProcessOption[EBoardKeyList.RightSealed]);\r\n\r\n //若未设置高级封边,把上下左右封边存入高级封边\r\n if (sealcus.length !== highSeals.length || !br.IsSpecialShape)\r\n {\r\n highSeals.length = 0;\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n for (let c of sealcus)\r\n {\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n highSeals.push({ size: sealDown });\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n highSeals.push({ size: sealRight });\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n highSeals.push({ size: sealUp });\r\n else\r\n highSeals.push({ size: sealLeft });\r\n }\r\n }\r\n\r\n return highSeals;\r\n}\r\n\r\n/**偏移前后曲线起点没改变 */\r\nexport function OffsetOutlineSpNotChange(oldcu: Curve, newCu: Curve)\r\n{\r\n if (!newCu)\r\n return false;\r\n let sDerv = oldcu.GetFistDeriv(0).normalize();\r\n let eDerv = oldcu.GetFistDeriv(oldcu.EndParam).normalize().negate();\r\n sDerv.add(eDerv).normalize();\r\n let mDerv = newCu.StartPoint.sub(oldcu.StartPoint).normalize();\r\n return oldcu.EndParam === newCu?.EndParam && isParallelTo(mDerv, sDerv);\r\n}\r\n\r\n/**\r\n * 获取板件封边轮廓线段数组\r\n * 消除共线的数据,不改变轮廓方向\r\n * isOffset-是否偏移轮廓用于查看\r\n * */\r\nexport function GetBoardSealingCurves(br: Board, isOffset = false): Curve[]\r\n{\r\n let cu: ExtureContourCurve = Production.GetSpliteOutlineBySpliteSize(br);\r\n if (cu)\r\n return cu.Explode();\r\n\r\n let cus: Curve[] = [];\r\n cu = Production.GetSpliteOutline(br, false);\r\n if (!cu)\r\n {\r\n Toaster({\r\n message: \"获取封边错误\",\r\n timeout: 3000,\r\n intent: Intent.DANGER\r\n });\r\n return [];\r\n }\r\n if (isOffset)\r\n {\r\n let dir = Math.sign(cu.Area2);\r\n let newCu = cu.GetOffsetCurves(-1 * dir)[0] as ExtureContourCurve;\r\n if (OffsetOutlineSpNotChange(cu, newCu))\r\n cu = newCu;\r\n }\r\n if (cu instanceof Circle)\r\n return [cu.Clone()];\r\n else\r\n {\r\n cus = cu.Explode() as Curve[];\r\n if (br.IsSpecialShape)\r\n ParagraphCulist(cus);\r\n return cus;\r\n }\r\n}\r\n\r\n/**\r\n * 获取板件轮廓\r\n * 结果轮廓拆单用,统一逆时针数据\r\n * hasSealing 轮廓是否包含封边\r\n * 用户计算拆单侧孔面id\r\n */\r\nexport function GetSealedBoardContour(br: Board, hasSealing: boolean): Polyline | Circle | undefined\r\n{\r\n if (equaln(br.ContourCurve.Area, 0))\r\n return;\r\n\r\n let offsetCus: Curve[] = [];\r\n let cus = GetBoardSealingCurves(br);\r\n let highSeals = GetBoardHighSeal(br, cus);\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n\r\n if (hasSealing)\r\n {\r\n for (let c of cus)\r\n {\r\n if (c instanceof Polyline)\r\n offsetCus.push(...c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n else\r\n {\r\n\r\n if (cus[0] instanceof Circle)\r\n dir = 1;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cs: Curve[];\r\n if (!highSeals[i].size)\r\n cs = [cus[i].Clone()];\r\n else\r\n cs = cus[i].GetOffsetCurves(-highSeals[i].size * dir);\r\n\r\n for (let c of cs)\r\n {\r\n if (c instanceof Polyline)\r\n offsetCus.push(...c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n }\r\n if (offsetCus.length === 1 && offsetCus[0] instanceof Circle)\r\n return offsetCus[0] as Circle;\r\n\r\n if (!CalcEdgeSealing(offsetCus)) return;\r\n let pl = Polyline.FastCombine(offsetCus, LINK_FUZZ);\r\n if (pl && dir < 0)\r\n pl.Reverse();\r\n return pl;\r\n}\r\n\r\n\r\nexport function ParagraphSealinglist(hightSeal: IHighSealedItem[], cus: Curve[])\r\n{\r\n if (hightSeal.length !== cus.length) return hightSeal;\r\n\r\n let usedCu: WeakSet = new WeakSet();\r\n let newHighSeal: IHighSealedItem[] = [];\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (cu: Curve, originCu: Curve, isBack: boolean) =>\r\n {\r\n const cuIsLine = cu instanceof Line;\r\n const originCuIsLine = originCu instanceof Line;\r\n\r\n if (usedCu.has(cu))\r\n return false;\r\n\r\n if (originCuIsLine !== cuIsLine)\r\n {\r\n if (originCuIsLine &&\r\n !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0))\r\n && !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(1))\r\n )\r\n {\r\n return false;\r\n }\r\n\r\n if (cuIsLine\r\n && !isParallelTo(originCu.GetFistDeriv(1), cu.GetFistDeriv(0))\r\n && !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)\r\n ))\r\n {\r\n return false;\r\n }\r\n }\r\n else if (cuIsLine)\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(cu.GetFistDeriv(0).normalize(), originCu.GetFistDeriv(0).normalize()))\r\n return false;\r\n let pts = [originCu.StartPoint, originCu.EndPoint];\r\n let pts2 = [cu.StartPoint, cu.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))\r\n return false;\r\n }\r\n if (isBack)\r\n hightSeal.shift();\r\n else\r\n hightSeal.pop();\r\n usedCu.add(cu);\r\n return true;\r\n };\r\n let caclCus = cus.slice();\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let originCu = caclCus.shift();\r\n if (usedCu.has(originCu))\r\n continue;\r\n let oldCu = originCu;\r\n let originSeal = hightSeal.shift();\r\n newHighSeal.push(originSeal);\r\n usedCu.add(originCu);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], originCu, true))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === cus.length - 1)\r\n {\r\n originCu = oldCu;\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], originCu, false))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n }\r\n }\r\n\r\n return newHighSeal;\r\n}\r\n\r\n/**处理常规板件封边数据和上下左右封边值 */\r\nexport function HandleRectBoardSealingData(br: Board, edges: IHighSealedItem[], cus?: Curve[])\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n if (!cus)\r\n cus = br.ContourCurve.Explode() as Curve[];\r\n\r\n let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight);\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth);\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness);\r\n\r\n if ((spliteHeight && spliteWidth && spliteThickness) || !br.IsSpecialShape && cus.length == 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = cus[i].GetFistDeriv(0);\r\n if (isParallelTo(derv, XAxis))\r\n {\r\n if (derv.x * dir > 0)\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = edges[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = edges[i].size.toString();\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = edges[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = edges[i].size.toString();\r\n }\r\n }\r\n\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { GetMirrorMat } from \"../../Common/Matrix4Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\r\nimport { equaln, equalv3, ZAxis } from \"../GeUtils\";\r\nimport { Face } from \"./Face\";\r\nimport { MergeCurvelist } from \"../../Common/CurveUtils\";\r\n\r\n\r\nexport const CanDrawHoleFuzz = 1e-2;\r\n\r\nexport enum BoardFaceType\r\n{\r\n Side = 0,\r\n NoSide = 1\r\n}\r\nexport class BoardGetFace\r\n{\r\n Faces: Face[] = [];\r\n constructor(public Board: Board)\r\n {\r\n this.ParseFaces();\r\n }\r\n ParseFaces()\r\n {\r\n //正反面\r\n this.GetTopAndBottomFace();\r\n //侧面\r\n this.GetSideFaces();\r\n }\r\n GetTopAndBottomFace(isEdgeFace = false)\r\n {\r\n let curve = this.Board.ContourCurve;\r\n let reg: Region;\r\n if (this.Board.IsSpecialShape)\r\n reg = Region.CreateFromCurves([curve]);\r\n\r\n let thickness = this.Board.Thickness;\r\n let ocs = this.Board.OCS;\r\n const opt = this.Board.BoardProcessOption;\r\n //正反面\r\n if (opt.frontDrill || isEdgeFace)\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n region: reg,\r\n isRect: this.Board.IsRect,\r\n localBoard: this.Board,\r\n matrix4: ocs.clone().multiply(\r\n new Matrix4().setPosition(new Vector3(0, 0, thickness))),\r\n length: this.Board.Width,\r\n width: this.Board.Height\r\n }));\r\n\r\n if (opt.backDrill || isEdgeFace)\r\n {\r\n let mat = GetMirrorMat(ZAxis).setPosition(new Vector3());\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n localBoard: this.Board,\r\n isRect: this.Board.IsRect,\r\n region: reg ? reg.Clone() : undefined,\r\n matrix4: new Matrix4().multiplyMatrices(ocs.clone(), mat),\r\n length: this.Board.Width,\r\n width: this.Board.Height\r\n }));\r\n }\r\n }\r\n GetSideFaces()\r\n {\r\n let con = this.Board.ContourCurve.Clone();\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const highDrill = this.Board.BoardProcessOption.highDrill.slice();\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let length = cu.Length;\r\n if ((highDrill.length > 0 && highDrill[i] === DrillType.None)\r\n || equaln(length, 0)\r\n || cu instanceof Arc)\r\n continue;\r\n let mtx = GetSideFaceMtx(cu, inverseZ);\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: this.Board,\r\n matrix4: new Matrix4().multiplyMatrices(this.Board.OCS.clone(), mtx),\r\n length,\r\n width: this.Board.Thickness,\r\n drillType: highDrill.length > 0 && highDrill[i]\r\n }));\r\n }\r\n }\r\n IntersectFace(br: BoardGetFace, bInsEqual: boolean = false): Face[]\r\n {\r\n let collisionFaces: Face[] = [];\r\n\r\n for (let f1 of this.Faces)\r\n {\r\n for (let f2 of br.Faces)\r\n {\r\n //都是正面,或者不允许侧面同侧面并且2板件类型不一样就跳过\r\n if (f1.type === f2.type\r\n && (f1.type === BoardFaceType.NoSide || !bInsEqual || br.Board.BoardType !== this.Board.BoardType)\r\n )\r\n continue;\r\n //不共面\r\n if (!MatrixIsCoplane2(f1.OCS, f2.OCS, CanDrawHoleFuzz))\r\n continue;\r\n collisionFaces.push(...f1.Intersect(f2));\r\n }\r\n }\r\n return collisionFaces;\r\n }\r\n static GetAllSidesFaces(br: Board, isMergeFace = false)\r\n {\r\n let faces: Face[] = [];\r\n let con = br.ContourCurve;\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n if (isMergeFace)\r\n MergeCurvelist(cus);\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let length = cu.Length;\r\n let mtx = GetSideFaceMtx(cu, inverseZ);\r\n faces.push(new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: br,\r\n matrix4: new Matrix4().multiplyMatrices(br.OCS.clone(), mtx),\r\n length,\r\n width: br.Thickness,\r\n }));\r\n }\r\n return faces;\r\n }\r\n}\r\n\r\n//坐标系共面且法线相反\r\nexport function MatrixIsCoplane2(matrixFrom: Matrix4, matrixTo: Matrix4, fuzz = 1e-5): boolean\r\n{\r\n let nor1 = new Vector3().setFromMatrixColumn(matrixFrom, 2);\r\n let nor2 = new Vector3().setFromMatrixColumn(matrixTo, 2);\r\n\r\n //法线共面\r\n if (!equalv3(nor1, nor2.negate(), fuzz))\r\n return false;\r\n\r\n //高共面\r\n let pt = new Vector3().setFromMatrixPosition(matrixTo);\r\n //变换到自身对象坐标系.\r\n pt.applyMatrix4(new Matrix4().getInverse(matrixFrom));\r\n\r\n return equaln(pt.z, 0, fuzz);\r\n}\r\nexport function GetSideFaceMtx(cu: Curve, inverseZ = false): Matrix4\r\n{\r\n let x = cu.GetFistDeriv(0).normalize();\r\n let y = ZAxis;\r\n let z = x.clone().cross(y);\r\n if (inverseZ) z.negate();\r\n\r\n let basePt: Vector3;\r\n if ((equaln(x.x, 0) && x.y > 0) || x.x < 0)\r\n {\r\n x.negate();\r\n basePt = cu.EndPoint;\r\n }\r\n else\r\n basePt = cu.StartPoint;\r\n //构建面矩阵\r\n return new Matrix4()\r\n .makeBasis(x, y, z)\r\n .setPosition(basePt);\r\n}\r\n","export const ReportFunctionList: ((msg: string) => void)[] = [];\r\n\r\nexport function SendReport(msg: string)\r\n{\r\n for (let f of ReportFunctionList)\r\n f(msg);\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\n\r\nexport const ShowObjectsFunctionList: ((ens: (Entity[]) | Object3D[]) => void)[] = [];\r\n\r\nexport function ShowSelectObjects(ens: (Entity[]) | Object3D[])\r\n{\r\n for (let f of ShowObjectsFunctionList)\r\n f(ens);\r\n}\r\n","\r\nexport function IsDev()\r\n{\r\n return window.location.hostname === \"localhost\";\r\n}\r\n","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { lookOverBoardInfosTool } from \"../Add-on/LookOverBoardInfos/LookOverBoardInfosTool\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\r\nimport { Vector2ApplyMatrix4 } from \"../Common/Matrix4Utils\";\r\nimport { FixedNotZero, LINK_FUZZ } from \"../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Hole } from \"../DatabaseServices/3DSolid/Hole\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board, IModeling } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { HardwareCompositeEntity } from \"../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { userConfig } from \"../Editor/UserConfig\";\r\nimport { Vec2 } from \"../Geometry/CheckIntersect\";\r\nimport { angleTo, AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, XAxis, equalv2, IsBetweenA2B } from \"../Geometry/GeUtils\";\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, GetSealedBoardContour as GetSealedBoardContour } from \"../GraphicsSystem/CalcEdgeSealing\";\r\nimport { FeedingToolPath, GetModelingFromCustomDrill } from \"../GraphicsSystem/ToolPath/FeedingToolPath\";\r\nimport { EMetalsType, IHardwareOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { BoardOpenDir, FaceDirection, IHighSealedItem } from \"../UI/Store/BoardInterface\";\r\nimport { Entity } from './../DatabaseServices/Entity/Entity';\r\nimport { ICompHardwareOption } from './../UI/Components/RightPanel/RightPanelInterface';\r\nimport { CanDrawHoleFuzz } from \"../Geometry/DrillParse/BoardGetFace\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { SendReport } from \"../Common/Report\";\r\nimport { ShowSelectObjects } from \"../Common/ShowSelectObjects\";\r\nimport { IsDev } from \"../Common/Deving\";\r\n\r\n\r\n/**板件轮廓数据 */\r\nexport interface IContourData\r\n{\r\n pts: Vec2[];\r\n buls: number[];\r\n}\r\nexport type IHardwareType = HardwareTopline | HardwareCompositeEntity;\r\n\r\nexport interface ISealingData extends IHighSealedItem\r\n{\r\n length: number;\r\n type?: string;\r\n shop?: string;\r\n}\r\nexport interface IModelingData\r\n{\r\n feeding: IContourData[];\r\n thickness: number;\r\n dir: FaceDirection | number;\r\n knifeRadius: number;\r\n}\r\n\r\nexport enum DrillingFace\r\n{\r\n //正反面时,使用Front和Back\r\n Front = 0,\r\n Back = 1,\r\n}\r\n\r\nexport interface IDrillingOption\r\n{\r\n position: Vector3;\r\n radius: number;\r\n type: GangDrillType;\r\n depth: number;\r\n face: DrillingFace;\r\n endPt?: Vector3;\r\n angle?: number;\r\n}\r\n\r\nexport interface IBoardHoleInfo\r\n{\r\n frontBackHoles: IDrillingOption[];\r\n sideHoles: IDrillingOption[];\r\n}\r\n\r\ninterface IBoardProdInfo\r\n{\r\n id: number;\r\n name: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n [EBoardKeyList.Mat]: string;\r\n [EBoardKeyList.BrMat]: string;\r\n [EBoardKeyList.Color]: string;\r\n [EBoardKeyList.Lines]: number;\r\n [EBoardKeyList.DrillType]: string;\r\n spliteHeight: string;\r\n spliteThickness: string;\r\n spliteWidth: string;\r\n\r\n isRect: boolean;\r\n remarks: [string, string][];\r\n kaiLiaoWidth: number;\r\n kaiLiaoHeight: number;\r\n openDir: BoardOpenDir;\r\n}\r\n\r\n/**拆单数据 */\r\nexport interface ISpliteOrderData\r\n{\r\n info: IBoardProdInfo; //板件基本信息\r\n outline: IContourData; //拆单轮廓信息\r\n sealing: ISealingData[]; //封边信息\r\n modeling: IModelingData[]; //造型信息\r\n holes: IBoardHoleInfo; //孔信息\r\n sideModeling: IModelingData[]; //侧面造型信息\r\n offsetTanslation: Vector3;\r\n originOutlin: IContourData; //不扣封边拆单原始轮廓\r\n metalsData?: { metals: number, comp: number; }; //板件五金\r\n boardContour: IContourData; //板件轮廓\r\n originModelingData: { sideModeling: IOriginModelingData[], modeling: IOriginModelingData[]; };\r\n}\r\n\r\nexport interface IBoardMetalsData\r\n{\r\n metals: ISpliteHardwareData[];\r\n comp: ISpliteHardwareData[];\r\n}\r\n\r\nexport interface ISpliteHardwareData\r\n{\r\n metalsOption: IHardwareOption;\r\n dataList: [string, string][];\r\n children: ISpliteHardwareData[];\r\n length?: number;\r\n size: Vector3;\r\n}\r\n\r\nexport interface IOriginModelingData\r\n{\r\n outline: IContourData,\r\n holes: IContourData[];\r\n thickness: number;\r\n dir: FaceDirection | number;\r\n knifeRadius: number;\r\n}\r\n\r\n\r\nexport namespace Production\r\n{\r\n /**获取板件拆单数据 */\r\n export function GetBoardSplitOrderData(br: Board): ISpliteOrderData | undefined\r\n {\r\n let sealedContour = GetSealedBoardContour(br, true);\r\n if (!sealedContour || equaln(sealedContour.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br], br.Name + \" 轮廓错误\");\r\n return undefined;\r\n }\r\n let outline = GetSealedBoardContour(br, false);\r\n\r\n if (!outline || equaln(outline.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \"扣除封边轮廓有误,请检查后重新拆单\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br], br.Name + \"扣除封边轮廓有误\");\r\n return;\r\n }\r\n\r\n let offsetTanslation = outline.BoundingBox.min;\r\n outline.Position = outline.Position.sub(offsetTanslation);\r\n let outlinePtsBul = ConverToPolylineAndSplitArc(outline);\r\n //外轮廓去掉最后的闭合点\r\n outlinePtsBul.pts.pop();\r\n outlinePtsBul.buls.pop();\r\n let size = outline.BoundingBox.getSize(new Vector3);\r\n\r\n //不扣除封边的轮廓信息\r\n let originOutlinePtsBul = ConverToPolylineAndSplitArc(sealedContour);\r\n originOutlinePtsBul.pts.pop();\r\n originOutlinePtsBul.buls.pop();\r\n\r\n let { modeling, sideModeling } = GetBoardModelingData(br, offsetTanslation);\r\n\r\n let boardContour: IContourData;\r\n if (GetSpiteSize(br))\r\n boardContour = ConverToPolylineAndSplitArc(br.ContourCurve);\r\n\r\n return {\r\n info: GetBoardInfo(br, size),\r\n originOutlin: originOutlinePtsBul,\r\n outline: outlinePtsBul,\r\n sealing: GetBoardSealingData(br),\r\n modeling,\r\n holes: GetBoardHolesData(br, offsetTanslation, sealedContour),\r\n sideModeling,\r\n offsetTanslation,\r\n metalsData: GetBoardMetals(br),\r\n boardContour,\r\n originModelingData: GetOriginBoardModelingData(br)\r\n };\r\n }\r\n export function GetBoardInfo(br: Board, size: Vector3): IBoardProdInfo\r\n {\r\n let data = br.BoardProcessOption;\r\n let param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let spliteHeight = safeEval(data.spliteHeight, param);\r\n let spliteWidth = safeEval(data.spliteWidth, param);\r\n let spliteThickness = safeEval(data.spliteThickness, param);\r\n let isRect = (!isNaN(spliteHeight) && !isNaN(spliteWidth) && !isNaN(spliteThickness)) || !br.IsSpecialShape;\r\n\r\n return {\r\n id: br.Id.Index,\r\n name: br.Name,\r\n [EBoardKeyList.RoomName]: data[EBoardKeyList.RoomName],\r\n [EBoardKeyList.CabinetName]: data[EBoardKeyList.CabinetName],\r\n [EBoardKeyList.Mat]: data[EBoardKeyList.Mat],\r\n [EBoardKeyList.BrMat]: data[EBoardKeyList.BrMat],\r\n [EBoardKeyList.Color]: data[EBoardKeyList.Color],\r\n [EBoardKeyList.Lines]: data[EBoardKeyList.Lines],\r\n [EBoardKeyList.DrillType]: data[EBoardKeyList.DrillType],\r\n spliteHeight: spliteHeight ? spliteHeight.toString() : \"\",\r\n spliteThickness: spliteThickness ? spliteThickness.toString() : \"\",\r\n spliteWidth: spliteWidth ? spliteWidth.toString() : \"\",\r\n isRect,\r\n remarks: data.remarks.slice(),\r\n kaiLiaoWidth: size.x,\r\n kaiLiaoHeight: size.y,\r\n openDir: br.OpenDir,\r\n };\r\n }\r\n\r\n /**\r\n * 转换成多段线并且将圆弧打断(大于1/4的话)\r\n */\r\n export function ConverToPolylineAndSplitArc(cu: Polyline | Circle, isOutline = true, isSplite = true): IContourData\r\n {\r\n let ptsBuls: { pts: Vector2[]; buls: number[]; };\r\n if (cu instanceof Circle)\r\n {\r\n let pl = ConverCircleToPolyline(cu);\r\n ptsBuls = pl.PtsBuls;\r\n }\r\n else\r\n {\r\n if (isOutline && cu.IsClose && cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n if (isSplite)\r\n ptsBuls = SplitePolylineAtArc(cu);\r\n else\r\n ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.OCS;\r\n if (!equaln(ocs.elements[0], 1)\r\n || !equaln(ocs.elements[9], 0)\r\n || !equaln(ocs.elements[10], 0)\r\n )\r\n {\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n {\r\n Vector2ApplyMatrix4(ocs, ptsBuls.pts[i]);\r\n ptsBuls.buls[i] *= cu.Normal.z;\r\n }\r\n }\r\n return ptsBuls;\r\n }\r\n\r\n export function ConverCircleToPolyline(cir: Circle): Polyline\r\n {\r\n let arcs = cir.GetSplitCurves([0, 0.25, 0.5, 0.75]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCS;\r\n for (let arc of arcs)\r\n pl.Join(arc);\r\n return pl;\r\n }\r\n\r\n const SPLITBUL = Math.tan(Math.PI / 8);\r\n function GetSpliteCount(allAngle: number)\r\n {\r\n return Math.ceil(Math.abs(allAngle) / Math.PI * 2);\r\n }\r\n\r\n /** 打断多段线超过1/4圆的圆弧*/\r\n export function SplitePolylineAtArc(cu: Polyline, isSplite = true): { pts: Vector2[], buls: number[]; }\r\n {\r\n let ptsBuls = cu.PtsBuls;\r\n let ocsInv = cu.OCSInv;\r\n\r\n let result: { pts: Vector2[], buls: number[]; } = { pts: [], buls: [] };\r\n\r\n if (ptsBuls.pts.length === 0)\r\n return result;\r\n\r\n for (let i = 0; i < ptsBuls.buls.length - 1; i++)\r\n {\r\n let bul = ptsBuls.buls[i];\r\n if (Math.abs(bul) > SPLITBUL + 1e-8 && isSplite)\r\n {\r\n let allAngle = Math.atan(bul) * 4;\r\n let splitCount = GetSpliteCount(allAngle);\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let paramDiv = 1 / splitCount;\r\n let newBul = Math.tan((allAngle / splitCount) / 4);\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let param = i * paramDiv;\r\n let p = arc.GetPointAtParam(param).applyMatrix4(ocsInv);\r\n let p2 = AsVector2(p);\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(p2, arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(p2);\r\n result.buls.push(newBul);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(ptsBuls.pts[i], arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(ptsBuls.pts[i]);\r\n result.buls.push(ptsBuls.buls[i]);\r\n }\r\n }\r\n }\r\n\r\n result.pts.push(arrayLast(ptsBuls.pts));\r\n result.buls.push(arrayLast(ptsBuls.buls));\r\n\r\n //测试是否存在无效的边(0长度边)\r\n // for (let i = 1; i < result.pts.length; i++)\r\n // {\r\n // if (equalv2(result.pts[i], result.pts[i - 1], 0.01))\r\n // alert(\"存在无效的边\");\r\n // }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 获取封边数据\r\n * 封边数据未统一逆时针顺序,用于拆单\r\n * */\r\n export function GetBoardSealingData(br: Board): ISealingData[]\r\n {\r\n let sealCus = GetBoardSealingCurves(br);\r\n let highSeal = GetBoardHighSeal(br, sealCus);\r\n\r\n let sealData: ISealingData[] = [];\r\n\r\n for (let i = 0; i < sealCus.length; i++)\r\n {\r\n let sealCu = sealCus[i];\r\n let data = highSeal[i];\r\n let cus: Curve[] = [];\r\n if (sealCu instanceof Polyline)\r\n cus.push(...sealCu.Explode());\r\n else\r\n cus.push(sealCu);\r\n\r\n for (let cu of cus)\r\n {\r\n if (cu instanceof Line)\r\n {\r\n sealData.push(Object.assign({}, data, { length: cu.Length }));\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n let splitCount = GetSpliteCount(cu.AllAngle);\r\n let len = 2 * Math.PI * cu.Radius / 4;\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let arcLen = i !== splitCount - 1 ? len : cu.Length - (splitCount - 1) * len;\r\n if (!equaln(arcLen, 0))\r\n sealData.push(Object.assign({}, data, { length: arcLen }));\r\n }\r\n }\r\n else if (cu instanceof Circle)\r\n {\r\n let length = 2 * Math.PI * cu.Radius / 4;\r\n sealData.push(...Array.from({ length: 4 }, () =>\r\n {\r\n return { ...data, length };\r\n }));\r\n }\r\n }\r\n }\r\n if (br.ContourCurve instanceof Polyline && br.ContourCurve.Area2 < 0)\r\n sealData.reverse();\r\n return sealData;\r\n }\r\n\r\n export function GetMetalTotalEntitys(md: HardwareCompositeEntity, isHole = false, filter?: (e: Entity) => boolean)\r\n {\r\n let holes: Entity[] = [];\r\n if (isHole && !md.HardwareOption.isHole) return [];\r\n\r\n for (let e of md.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n if (!isHole || md.HardwareOption.isHole)\r\n holes.push(...GetMetalTotalEntitys(e, isHole, filter).map(h => h.ApplyMatrix(md.OCS)));\r\n }\r\n else\r\n {\r\n if (!filter || filter(e))\r\n {\r\n holes.push(e.Clone().ApplyMatrix(md.OCS));\r\n }\r\n }\r\n }\r\n return holes;\r\n }\r\n export function GetOriginBoardModelingData(br: Board)\r\n {\r\n const tool = FeedingToolPath.GetInstance() as FeedingToolPath;\r\n\r\n const getModelings = (ms: IModeling[]): IOriginModelingData[] =>\r\n {\r\n let data: IOriginModelingData[] = [];\r\n\r\n for (let m of ms)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n\r\n data.push({\r\n outline: ConverToPolylineAndSplitArc(cu.Clone(), false, false),\r\n holes: m.shape.Holes.map(h => ConverToPolylineAndSplitArc(h.Curve.Clone(), false, false)),\r\n thickness: m.thickness + (m.addDepth ?? 0),\r\n dir: m.dir,\r\n knifeRadius: m.knifeRadius,\r\n });\r\n\r\n }\r\n return data;\r\n };\r\n\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n\r\n let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling]);\r\n\r\n let sideModeling = getModelings(allModeling.sideModeling);\r\n\r\n return { modeling, sideModeling };\r\n }\r\n export function GetBoardModelingData(br: Board, offsetTanslation: Vector3)\r\n {\r\n const tool = FeedingToolPath.GetInstance() as FeedingToolPath;\r\n const tMtx = MoveMatrix(offsetTanslation.clone().negate());\r\n const getModelings = (ms: IModeling[], isSide: boolean): IModelingData[] =>\r\n {\r\n let data: IModelingData[] = [];\r\n\r\n for (let m of ms)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n let paths = tool.GetModelFeedPath(br, m);\r\n if (!isSide)\r\n paths.forEach(path => path.ApplyMatrix(tMtx));\r\n\r\n let feeding = paths.map((c: ExtureContourCurve) => ConverToPolylineAndSplitArc(c, false));\r\n if (feeding.length > 0)\r\n data.push({\r\n feeding,\r\n thickness: m.thickness + (m.addDepth ?? 0),\r\n dir: m.dir,\r\n knifeRadius: m.knifeRadius,\r\n });\r\n else\r\n {\r\n Toaster({\r\n message: \"板件有造型或者自定义排钻无法加工,请运行造型检测命令确认\",\r\n timeout: 5000,\r\n intent: Intent.DANGER,\r\n key: \"造型加工错误\"\r\n });\r\n }\r\n }\r\n return data;\r\n };\r\n\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n\r\n let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling], false).filter(f => f.feeding.length > 0);\r\n\r\n let sideModeling = getModelings(allModeling.sideModeling, true).filter(f => f.feeding.length > 0);\r\n\r\n return { modeling, sideModeling };\r\n }\r\n\r\n /**获取板件的轮廓\r\n *有拆单尺寸返回矩形\r\n *用于拆单的轮廓统一逆时针 */\r\n export function GetSpliteOutline(br: Board, isSplite: boolean): ExtureContourCurve | undefined\r\n {\r\n let con: ExtureContourCurve = GetSpliteOutlineBySpliteSize(br);\r\n if (con)\r\n return con;\r\n\r\n con = br.ContourCurve;\r\n if (con instanceof Circle)\r\n {\r\n return con;\r\n }\r\n let cus = con.Explode();\r\n MergeCurvelist(cus);\r\n let pl = Polyline.FastCombine(cus, LINK_FUZZ);\r\n if (pl && isSplite && pl.Area2 < 0)\r\n pl.Reverse();\r\n return pl;\r\n }\r\n export function GetSpiteSize(br: Board)\r\n {\r\n let param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight, param);\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param);\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param);\r\n if (spliteHeight && spliteWidth && spliteThickness)\r\n return {\r\n spliteHeight, spliteWidth, spliteThickness\r\n };\r\n else\r\n return;\r\n }\r\n\r\n export function GetSpliteOutlineBySpliteSize(br: Board)\r\n {\r\n let size = GetSpiteSize(br);\r\n\r\n if (size)\r\n return new Polyline().RectangleFrom2Pt(new Vector3, new Vector3(size.spliteWidth, size.spliteHeight));\r\n return null;\r\n }\r\n\r\n /**孔信息,侧孔的z 均为 从上到下距离 */\r\n export function GetBoardHolesData(br: Board, offsetTanslation: Vector3, sealedContour: ExtureContourCurve): IBoardHoleInfo\r\n {\r\n let data: IBoardHoleInfo = {\r\n frontBackHoles: [],\r\n sideHoles: []\r\n };\r\n let brNormal = br.Normal;\r\n\r\n // 性能优化的解析板件网洞类\r\n // new ParseBoardHoleData(br, offsetTanslation, sealedContour);\r\n\r\n for (let [, driss] of br.DrillList)\r\n {\r\n for (let dris of driss)\r\n {\r\n for (let dId of dris)\r\n {\r\n if (!dId || dId.IsErase)\r\n continue;\r\n let d = dId.Object as CylinderHole;\r\n if (d instanceof ExtrudeHole)\r\n ParseExtrudeHoles(d, br, offsetTanslation, data, sealedContour);\r\n else\r\n ParseCylHoles(d, br, offsetTanslation, data, sealedContour);\r\n }\r\n }\r\n }\r\n\r\n if (br.RelativeHardware)\r\n {\r\n for (let dId of br.RelativeHardware)\r\n {\r\n if (dId.IsErase) continue;\r\n let d = dId.Object;\r\n let holes: Hole[] = [];\r\n if (d instanceof HardwareCompositeEntity)\r\n {\r\n holes.push(...GetMetalTotalEntitys(d, true, (e) => e instanceof Hole) as Hole[]);\r\n }\r\n for (let h of holes)\r\n {\r\n if (h instanceof ExtrudeHole)\r\n ParseExtrudeHoles(h, br, offsetTanslation, data, sealedContour);\r\n else\r\n ParseCylHoles(h as CylinderHole, br, offsetTanslation, data, sealedContour);\r\n }\r\n }\r\n }\r\n\r\n let modelings = br.BoardModeling;\r\n for (let nid of br.LayerNails)\r\n {\r\n if (!nid || !nid.Object || nid.IsErase)\r\n continue;\r\n let nail = nid.Object as CylinderHole;\r\n if (!isParallelTo(nail.Normal, brNormal)) continue;\r\n\r\n let sp = nail.Position.applyMatrix4(br.OCSInv);\r\n let nor = nail.Normal.multiplyScalar(nail.Height);\r\n let ep = nail.Position.add(nor).applyMatrix4(br.OCSInv);\r\n let [z0, z1] = sp.z < ep.z ? [sp.z, ep.z] : [ep.z, sp.z];\r\n\r\n if (\r\n Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6\r\n && br.ContourCurve.PtInCurve(sp.setZ(0))\r\n && modelings.every(m => !m.shape.Outline.Curve.PtInCurve(sp))\r\n )\r\n {\r\n let face = !equalv3(nail.Normal, brNormal, 1e-3) ? DrillingFace.Front : DrillingFace.Back;\r\n let depth = Math.min(z1, br.Thickness) - Math.max(z0, 0);\r\n\r\n data.frontBackHoles.push({\r\n type: nail.Type,\r\n position: sp.sub(offsetTanslation),\r\n radius: nail.Radius,\r\n depth,\r\n face,\r\n });\r\n }\r\n }\r\n\r\n for (let m of modelings)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n {\r\n let center = cu.Center.setZ(0).sub(offsetTanslation);\r\n data.frontBackHoles.push(\r\n {\r\n type: GangDrillType.Pxl,\r\n position: center,\r\n radius: cu.Radius,\r\n depth: m.thickness,\r\n face: m.dir as number\r\n }\r\n );\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n /**拆单那边需要把侧孔 z 坐标转换为从上到下 */\r\n function InvertPosition(pos: Vector3, thickness: number)\r\n {\r\n pos.z = thickness - pos.z;\r\n }\r\n /**分析常规排钻 */\r\n function ParseCylHoles(d: CylinderHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtureContourCurve)\r\n {\r\n let processData = br.BoardProcessOption;\r\n let brNormal = br.Normal;\r\n let roMat = new Matrix4().extractRotation(br.OCSInv);\r\n let position = d.Position.applyMatrix4(br.OCSInv);\r\n let holes = data.frontBackHoles;\r\n let face: number;\r\n let isPush = false;\r\n let endPt: Vector3;\r\n let depth = d.Height;\r\n let diffMat = br.OCSInv.multiply(d.OCS);\r\n let x = new Vector3().setFromMatrixColumn(diffMat, 0);\r\n let angle = angleTo(XAxis, x);\r\n if (d.Type === GangDrillType.Pxl || d.Type === GangDrillType.WoodPXL)\r\n {\r\n if (isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, 1e-6)\r\n || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, 1e-6)\r\n || !IsBetweenA2B(position.z, 0, br.Thickness)\r\n || !outline.PtInCurve(position.clone().setZ(0))) return;\r\n\r\n position.sub(offsetTanslation);\r\n face = processData[EBoardKeyList.BigHole];\r\n isPush = true;\r\n }\r\n }\r\n else if (d.Type === GangDrillType.Ljg || d.Type === GangDrillType.Wood)\r\n {\r\n if (!isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n let z = position.z;\r\n if (!IsBetweenA2B(z, -d.Radius, br.Thickness + d.Radius, 1e-6)) return;\r\n let line = new Line(position.clone().setZ(0), position.clone().setZ(0).add(d.Normal.multiplyScalar(d.Height).applyMatrix4(roMat)));\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt) return;\r\n position = pt.clone().setZ(z);\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (outline.PtInCurve(p))\r\n {\r\n endPt = p.setZ(z);\r\n break;\r\n }\r\n }\r\n if (!endPt)\r\n {\r\n console.warn(\"排钻位置有问题\");\r\n return;\r\n }\r\n holes = data.sideHoles;\r\n face = Math.floor(outline.GetParamAtPoint(pt));\r\n isPush = true;\r\n depth = position.distanceTo(endPt);\r\n angle = undefined;\r\n\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n }\r\n else if (d.Type === GangDrillType.Wood)\r\n {\r\n if (!outline.PtInCurve(position.clone().setZ(0))) return;\r\n face = position.z > 0 ? FaceDirection.Front : FaceDirection.Back;\r\n holes = data.frontBackHoles;\r\n if (position.z > 0)\r\n {\r\n let z1 = position.z - d.Height;\r\n if (z1 > 0 && z1 < br.Thickness)\r\n {\r\n depth = br.Thickness - z1;\r\n isPush = true;\r\n }\r\n }\r\n else\r\n {\r\n let z1 = position.z + d.Height;\r\n if (z1 > 0 && z1 < br.Thickness)\r\n {\r\n depth = z1;\r\n isPush = true;\r\n }\r\n }\r\n position.sub(offsetTanslation);\r\n }\r\n }\r\n else\r\n {\r\n if (isParallelTo(d.Normal, br.Normal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, CanDrawHoleFuzz)\r\n || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, CanDrawHoleFuzz)\r\n || !IsBetweenA2B(position.z, 0, br.Thickness, -CanDrawHoleFuzz)\r\n || !outline.PtInCurve(position.clone().setZ(0))) return;\r\n position.sub(offsetTanslation);\r\n holes = data.frontBackHoles;\r\n face = !equalv3(d.Normal, brNormal, 1e-3) ? 0 : 1;\r\n isPush = true;\r\n }\r\n }\r\n isPush && holes.push({\r\n type: d.Type,\r\n position,\r\n radius: d.Radius,\r\n depth,\r\n face,\r\n endPt,\r\n angle\r\n });\r\n }\r\n\r\n /**分析自定义圆柱排钻 */\r\n function ParseExtrudeHoles(d: ExtrudeHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtureContourCurve)\r\n {\r\n if (!d.isHole)\r\n return;\r\n\r\n let brNormal = br.Normal;\r\n let cir = d.ContourCurve;\r\n if (cir instanceof Circle)\r\n {\r\n let diffMtx = br.OCSInv.multiply(d.OCS);\r\n let nor = d.Normal;\r\n let sp = cir.Center.applyMatrix4(diffMtx);\r\n let ep = cir.Center.add(new Vector3(0, 0, d.Height)).applyMatrix4(diffMtx);\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n if (isParallelTo(nor, brNormal))\r\n {\r\n let z0 = Math.min(sp.z, ep.z);\r\n let z1 = Math.max(sp.z, ep.z);\r\n let p = sp.clone().setZ(0).sub(offsetTanslation);\r\n\r\n if (Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6 && outline.PtInCurve(p))\r\n {\r\n let depth = z0 < 1e-2 ? z1 : br.Thickness - z0;\r\n let angle = angleTo(XAxis, x);\r\n if (equaln(angle, Math.PI))\r\n angle = 0;\r\n if (depth > 1e-2)\r\n data.frontBackHoles.push({\r\n type: d.isThrough ? GangDrillType.TK : GangDrillType.Ymj,\r\n position: z0 < 1e-6 ? p : p.setZ(br.Thickness),\r\n radius: cir.Radius,\r\n depth,\r\n face: z0 < 1e-6 ? DrillingFace.Back : DrillingFace.Front,\r\n angle: angle,\r\n });\r\n }\r\n }\r\n else\r\n {\r\n let oldZ = sp.z;\r\n let [minX, maxX] = sp.x < ep.x ? [sp.x, ep.x] : [ep.x, sp.x];\r\n let [minY, maxY] = sp.y < ep.y ? [sp.y, ep.y] : [ep.y, sp.y];\r\n\r\n\r\n if (sp.z > -cir.Radius\r\n && sp.z < br.Thickness + cir.Radius\r\n && Math.max(minX, 0) < Math.min(br.Width, maxX) + 1e-6\r\n && Math.max(minY, 0) < Math.min(br.Height, maxY) + 1e-6\r\n )\r\n {\r\n sp.setZ(0);\r\n ep.setZ(0);\r\n let line = new Line(sp, ep);\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt)\r\n {\r\n console.error(\"排钻嵌在板件内部\");\r\n return;\r\n }\r\n let position = pt.clone().setZ(oldZ);\r\n let endPt: Vector3;\r\n let face = Math.floor(outline.GetParamAtPoint(pt));\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (outline.PtInCurve(p))\r\n {\r\n endPt = p.setZ(oldZ);\r\n break;\r\n }\r\n }\r\n if (!endPt)\r\n return;\r\n let depth = position.distanceTo(endPt);\r\n\r\n if (equaln(depth, 0, 1e-2))\r\n return;\r\n\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n\r\n data.sideHoles.push({\r\n type: GangDrillType.Ljg,\r\n endPt,\r\n position,\r\n radius: cir.Radius,\r\n depth,\r\n face,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n function GetBoardMetals(br: Board)\r\n {\r\n let mids = br.RelativeHardware;\r\n let metalsData = {\r\n metals: 0,\r\n comp: 0\r\n };\r\n for (let id of mids)\r\n {\r\n if (!id || id.IsErase) continue;\r\n\r\n let metals = id.Object as HardwareCompositeEntity;\r\n if (!metals.HardwareOption)\r\n continue;\r\n if (metals.HardwareOption.type === EMetalsType.Metals)\r\n {\r\n metalsData.metals++;\r\n }\r\n else\r\n {\r\n metalsData.comp++;\r\n }\r\n }\r\n return metalsData;\r\n }\r\n\r\n export function GetHardwareCompositeData(en: HardwareCompositeEntity): ISpliteHardwareData\r\n {\r\n let size = en.BoundingBoxInOCS.getSize(new Vector3);\r\n let data = { ...en.HardwareOption } as ICompHardwareOption;\r\n const actualVal = safeEval(data.actualExpr, { L: size.x, W: size.y, H: size.z });\r\n data.actualExpr = actualVal ? actualVal.toString() : data.actualExpr;\r\n data.spec = ParseExpr(data.spec, { L: size.x, W: size.y, H: size.z });\r\n data.count = (safeEval(data.count, { L: size.x, W: size.y, H: size.z }) || 0).toString();\r\n\r\n let metalData = {\r\n metalsOption: data,\r\n dataList: en.DataList,\r\n children: [],\r\n size: size\r\n };\r\n if (en instanceof HardwareCompositeEntity && (en.HardwareOption.isSplite || en.HardwareOption.isSplitePrice))\r\n {\r\n if (en.Entitys.every(e => !(e instanceof HardwareCompositeEntity || e instanceof HardwareTopline)))\r\n return metalData;\r\n for (let e of en.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n let d = GetHardwareCompositeData(e);\r\n metalData.children.push(d);\r\n }\r\n else if (e instanceof HardwareTopline)\r\n {\r\n metalData.children.push(...GetHardwareToplineData(e));\r\n }\r\n }\r\n }\r\n\r\n return metalData;\r\n }\r\n\r\n export function GetHardwareToplineData(en: HardwareTopline)\r\n {\r\n let data = { ...en.HardwareOption } as IToplineOption;\r\n let datas: ISpliteHardwareData[] = [];\r\n let map = new Map();\r\n let addLen = en.HardwareOption.addLen;\r\n let cus = en.Segmentations;\r\n let size = en.BoundingBoxInOCS.getSize(new Vector3);\r\n for (let cu of cus)\r\n {\r\n let len = parseFloat(FixedNotZero(cu.Length, 2));\r\n if (map.has(len))\r\n {\r\n map.set(len, map.get(len) + 1);\r\n }\r\n else\r\n {\r\n map.set(len, 1);\r\n }\r\n }\r\n for (let [len, count] of map)\r\n {\r\n let totalLength = parseFloat(FixedNotZero(len + parseFloat(addLen), 2));\r\n let width = parseFloat(FixedNotZero(size.y, 2));\r\n let height = parseFloat(FixedNotZero(size.z, 2));\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d = { ...en.HardwareOption };\r\n const actualVal = safeEval(data.actualExpr, { L: totalLength, W: width, H: height });\r\n d.actualExpr = actualVal ? actualVal.toString() : d.actualExpr;\r\n d.spec = ParseExpr(data.spec, { L: totalLength, W: width, H: height });\r\n datas.push({\r\n metalsOption: d,\r\n dataList: en.DataList,\r\n length: totalLength,\r\n children: [],\r\n size\r\n });\r\n }\r\n }\r\n return datas;\r\n }\r\n\r\n /**获取排钻数量 */\r\n export function GetTotalDrillCount(brs: (Board | IHardwareType)[])\r\n {\r\n return lookOverBoardInfosTool.GetCount(brs);\r\n }\r\n\r\n export function GetCabSize(brList: Board[]): Map\r\n {\r\n let brMap: Map = new Map();\r\n //根据柜名房名分类\r\n for (let b of brList)\r\n {\r\n let k = b.BoardProcessOption[EBoardKeyList.RoomName] + '-' + b.BoardProcessOption[EBoardKeyList.CabinetName];\r\n if (brMap.has(k))\r\n brMap.get(k).push(b);\r\n else\r\n brMap.set(k, [b]);\r\n }\r\n\r\n let sizeData: Map = new Map();\r\n\r\n for (let [k, brs] of brMap)\r\n {\r\n let ocsInv = brs[0].SpaceOCSInv;\r\n let box = new Box3();\r\n let size = new Vector3();\r\n for (let b of brs)\r\n {\r\n sizeData.set(b, size);\r\n box.union(b.GetBoundingBoxInMtx(ocsInv));\r\n }\r\n box.getSize(size);\r\n }\r\n return sizeData;\r\n }\r\n export function Data2Polyline(data: IContourData, isClose = true)\r\n {\r\n let pl = new Polyline(data.pts.map((p, i) => ({ pt: new Vector2(p.x, p.y), bul: data.buls[i] })));\r\n if (isClose)\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n export function Report(ens: Entity[], msg: string)\r\n {\r\n if (IsDev()) return;\r\n ShowSelectObjects(ens);\r\n SendReport(msg);\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\n/**\r\n * 简化优化版本的曲线求交, 优化版本可以参考(算法导论33.2 确定任意一对线段是否相交 p599)\r\n */\r\nexport class CurveIntersection\r\n{\r\n //用来缓存的曲线包围盒\r\n protected boxMap: Map = new Map();\r\n\r\n /**\r\n * 交点数据集,key 为曲线 value 为和它相交的(曲线和交点的Map)\r\n */\r\n intersect: Map> = new Map();\r\n intersect2: Map = new Map();\r\n\r\n /**\r\n * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来\r\n * @memberof CurveIntersection\r\n */\r\n constructor(cus: Curve[], parseIntersectionParam = false, intType = IntersectOption.OnBothOperands, protected fuzz = 1e-6)\r\n {\r\n this.GenBox(cus);\r\n //按x排序\r\n this.SortCurve(cus);\r\n\r\n let count = cus.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let c1 = cus[i];\r\n let c1d = this.GetIntersect(c1);\r\n\r\n let c1b = this.boxMap.get(c1);\r\n for (let j = i + 1; j < count; j++)\r\n {\r\n let c2 = cus[j];\r\n\r\n //过滤掉不需要计算的曲线\r\n let c2b = this.boxMap.get(c2);\r\n\r\n if (c2b.min.x - c1b.max.x > fuzz)\r\n break;\r\n if (c2b.min.y - c1b.max.y > fuzz)\r\n continue;\r\n\r\n let ints = this.IntersectWith2(c1, c2, intType);\r\n if (ints.length > 0)\r\n {\r\n let pts = ints.map(i => i.pt);\r\n c1d.set(c2, pts);\r\n this.GetIntersect(c2).set(c1, pts);\r\n\r\n if (parseIntersectionParam)\r\n {\r\n this.AppendIntersectionParams(c1, ints.map(i => i.thisParam));\r\n this.AppendIntersectionParams(c2, ints.map(i => i.argParam));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected IntersectWith2(c1: Curve, c2: Curve, intType: IntersectOption)\r\n {\r\n return c1.IntersectWith2(c2, intType);\r\n }\r\n\r\n protected AppendIntersectionParams(curve: Curve, params: number[])\r\n {\r\n let arr = this.intersect2.get(curve);\r\n if (!arr)\r\n {\r\n arr = [];\r\n this.intersect2.set(curve, arr);\r\n }\r\n arr.push(...params);\r\n }\r\n\r\n protected GenBox(cus: Curve[])\r\n {\r\n for (let c of cus)\r\n this.boxMap.set(c, c.BoundingBox);\r\n }\r\n\r\n protected SortCurve(cus: Curve[])\r\n {\r\n cus.sort((c1, c2) =>\r\n {\r\n return this.boxMap.get(c1).min.x - this.boxMap.get(c2).min.x;\r\n });\r\n }\r\n\r\n GetIntersect(cu: Curve): Map\r\n {\r\n if (this.intersect.has(cu))\r\n return this.intersect.get(cu);\r\n\r\n let m = new Map();\r\n this.intersect.set(cu, m);\r\n return m;\r\n }\r\n}\r\n\r\nexport class CurveIntersection2 extends CurveIntersection\r\n{\r\n /**\r\n * Curve2Polyline使用这个时,为了避免多余的交点导致曲线切割过度,过滤掉无关的点\r\n */\r\n protected IntersectWith2(c1: Curve, c2: Curve, intType: IntersectOption)\r\n {\r\n let pts = c1.IntersectWith2(c2, intType);\r\n return pts.filter(p =>\r\n {\r\n let inC1 = c1.ParamOnCurve(p.thisParam) || c1.StartPoint.distanceTo(p.pt) < this.fuzz || c1.EndPoint.distanceTo(p.pt) < this.fuzz;\r\n if (!inC1) return false;\r\n let inC2 = c2.ParamOnCurve(p.argParam) || c2.StartPoint.distanceTo(p.pt) < this.fuzz || c2.EndPoint.distanceTo(p.pt) < this.fuzz;\r\n return inC2;\r\n });\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Polyline } from \"../api\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\nimport { CurveIntersection2 } from \"./CurveIntersection\";\r\nimport { RegionParse } from \"./RegionParse\";\r\n\r\n/**\r\n * 某些时候我们不能创建轮廓,此时我们使用类似c2r的方法来构建一个外部轮廓.\r\n */\r\nexport function CreateContour2(curves: Curve[], fuzz = 1e-4): Contour | undefined\r\n{\r\n let extendsMinDistSq = fuzz * fuzz;\r\n\r\n let intersect = new CurveIntersection2(curves, false, IntersectOption.ExtendBoth, fuzz);\r\n\r\n let curves2: Curve[] = [];\r\n\r\n //延伸+打断\r\n for (let [cu, pmap] of intersect.intersect)\r\n {\r\n let sp = cu.StartPoint;\r\n let ep = cu.EndPoint;\r\n\r\n let epExtend: Vector3;\r\n let epDist = Infinity;\r\n let spExtend: Vector3;\r\n let spDist = Infinity;\r\n\r\n let isClose = cu.IsClose;\r\n\r\n let ipts: Vector3[] = [];\r\n for (let [, pts] of pmap)\r\n {\r\n ipts.push(...pts);\r\n\r\n if (!isClose)\r\n for (let p of pts)\r\n {\r\n let d = p.distanceToSquared(ep);\r\n if (d < epDist)\r\n {\r\n epDist = d;\r\n epExtend = p;\r\n }\r\n d = p.distanceToSquared(sp);\r\n if (d < spDist)\r\n {\r\n spDist = d;\r\n spExtend = p;\r\n }\r\n }\r\n }\r\n\r\n if (!isClose)\r\n {\r\n //延伸\r\n if (epDist > 0 && epDist < extendsMinDistSq)\r\n {\r\n let param = cu.GetParamAtPoint(epExtend);\r\n if (param > cu.EndParam)\r\n cu.Extend(param);\r\n }\r\n if (spDist > 0 && spDist < extendsMinDistSq)\r\n {\r\n let param = cu.GetParamAtPoint(spExtend);\r\n if (param < 0)\r\n cu.Extend(param);\r\n }\r\n }\r\n\r\n //打断\r\n let curves: Curve[];\r\n if (ipts.length > 0)\r\n curves = cu.GetSplitCurvesByPts(ipts);\r\n else\r\n curves = [cu];\r\n\r\n let tempCus: Curve[] = [];\r\n for (let c of curves)\r\n {\r\n if (c instanceof Polyline)\r\n tempCus.push(...c.Explode());\r\n else\r\n tempCus.push(c);\r\n }\r\n\r\n curves2.push(...tempCus);\r\n }\r\n\r\n let parse = new RegionParse(curves2);\r\n\r\n for (let rs of parse.RegionsOutline)\r\n {\r\n let curves = rs.map(r => r.curve);\r\n return Contour.CreateContour(curves, false);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, Shape as TShape, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../Common/ArrayExt\";\r\nimport { curveLinkGroup } from \"../Common/CurveUtils\";\r\nimport { clamp, FixIndex } from \"../Common/Utils\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid, ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { IntersectOption, IntersectResult } from \"../GraphicsSystem/IntersectWith\";\r\nimport { LinesType } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectsBox } from \"./Box\";\r\nimport { CreateContour2 } from \"./CreateContour2\";\r\nimport { AsVector2, equaln, equalv2, equalv3, IdentityMtx4 } from \"./GeUtils\";\r\nimport { RegionParse } from \"./RegionParse\";\r\n\r\nexport enum DepthType\r\n{\r\n Front = 1,\r\n Back = 2,\r\n All = 3,\r\n}\r\n\r\n/**\r\n * 槽的几何数据,包括槽的墙面和槽的盖子\r\n */\r\nexport class Groove\r\n{\r\n contourWall: ExtudeWall;//槽轮廓的墙\r\n holeWalls: ExtudeWall[] = [];//槽的网洞的墙\r\n private lid: CurveTapeShape;//槽的盖子\r\n constructor(contour: Contour,\r\n holes: Contour[],\r\n public depthType: DepthType,\r\n public depth: number,\r\n public allDepth: number,\r\n private box = contour.BoundingBox\r\n )\r\n {\r\n this.contourWall = new ExtudeWall(contour.Curve, depthType, depth, allDepth, DirectionType.Inner);\r\n for (let h of holes)\r\n this.holeWalls.push(new ExtudeWall(h.Curve, depthType, depth, allDepth, DirectionType.Outer));\r\n\r\n this.lid = new CurveTapeShape(contour, holes);\r\n }\r\n\r\n /**\r\n * @param groove this - groove\r\n * @param [eachOther=true] 相互裁剪\r\n */\r\n ClipTo(groove: Groove, eachOther = true)\r\n {\r\n //相同深度和面不用操作\r\n if (groove.depthType === this.depthType && groove.depth === this.depth) return;\r\n\r\n if (!IntersectsBox(this.box, groove.box)) return;\r\n\r\n this.ClipLid(groove);\r\n groove.ClipLid(this);\r\n\r\n //一正一反,不交集\r\n if (this.depthType + groove.depthType === 3 && this.depth + groove.depth < this.allDepth)\r\n return;\r\n\r\n this.contourWall.ClipTo(groove, true);\r\n for (let wall of this.holeWalls)\r\n wall.ClipTo(groove, true);\r\n\r\n if (eachOther)\r\n {\r\n groove.contourWall.ClipTo(this, false);\r\n for (let wall of groove.holeWalls)\r\n wall.ClipTo(this, false);\r\n }\r\n }\r\n\r\n private ClipLid(groove: Groove)\r\n {\r\n if (this.depthType === DepthType.All) return;\r\n if (groove.depthType === DepthType.All) return;\r\n\r\n if (this.depthType === groove.depthType)\r\n {\r\n if (groove.depth > this.depth)\r\n this.lid.ClipTo(groove.lid, true);\r\n else\r\n this.lid.SplitTo(groove.lid);\r\n }\r\n else\r\n {\r\n if (this.depth + groove.depth >= this.allDepth)\r\n this.lid.ClipTo(groove.lid, true);\r\n else\r\n this.lid.SplitTo(groove.lid);\r\n }\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild, rotateUv: boolean)\r\n {\r\n this.contourWall.Draw(verticesArray, uvArray, edgeBuild);\r\n for (let wall of this.holeWalls)\r\n wall.Draw(verticesArray, uvArray, edgeBuild);\r\n\r\n if (this.depthType === DepthType.All) return;\r\n\r\n let isFront = this.depthType === DepthType.Front;\r\n this.lid.Draw(verticesArray, uvArray, isFront, isFront ? this.allDepth - this.depth : this.depth, rotateUv);\r\n }\r\n}\r\n\r\nfunction GetShape(cu: ExtureContourCurve): TShape\r\n{\r\n if (cu instanceof Circle)\r\n {\r\n let sp = new TShape();\r\n let cen = cu.Center;\r\n sp.ellipse(cen.x, cen.y, cu.Radius, cu.Radius, 0, 2 * Math.PI, false, 0);\r\n return sp;\r\n }\r\n else\r\n {\r\n if (cu.OCSNoClone !== IdentityMtx4)\r\n cu.UpdateMatrixTo(IdentityMtx4);\r\n return cu.Shape;\r\n }\r\n}\r\n\r\nfunction CreateTape(faceType: DepthType, startParam: number, endParam: number, depth: number, allDepth: number): Tape\r\n{\r\n if (faceType === DepthType.Front)\r\n return new Tape(startParam, endParam, allDepth - depth, allDepth);\r\n else\r\n return new Tape(startParam, endParam, 0, depth);\r\n}\r\n\r\n//朝向类型\r\nenum DirectionType\r\n{\r\n Outer = 0,//外墙\r\n Inner = 1 //内墙\r\n}\r\n\r\n//轮廓树节点,用于重新确认外墙和网洞的关系\r\nexport class ContourTreeNode\r\n{\r\n parent: ContourTreeNode;//当存在Parent时,表示它是一个洞\r\n constructor(public contour: Contour, public children: ContourTreeNode[] = []) { }\r\n\r\n SetParent(node: ContourTreeNode)\r\n {\r\n this.parent = node;\r\n node.children.push(this);\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean)//, depth = 1\r\n {\r\n // TestDraw(this.contour.Curve, depth);\r\n let pts = this.contour.Curve.GetStretchPoints();\r\n\r\n let vertices = [...pts];\r\n let holes = this.children.map(h =>\r\n {\r\n // TestDraw(h.contour.Curve, depth + 1);\r\n let pts = h.contour.Curve.GetStretchPoints();\r\n vertices.push(...pts);\r\n return pts;\r\n });\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, holes);\r\n\r\n for (let f of faces)\r\n {\r\n if (front)\r\n {\r\n AddVertice(vertices[f[0]]);\r\n AddVertice(vertices[f[1]]);\r\n AddVertice(vertices[f[2]]);\r\n }\r\n else\r\n {\r\n AddVertice(vertices[f[0]]);\r\n AddVertice(vertices[f[2]]);\r\n AddVertice(vertices[f[1]]);\r\n }\r\n }\r\n\r\n function AddVertice(v: Vector3)\r\n {\r\n verticesArray.push(v.x, v.y, z);\r\n if (rotateUv)\r\n uvArray.push(v.y * 1e-3, v.x * 1e-3);\r\n else\r\n uvArray.push(v.x * 1e-3, v.y * 1e-3);\r\n }\r\n\r\n for (let hole of this.children)\r\n {\r\n for (let h of hole.children)\r\n {\r\n h.Draw(verticesArray, uvArray, front, z, rotateUv);//, depth + 2\r\n }\r\n }\r\n }\r\n\r\n static ParseContourTree(contourNodes: ContourTreeNode[]): void\r\n {\r\n contourNodes.sort((c1, c2) => c1.contour.Curve.Area - c2.contour.Curve.Area);\r\n for (let i = 0; i < contourNodes.length; i++)\r\n {\r\n const node1 = contourNodes[i];\r\n let p = node1.contour.Curve.StartPoint;\r\n for (let j = i + 1; j < contourNodes.length; j++)\r\n {\r\n const node2 = contourNodes[j];\r\n if (node2.contour.BoundingBox.intersectsBox(node1.contour.BoundingBox)\r\n && node2.contour.Curve.PtInCurve(p))\r\n {\r\n node1.SetParent(node2);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass EdgeGeometryBuild\r\n{\r\n lineVerticesArray: number[] = [];\r\n\r\n frontLines: Line[] = [];\r\n backLines: Line[] = [];\r\n constructor(public allDepth: number) { }\r\n AddLidLine(p1: Vector3, p2: Vector3, depth: number)\r\n {\r\n if (depth === 0)\r\n {\r\n p1 = p1.clone().setZ(0);\r\n p2 = p2.clone().setZ(0);\r\n let line = new Line(p1, p2);\r\n this.backLines.push(line);\r\n }\r\n else if (depth === this.allDepth)\r\n {\r\n p1 = p1.clone().setZ(0);\r\n p2 = p2.clone().setZ(0);\r\n let line = new Line(p1, p2);\r\n this.frontLines.push(line);\r\n }\r\n }\r\n\r\n BuildLid(verticesArray: number[], uvArray: number[], rotateUv: boolean)\r\n {\r\n let arr = [this.backLines, this.frontLines];\r\n\r\n for (let index = 0; index < 2; index++)\r\n {\r\n let lines = arr[index];\r\n let parse = new RegionParse(lines, 2);\r\n let contourNodes: ContourTreeNode[] = [];\r\n for (let routes of parse.RegionsOutline)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false) ?? CreateContour2(cs);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"未能构建盖子\");\r\n }\r\n\r\n ContourTreeNode.ParseContourTree(contourNodes);\r\n\r\n for (let j = contourNodes.length; j--;)\r\n {\r\n let node = contourNodes[j];\r\n if (node.parent) continue;\r\n\r\n node.Draw(verticesArray, uvArray, index === 1, this.allDepth * index, rotateUv);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 胶带\r\n */\r\nclass Tape\r\n{\r\n constructor(\r\n public start: number,\r\n public end: number,\r\n\r\n public bottom: number,\r\n public top: number\r\n )\r\n {\r\n\r\n }\r\n\r\n //用于测试\r\n get Curve()\r\n {\r\n return new Polyline().RectangleFrom2Pt(new Vector3(this.start, this.bottom), new Vector3(this.end, this.top));\r\n }\r\n\r\n Clip(t: this): Tape[]\r\n {\r\n let yr = IntersectRange(this.bottom, this.top, t.bottom, t.top, 1e5);\r\n if (yr === undefined) return [this];\r\n\r\n let xr = IntersectRange(this.start, this.end, t.start, t.end, 1e5);\r\n if (xr === undefined) return [this];\r\n\r\n let rem = SubtractRange(this.start, this.end, t.start, t.end, 1e5).map(r =>\r\n {\r\n return new Tape(r[0], r[1], this.bottom, this.top);\r\n });\r\n\r\n let remR = SubtractRange(this.bottom, this.top, t.bottom, t.top, 1e5);\r\n for (let hr of remR)\r\n {\r\n rem.push(new Tape(xr[0], xr[1], hr[0], hr[1]));\r\n }\r\n return rem;\r\n }\r\n\r\n Split(xlst: number[]): Tape[]\r\n {\r\n let ret: Tape[] = [];\r\n let pre = this.start;\r\n for (let x of xlst)\r\n {\r\n if (x > pre)\r\n {\r\n if (x >= this.end) x = this.end;\r\n if (equaln(pre, x)) continue;\r\n ret.push(new Tape(pre, x, this.bottom, this.top));\r\n pre = x;\r\n if (x === this.end) break;\r\n }\r\n }\r\n return ret;\r\n }\r\n}\r\n\r\n/**\r\n * 二维形状,内部用曲线胶带表示(用来计算盖子差集算法)\r\n */\r\nexport class CurveTapeShape\r\n{\r\n children: CurveTapeShape[] = [];\r\n contour: CurveTape;\r\n holes: CurveTape[];\r\n constructor(contour: Contour, holes: Contour[])\r\n {\r\n this.contour = new CurveTape(contour, DirectionType.Outer);\r\n this.holes = holes.map(h => new CurveTape(h, DirectionType.Inner));\r\n }\r\n\r\n CloneNew()\r\n {\r\n let s = new CurveTapeShape(this.contour.contour, this.holes.map(h => h.contour));\r\n return s;\r\n }\r\n\r\n /**\r\n * 删除包含,同向\r\n */\r\n ClipTo(s: CurveTapeShape, append: boolean = false)\r\n {\r\n for (let c of [this.contour, ... this.holes])\r\n if (c.tapes.length > 0)\r\n c.ClipTo(s);\r\n\r\n if (append)\r\n {\r\n let sn = s.CloneNew();\r\n sn.ReverseClipTo(this);\r\n this.children.push(sn);\r\n }\r\n }\r\n\r\n //合理打断(以保证三维网格对齐(否则圆弧点将无法正确的对齐))\r\n SplitTo(s: CurveTapeShape)\r\n {\r\n for (let c of [this.contour, ...this.holes])\r\n {\r\n for (let c2 of [s.contour, ...s.holes])\r\n {\r\n let int = GetIntersection(c.contour.Curve, c2.contour.Curve);\r\n c.splitParams.push(...int.map(i => i.thisParam));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 只保留被包含部分\r\n */\r\n private ReverseClipTo(s: CurveTapeShape): this\r\n {\r\n for (let c of [this.contour, ... this.holes])\r\n if (c.tapes.length > 0)\r\n c.ReverseClipTo(s);\r\n\r\n return this;\r\n }\r\n\r\n ChildrenClip()\r\n {\r\n for (let i = 0; i < this.children.length; i++)\r\n {\r\n let s1 = this.children[i];\r\n for (let j = i + 1; j < this.children.length; j++)\r\n {\r\n let s2 = this.children[j];\r\n\r\n s1.ClipTo(s2, false);\r\n s2.ClipTo(s1, false);\r\n }\r\n }\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean)\r\n {\r\n this.ChildrenClip();\r\n\r\n let polylines: Polyline[] = this.contour.Curves;\r\n\r\n for (let h of this.holes)\r\n polylines.push(...h.Curves);\r\n\r\n for (let s of this.children)\r\n {\r\n polylines.push(...s.contour.Curves);\r\n for (let h of s.holes)\r\n polylines.push(...h.Curves);\r\n }\r\n\r\n // TestDraw(polylines, z);\r\n let groups = curveLinkGroup(polylines);\r\n let contourNodes: ContourTreeNode[] = [];\r\n for (let cus of groups)\r\n {\r\n let c = Contour.CreateContour(cus, false);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"出错\");\r\n }\r\n\r\n ContourTreeNode.ParseContourTree(contourNodes);\r\n\r\n for (let j = contourNodes.length; j--;)\r\n {\r\n let node = contourNodes[j];\r\n // TestDraw(s.contour.Curve.Clone(), z);\r\n if (node.parent) continue;\r\n\r\n node.Draw(verticesArray, uvArray, front, z, rotateUv);\r\n }\r\n }\r\n}\r\n\r\nconst SplitLength = 4;\r\nconst MinSplitCount = 12;\r\nconst MaxSplitCount = 360;\r\nfunction SplitCurveParams(cu: ExtureContourCurve): number[]\r\n{\r\n let xparams: number[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), MinSplitCount, MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n xparams.push(i / splitCount);\r\n }\r\n else\r\n //分段1\r\n for (let i = 0; i < cu.EndParam; i++)\r\n {\r\n xparams.push(i);\r\n if (cu.GetBuilgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), MinSplitCount, MaxSplitCount);\r\n if (splitCount === 0) continue;\r\n\r\n let a = Math.PI * 2 / splitCount;\r\n let params: number[] = [];\r\n for (let j = 0; j < splitCount; j++)\r\n {\r\n let param = arc.GetParamAtAngle(a * j);\r\n if (arc.ParamOnCurve(param))\r\n params.push(param);\r\n }\r\n arraySortByNumber(params);\r\n if (params.length === 0) continue;\r\n\r\n for (let p of params)\r\n {\r\n if (p > 1e-5 && p < 9.99999)\r\n xparams.push(p + i);\r\n }\r\n }\r\n }\r\n xparams.push(cu.EndParam);\r\n return xparams;\r\n}\r\n\r\n/**\r\n * 曲线胶带(一维)\r\n */\r\nclass CurveTape\r\n{\r\n tapes: Range[];\r\n splitParams: number[] = [];\r\n constructor(public contour: Contour, public wallType: DirectionType)\r\n {\r\n this.tapes = [[0, this.contour.Curve.EndParam]];\r\n }\r\n\r\n get Curves(): Polyline[]\r\n {\r\n let xparams: number[] = SplitCurveParams(this.contour.Curve);\r\n if (this.splitParams.length > 0)\r\n {\r\n xparams.push(...this.splitParams);\r\n arraySortByNumber(xparams);\r\n arrayRemoveDuplicateBySort(xparams, (p1, p2) => equaln(p1, p2));\r\n }\r\n\r\n let polylines: Polyline[] = [];\r\n\r\n function TD(p: Vector3): PolylineProps\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n }\r\n\r\n const addPolyline = (t: Range) =>\r\n {\r\n let pts = [TD(this.contour.Curve.GetPointAtParam(t[0]))];\r\n for (let x of xparams)\r\n {\r\n if (x <= t[0]) continue;\r\n if (x >= t[1]) break;\r\n\r\n pts.push(TD(this.contour.Curve.GetPointAtParam(x)));\r\n }\r\n pts.push(TD(this.contour.Curve.GetPointAtParam(t[1])));\r\n\r\n let pl = new Polyline(pts);\r\n polylines.push(pl);\r\n };\r\n\r\n for (let t of this.tapes)\r\n {\r\n if (t[0] > t[1])\r\n {\r\n addPolyline([0, t[1]]);\r\n addPolyline([t[0], this.contour.Curve.EndParam]);\r\n }\r\n else\r\n addPolyline(t);\r\n }\r\n return polylines;\r\n }\r\n\r\n /**\r\n * 分析与另一个形状的包含关系\r\n */\r\n Parse(s: CurveTapeShape): CurveParamRangeRelation\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.contour.Curve, s.contour.contour.Curve);\r\n if (this.wallType === DirectionType.Inner)\r\n [res1.syntropy, res1.reverse] = [res1.reverse, res1.syntropy];\r\n if (res1.container.length > 0)\r\n {\r\n for (let h of s.holes)\r\n {\r\n let [res2] = ParseCurveParamRangeRelation(this.contour.Curve, h.contour.Curve);\r\n if (this.wallType === DirectionType.Outer)\r\n [res2.syntropy, res2.reverse] = [res2.reverse, res2.syntropy];\r\n\r\n res1.syntropy.push(...res2.syntropy);\r\n res1.reverse.push(...res2.reverse);\r\n\r\n res1.container = SubtractRanges(res1.container, res2.container, this.contour.Curve.EndParam);\r\n res1.container = SubtractRanges(res1.container, res2.syntropy, this.contour.Curve.EndParam);\r\n res1.container = SubtractRanges(res1.container, res2.reverse, this.contour.Curve.EndParam);\r\n }\r\n }\r\n return res1;\r\n }\r\n\r\n /**\r\n * 删除包含,同向面\r\n */\r\n ClipTo(s: CurveTapeShape): this\r\n {\r\n let d = this.Parse(s);\r\n\r\n this.tapes = SubtractRanges(this.tapes, d.container, this.contour.Curve.EndParam);\r\n this.tapes = SubtractRanges(this.tapes, d.syntropy, this.contour.Curve.EndParam);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 保留被包含的部分\r\n */\r\n ReverseClipTo(s: CurveTapeShape): this\r\n {\r\n this.tapes = this.Parse(s).container;\r\n return this;\r\n }\r\n}\r\n\r\nclass ExtudeWall\r\n{\r\n //胶带(立面)\r\n private Tape: Tape[];\r\n constructor(public curve: ExtureContourCurve,\r\n public depthType: DepthType,\r\n public depth: number,\r\n public allDepth: number,\r\n public wallType: DirectionType\r\n )\r\n {\r\n //一整段\r\n this.Tape = [CreateTape(depthType, 0, this.curve.EndParam, depth, allDepth)];\r\n }\r\n\r\n /**\r\n * 减去在另一个groove内的部分\r\n * @param groove this - groove\r\n * @param [clipSyntropy=false] 删除同向的面\r\n */\r\n ClipTo(groove: Groove, clipSyntropy = false)\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.curve, groove.contourWall.curve);\r\n if (this.wallType !== groove.contourWall.wallType)\r\n [res1.syntropy, res1.reverse] = [res1.reverse, res1.syntropy];\r\n if (res1.container.length > 0)\r\n {\r\n for (let h of groove.holeWalls)\r\n {\r\n let [resh1] = ParseCurveParamRangeRelation(this.curve, h.curve);\r\n\r\n //翻转\r\n if (this.wallType !== h.wallType)\r\n [resh1.syntropy, resh1.reverse] = [resh1.reverse, resh1.syntropy];\r\n\r\n //删除在网洞内的\r\n let subParams: [number, number][];\r\n if (clipSyntropy)\r\n subParams = resh1.container;//删除共面,\r\n else\r\n subParams = [...resh1.container, ...resh1.syntropy];//保留共面部分\r\n\r\n for (let i of subParams)\r\n {\r\n let rems: [number, number][] = [];\r\n for (let r of res1.container)\r\n rems.push(...SubtractRange(r[0], r[1], i[0], i[1], this.curve.EndParam));\r\n res1.container = rems;\r\n }\r\n }\r\n }\r\n\r\n let params = [...res1.container, ...res1.reverse];\r\n if (clipSyntropy)\r\n params.push(...res1.syntropy);\r\n\r\n for (let c of params)\r\n this.ClipFromParam(c[0], c[1], groove.depthType, groove.depth);\r\n }\r\n\r\n ClipReverse(wall: this)\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.curve, wall.curve);\r\n for (let c of res1.syntropy)\r\n this.ClipFromParam(c[0], c[1], wall.depthType, wall.depth);\r\n }\r\n\r\n /**\r\n * 当起始参数大于终止参数时,裁剪的区域经过终点\r\n *\r\n * @param startParam 起始参数\r\n * @param endParam 终止参数\r\n * @param faceType 裁剪面朝向\r\n * @param depth 裁剪面的深度\r\n */\r\n ClipFromParam(startParam: number, endParam: number, faceType: DepthType, depth: number)\r\n {\r\n if (equaln(startParam, endParam)) return;\r\n if (startParam > endParam)\r\n {\r\n this.ClipFromParam(startParam, this.curve.EndParam, faceType, depth);\r\n this.ClipFromParam(0, endParam, faceType, depth);\r\n return this;\r\n }\r\n\r\n let subTape = CreateTape(faceType, startParam, endParam, depth, this.allDepth);\r\n let taps: Tape[] = [];\r\n for (let t of this.Tape)\r\n taps.push(...t.Clip(subTape));\r\n\r\n this.Tape = taps;\r\n return this;\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild)\r\n {\r\n let xparams = SplitCurveParams(this.curve);\r\n\r\n function AddVertice(v: Vector3)\r\n {\r\n verticesArray.push(v.x);\r\n verticesArray.push(v.y);\r\n verticesArray.push(v.z);\r\n }\r\n\r\n let tapes: Tape[] = [];\r\n this.Tape.sort((t1, t2) => t1.start - t2.start);\r\n for (let tape of this.Tape)\r\n tapes.push(...tape.Split(xparams));\r\n for (let i = 0; i < tapes.length; i++)\r\n {\r\n let preIndex = FixIndex(i - 1, tapes);\r\n let nextIndex = FixIndex(i + 1, tapes);\r\n\r\n let tape = tapes[i];\r\n let preTape = tapes[preIndex];\r\n let nextTape = tapes[nextIndex];\r\n\r\n let p1 = this.curve.GetPointAtParam(tape.start).setZ(tape.bottom);\r\n let p2 = this.curve.GetPointAtParam(tape.end).setZ(tape.bottom);\r\n let vs = [p1, p2, p2.clone().setZ(tape.top), p1.clone().setZ(tape.top), p1];\r\n edgeBuild.AddLidLine(p1, p2, tape.bottom);\r\n edgeBuild.AddLidLine(p1, p2, tape.top);\r\n\r\n //#region 构造线框\r\n {\r\n let leftRanges: Range[];\r\n let rightRange: Range[];\r\n\r\n const IsInteger = (n: number) => equaln(n, Math.round(n), 1e-8);\r\n\r\n if (!IsInteger(tape.start) && equaln(tape.start, preTape.end))\r\n leftRanges = SubtractRange(tape.bottom, tape.top, preTape.bottom, preTape.top, this.allDepth);\r\n else\r\n leftRanges = [[tape.bottom, tape.top]];\r\n\r\n if (equaln(tape.end, nextTape.start))\r\n rightRange = SubtractRange(tape.bottom, tape.top, nextTape.bottom, nextTape.top, this.allDepth);\r\n else\r\n rightRange = [[tape.bottom, tape.top]];\r\n\r\n //上下两条线\r\n edgeBuild.lineVerticesArray.push(\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n\r\n p1.x, p1.y, tape.top,\r\n p2.x, p2.y, tape.top,\r\n );\r\n\r\n //左右线\r\n for (let range of leftRanges)\r\n {\r\n edgeBuild.lineVerticesArray.push(\r\n p1.x, p1.y, range[0],\r\n p1.x, p1.y, range[1]);\r\n }\r\n for (let range of rightRange)\r\n {\r\n edgeBuild.lineVerticesArray.push(\r\n p2.x, p2.y, range[0],\r\n p2.x, p2.y, range[1]);\r\n }\r\n }\r\n //#endregion\r\n\r\n //和X平行平行\r\n let isXPar = (vs[0].y + vs[1].y + vs[2].y) < 0.01;\r\n\r\n function AddUv(p: Vector3)\r\n {\r\n if (isXPar)\r\n uvArray.push((p.z - 1) * 1e-3, p.y * 1e-3);\r\n else\r\n uvArray.push((p.z - 1) * 1e-3, p.x * 1e-3);\r\n }\r\n if (this.wallType === DirectionType.Outer)\r\n {\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[1]);\r\n AddUv(vs[1]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n AddVertice(vs[3]);\r\n AddUv(vs[3]);\r\n }\r\n else\r\n {\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n AddVertice(vs[1]);\r\n AddUv(vs[1]);\r\n\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[3]);\r\n AddUv(vs[3]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 曲线参数范围关系(包含,分离,同向共线,反向共线)\r\n * 用来表示某一曲线在另一个曲线内的关系\r\n */\r\ninterface CurveParamRangeRelation\r\n{\r\n outer: Range[];//外部\r\n container: Range[];//被包含\r\n syntropy: Range[];//同向\r\n reverse: Range[];//反向\r\n}\r\n\r\nfunction CloneCurveRange(r: CurveParamRangeRelation): CurveParamRangeRelation\r\n{\r\n return {\r\n outer: r.outer.slice(),\r\n container: r.container.slice(),\r\n syntropy: r.syntropy.slice(),\r\n reverse: r.reverse.slice(),\r\n };\r\n}\r\n\r\ninterface CurveSegs\r\n{\r\n outer: Curve[];//外部\r\n container: Curve[];//被包含\r\n syntropy: Curve[];//同向\r\n reverse: Curve[];//反向\r\n}\r\n\r\nfunction binarySearch(ar: number[], el: number): number\r\n{\r\n let m = 0;\r\n let n = ar.length - 1;\r\n while (m <= n)\r\n {\r\n let k = (n + m) >> 1;\r\n let cmp = (el - ar[k]);\r\n if (cmp > 1e8)\r\n m = k + 1;\r\n else if (cmp < -1e8)\r\n n = k - 1;\r\n else\r\n return k;\r\n }\r\n return -m - 1;\r\n}\r\n\r\nfunction CurveSplit(cu: Curve, range: CurveParamRangeRelation): CurveSegs\r\n{\r\n let segs = { outer: [], container: [], syntropy: [], reverse: [] };\r\n\r\n let ranges: Range[] = [...range.outer, ...range.container, ...range.syntropy, ...range.reverse];\r\n\r\n ranges.sort((r1, r2) => r1[0] - r2[0]);\r\n\r\n let params: number[] = ranges.flat();\r\n arrayRemoveDuplicateBySort(params, (p1, p2) => equaln(p1, p2));\r\n let cus = cu.GetSplitCurves(params);\r\n\r\n for (let key in range)\r\n {\r\n for (let r of range[key])\r\n {\r\n let i = binarySearch(params, r[0]);\r\n segs[key].push(cus[i]);\r\n }\r\n }\r\n\r\n return segs;\r\n}\r\n\r\n/**\r\n * 分析两个曲线关系(包含,分离,同向共线,反向共线)(用参数范围表示)\r\n */\r\nfunction ParseCurveParamRangeRelation(cu1: ExtureContourCurve, cu2: ExtureContourCurve, reverseParse = false): [CurveParamRangeRelation, CurveParamRangeRelation]\r\n{\r\n let ins = GetIntersection(cu1, cu2);\r\n\r\n let c1Res: CurveParamRangeRelation = { container: [], syntropy: [], reverse: [], outer: [] };\r\n let c2Res: CurveParamRangeRelation = { container: [], syntropy: [], reverse: [], outer: [] };\r\n if (ins.length === 0)\r\n {\r\n if (cu1 instanceof Circle && cu2 instanceof Circle && equaln(cu1.Radius, cu2.Radius, 1e-4) && equalv2(cu1.Center, cu2.Center, 1e-4))\r\n {\r\n c1Res.syntropy.push([0, 1]);\r\n c2Res.syntropy.push([0, 1]);\r\n return [c1Res, c2Res];\r\n }\r\n\r\n if (cu2.PtInCurve(cu1.StartPoint))\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (cu1.PtInCurve(cu2.StartPoint))\r\n c2Res.container.push([0, cu2.EndParam]);\r\n else\r\n c2Res.outer.push([0, cu2.EndParam]);\r\n\r\n return [c1Res, c2Res];\r\n }\r\n\r\n type CurveSeg = {\r\n startParam: number;\r\n endParam: number;\r\n startPoint: Vector3;\r\n endPoint: Vector3;\r\n used?: boolean;\r\n };\r\n\r\n //解析出线段列表\r\n let c1Curves: CurveSeg[] = [];\r\n let c2Curves: CurveSeg[] = [];\r\n\r\n ins.sort((a1, a2) => a1.thisParam - a2.thisParam);\r\n //点重复->下方ins会sort,导致交点对应不上,导致错误\r\n arrayRemoveDuplicateBySort(ins, (i1, i2) => equalv3(i1.pt, i2.pt, 1e-4));\r\n if (ins.length > 1 && equalv3(ins[0].pt, ins[ins.length - 1].pt, 1e-4)) ins.pop();\r\n for (let i = 0; i < ins.length; i++)\r\n {\r\n let n1 = ins[i];\r\n let n2 = ins[FixIndex(i + 1, ins)];\r\n c1Curves.push({ startParam: n1.thisParam, endParam: n2.thisParam, startPoint: n1.pt, endPoint: n2.pt });\r\n }\r\n ins.sort((a1, a2) => a1.argParam - a2.argParam);\r\n for (let i = 0; i < ins.length; i++)\r\n {\r\n let n1 = ins[i];\r\n let n2 = ins[FixIndex(i + 1, ins)];\r\n c2Curves.push({ startParam: n1.argParam, endParam: n2.argParam, startPoint: n1.pt, endPoint: n2.pt });\r\n }\r\n\r\n //分析共边关系和包含关系\r\n for (let c of c1Curves)\r\n {\r\n let c1MidPoint = CenterPoint(cu1, c.startParam, c.endParam);\r\n for (let c2 of c2Curves)\r\n {\r\n if (c2.used)\r\n continue;\r\n\r\n let c2MidPoint = CenterPoint(cu2, c2.startParam, c2.endParam);\r\n if (!equalv3(c1MidPoint, c2MidPoint, 1e-4))\r\n continue;\r\n\r\n c.used = true;\r\n if (c.startPoint === c2.startPoint\r\n && c.endPoint === c2.endPoint)\r\n {\r\n c1Res.syntropy.push([c.startParam, c.endParam]);\r\n c2Res.syntropy.push([c2.startParam, c2.endParam]);\r\n c2.used = true;\r\n break;\r\n }\r\n else if (c.startPoint === c2.endPoint\r\n && c.endPoint === c2.startPoint)\r\n {\r\n c1Res.reverse.push([c.startParam, c.endParam]);\r\n c2Res.reverse.push([c2.startParam, c2.endParam]);\r\n c2.used = true;\r\n break;\r\n }\r\n else\r\n c.used = false;\r\n }\r\n\r\n if (!c.used)\r\n {\r\n if (cu2.PtInCurve(c1MidPoint))\r\n c1Res.container.push([c.startParam, c.endParam]);\r\n else\r\n c1Res.outer.push([c.startParam, c.endParam]);\r\n }\r\n }\r\n\r\n //只分析包含关系\r\n if (reverseParse)\r\n for (let c of c2Curves)\r\n {\r\n if (c.used) continue;\r\n let p = CenterPoint(cu2, c.startParam, c.endParam);\r\n if (cu1.PtInCurve(p))\r\n c2Res.container.push([c.startParam, c.endParam]);\r\n else\r\n c2Res.outer.push([c.startParam, c.endParam]);\r\n }\r\n return [c1Res, c2Res];\r\n}\r\n\r\nfunction CenterPoint(cu: ExtureContourCurve, start: number, end: number)\r\n{\r\n let lenStart = cu.GetDistAtParam(start);\r\n let lenEnd = cu.GetDistAtParam(end);\r\n if (end > start)\r\n return cu.GetPointAtDistance((lenEnd + lenStart) * 0.5);\r\n\r\n let lenAll = cu.Length;\r\n let lenDiv = ((lenAll - lenStart) + lenEnd) * 0.5;\r\n\r\n if (lenStart + lenDiv >= lenAll)\r\n return cu.GetPointAtDistance(lenStart + lenDiv - lenAll);\r\n else\r\n return cu.GetPointAtDistance(lenStart + lenDiv);\r\n}\r\n\r\n//求参数并集部分,交集部分,差集部分\r\n\r\n//求 ab 和 cd 的并集部分\r\nfunction UnionRange(a: number, b: number, c: number, d: number, end: number): [number, number][]\r\n{\r\n let b1 = b < a ? b + end : b;\r\n let d1 = d < c ? d + end : d;\r\n let a1 = a;\r\n let c1 = c;\r\n\r\n if (c < a)\r\n [a1, b1, c1, d1] = [c1, d1, a1, b1];\r\n\r\n if (c1 > b1)\r\n return [[a, b], [c, d]];\r\n\r\n let e = Math.max(b1, d1);\r\n if (e >= end)\r\n {\r\n e -= end;\r\n if (e > a1)\r\n return [[0, end]];\r\n }\r\n\r\n return [[a1, e]];\r\n}\r\n\r\n// //0-1\r\n// UnionRange(0.5, 0.3, 0.3, 0.5, 1);//?\r\n\r\n// //0-1\r\n// UnionRange(0.4, 0.3, 0.3, 0.5, 1);//?\r\n\r\n// //[ [ 0.8, 0.1 ], [ 0.3, 0.5 ] ]\r\n// UnionRange(0.8, 0.1, 0.3, 0.5, 1);//?\r\n\r\n// //[ 0.3, 0.10000000000000009 ] ] \r\n// UnionRange(0.8, 0.1, 0.3, 0.9, 1);//?\r\n\r\nfunction SubtractRange(a: number, b: number, c: number, d: number, end: number): Range[]\r\n{\r\n if (a < 0 || b < 0) return [];\r\n\r\n if (a > b)\r\n return [...SubtractRange(a, end, c, d, end), ...SubtractRange(0, b, c, d, end)];\r\n if (c > d)\r\n {\r\n let arr = SubtractRange(a, b, c, end, end);\r\n let rem: [number, number][] = [];\r\n for (let s of arr)\r\n rem.push(...SubtractRange(s[0], s[1], 0, d, end));\r\n return rem;\r\n }\r\n\r\n if (c >= b || d <= a)\r\n return [[a, b]];\r\n\r\n if (c <= a)// c1 a1 b1\r\n {\r\n if (d >= b) return [];\r\n return [[d, b]];\r\n }\r\n\r\n if (d < b)\r\n return [[a, c], [d, b]];\r\n return [[a, c]];\r\n}\r\n\r\nfunction SubtractRange2(r: Range, sr: Range, end: number): Range[]\r\n{\r\n return SubtractRange(r[0], r[1], sr[0], sr[1], end);\r\n}\r\n\r\ntype Range = [number, number];\r\nfunction SubtractRanges(ranges: Range[], subRanges: Range[], end: number): Range[]\r\n{\r\n let rets: Range[] = ranges;\r\n for (let sr of subRanges)\r\n {\r\n let temps: Range[] = [];\r\n for (let r of rets)\r\n temps.push(...SubtractRange2(r, sr, end));\r\n\r\n rets = temps;\r\n }\r\n return rets;\r\n}\r\n\r\nfunction IntersectRange(a: number, b: number, c: number, d: number, end: number): Range\r\n{\r\n let b1 = b < a ? b + end : b;\r\n let d1 = d < c ? d + end : d;\r\n let a1 = a;\r\n let c1 = c;\r\n\r\n if (c < a)\r\n [a1, b1, c1, d1] = [c1, d1, a1, b1];\r\n\r\n if (c1 > b1)\r\n return;\r\n\r\n return [c1, Math.min(b1, d1)];\r\n}\r\n\r\nconst alMatrix4 = new Matrix4;\r\n\r\nexport class ExtrudeGeometryBuilder\r\n{\r\n verticesArray: number[] = [];//用于构建三维网格\r\n uvArray: number[] = [];//uv\r\n\r\n edgeAndLidBuilder: EdgeGeometryBuild;\r\n\r\n constructor(private br: ExtrudeSolid)\r\n {\r\n this.edgeAndLidBuilder = new EdgeGeometryBuild(this.br.Thickness);\r\n let rotateUv = (br instanceof Board && br.BoardProcessOption.lines === LinesType.Reverse);\r\n //计算墙(创建轮廓取出,为了得到正确的轮廓曲线(逆时针之类的))\r\n let outerWall = new ExtudeWall(Contour.CreateContour(br.ContourCurve.Clone()).Curve, DepthType.All, br.Thickness, br.Thickness, DirectionType.Outer);\r\n let grooves = this.ParseGrooves();\r\n for (let i = 0; i < grooves.length; i++)\r\n {\r\n let s1 = grooves[i];\r\n outerWall.ClipTo(s1, false);\r\n s1.contourWall.ClipReverse(outerWall);\r\n for (let j = i + 1; j < grooves.length; j++)\r\n {\r\n let s2 = grooves[j];\r\n s1.ClipTo(s2, true);\r\n }\r\n\r\n s1.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder, rotateUv);\r\n }\r\n outerWall.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder);\r\n\r\n //这里构建盖子\r\n this.edgeAndLidBuilder.BuildLid(this.verticesArray, this.uvArray, rotateUv);\r\n\r\n intCache.clear();\r\n }\r\n\r\n get MeshGeometry()\r\n {\r\n let geo = new BufferGeometry();\r\n geo.setAttribute('position', new Float32BufferAttribute(this.verticesArray, 3));\r\n geo.setAttribute('uv', new Float32BufferAttribute(this.uvArray, 2));\r\n geo.computeVertexNormals();\r\n return geo;\r\n }\r\n\r\n get EdgeGeometry()\r\n {\r\n let geo = new BufferGeometry();\r\n geo.setAttribute('position', new Float32BufferAttribute(this.edgeAndLidBuilder.lineVerticesArray, 3));\r\n return geo;\r\n }\r\n\r\n private ParseGrooves()\r\n {\r\n let br = this.br;\r\n const brOcsInv = br.OCSInv;\r\n let grooves: Groove[] = [];\r\n for (let groove of br.Grooves)\r\n {\r\n //判断槽正反面\r\n let type: DepthType;\r\n if (equaln(groove.Thickness, br.Thickness))\r\n type = DepthType.All;\r\n else\r\n {\r\n if (equaln(groove.Position.applyMatrix4(brOcsInv).z, 0))\r\n type = DepthType.Back;\r\n else\r\n type = DepthType.Front;\r\n }\r\n alMatrix4.multiplyMatrices(brOcsInv, groove.OCSNoClone);\r\n //槽轮廓\r\n let grooveContourCurve = groove.ContourCurve.Clone();\r\n grooveContourCurve.ApplyMatrix(alMatrix4);\r\n grooveContourCurve.Z0();\r\n if (grooveContourCurve instanceof Polyline) grooveContourCurve.UpdateMatrixTo(IdentityMtx4);//不可能改变这个\r\n let grooveContour = Contour.CreateContour(grooveContourCurve);\r\n\r\n let grooveHoleContours: Contour[] = [];\r\n //孤岛\r\n for (let grooveChild of groove.Grooves)\r\n {\r\n let grooveChildContourCurve = grooveChild.ContourCurve.Clone();\r\n alMatrix4.multiplyMatrices(brOcsInv, grooveChild.OCSNoClone);\r\n grooveChildContourCurve.ApplyMatrix(alMatrix4).Z0();\r\n if (grooveChildContourCurve instanceof Polyline) grooveChildContourCurve.UpdateMatrixTo(IdentityMtx4);\r\n let grooveChildContour = Contour.CreateContour(grooveChildContourCurve);\r\n grooveHoleContours.push(grooveChildContour);\r\n }\r\n\r\n grooves.push(new Groove(grooveContour, grooveHoleContours, type, groove.Thickness, br.Thickness));\r\n }\r\n\r\n return grooves;\r\n }\r\n}\r\n\r\nlet intCache = new Map>();\r\nfunction GetIntersection(cu1: Curve, cu2: Curve): IntersectResult[]\r\n{\r\n let m = intCache.get(cu1);\r\n if (m)\r\n {\r\n let r = m.get(cu2);\r\n if (r) return r;\r\n }\r\n else\r\n m = new Map();\r\n\r\n intCache.set(cu1, m);\r\n let r = cu1.IntersectWith2(cu2, IntersectOption.OnBothOperands);\r\n\r\n let cu1EndParam = cu1.EndParam;\r\n let cu2EndParam = cu2.EndParam;\r\n for (let d of r)\r\n {\r\n d.thisParam = MathUtils.clamp(d.thisParam, 0, cu1EndParam);\r\n d.argParam = MathUtils.clamp(d.argParam, 0, cu2EndParam);\r\n }\r\n\r\n m.set(cu2, r);\r\n\r\n let r2: IntersectResult[] = r.map(r =>\r\n {\r\n return { thisParam: r.argParam, argParam: r.thisParam, pt: r.pt };\r\n });\r\n\r\n let m2 = intCache.get(cu2);\r\n if (!m2)\r\n {\r\n m2 = new Map();\r\n intCache.set(cu2, m2);\r\n }\r\n m2.set(cu1, r2);\r\n\r\n return r;\r\n}\r\n","import { BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Path, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayClone, arrayLast, arrayRemoveIf, arrayRemoveOnce, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { equalCurve, PolylineSpliteRect } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { matrixSetVector, Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { CSG } from \"../../csg/core/CSG\";\r\nimport { Geometry2CSG } from \"../../csg/core/Geometry2CSG\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { boardUVGenerator } from \"../../Geometry/BoardUVGenerator\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { BSPGroupParse } from \"../../Geometry/BSPGroupParse\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/ExtrudeEdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, IdentityMtx4, isIntersect, isParallelTo, isPerpendicularityTo, MoveMatrix, XAxis, YAxis, ZAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { OBB } from \"../../Geometry/OBB/obb\";\r\nimport { ScaleUV, ScaleUV2 } from \"../../Geometry/UVUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { BlockTableRecord } from \"../BlockTableRecord\";\r\nimport { CADFactory, Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Contour } from \"../Contour\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\r\nimport { Shape } from \"../Shape\";\r\nimport { ShapeManager } from \"../ShapeManager\";\r\nimport { Spline } from \"../Spline\";\r\nimport { Board } from \"./Board\";\r\nimport { Circle } from \"./Circle\";\r\nimport { DragPointType } from \"./DragPointType\";\r\nimport { Ellipse } from \"./Ellipse\";\r\nimport { Entity } from \"./Entity\";\r\nimport { ExtrudeConfig } from \"./ExtrudeConfig\";\r\nimport { Line } from \"./Line\";\r\nimport { Polyline } from \"./Polyline\";\r\nimport { Region } from \"./Region\";\r\n\r\nexport type ExtureContourCurve = Polyline | Circle;\r\nexport type ExtureContour = Polyline | Circle | ExtrudeSolid | Region;\r\n\r\n@Factory\r\nexport class ExtrudeSolid extends Entity\r\n{\r\n /*\r\n ------------\r\n | |\r\n | |\r\n | | height\r\n | |\r\n | |\r\n ----width---\r\n */\r\n\r\n protected height: number = 1;//y\r\n protected width: number = 1;//x\r\n\r\n /**\r\n * 拉伸实体的厚度\r\n * 我们允许它是一个负数,但是这个时候这个实体已经是一个无效的拉伸实体了.\r\n * 允许负数,用来校验凹槽的合理性.\r\n */\r\n protected thickness: number = 1;\r\n\r\n protected isRect = true;\r\n\r\n IsKnife = false;\r\n\r\n RelevanceMeats: ObjectId[];\r\n RelevanceKnifs: ObjectId[];\r\n __OriginalId__: ObjectId;\r\n __OriginalEnt__: this;\r\n /**\r\n * 拉伸形状\r\n * 出于优化考虑,可能未初始化\r\n * 形状位于WCS 0点位置,不随OCS变化而变化\r\n */\r\n protected contourCurve: ExtureContourCurve;\r\n\r\n /**\r\n * 正面和反面的凹槽造型\r\n */\r\n protected grooves: ExtrudeSolid[] = [];\r\n\r\n protected knifeRadius: number = 3;\r\n protected groovesAddLength: number = 0;\r\n protected groovesAddWidth: number = 0;\r\n protected groovesAddDepth: number = 0;\r\n __TempIndexVersion__: { Index: number, Version: number; };\r\n constructor()\r\n {\r\n super();\r\n this.RelevanceKnifs = this.CreateProxyArray((v) =>\r\n {\r\n //可以更新自己,但是不建议,建议手动更新\r\n });\r\n this.RelevanceMeats = this.CreateProxyArray((v) =>\r\n {\r\n //可以更新肉,简单是不建议,建议手动更新\r\n });\r\n }\r\n\r\n get KnifeRadius()\r\n {\r\n return this.knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this.knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.knifeRadius = v;\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCS);\r\n }\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(), new Vector3(this.width, this.height, this.thickness));\r\n }\r\n\r\n get OBB(): OBB\r\n {\r\n return new OBB(this.OCS, new Vector3(this.width, this.height, this.thickness).multiplyScalar(0.5));\r\n }\r\n\r\n get GroovesAddLength()\r\n {\r\n return this.groovesAddLength;\r\n }\r\n\r\n set GroovesAddLength(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddLength))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddLength = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get GroovesAddWidth()\r\n {\r\n return this.groovesAddWidth;\r\n }\r\n\r\n set GroovesAddWidth(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddWidth))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddWidth = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get GroovesAddDepth()\r\n {\r\n return this.groovesAddDepth;\r\n }\r\n\r\n set GroovesAddDepth(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddDepth))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddDepth = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n\r\n Clone()\r\n {\r\n let en = super.Clone();\r\n return en;\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n //暂时关闭更新,避免内部实体还没有更新位置时,先更新了实体的Geometry,导致后续没有进行更新\r\n let updateBak = this.AutoUpdate;\r\n this.AutoUpdate = false;\r\n super.ApplyMatrix(m);\r\n for (let g of this.grooves)\r\n g.ApplyMatrix(m);\r\n\r\n //由于修改矩阵会导致矩阵错误\r\n this.csg = undefined;\r\n this.AutoUpdate = updateBak;\r\n if (!equaln(m.getMaxScaleOnAxis(), 1))\r\n this.Update(UpdateDraw.Geometry);\r\n else if (this.AutoUpdate)\r\n this.DeferUpdate();\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let cu = this.ContourCurve;\r\n cu.ApplyMatrix(this.OCS);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n return this;\r\n }\r\n get Position(): Vector3\r\n {\r\n return super.Position;\r\n }\r\n set Position(p: Vector3)\r\n {\r\n let v = p.clone().sub(this.Position);\r\n if (equalv3(v, ZeroVec)) return;\r\n super.Position = p;\r\n\r\n let m = MoveMatrix(v);\r\n for (let g of this.grooves)\r\n g.ApplyMatrix(m);\r\n\r\n //由于修改矩阵会导致bsp错误\r\n this.csg = undefined;\r\n }\r\n\r\n get Width()\r\n {\r\n return this.width;\r\n }\r\n get Height()\r\n {\r\n return this.height;\r\n }\r\n\r\n get Thickness()\r\n {\r\n return this.thickness;\r\n }\r\n set Thickness(thickness: number)\r\n {\r\n if (!equaln(thickness, this.thickness, 1e-3))\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (this.grooves.length > 0)\r\n {\r\n let inv = this.OCSInv;\r\n let v = this.Normal.multiplyScalar(thickness - this.thickness);\r\n let m = new Matrix4().setPosition(v);\r\n\r\n for (let g of this.grooves)\r\n {\r\n let p = g.Position.applyMatrix4(inv);\r\n\r\n if (equaln(g.thickness, this.thickness))\r\n g.Thickness = thickness;\r\n else if (!equaln(p.z, 0))\r\n g.ApplyMatrix(m);\r\n }\r\n }\r\n\r\n this.thickness = thickness;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n\r\n get Grooves()\r\n {\r\n return this.grooves;\r\n }\r\n\r\n /**\r\n * 返回未拷贝的轮廓曲线\r\n */\r\n get ContourCurve()\r\n {\r\n if (!this.contourCurve)\r\n this.GeneralRectContour();\r\n return this.contourCurve;\r\n }\r\n\r\n set ContourCurve(cu: ExtureContourCurve)\r\n {\r\n this.SetContourCurve(cu);\r\n }\r\n\r\n /**\r\n * 生成矩形轮廓(强制)\r\n */\r\n GeneralRectContour()\r\n {\r\n if (!this.contourCurve || !(this.contourCurve instanceof Polyline))\r\n this.contourCurve = new Polyline();\r\n\r\n this.contourCurve.Rectangle(this.width, this.height);\r\n this.contourCurve.OCS = IdentityMtx4;\r\n this.ContourCurve = this.contourCurve;\r\n }\r\n\r\n /**\r\n * 转换成矩形拉伸实体\r\n */\r\n ConverToRectSolid(width = this.width, height = this.height, thickness = this.thickness)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.height = height;\r\n this.width = width;\r\n this.thickness = thickness;\r\n\r\n this.isRect = true;\r\n\r\n this.GeneralRectContour();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 更新拉伸实体的轮廓\r\n * @param curve 曲线已经存在WCS坐标系\r\n */\r\n SetContourCurve(curve: ExtureContourCurve)\r\n {\r\n if (!curve.IsClose) return;\r\n\r\n let area = curve.Area;\r\n if (!area || equaln(area, 0)) return;\r\n\r\n if (curve instanceof Spline || curve instanceof Ellipse)\r\n curve = curve.Convert2Polyline();\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n curve.CloseMark = true;\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n\r\n //如果曲线被旋转了,那么修正它的旋转矩阵,避免纹路错误\r\n let ocs = curve.OCS;\r\n let isMirror = equaln(ocs.elements[10], -1, 1e-4);\r\n let isRotate = !equaln(ocs.elements[0], 1);\r\n if (isMirror || isRotate)// || ocs.elements[9] || ocs.elements[10]\r\n {\r\n for (let p of pts)\r\n {\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n if (isMirror)\r\n p.bul *= -1;\r\n }\r\n curve.OCS = IdentityMtx4;\r\n }\r\n }\r\n else\r\n {\r\n curve.OCS = new Matrix4().setPosition(curve.Position);\r\n }\r\n curve.ClearDraw();\r\n\r\n this.WriteAllObjectRecord();\r\n this.contourCurve = curve;\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 在不改变Normal和实体显示的情况下,修改X轴的指向\r\n * @param xAxis\r\n */\r\n SetXAxis(xAxis: Vector3): this\r\n {\r\n let m = this.OCSInv.setPosition(ZeroVec);\r\n let x = xAxis.applyMatrix4(m).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n m.copy(this._Matrix).setPosition(ZeroVec);\r\n x.applyMatrix4(m);\r\n let z = this.Normal;\r\n let y = z.cross(x);\r\n\r\n this._Matrix.elements[0] = x.x;\r\n this._Matrix.elements[1] = x.y;\r\n this._Matrix.elements[2] = x.z;\r\n\r\n this._Matrix.elements[4] = y.x;\r\n this._Matrix.elements[5] = y.y;\r\n this._Matrix.elements[6] = y.z;\r\n\r\n m.makeRotationZ(-a);\r\n this.contourCurve.ApplyMatrix(m);\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateMatrixTo(m.identity());\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 检验轮廓曲线,通常当轮廓曲线被修改时,都需要检验轮廓曲线,并更新实体大小和轮廓位置.\r\n * >计算轮廓大小\r\n * >判断是否矩形\r\n * >修正轮廓基点\r\n */\r\n CheckContourCurve()\r\n {\r\n let box = this.ContourCurve.BoundingBox;\r\n let size = box.getSize(new Vector3());\r\n this.width = size.x;\r\n this.height = size.y;\r\n if (equaln(size.x, 0) || equaln(size.y, 0))\r\n Log(`注意!!该板件尺寸为0!`);\r\n this.isRect = equaln(this.width * this.height, this.ContourCurve.Area, 0.1);\r\n\r\n //修正轮廓基点\r\n if (!equalv3(box.min, ZeroVec))\r\n {\r\n this.contourCurve.Position =\r\n this.contourCurve.Position.sub(box.min);\r\n\r\n let v = box.min.applyMatrix4(this.OCS.setPosition(ZeroVec));\r\n this._Matrix.setPosition(this.Position.add(v));\r\n }\r\n }\r\n get IsRect()\r\n {\r\n return this.isRect;\r\n }\r\n\r\n /**\r\n * 这个拉伸实体的面域形状\r\n */\r\n get Shape()\r\n {\r\n let contour = Contour.CreateContour(this.ContourCurve.Clone(), false);\r\n\r\n let holes: Contour[] = [];\r\n\r\n for (let g of this.grooves)\r\n {\r\n if (equaln(g.thickness, this.thickness))\r\n holes.push(Contour.CreateContour(g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCS)), false));\r\n }\r\n return new Shape(contour, holes);\r\n }\r\n\r\n /**\r\n * 实体合并(不会删除target)\r\n */\r\n Join(target: this): Status\r\n {\r\n let [n, tn] = [this.Normal, target.Normal];\r\n\r\n if (!isParallelTo(n, tn))\r\n return Status.False;\r\n\r\n let isEqualNorm = equalv3(n, tn);\r\n\r\n let targetZMin = target.Position.applyMatrix4(this.OCSInv).z;\r\n let targetZMax = targetZMin + target.Thickness * (isEqualNorm ? 1 : -1);\r\n [targetZMin, targetZMax] = arraySortByNumber([targetZMin, targetZMax]);\r\n\r\n const MergeRelevance = () =>\r\n {\r\n if (!this.Id || !target.Id) return;\r\n for (let kf of target.RelevanceKnifs)\r\n {\r\n let kfBr = kf.Object as ExtrudeSolid;\r\n if (!kfBr) continue;\r\n if (!kfBr.RelevanceMeats.includes(this.Id))\r\n kfBr.RelevanceMeats.push(this.Id);\r\n\r\n if (!this.RelevanceKnifs.includes(kf))\r\n this.RelevanceKnifs.push(kf);\r\n }\r\n for (let meat of target.RelevanceMeats)\r\n {\r\n let meatBr = meat.Object as ExtrudeSolid;\r\n if (!meatBr) continue;\r\n if (!meatBr.RelevanceKnifs.includes(this.Id))\r\n meatBr.RelevanceKnifs.push(this.Id);\r\n\r\n if (!this.RelevanceMeats.includes(meat))\r\n this.RelevanceMeats.push(meat);\r\n }\r\n };\r\n\r\n if (equaln(this.thickness, target.thickness)\r\n && equaln(0, targetZMin))\r\n {\r\n let matrixToLocal = this.OCSInv.multiply(target.OCS);\r\n\r\n let thisShape = this.Shape;\r\n let targetShape = target.Shape.ApplyMatrix(matrixToLocal).Z0();\r\n let unionShapes = thisShape.UnionBoolOperation(targetShape, true);\r\n if (unionShapes.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n // [ + ] 产生网洞.\r\n for (let hole of unionShapes[0].Holes)\r\n {\r\n let g = new ExtrudeSolid();\r\n g.thickness = this.thickness;\r\n g.ContourCurve = hole.Curve;\r\n g.ApplyMatrix(this.OCS);\r\n\r\n this.AppendGroove(g);\r\n }\r\n\r\n this.ContourCurve = unionShapes[0].Outline.Curve;\r\n\r\n this.grooves.push(...target.grooves.map(g => g.Clone()));\r\n MergeRelevance();\r\n this.GrooveCheckMerge();\r\n this.Update();\r\n\r\n return Status.True;\r\n }\r\n }\r\n else\r\n {\r\n if (!isIntersect(0, this.thickness, targetZMin, targetZMax, 1e-5))\r\n return Status.False;\r\n\r\n let matrixToLocal = this.OCSInv.multiply(target.OCS);\r\n\r\n let thisCurve = this.ContourCurve;\r\n let targetCurve = target.ContourCurve.Clone().ApplyMatrix(matrixToLocal);\r\n targetCurve.Position = targetCurve.Position.setZ(0);\r\n if (equalCurve(thisCurve, targetCurve))\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (targetZMin < 0)\r\n this.Position = this.Position.add(n.multiplyScalar(targetZMin));\r\n\r\n this.Thickness = Math.max(this.Thickness, targetZMax) - Math.min(0, targetZMin);\r\n\r\n this.grooves.push(...target.grooves.map(g => g.Clone()));\r\n\r\n MergeRelevance();\r\n\r\n this.GrooveCheckMerge();\r\n this.Update();\r\n\r\n return Status.True;\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n get Volume()\r\n {\r\n let sum = this.ContourCurve.Area * this.thickness;\r\n for (let g of this.grooves)\r\n sum -= g.Volume;\r\n return sum;\r\n }\r\n\r\n /**\r\n * 被切割\r\n * @param extrudes 切割刀\r\n * @param [output=undefined] 如果实体被分裂,那么输出分裂的其他实体(如果为空,则尝试入当前实体的容器中)\r\n * @param [checkIntersect=true] 检查相交,性能优化\r\n * @returns 切割是否成功\r\n */\r\n Subtract(extrudes: ExtrudeSolid[], output: ExtrudeSolid[] = undefined, checkIntersect = true): boolean\r\n {\r\n if (checkIntersect)\r\n {\r\n let box = this.BoundingBox;\r\n extrudes = extrudes.filter(e => box.intersectsBox(e.BoundingBox));\r\n }\r\n\r\n //清除原先的关联关系\r\n if (this.Id)\r\n {\r\n let ids = new Set();\r\n for (let e of extrudes)\r\n {\r\n if (!e.Id) continue;\r\n arrayRemoveOnce(e.RelevanceMeats, this.Id);\r\n ids.add(e.Id.Index);\r\n }\r\n arrayRemoveIf(this.RelevanceKnifs, id => ids.has(id.Index));\r\n }\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let br of extrudes)\r\n {\r\n let gs = this.ConverToLocalGroove(br);\r\n grooves.push(...gs);\r\n }\r\n\r\n let area1 = this.ContourCurve.Area;\r\n let sum1 = this.Volume;\r\n this.AppendGrooves(grooves, output);\r\n let sum2 = this.Volume;\r\n let area2 = this.ContourCurve.Area;\r\n if (!equaln(sum1, sum2) || !equaln(area1, area2))\r\n {\r\n if (!this.ReadFileIng && this instanceof Board)\r\n {\r\n if (this.Id)\r\n Log(`${this.Name}(${this.Id.Index})被切割成功!`);\r\n else if (this.__OriginalId__)\r\n Log(`${this.Name}(${this.__OriginalId__.Index})关联切割成功更新槽!`);\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n RelevanceSubtract(knif: ExtrudeSolid, check = false)\r\n {\r\n if (!this.Id || !knif.Id) return;\r\n\r\n //判断是否已经存在\r\n if (check)\r\n {\r\n let index = this.RelevanceKnifs.findIndex(id => id.Index === knif.Id.Index);\r\n if (index !== -1) return;\r\n }\r\n\r\n this.RelevanceKnifs.push(knif.Id);\r\n knif.RelevanceMeats.push(this.Id);\r\n }\r\n\r\n /**\r\n * 当实体被分裂后,加入新图纸时,需要修复关联拉槽\r\n */\r\n RepairRelevance()\r\n {\r\n if (!this.Id)\r\n {\r\n console.error(\"不能修复未加入到图纸的板件!\");\r\n return;\r\n }\r\n\r\n for (let id of this.RelevanceKnifs)\r\n {\r\n if (id && !id.IsErase)\r\n {\r\n let br = id.Object as ExtrudeSolid;\r\n br.RelevanceMeats.push(this.Id);\r\n }\r\n }\r\n for (let id of this.RelevanceMeats)\r\n {\r\n if (id && !id.IsErase)\r\n {\r\n let br = id.Object as ExtrudeSolid;\r\n br.RelevanceKnifs.push(this.Id);\r\n }\r\n }\r\n }\r\n\r\n AppendGroove(groove: ExtrudeSolid)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.push(groove);\r\n }\r\n\r\n /** 添加槽进板件,并且自动分裂.\r\n * 通常槽已经校验过准确性,所以不在校验\r\n */\r\n AppendGrooves(grooves: ExtrudeSolid[], output: ExtrudeSolid[] = undefined)\r\n {\r\n if (grooves.length === 0) return;\r\n this.WriteAllObjectRecord();\r\n this.grooves.push(...grooves);\r\n this.GrooveCheckAllAutoSplit(output);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n\r\n contour.Position = contour.Position.add(this.Normal.multiplyScalar(this.thickness));\r\n pts.push(\r\n ...contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n let ps = this.contourCurve.GetStretchPoints();\r\n for (let p of ps)\r\n {\r\n let l = new Line(p, p.clone().setZ(this.thickness));\r\n l.ApplyMatrix(this.OCS);\r\n pts.push(\r\n ...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n }\r\n for (let g of this.grooves)\r\n pts.push(...g.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n //#region Stretch\r\n\r\n private GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts: number[] = [this.ContourCurve.GetDragPointCount(dragType) * 2];\r\n for (let g of this.grooves)\r\n {\r\n let c = g.ContourCurve.GetDragPointCount(dragType) * 2;\r\n for (let g1 of g.grooves)\r\n c += g1.contourCurve.GetDragPointCount(dragType) * 2;\r\n\r\n counts.push(c);\r\n }\r\n return counts;\r\n }\r\n GetGripOrStretchPoints(dragType: DragPointType)\r\n {\r\n let isGrip = dragType === DragPointType.Grip;\r\n\r\n let pts = isGrip ? this.ContourCurve.GetGripPoints() : this.ContourCurve.GetStretchPoints();\r\n let v = new Vector3(0, 0, this.thickness);\r\n pts.push(...pts.map(p => p.clone().add(v)));\r\n pts.forEach(p => { p.applyMatrix4(this.OCS); });\r\n\r\n for (let g of this.grooves)\r\n {\r\n let gpts = g.GetGripOrStretchPoints(dragType);\r\n pts.push(...gpts);\r\n }\r\n return pts;\r\n }\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let counts = this.GetStrectchPointCountList(dragType);\r\n if (dragType === DragPointType.Stretch && indexList.length === arraySum(counts))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n arraySortByNumber(indexList);\r\n\r\n let updateBak = this.AutoUpdate;\r\n this.AutoUpdate = false;\r\n\r\n if (this.grooves.length === 0)\r\n {\r\n this.MoveGripOrStretchPointsOnly(indexList, vec, dragType);\r\n }\r\n else\r\n {\r\n let i = 0;\r\n let icount = indexList.length;\r\n let offset = 0;\r\n\r\n let grooveIndex = -1;\r\n for (let count of counts)\r\n {\r\n offset += count;\r\n let ilist = [];\r\n for (; i < icount; i++)\r\n {\r\n if (indexList[i] < offset)\r\n ilist.push(indexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n\r\n if (ilist.length > 0)\r\n {\r\n if (grooveIndex === -1)\r\n this.MoveGripOrStretchPointsOnly(ilist, vec, dragType);\r\n else\r\n this.grooves[grooveIndex].MoveGripOrStretchPoints(ilist, vec, dragType);\r\n }\r\n grooveIndex++;\r\n }\r\n }\r\n\r\n if (this.objectId)\r\n {\r\n this.CheckContourCurve();\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (splitEntitys.length > 0 && this.Owner)\r\n {\r\n let ms = this.Owner.Object as BlockTableRecord;\r\n for (let e of splitEntitys)\r\n ms.Append(e);\r\n }\r\n }\r\n this.AutoUpdate = updateBak;\r\n this.Update();\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n\r\n\r\n GetStretchPoints()\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n\r\n /**\r\n * 只对自身的轮廓和厚度进行拉伸,忽略子实体\r\n */\r\n MoveGripOrStretchPointsOnly(indexList: Array, vec: Vector3, dragType: DragPointType)\r\n {\r\n let stretchCount = this.ContourCurve.GetDragPointCount(dragType);\r\n\r\n if (dragType === DragPointType.Stretch)\r\n {\r\n //Move\r\n if (indexList.length === stretchCount * 2)\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n //判断是否拉伸厚度\r\n if (this.IsStretchThickness(indexList))\r\n {\r\n let isFront = indexList[0] < stretchCount;\r\n\r\n if (indexList.every(v => v < stretchCount === isFront))\r\n {\r\n //Change thickness\r\n let lvec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n if (isFront)\r\n {\r\n // if (lvec.z >= this.thickness) return;\r\n this.thickness -= lvec.z;\r\n //移动位置而不改变内部拉槽\r\n let v = this.Normal.multiplyScalar(lvec.z);\r\n this._Matrix.elements[12] += v.x;\r\n this._Matrix.elements[13] += v.y;\r\n this._Matrix.elements[14] += v.z;\r\n }\r\n else\r\n {\r\n // if (-lvec.z > this.thickness) return;\r\n this.thickness += lvec.z;\r\n }\r\n return;\r\n }\r\n }\r\n\r\n indexList = arrayClone(indexList);\r\n }\r\n\r\n //修正点的索引\r\n for (let i = 0; i < indexList.length; i++)\r\n {\r\n let index = indexList[i];\r\n if (index >= stretchCount)\r\n {\r\n index -= stretchCount;\r\n indexList[i] = index;\r\n }\r\n }\r\n\r\n indexList = [...new Set(indexList)];\r\n\r\n let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n\r\n if (dragType === DragPointType.Grip)\r\n {\r\n if (this.ContourCurve instanceof Polyline\r\n && indexList.length === 1\r\n && indexList[0] % 2 === 1)\r\n {\r\n let param = indexList[0] / 2;\r\n if (this.ContourCurve.GetBuilgeAt(Math.floor(param)) === 0)\r\n {\r\n let der = this.ContourCurve.GetFistDeriv(param).normalize();\r\n [der.x, der.y] = [der.y, -der.x];\r\n let d = localVec.dot(der);\r\n localVec.copy(der).multiplyScalar(d);\r\n }\r\n }\r\n this.ContourCurve.MoveGripPoints(indexList, localVec);\r\n }\r\n else\r\n this.ContourCurve.MoveStretchPoints(indexList, localVec);\r\n }\r\n\r\n IsStretchThickness(indexs: number[])\r\n {\r\n let count = this.ContourCurve.GetStretchPoints().length;\r\n if (indexs.length === count)\r\n {\r\n let isF = indexs[0] < count;\r\n return indexs.every(i => isF === (i < count));\r\n }\r\n return false;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region groove(凹槽(造型))操作\r\n\r\n /*\r\n\r\n 添加凹槽一般会经过以下几个步骤\r\n\r\n 1.凹槽转换成和本实体法线平行的凹槽实体\r\n ->调用第二步\r\n\r\n 2.校验凹槽的Z轴位置是否存在交集\r\n ->{不存在Z轴交集} 或 {交集异常(凹槽被本实体包含不见光)} 的凹槽被移除\r\n ->凹槽的Z轴位置和厚度被更新\r\n\r\n 3.凹槽合并\r\n\r\n 4.修正轮廓.\r\n ->{本实体}轮廓被修正(当实体被凹槽破坏形状时)\r\n -->修正成功后,凹槽被移除\r\n -->本实体可能分裂\r\n\r\n ->{凹槽}轮廓被修正({凹槽的轮廓}被约束在{实体轮廓}内部)\r\n -->凹槽可能分裂\r\n\r\n */\r\n\r\n\r\n /**\r\n * 当调用Draw时,可以生成bsp信息\r\n */\r\n private csg: CSG;\r\n get CSG()\r\n {\r\n if (this.csg)\r\n return this.csg;\r\n\r\n this.csg = Geometry2CSG(this.MeshGeometry);\r\n return this.csg;\r\n }\r\n\r\n /**\r\n * (步骤1.2.)\r\n * 将目标拉伸实体转换成在板件内部可用的凹槽实体\r\n * @param target 该对象可能被修改(内部不拷贝该实体)\r\n * @param useClone 转换后的实体是目标实体拷贝后修改的\r\n */\r\n ConverToLocalGroove(target: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n if (!this.OBB.intersectsOBB(target.OBB)) return [];\r\n\r\n let n1 = this.Normal;\r\n let n2 = target.Normal;\r\n if (isParallelTo(n1, n2))\r\n {\r\n target = target.Clone().ClearDraw();\r\n if (!equalv3(n1, n2, 1e-6))\r\n {\r\n let mtx = target._Matrix;\r\n matrixSetVector(mtx, 2, n1);\r\n let p = n1.setFromMatrixColumn(mtx, 3);\r\n p.add(n2.multiplyScalar(target.thickness));\r\n matrixSetVector(mtx, 3, p);\r\n }\r\n if (this.GrooveCheckPosition(target) !== Status.True)\r\n return [];\r\n\r\n return [target];\r\n }\r\n else\r\n {\r\n //当切割刀是矩形板,并且没有槽的时候,如果轴对齐,我们可以直接用aabb进行求交\r\n if (target.isRect && target.grooves.length === 0)\r\n {\r\n let diffMtx = target.OCS.premultiply(this.OCSInv);\r\n let box = target.BoundingBoxInOCS.applyMatrix4(diffMtx);\r\n let size = box.getSize(new Vector3);\r\n\r\n //轴对齐\r\n if (equaln(size.x * size.y * size.z, target.Width * target.Height * target.Thickness, 1))\r\n {\r\n let ibox = this.BoundingBoxInOCS.intersect(box);\r\n if (!(ibox.getSize(size).toArray().every(x => x > 1))) return [];\r\n\r\n //构造新槽(因为我们当前的槽加长是根据槽的长短边进行加长的,所以我们可以这么构建)\r\n let g2 = new ExtrudeSolid().ConverToRectSolid(size.x, size.y, size.z);\r\n g2.Position = ibox.min;\r\n g2.ApplyMatrix(this._Matrix);\r\n g2.groovesAddDepth = target.groovesAddDepth;\r\n g2.groovesAddLength = target.groovesAddLength;\r\n g2.groovesAddWidth = target.groovesAddWidth;\r\n g2.knifeRadius = target.knifeRadius;\r\n return [g2];\r\n }\r\n }\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n let project = ProjectBoard(target, this);\r\n if (!project)\r\n {\r\n let yv = n2;\r\n let zv = n1;\r\n let xv = yv.clone().cross(zv);\r\n yv.copy(zv).cross(xv);\r\n let m = new Matrix4().makeBasis(xv, yv, zv).copyPosition(this.OCS);\r\n let mi = new Matrix4().getInverse(m).multiply(this.OCS);\r\n\r\n let interBSP = this.CSG.intersect(target.CSG.transform1(this.OCSInv.multiply(target.OCS)));\r\n let topology = new BSPGroupParse(interBSP);\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let pts of topology.Parse())\r\n {\r\n for (let p of pts)\r\n p.applyMatrix4(mi);\r\n let box = new Box3Ext().setFromPoints(pts);\r\n if (!box.isSolid(0.1))\r\n continue;\r\n let size = box.getSize(new Vector3());\r\n\r\n let ext = new ExtrudeSolid();\r\n ext.groovesAddDepth = target.groovesAddDepth;\r\n ext.groovesAddLength = target.groovesAddLength;\r\n ext.groovesAddWidth = target.groovesAddWidth;\r\n ext.knifeRadius = target.knifeRadius;\r\n ext.ConverToRectSolid(size.x, size.y, size.z);\r\n ext.OCS = m.clone().setPosition(box.min.applyMatrix4(m));\r\n\r\n grooves.push(ext);\r\n }\r\n return grooves;\r\n }\r\n // project.ApplyMatrix(target.OCSInv);\r\n project.Z0();\r\n let c1 = Contour.CreateContour(project);\r\n let c2 = Contour.CreateContour(target.ContourCurve);\r\n //投影轮廓列表\r\n let contours = c1.IntersectionBoolOperation(c2);\r\n let outlines: ExtureContourCurve[] = [];\r\n for (let c of contours)\r\n {\r\n if (c.Curve instanceof Polyline)\r\n outlines.push(...PolylineSpliteRect(c.Curve));\r\n else\r\n outlines.push(c.Curve);\r\n }\r\n let xv = n1;\r\n let zv = n2;\r\n let yv = zv.clone().cross(xv);\r\n\r\n //把<投影轮廓>对齐到肉的侧面坐标系上\r\n let projection2SideMatrix4 = new Matrix4().makeBasis(xv, yv, zv);\r\n for (let c of outlines)\r\n {\r\n let g = target.Clone().ClearDraw();\r\n let gs = [g];\r\n g.ContourCurve = c;\r\n g.GrooveCheckAll(gs);\r\n\r\n for (let g1 of gs)\r\n {\r\n //按g1的位置设置\r\n projection2SideMatrix4.setPosition(g1.Position);\r\n\r\n //投影到肉的侧面坐标系,求槽在肉里面的长度(x)和厚度(z)\r\n let alm = new Matrix4().getInverse(projection2SideMatrix4).multiply(g1.OCS);\r\n g1.ContourCurve.ApplyMatrix(alm);//破坏它\r\n let box = g1.ContourCurve.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x, 0, 1e-2) || equaln(size.y, 0, 1e-2)) continue;\r\n\r\n //构造新槽\r\n let g2 = new ExtrudeSolid().ConverToRectSolid(size.y, g1.Thickness, size.x);\r\n g2.groovesAddDepth = target.groovesAddDepth;\r\n g2.groovesAddLength = target.groovesAddLength;\r\n g2.groovesAddWidth = target.groovesAddWidth;\r\n g2.knifeRadius = target.knifeRadius;\r\n g2.ApplyMatrix(OverturnMatrix);//翻转到和原先的投影曲线(肉侧面)一样的状态\r\n g2.ApplyMatrix(MoveMatrix(box.min));//和投影曲线重叠\r\n g2.ApplyMatrix(projection2SideMatrix4);//按照矩形还原回去\r\n\r\n grooves.push(g2);\r\n }\r\n }\r\n return grooves;\r\n }\r\n }\r\n\r\n /**\r\n * (步骤2)\r\n * 更新凹槽位置和厚度(校验凹槽的Z轴位置是否存在交集)\r\n */\r\n GrooveCheckPosition(target: ExtrudeSolid): Status\r\n {\r\n if (target.Width < 1e-2 || target.Height < 1e-2 || target.Thickness < 1e-2)\r\n return Status.False;\r\n\r\n let tp = target.Position.applyMatrix4(this.OCSInv);\r\n\r\n let minZ = tp.z;\r\n let maxZ = tp.z + target.thickness;\r\n if (minZ <= 1e-2)//背面\r\n {\r\n target.Thickness = Math.min(maxZ, this.thickness);\r\n if (!(equaln(minZ, 0)))\r\n target.ApplyMatrix(\r\n MoveMatrix(this.Normal.multiplyScalar(-minZ))\r\n );\r\n }\r\n else if (maxZ >= (this.thickness - 1e-3) && minZ > 0)//正面\r\n target.Thickness = this.thickness - minZ;\r\n else\r\n return Status.False;\r\n\r\n if (equaln(target.thickness, this.thickness, 1e-3))\r\n target.thickness = this.thickness;\r\n\r\n return target.thickness > 1e-3 ? Status.True : Status.False;\r\n }\r\n\r\n /**\r\n * (步骤3)\r\n * 计算凹槽合并\r\n */\r\n GrooveCheckMerge()\r\n {\r\n let gs: ExtrudeSolid[] = [];\r\n while (this.grooves.length > 0)\r\n {\r\n let g = this.grooves.pop();\r\n while (this.grooves.length > 0)\r\n {\r\n //剩余的 无法合并的板件\r\n let remGs = this.grooves.filter(gn =>\r\n {\r\n if (equaln(g.knifeRadius, gn.knifeRadius))\r\n return g.Join(gn) === Status.False;\r\n else\r\n return true;\r\n });\r\n if (remGs.length === this.grooves.length)\r\n break;\r\n this.grooves = remGs;\r\n }\r\n gs.push(g);\r\n }\r\n\r\n if (gs.length !== this.grooves.length)\r\n {\r\n this.grooves = gs;\r\n for (let g of this.grooves)\r\n g.CheckContourCurve();\r\n }\r\n }\r\n\r\n /**\r\n * (步骤4.1)\r\n * 计算凹槽轮廓(可能分裂)\r\n * @param target 不拷贝修改\r\n * @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个)\r\n */\r\n GrooveCheckContour(target: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n let matrixToTarget = target.OCSInv.multiply(this.OCS);\r\n matrixToTarget.elements[14] = 0;//z->0\r\n\r\n let thisShape = this.Shape.ApplyMatrix(matrixToTarget);\r\n let targetShape = new Shape(Contour.CreateContour([target.ContourCurve.Clone()], false));\r\n\r\n let inters = thisShape.IntersectionBoolOperation(targetShape);\r\n\r\n if (inters.length === 1)\r\n {\r\n target.ContourCurve = inters[0].Outline.Curve;\r\n let grooves = [target];\r\n target.GrooveCheckAll(grooves);\r\n return grooves;\r\n }\r\n else\r\n {\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let contour of inters)\r\n {\r\n let ext = target.Clone().ClearDraw();\r\n ext.ContourCurve = contour.Outline.Curve;\r\n ext.GrooveCheckAll(grooves);\r\n grooves.push(ext);\r\n }\r\n return grooves;\r\n }\r\n }\r\n /**\r\n * (步骤4.2)\r\n * 计算本实体被全身度的凹槽差集后正确的实体轮廓,和有可能的分裂实体\r\n * @param splitEntitys 分裂出来的实体\r\n * @returns [Status] Status : 消失不见\r\n */\r\n ContourCheckSubtract(splitEntitys: this[]): boolean\r\n {\r\n let shapeManager = new ShapeManager();\r\n shapeManager.AppendShapeList(\r\n new Shape(Contour.CreateContour(this.ContourCurve.Clone(), false))\r\n );\r\n let subtractShape = new ShapeManager();\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n arrayRemoveIf(this.grooves, groove =>\r\n {\r\n if (equaln(groove.thickness, this.thickness))\r\n {\r\n let grooveCurve = groove.ContourCurve.Clone();\r\n let matrixToLocal = this.OCSInv.multiply(groove.OCS);\r\n grooveCurve.ApplyMatrix(matrixToLocal);\r\n\r\n subtractShape.AppendShapeList(\r\n new Shape(Contour.CreateContour([grooveCurve], false))\r\n );\r\n\r\n grooves.push(groove);\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n shapeManager.SubstactBoolOperation(subtractShape);\r\n let shapes = shapeManager.ShapeList;\r\n\r\n //不做任何改变\r\n if (shapeManager.ShapeCount === 1 && shapes[0].Holes.length === grooves.length)\r\n {\r\n this.grooves.push(...grooves);\r\n return true;\r\n }\r\n\r\n //分裂\r\n for (let i = 1; i < shapeManager.ShapeCount; i++)\r\n {\r\n let ext = this.Clone();\r\n let shape = shapes[i];\r\n for (let hole of shape.Holes)\r\n {\r\n let groove = new ExtrudeSolid();\r\n groove.OCS = this.OCS;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n ext.grooves.push(groove);\r\n }\r\n ext.ContourCurve = shape.Outline.Curve;\r\n ext.GrooveCheckAll(splitEntitys);\r\n ext.Update();\r\n splitEntitys.push(ext);\r\n }\r\n\r\n if (shapes.length > 0)\r\n {\r\n let shape = shapes[0];\r\n for (let hole of shape.Holes)\r\n {\r\n let groove = new ExtrudeSolid();\r\n groove.OCS = this.OCS;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n this.grooves.push(groove);\r\n }\r\n\r\n if (!equaln(this.contourCurve.Area, shape.Outline.Area))\r\n this.ContourCurve = shape.Outline.Curve;\r\n\r\n return true;\r\n }\r\n else\r\n return false;\r\n }\r\n\r\n IsLazyGrooveCheck: boolean;\r\n IsNeedGrooveCheck: boolean;\r\n /**\r\n * 无法知道修改了轮廓是否为更新到内部凹槽.\r\n * 无法知道修改了内部凹槽之后是否会更新到轮廓.\r\n * 所以默认全部校验内部的凹槽\r\n */\r\n GrooveCheckAll(splitEntitys: this[])\r\n {\r\n if (ExtrudeConfig.DisableCheckGroove) return;\r\n\r\n if (this.IsLazyGrooveCheck)\r\n {\r\n this.IsNeedGrooveCheck = true;\r\n return;\r\n }\r\n this.IsNeedGrooveCheck = false;\r\n this.WriteAllObjectRecord();\r\n\r\n //校验Z轴位置\r\n arrayRemoveIf(this.grooves, g =>\r\n {\r\n return this.GrooveCheckPosition(g) === Status.False;\r\n });\r\n\r\n //清除全深洞的子槽\r\n for (let g of this.grooves)\r\n {\r\n if (equaln(g.thickness, this.thickness, 1e-3))\r\n {\r\n /*\r\n 此刻我们直接将它的子槽清空,虽然子槽可能将这个槽分裂成2个,\r\n 但是这样的情况只能在造型应用中才会产生\r\n */\r\n g.grooves.length = 0;\r\n }\r\n else\r\n arrayRemoveIf(g.grooves, subg => !equaln(g.thickness, subg.thickness, 1e-3));\r\n }\r\n\r\n //合并\r\n this.GrooveCheckMerge();\r\n //修改本实体轮廓\r\n if (this.grooves.some(g => equaln(g.thickness, this.thickness, 1e-3)))\r\n {\r\n if (!this.ContourCheckSubtract(splitEntitys))\r\n {\r\n this.Erase();\r\n return;\r\n }\r\n }\r\n\r\n //修正凹槽轮廓\r\n let splitGrooves: ExtrudeSolid[] = [];\r\n let thisArea = this.contourCurve.Area;\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let g = this.grooves[i];\r\n if (equaln(g.thickness, this.thickness, 1e-3))\r\n splitGrooves.push(g);\r\n else\r\n {\r\n let gs = this.GrooveCheckContour(g);\r\n if (gs.length === 1)\r\n {\r\n let gg = gs[0];\r\n if (gg.grooves.length === 0 && equaln(gg.contourCurve.Area, thisArea))\r\n {\r\n //判断正反面\r\n let p = gg.Position.applyMatrix4(this.OCSInv);\r\n if (equaln(p.z, 0))\r\n {\r\n this.thickness -= gg.thickness;\r\n let n = this.Normal;\r\n n.multiplyScalar(gg.thickness);\r\n this._Matrix.elements[12] += n.x;\r\n this._Matrix.elements[13] += n.y;\r\n this._Matrix.elements[14] += n.z;\r\n }\r\n else\r\n {\r\n this.thickness -= gg.thickness;\r\n }\r\n this.grooves.splice(i, 1);\r\n this.GrooveCheckAll(splitEntitys);\r\n return;\r\n }\r\n }\r\n splitGrooves.push(...gs);\r\n }\r\n }\r\n\r\n this.grooves = splitGrooves;\r\n\r\n this.Update();\r\n }\r\n\r\n /** 校验内部槽并且自动分裂 */\r\n GrooveCheckAllAutoSplit(output: ExtrudeSolid[] = undefined)\r\n {\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (output)\r\n output.push(...splitEntitys);\r\n else if (this._Owner)\r\n {\r\n let record = this._Owner.Object as BlockTableRecord;\r\n for (let e of splitEntitys)\r\n {\r\n record.Add(e);\r\n e.RepairRelevance();\r\n }\r\n this.HandleSpliteEntitys(splitEntitys);\r\n }\r\n }\r\n HandleSpliteEntitys(splitEntitys: this[]) { }\r\n LazyGrooveCheckAll()\r\n {\r\n if (this.IsNeedGrooveCheck)\r\n this.GrooveCheckAllAutoSplit();\r\n this.IsLazyGrooveCheck = false;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Draw\r\n GetPrintObject3D()\r\n {\r\n let geometry = new LineGeometry();\r\n let lineSegments = new Float32Array(this.EdgeGeometry.attributes.position.array);\r\n let instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n geometry.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n geometry.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n let line = new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetPrintConceptualMaterial());\r\n return [line, mesh];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(...FastWireframe(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new Object3D().add(...this.GetPrintObject3D());\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n get UCGenerator()\r\n {\r\n return boardUVGenerator;\r\n }\r\n\r\n __CacheKnifVersion__: { [key: number]: number; };\r\n get NeedUpdateRelevanceGroove()\r\n {\r\n if (!this.__CacheKnifVersion__) return true;\r\n\r\n for (let k of this.RelevanceKnifs)\r\n {\r\n if (!k || !k.Object) continue;\r\n\r\n if (this.__CacheKnifVersion__[k.Index] !== ((k.Object)).__UpdateVersion__)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //缓存当前被关联切割后的体积,如果体积有变化,证明多了拉槽或者少了拉槽\r\n __CacheVolume__: number;\r\n //每当我们去计算关联拉槽的时候,总会有这个分裂的图形数组,如果我们需要,我们也可以复用它去拆单,或者去排钻\r\n __CacheSplitExtrudes: this[];\r\n\r\n /**\r\n * 计算关联拉槽,更新绘制对象(MeshGeometry和EdgeGeometry)\r\n */\r\n private CalcRelevanceGroove()\r\n {\r\n //避免Jig实体更新,导致性能暴跌.\r\n if (!this.Id) return;\r\n\r\n this.__CacheKnifVersion__ = {};\r\n\r\n let knifs: ExtrudeSolid[] = [];\r\n this.GetRelevanceKnifes(knifs);\r\n\r\n if (knifs.length > 0)\r\n {\r\n for (let k of knifs) //复合实体(五金)的子实体没有id\r\n this.__CacheKnifVersion__[k.Id?.Index ?? k.__TempIndexVersion__?.Index] = k.__TempIndexVersion__?.Version ?? k.__UpdateVersion__;\r\n\r\n let tempExtrude = this.Clone();\r\n tempExtrude.RelevanceKnifs.length = 0;//避免递归\r\n if (!this.ReadFileIng)\r\n tempExtrude.__OriginalId__ = this.Id;//在读取文件时不打印日志\r\n let output: ExtrudeSolid[] = [tempExtrude];\r\n let ok = tempExtrude.Subtract(knifs, output);\r\n this.__CacheSplitExtrudes = output as this[];\r\n if (ok)\r\n {\r\n this.__CacheVolume__ = tempExtrude.Volume;\r\n let meshs: BufferGeometry[] = [];\r\n let edges: BufferGeometry[] = [];\r\n let inv = this.OCSInv;\r\n let diff = new Matrix4;\r\n for (let e2 of output)\r\n {\r\n diff.multiplyMatrices(inv, e2._Matrix);\r\n meshs.push(e2.MeshGeometry.applyMatrix4(diff));\r\n edges.push(e2.EdgeGeometry.applyMatrix4(diff));\r\n this.__CacheVolume__ += e2.Volume;\r\n\r\n }\r\n if (output.length === 1)\r\n {\r\n this._MeshGeometry = tempExtrude.MeshGeometry;\r\n this._EdgeGeometry = tempExtrude.EdgeGeometry;\r\n }\r\n else\r\n {\r\n this._MeshGeometry = BufferGeometryUtils.MergeBufferGeometries(meshs);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n this._EdgeGeometry = BufferGeometryUtils.MergeBufferGeometries(edges);\r\n }\r\n\r\n //我们加入一些拓展信息,以便排钻能够使用(或者其他的,比如发送到效果图?,BBS)(布局视口会直接添加实体到场景,所以我们只在这里设置OriginEntity)\r\n for (let i = 0; i < this.__CacheSplitExtrudes.length; i++)\r\n {\r\n this.__CacheSplitExtrudes[i].objectId = new ObjectId(this.Id.Index * -100 - i);\r\n this.__CacheSplitExtrudes[i].__OriginalEnt__ = this;\r\n }\r\n }\r\n else\r\n {\r\n let id = this.Id ?? this.__OriginalId__;\r\n if (\r\n !this.ReadFileIng &&\r\n id &&\r\n this instanceof Board &&\r\n this.__CacheVolume__ !== undefined &&\r\n !equaln(this.__CacheVolume__, this.Volume)\r\n )\r\n Log(`${this.Name}(${id.Index})关联槽已逃离!`);\r\n this.__CacheVolume__ = undefined;\r\n\r\n this.__CacheSplitExtrudes = [this];\r\n }\r\n }\r\n else\r\n {\r\n if (\r\n !this.ReadFileIng &&\r\n this.Id &&\r\n this instanceof Board &&\r\n this.__CacheVolume__ !== undefined &&\r\n !equaln(this.__CacheVolume__, this.Volume)\r\n )\r\n Log(`${this.Name}(${this.Id.Index})关联槽已逃离或者被清除!`);\r\n\r\n this.__CacheSplitExtrudes = [this];\r\n this.__CacheVolume__ = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * 如果实体被切割,那么将返回分裂的实体数组,否则返回自身\r\n */\r\n get SplitExtrudes(): this[]\r\n {\r\n if (this.NeedUpdateRelevanceGroove)\r\n this.Update(UpdateDraw.Geometry);//我们先直接更新绘制\r\n if (this.NeedUpdateRelevanceGroove)//如果更新失败,那么我们更新这个槽(似乎也证明了我们没有绘制实体)\r\n this.CalcRelevanceGroove();//注意,这也将更新绘制的实体(EdgeGeo,MeshGeo)(如果拆单也用这个,可能会带来性能损耗)\r\n\r\n return this.__CacheSplitExtrudes;\r\n }\r\n\r\n protected GetRelevanceKnifes(knifs: ExtrudeSolid[])\r\n {\r\n for (let e of this.RelevanceKnifs)\r\n {\r\n if (!e.IsErase)\r\n knifs.push(e.Object as ExtrudeSolid);\r\n else if (this.__CacheKnifVersion__)\r\n this.__CacheKnifVersion__[e.Index] = (e?.Object)?.__UpdateVersion__;\r\n }\r\n }\r\n\r\n ClearRelevance(en?: ExtrudeSolid)\r\n {\r\n if (en)\r\n {\r\n let oldLen = this.RelevanceKnifs.length;\r\n arrayRemoveIf(this.RelevanceKnifs, id => !id?.Object || id.Index === en.Id.Index);\r\n if (this.RelevanceKnifs.length !== oldLen)\r\n arrayRemoveIf(en.RelevanceMeats, id => !id?.Object || id.Index === this.Id.Index);\r\n\r\n oldLen = this.RelevanceMeats.length;\r\n arrayRemoveIf(this.RelevanceMeats, id => !id?.Object || id.Index === en.Id.Index);\r\n if (oldLen !== this.RelevanceMeats.length)\r\n arrayRemoveIf(en.RelevanceKnifs, id => !id?.Object || id.Index === this.Id.Index);\r\n }\r\n else\r\n {\r\n for (let id of this.RelevanceKnifs)\r\n {\r\n let en = id.Object as ExtrudeSolid;\r\n if (en)\r\n arrayRemoveIf(en.RelevanceMeats, i => !i?.Object || i.Index === this.Id.Index);\r\n }\r\n\r\n for (let id of this.RelevanceMeats)\r\n {\r\n let en = id.Object as ExtrudeSolid;\r\n if (en)\r\n {\r\n arrayRemoveIf(en.RelevanceKnifs, i => !i?.Object || i.Index === this.Id.Index);\r\n en.Update();\r\n }\r\n }\r\n this.RelevanceMeats.length = 0;\r\n this.RelevanceKnifs.length = 0;\r\n }\r\n this.Update();\r\n }\r\n\r\n private _MeshGeometry: BufferGeometry;\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n if (this.thickness <= 0)\r\n return new BufferGeometry();\r\n\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n let grooves = this.Grooves;\r\n if (grooves.every(g => equaln(g.thickness, this.thickness)) || grooves.length === 0)\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n let holes: Contour[] = [];\r\n\r\n let ocsInv = this.OCSInv;\r\n let alMatrix4 = new Matrix4();\r\n for (let g of grooves)\r\n {\r\n alMatrix4.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let gContour = g.ContourCurve.Clone();\r\n gContour.ApplyMatrix(alMatrix4);\r\n holes.push(Contour.CreateContour(gContour));\r\n }\r\n\r\n let shape = new Shape(Contour.CreateContour(contour), holes);\r\n\r\n let extrudeSettings: ExtrudeGeometryOptions = {\r\n steps: 1,\r\n bevelEnabled: false,\r\n depth: this.Thickness,\r\n UVGenerator: this.UCGenerator,\r\n };\r\n let geo = new ExtrudeGeometry(shape.Shape, extrudeSettings);\r\n geo.applyMatrix4(contour.OCSNoClone);\r\n this.UpdateUV(geo, contour.OCSNoClone);\r\n let bgeo = new BufferGeometry().fromGeometry(geo);\r\n bgeo[\"IsMesh\"] = true;\r\n this._MeshGeometry = bgeo;\r\n return bgeo;\r\n }\r\n\r\n let builder = new ExtrudeGeometryBuilder(this);\r\n\r\n this._MeshGeometry = builder.MeshGeometry;\r\n this._EdgeGeometry = builder.EdgeGeometry;\r\n this.UpdateUV(null, null);\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: EdgesGeometry | BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n if (this.grooves.every(g => equaln(g.thickness, this.thickness)) || this.grooves.length === 0)\r\n {\r\n let pts = [this.ContourCurve.Shape.getPoints(6).map(AsVector3)];\r\n let ocsInv = this.OCSInv;\r\n let alMatrix4 = new Matrix4();\r\n for (let g of this.grooves)\r\n {\r\n alMatrix4.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let gContour = g.ContourCurve.Clone();\r\n gContour.ApplyMatrix(alMatrix4);\r\n\r\n if (gContour instanceof Polyline)\r\n gContour.UpdateMatrixTo(this.contourCurve.OCS);\r\n\r\n if (gContour instanceof Circle)\r\n {\r\n let sp = new Path();\r\n let cen = gContour.Center.applyMatrix4(this.contourCurve.OCSInv);\r\n sp.ellipse(cen.x, cen.y, gContour.Radius, gContour.Radius, 0, 2 * Math.PI, false, 0);\r\n pts.push(sp.getPoints(6).map(AsVector3));\r\n }\r\n else\r\n pts.push(gContour.Shape.getPoints(6).map(AsVector3));\r\n }\r\n let geo = GenerateExtrudeEdgeGeometry(pts, this.thickness).applyMatrix4(this.contourCurve.OCSNoClone);\r\n this._EdgeGeometry = geo;\r\n return geo;\r\n }\r\n\r\n if (this._MeshGeometry)\r\n {\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n UpdateUV(geo: Geometry, ocs: Matrix4, isRev = false)\r\n {\r\n let mat: PhysicalMaterialRecord;\r\n if (this.Material && this.Material.Object)\r\n mat = this.Material.Object as PhysicalMaterialRecord;\r\n else\r\n mat = this.Db?.DefaultMaterial;\r\n\r\n if (mat && mat.IsFull)\r\n {\r\n if (geo)\r\n ScaleUV2(geo, ocs, this.width, this.height, isRev);\r\n else\r\n this.UpdateBufferGeometryUvs(isRev);\r\n }\r\n else\r\n {\r\n if (geo)\r\n ScaleUV(geo);\r\n }\r\n }\r\n UpdateBufferGeometryUvs(isRev: boolean)\r\n {\r\n let uvs = this._MeshGeometry.attributes.uv;\r\n for (let i = 0; i < uvs.count; i++)\r\n {\r\n let x = uvs.getX(i) * 1e3;\r\n let y = uvs.getY(i) * 1e3;\r\n if (isRev)\r\n uvs.setXY(i, x / this.height, y / this.width);\r\n else\r\n uvs.setXY(i, x / this.width, y / this.height);\r\n }\r\n }\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n //如果是Jig实体,那么就算它有关联切割,我们也不更新实体(因为似乎没必要?)\r\n if (this.Id && this.RelevanceKnifs.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this.csg = undefined;\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry.dispose();\r\n this._EdgeGeometry = undefined;\r\n if (this._MeshGeometry)\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n obj.add(...FastWireframe(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return obj.add(\r\n ...this.GetPrintObject3D()\r\n );\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return obj.add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n\r\n UpdateJigMaterial(color = 8)\r\n {\r\n\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n /**\r\n * 简化的文件读取和写入,只写入必要的数据,没有id,没有其他版本号\r\n */\r\n ReadFileLite(file: CADFiler)\r\n {\r\n this.ReadFileOnly(file);\r\n this._Matrix.fromArray(file.Read());\r\n }\r\n WriteFileLite(file: CADFiler)\r\n {\r\n this.WriteFileOnly(file);\r\n file.Write(this._Matrix.toArray());\r\n }\r\n\r\n private ReadFileOnly(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.height = Number(file.Read());\r\n this.width = Number(file.Read());\r\n this.thickness = Number(file.Read());\r\n this.isRect = file.Read();\r\n this.contourCurve = file.ReadObject() as ExtureContourCurve;\r\n\r\n let grooveCount = file.Read();\r\n this.grooves.length = 0;\r\n for (let i = 0; i < grooveCount; i++)\r\n {\r\n if (this.grooves[i] === undefined)\r\n this.grooves[i] = new ExtrudeSolid();\r\n\r\n this.grooves[i].ReadFileLite(file);\r\n }\r\n\r\n this.knifeRadius = file.Read();\r\n this.groovesAddLength = file.Read();\r\n if (ver > 1)\r\n {\r\n this.groovesAddWidth = file.Read();\r\n this.groovesAddDepth = file.Read();\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this.RelevanceMeats.length = 0;\r\n this.RelevanceKnifs.length = 0;\r\n\r\n let count = file.Read() as number;\r\n for (let index = 0; index < count; index++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this.RelevanceMeats.push(id);\r\n }\r\n\r\n count = file.Read() as number;\r\n for (let index = 0; index < count; index++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this.RelevanceKnifs.push(id);\r\n }\r\n }\r\n }\r\n private WriteFileOnly(file: CADFiler)\r\n {\r\n file.Write(3);\r\n file.Write(this.height);\r\n file.Write(this.width);\r\n file.Write(this.thickness);\r\n file.Write(this.isRect);\r\n file.WriteObject(this.ContourCurve);\r\n\r\n file.Write(this.grooves.length);\r\n for (let groove of this.grooves)\r\n groove.WriteFileLite(file);\r\n\r\n file.Write(this.knifeRadius);\r\n file.Write(this.groovesAddLength);\r\n file.Write(this.groovesAddWidth);\r\n file.Write(this.groovesAddDepth);\r\n\r\n //3\r\n file.Write(this.RelevanceMeats.length);\r\n for (let id of this.RelevanceMeats)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this.RelevanceKnifs.length);\r\n for (let id of this.RelevanceKnifs)\r\n file.WriteSoftObjectId(id);\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n this.ReadFileOnly(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n this.WriteFileOnly(file);\r\n }\r\n //#endregion\r\n}\r\n\r\nexport function FastMeshGeometry(width: number, height: number, thickness: number)\r\n{\r\n let geo = new BoxGeometry(width, height, thickness);\r\n geo.translate(width * 0.5, height * 0.5, thickness * 0.5);\r\n return geo;\r\n}\r\n\r\n\r\nCADFactory.RegisterObjectAlias(ExtrudeSolid, \"ExtureSolid\");\r\n\r\nfunction ProjectBoard(knifBoard: ExtrudeSolid, projectBoard: ExtrudeSolid)\r\n{\r\n let n1 = knifBoard.Normal;\r\n let n2 = projectBoard.Normal;\r\n if (!isPerpendicularityTo(n1, n2)) return;\r\n\r\n let p1 = projectBoard.Position;\r\n let p2 = n2.clone().multiplyScalar(projectBoard.Thickness).add(p1);\r\n\r\n let ocsInv = knifBoard.OCSInv;\r\n p1.applyMatrix4(ocsInv).setZ(0);\r\n p2.applyMatrix4(ocsInv).setZ(0);\r\n\r\n let dir = new Vector3().crossVectors(n1, n2).applyMatrix4(ocsInv.clone().setPosition(ZeroVec));\r\n\r\n let lineLength = projectBoard.Width + projectBoard.Height;//两边之和大于第三边\r\n let pts = [\r\n dir.clone().multiplyScalar(lineLength).add(p1),\r\n dir.clone().multiplyScalar(-lineLength).add(p1),\r\n dir.clone().multiplyScalar(-lineLength).add(p2),\r\n dir.clone().multiplyScalar(lineLength).add(p2),\r\n ];\r\n\r\n let pl = new Polyline(pts.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n }));\r\n pl.CloseMark = true;\r\n\r\n // pl.ApplyMatrix(knifBoard.OCS);\r\n return pl;\r\n}\r\n\r\n//用于翻转绘制出来的槽\r\nconst OverturnMatrix = new Matrix4().makeBasis(YAxis, ZAxis, XAxis);\r\n","import { Matrix3, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DragPointType } from \"./DragPointType\";\r\nimport { Entity } from \"./Entity\";\r\nimport { ExtrudeSolid } from \"./Extrude\";\r\n\r\n\r\n@Factory\r\nexport class CompositeEntity extends Entity\r\n{\r\n constructor()\r\n {\r\n super();\r\n }\r\n //如果你需要修改内部实体,则需要写入记录\r\n @AutoRecord Entitys: Entity[] = [];\r\n\r\n //#region 绘制\r\n // OnlyRenderType = true; //我们现在不需要这样,因为我们每个绘制类型的Object的子实体都有子实体的渲染类型(唯一的缺点可能是渲染速度变慢了?)\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n Explode()\r\n {\r\n return this.Entitys.map(e =>\r\n {\r\n let cloneE = e.Clone();\r\n cloneE.Material = e.Material;\r\n return cloneE.ApplyMatrix(this.OCS);\r\n });\r\n }\r\n Traverse(callback: (arg0: Entity) => void)\r\n {\r\n callback(this);\r\n for (let en of this.Entitys)\r\n {\r\n if (en instanceof CompositeEntity)\r\n en.Traverse(callback);\r\n else\r\n callback(en);\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3Ext();\r\n for (let e of this.Entitys)\r\n box.union(e.BoundingBox);\r\n return box.applyMatrix4(this.OCS);\r\n }\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n /**\r\n * 如果复合实体里面有圆,并且使用了拉伸夹点功能,在UpdateDrawObject时,会因为无法得到Jig对象而导致的错误.\r\n * 索性我们去掉Jig实体的功能.\r\n */\r\n if (renderType === RenderType.Jig) return;\r\n\r\n let object = new Object3D();\r\n this.UpdateDrawObject(renderType, object);\r\n return object;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n Object3DRemoveAll(obj);\r\n for (let e of this.Entitys)\r\n {\r\n e.IsEmbedEntity = true;\r\n\r\n // //内嵌实体在某些时候可能被清理,修复它\r\n // if (e.DrawObject.children.length === 0)\r\n // e.ClearDraw();\r\n let o = e.GetDrawObjectFromRenderType(renderType);\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, e, renderType);\r\n }\r\n }\r\n\r\n get ColorIndex(): number\r\n {\r\n return super.ColorIndex;\r\n }\r\n\r\n set ColorIndex(color: number)\r\n {\r\n if (color !== this._Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Color = color;\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n // if (e instanceof CompositeEntity) //有点奇怪\r\n // e._Color = color;\r\n // else\r\n e.ColorIndex = color;\r\n });\r\n }\r\n }\r\n get Material()\r\n {\r\n return super.Material;\r\n }\r\n set Material(id)\r\n {\r\n super.Material = id;\r\n for (let e of this.Entitys)\r\n e.Material = id;\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n this.UpdateDrawObject(renderType, obj);\r\n }\r\n\r\n RestoreJigMaterial()\r\n {\r\n //我们不做任何事情,避免更新材质引起的重绘,因为我们没有实现Jig材质,所以我们也不需要还原它\r\n }\r\n\r\n //#endregion\r\n\r\n //#region 交互操作\r\n\r\n /**\r\n *\r\n * @param snapMode 捕捉模式(单一)\r\n * @param pickPoint const\r\n * @param lastPoint const\r\n * @param viewXform const 最近点捕捉需要这个变量\r\n * @returns object snap points\r\n */\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n for (let e of this.Entitys)\r\n {\r\n pts.push(...e.Clone().ApplyMatrix(this.OCS).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n *\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\r\n * @memberof Entity\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n\r\n private GetGripOrStretchPoints(type: DragPointType)\r\n {\r\n let pts: Vector3[] = [];\r\n for (let e of this.Entitys)\r\n pts.push(... (type === DragPointType.Grip ? e.GetGripPoints() : e.GetStretchPoints()));\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n\r\n private GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts: number[] = this.Entitys.map(e =>\r\n {\r\n return (dragType === DragPointType.Grip ? e.GetGripPoints() : e.GetStretchPoints()).length;\r\n });\r\n return counts;\r\n }\r\n\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let counts = this.GetStrectchPointCountList(dragType);\r\n if (dragType === DragPointType.Stretch && indexList.length === arraySum(counts))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n arraySortByNumber(indexList);\r\n let i = 0;\r\n let j = 0;\r\n let icount = indexList.length;\r\n let offset = 0;\r\n for (let count of counts)\r\n {\r\n offset += count;\r\n let ilist = [];\r\n for (; i < icount; i++)\r\n {\r\n if (indexList[i] < offset)\r\n ilist.push(indexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n\r\n let ent = this.Entitys[j];\r\n dragType === DragPointType.Grip ? ent.MoveGripPoints(ilist, vec) : ent.MoveStretchPoints(ilist, vec);\r\n if (ent instanceof ExtrudeSolid)//取消优化判断this.Objectid,因为这个实体可能被复合在另一个实体中,导致这个id是不存在的,所以我们无法判断它在拽拖.\r\n ent.CheckContourCurve();\r\n ent.Update();\r\n j++;\r\n }\r\n this.__UpdateVersion__++;\r\n\r\n //如何绘制对象是克隆的,那么我们将重绘它(避免无法更新)\r\n //我们也不大需要下面的判断,我们如果持续的更新它,其实并不会有多大的问题,因为我们总是从缓存里面拿绘制对象\r\n // if (this._drawObject && this._drawObject.children[0]?.userData.IsClone)\r\n this.Update();\r\n }\r\n CloneDrawObject(from: this)\r\n {\r\n for (let [type, obj] of from._CacheDrawObject)\r\n {\r\n let oldUserDaata = obj.userData;\r\n obj.userData = {};\r\n let newObj = obj.clone(true);\r\n obj.userData = oldUserDaata;\r\n obj.userData.IsClone = true;\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n newObj.userData.IsClone = true;\r\n\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n //#endregion\r\n\r\n //#region 文件序列化\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let v = file.Read();\r\n super._ReadFile(file);\r\n let count = file.Read();\r\n this.Entitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let ent = file.ReadObject() as Entity;\r\n if (ent)\r\n this.Entitys.push(ent);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.Entitys.length);\r\n for (let e of this.Entitys)\r\n file.WriteObject(e);\r\n }\r\n //#endregion\r\n}\r\n","import { CompositeEntity } from \"../Entity/CompositeEntity\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { ICompHardwareOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DefaultCompositeMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\n\r\n@Factory\r\nexport class HardwareCompositeEntity extends CompositeEntity\r\n{\r\n @AutoRecord HardwareOption: ICompHardwareOption = { ...DefaultCompositeMetalsOption };\r\n @AutoRecord DataList: [string, string][] = [];\r\n @AutoRecord RelevanceBoards: ObjectId[] = [];\r\n constructor()\r\n {\r\n super();\r\n }\r\n GetAllEntity(isHole: boolean = false, filter?: (e: Entity) => boolean)\r\n {\r\n let holes: Entity[] = [];\r\n for (let e of this.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n if (!isHole || e.HardwareOption.isHole)\r\n holes.push(...e.GetAllEntity(isHole, filter).map(h => h.ApplyMatrix(this.OCS)));\r\n }\r\n else\r\n {\r\n if (!filter || filter(e))\r\n {\r\n holes.push(e.Clone().ApplyMatrix(this.OCS));\r\n }\r\n }\r\n }\r\n return holes;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let v = file.Read();\r\n\r\n this.HardwareOption.type = file.Read();\r\n this.HardwareOption.isSplite = file.Read();\r\n this.HardwareOption.isSplitePrice = file.Read();\r\n this.HardwareOption.color = file.Read();\r\n this.HardwareOption.material = file.Read();\r\n this.HardwareOption.name = file.Read();\r\n this.HardwareOption.roomName = file.Read();\r\n this.HardwareOption.cabinetName = file.Read();\r\n this.HardwareOption.costExpr = file.Read();\r\n this.HardwareOption.actualExpr = file.Read();\r\n this.HardwareOption.model = file.Read();\r\n this.HardwareOption.factory = file.Read();\r\n this.HardwareOption.brand = file.Read();\r\n this.HardwareOption.spec = file.Read();\r\n this.HardwareOption.count = file.Read();\r\n this.HardwareOption.comments = file.Read();\r\n this.HardwareOption.unit = file.Read();\r\n\r\n let count = file.Read();\r\n this.DataList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n this.DataList.push(d);\r\n }\r\n\r\n if (v > 1)\r\n this.HardwareOption.isHole = file.Read();\r\n\r\n if (v >= 3)\r\n {\r\n let count = file.Read();\r\n this.RelevanceBoards.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n this.RelevanceBoards.push(file.ReadSoftObjectId());\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n\r\n file.Write(this.HardwareOption.type);\r\n file.Write(this.HardwareOption.isSplite);\r\n file.Write(this.HardwareOption.isSplitePrice);\r\n file.Write(this.HardwareOption.color);\r\n file.Write(this.HardwareOption.material);\r\n file.Write(this.HardwareOption.name);\r\n file.Write(this.HardwareOption.roomName);\r\n file.Write(this.HardwareOption.cabinetName);\r\n file.Write(this.HardwareOption.costExpr);\r\n file.Write(this.HardwareOption.actualExpr);\r\n file.Write(this.HardwareOption.model);\r\n file.Write(this.HardwareOption.factory);\r\n file.Write(this.HardwareOption.brand);\r\n file.Write(this.HardwareOption.spec);\r\n file.Write(this.HardwareOption.count);\r\n file.Write(this.HardwareOption.comments);\r\n file.Write(this.HardwareOption.unit);\r\n\r\n file.Write(this.DataList.length);\r\n for (let data of this.DataList)\r\n {\r\n file.Write(data[0]);\r\n file.Write(data[1]);\r\n }\r\n\r\n file.Write(this.HardwareOption.isHole);\r\n file.Write(this.RelevanceBoards.length);\r\n for (let id of this.RelevanceBoards)\r\n file.WriteSoftObjectId(id);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { LinesType } from \"../UI/Store/BoardInterface\";\r\n\r\nexport class PointShapeUtils\r\n{\r\n //方形点表\r\n static SquarePts(size: number)\r\n {\r\n return [\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n new Vector3(size, size),\r\n new Vector3(-size, size),\r\n new Vector3(-size, -size),\r\n ];\r\n }\r\n //方形外圈十字直线点表\r\n static OutsideLinePts(squareSize: number, lineLength: number)\r\n {\r\n return [\r\n //-X\r\n new Vector3(-squareSize, 0),\r\n new Vector3(-lineLength, 0),\r\n //X\r\n new Vector3(squareSize, 0),\r\n new Vector3(lineLength, 0),\r\n //Y\r\n new Vector3(0, squareSize),\r\n new Vector3(0, lineLength),\r\n\r\n //-Y\r\n new Vector3(0, -squareSize),\r\n new Vector3(0, -lineLength),\r\n ];\r\n }\r\n //十字直线点表\r\n static CrossLinePts(lineLength: number)\r\n {\r\n return [\r\n new Vector3(0, -lineLength),\r\n new Vector3(0, lineLength),\r\n\r\n new Vector3(lineLength, 0),\r\n new Vector3(-lineLength, 0),\r\n ];\r\n }\r\n static CrossLine3DPts(lineLength: number)\r\n {\r\n return [\r\n [new Vector3(lineLength, 0),\r\n new Vector3(-lineLength / 2, 0)],\r\n [new Vector3(0, -lineLength / 2),\r\n new Vector3(0, lineLength)],\r\n [new Vector3(0, 0, -lineLength / 2),\r\n new Vector3(0, 0, lineLength)],\r\n ];\r\n }\r\n\r\n static TrianglePts(size: number)\r\n {\r\n return [\r\n new Vector3(size, -size),\r\n new Vector3(0, size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n ];\r\n }\r\n\r\n static CirclePts(size: number)\r\n {\r\n let pts = [];\r\n let a = Math.PI * 2 / 8;\r\n for (let i = 0; i < 9; i++)\r\n pts.push(new Vector3(Math.sin(a * i) * size, Math.cos(a * i) * size));\r\n return pts;\r\n }\r\n\r\n static ObliqueCrossPts(size: number)\r\n {\r\n return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(-size, -size), new Vector3(size, size)];\r\n }\r\n static ObliqueCrossLinePts(size: number)\r\n {\r\n return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(), new Vector3(-size, -size), new Vector3(size, size)];\r\n }\r\n\r\n static SandClockPts(size: number)\r\n {\r\n return [\r\n new Vector3(size, size),\r\n new Vector3(-size, size),\r\n new Vector3(size, -size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, size),\r\n ];\r\n }\r\n\r\n static TangentPts(size: number)\r\n {\r\n let pts = [\r\n new Vector3(-size, size),\r\n new Vector3(size, size),\r\n new Vector3(size / 2, size),\r\n ];\r\n let a = Math.PI * 2 / 8;\r\n for (let i = 0; i < 9; i++)\r\n pts.push(new Vector3(Math.sin(a * i + Math.PI / 2) * size, Math.cos(a * i + Math.PI / 2) * size));\r\n return pts;\r\n }\r\n\r\n static PerPts(size: number)\r\n {\r\n return [\r\n new Vector3(-size, size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n new Vector3(0, -size),\r\n new Vector3(0, 0),\r\n new Vector3(-size, 0),\r\n ];\r\n }\r\n\r\n static LinesDirPts(len: number, width: number, lineType: LinesType)\r\n {\r\n if (lineType === LinesType.Reverse)\r\n {\r\n return [\r\n new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, width / 2),\r\n new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, -width / 2),\r\n new Vector3(-len / 2), new Vector3(len / 2),\r\n new Vector3(len / 2), new Vector3(len / 2 - width / 2, width / 2),\r\n new Vector3(len / 2), new Vector3(len / 2 - width / 2, -width / 2),\r\n ];\r\n }\r\n else if (lineType === LinesType.Positive)\r\n return [\r\n new Vector3(0, -len / 2), new Vector3(-width / 2, -len / 2 + width / 2),\r\n new Vector3(0, -len / 2), new Vector3(width / 2, -len / 2 + width / 2),\r\n new Vector3(0, -len / 2), new Vector3(0, len / 2),\r\n new Vector3(0, len / 2), new Vector3(-width / 2, len / 2 - width / 2),\r\n new Vector3(0, len / 2), new Vector3(width / 2, len / 2 - width / 2),\r\n\r\n ];\r\n else\r\n {\r\n let w1 = Math.min(len, width) / 5;\r\n\r\n return [\r\n new Vector3(0, len / 2), new Vector3(0, -len / 2),\r\n new Vector3(-width / 2), new Vector3(width / 2),\r\n\r\n new Vector3(-width / 2), new Vector3(-width / 2 + w1, w1),\r\n new Vector3(-width / 2), new Vector3(-width / 2 + w1, -w1),\r\n new Vector3(width / 2), new Vector3(width / 2 - w1, w1),\r\n new Vector3(width / 2), new Vector3(width / 2 - w1, -w1),\r\n\r\n new Vector3(0, len / 2), new Vector3(-w1, len / 2 - w1),\r\n new Vector3(0, len / 2), new Vector3(w1, len / 2 - w1),\r\n new Vector3(0, -len / 2), new Vector3(-w1, -len / 2 + w1),\r\n new Vector3(0, -len / 2), new Vector3(w1, -len / 2 + w1),\r\n ];\r\n }\r\n }\r\n}\r\n","import { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { angle, equaln, isParallelTo, rotatePoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Hole } from \"../../DatabaseServices/3DSolid/Hole\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { userConfig } from \"../../Editor/UserConfig\";\r\n\r\nconst SCALAR = 0.1;\r\n\r\nexport function CyHoleInBoard(cys: CylinderHole[], br: Board, ocs: Matrix4)\r\n{\r\n if (cys.length === 1 && cys[0].Type === GangDrillType.Ymj)\r\n return true;\r\n\r\n const outline = br.ContourCurve;\r\n let box = new Box3();\r\n let pxl: CylinderHole;\r\n let ljg: CylinderHole;\r\n let ymj: CylinderHole;\r\n let wood: CylinderHole;\r\n let woodPXL: CylinderHole;\r\n let pxl2: CylinderHole;\r\n for (let cy of cys)\r\n {\r\n box.union(cy.BoundingBox);\r\n if (cy.Type === GangDrillType.Pxl)\r\n {\r\n if (pxl)\r\n pxl2 = cy;\r\n else\r\n pxl = cy;\r\n }\r\n else if (cy.Type === GangDrillType.Ljg)\r\n ljg = cy;\r\n else if (cy.Type === GangDrillType.Wood)\r\n wood = cy;\r\n else if (cy.Type === GangDrillType.WoodPXL)\r\n woodPXL = cy;\r\n else\r\n ymj = cy;\r\n }\r\n box.applyMatrix4(ocs);\r\n\r\n let outlineBox = outline.BoundingBox;\r\n outlineBox.max.setZ(br.Thickness);\r\n\r\n if (!box.intersectsBox(outlineBox))\r\n return false;\r\n\r\n let nor = new Vector3();\r\n\r\n if (ljg)\r\n nor.copy(ljg.Normal);\r\n else if (ymj)\r\n nor.copy(ymj.Normal);\r\n else\r\n if (wood)\r\n nor.copy(wood.Normal);\r\n\r\n nor.applyMatrix4(ocs.clone().setPosition(new Vector3));\r\n\r\n if (isParallelTo(nor, ZAxis))\r\n {\r\n if (ymj)\r\n {\r\n let center = ymj.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, ymj.Radius - SCALAR);\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n }\r\n }\r\n else\r\n {\r\n if (pxl)\r\n {\r\n let plxs = [pxl];\r\n if (pxl2)\r\n plxs.push(pxl2);\r\n if (plxs.every(cy =>\r\n {\r\n let center = cy.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, pxl.Radius - SCALAR);\r\n if (userConfig.forceFilterPxl)\r\n return outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center);\r\n }))\r\n return false;\r\n }\r\n if (woodPXL)\r\n {\r\n let center = woodPXL.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, woodPXL.Radius - SCALAR);\r\n if (outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center))\r\n return false;\r\n }\r\n\r\n if (ljg)\r\n {\r\n let c1 = ljg.Position.applyMatrix4(ocs).setZ(0);\r\n let minPt = c1.clone().add(nor.clone().multiplyScalar(ljg.Height / 2));\r\n let c2 = c1.clone().add(nor.clone().multiplyScalar(ljg.Height - SCALAR));\r\n c1.add(nor.clone().multiplyScalar(SCALAR));\r\n\r\n rotatePoint(nor, Math.PI / 2);\r\n c1.add(nor.multiplyScalar(ljg.Radius));\r\n c2.add(nor.negate());\r\n\r\n let rect = new Polyline().RectangleFrom2Pt(c1, c2);\r\n\r\n let intPtsLen = outline.IntersectWith(rect, 0).length;\r\n if (intPtsLen > 2 || (intPtsLen === 0 && !outline.PtInCurve(minPt)))\r\n return false;\r\n }\r\n\r\n if (wood)\r\n {\r\n let c1 = wood.Position.applyMatrix4(ocs).setZ(0);\r\n let c2 = c1.clone().add(nor.clone().multiplyScalar(wood.Height));\r\n\r\n rotatePoint(nor, Math.PI / 2);\r\n let dir = nor.multiplyScalar(wood.Radius);\r\n let p1 = c1.clone().add(dir);\r\n let p2 = c2.clone().add(dir);\r\n let p3 = c1.clone().add(dir.negate());\r\n let p4 = c2.clone().add(dir);\r\n let l1 = new Line(p1, p2);\r\n let l2 = new Line(p3, p4);\r\n if (l1.IntersectWith(outline, 0).length !== 1 || l2.IntersectWith(outline, 0).length !== 1)\r\n return false;\r\n }\r\n\r\n }\r\n return true;\r\n}\r\n\r\nexport interface IRectHoleOption\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\n\r\nexport const TempRectHoleOption: IRectHoleOption = {\r\n up: \"\",\r\n down: \"\",\r\n left: \"\",\r\n right: \"\",\r\n};\r\n\r\n/**分析上下左右排钻 */\r\nexport function InitRectBoardHoleOption(br: Board, option: IRectHoleOption)\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n let hightDrill = br.BoardProcessOption.highDrill;\r\n let cus = br.ContourCurve.Explode() as Curve[];\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n option.down = hightDrill[i];\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n option.right = hightDrill[i];\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n option.up = hightDrill[i];\r\n else\r\n option.left = hightDrill[i];\r\n }\r\n}\r\nexport function ExtureHoleInBoard(holes: ExtrudeHole[], board: Board, ocs: Matrix4)\r\n{\r\n //TODO:自定义排钻判断\r\n return true;\r\n}\r\nexport function HoleInBoard(holes: Hole[], br: Board, ocs?: Matrix4)\r\n{\r\n if (holes.length === 0) return false;\r\n\r\n if (holes[0] instanceof CylinderHole)\r\n {\r\n return CyHoleInBoard(holes as CylinderHole[], br, ocs ?? br.OCSInv);\r\n }\r\n else\r\n {\r\n return ExtureHoleInBoard(holes as ExtrudeHole[], br, ocs ?? br.OCSInv);\r\n }\r\n}\r\n\r\n/**上下左右排钻写入板件 */\r\nexport function SetRectHighHole(br: Board, option: IRectHoleOption)\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n let highDrill = br.BoardProcessOption.highDrill;\r\n let cus = br.ContourCurve.Explode() as Curve[];\r\n highDrill.length = 0;\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n highDrill.push(option.down);\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n highDrill.push(option.right);\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n highDrill.push(option.up);\r\n else\r\n highDrill.push(option.left);\r\n }\r\n let types = new Set(highDrill);\r\n if (types.size === 1 && highDrill[0] !== DrillType.None)\r\n br.BoardProcessOption[EBoardKeyList.DrillType] = highDrill[0];\r\n};\r\n","import { Matrix4, Vector3, LineSegments, Object3D, Mesh, Geometry } from 'three';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { deserializationBoardData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { arrayRemoveIf } from '../../Common/ArrayExt';\r\nimport { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { userConfig } from '../../Editor/UserConfig';\r\nimport { boardUVGenerator, boardUVGenerator2 } from '../../Geometry/BoardUVGenerator';\r\nimport { equaln, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { BoardOpenDir, BoardProcessOption, BoardType, ComposingType, FaceDirection, LinesType } from '../../UI/Store/BoardInterface';\r\nimport { ExtrudeHole } from '../3DSolid/ExtrudeHole';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { HardwareCompositeEntity } from '../Hardware/HardwareCompositeEntity';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { Shape } from '../Shape';\r\nimport { Circle } from './Circle';\r\nimport { Entity } from './Entity';\r\nimport { ExtrudeSolid, ExtureContourCurve } from './Extrude';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { CylinderHole } from '../3DSolid/CylinderHole';\r\nimport { BlockTableRecord } from '../BlockTableRecord';\r\nimport { InitRectBoardHoleOption, SetRectHighHole, TempRectHoleOption, CyHoleInBoard } from '../../Add-on/DrawDrilling/HoleUtils';\r\n\r\n//转换板件类型成为空间类型. 0x 1y 2z\r\nexport function ConverBoardTypeToSpaceType(type: BoardType): number\r\n{\r\n switch (type)\r\n {\r\n case BoardType.Layer:\r\n return 2;\r\n case BoardType.Vertical:\r\n return 0;\r\n case BoardType.Behind:\r\n return 1;\r\n }\r\n}\r\n\r\nexport interface IModeling\r\n{\r\n shape: Shape;\r\n thickness: number;\r\n dir: FaceDirection;\r\n knifeRadius: number;\r\n addLen: number;\r\n addWidth?: number;\r\n addDepth?: number;\r\n}\r\n\r\n/**\r\n * 板件实体\r\n */\r\n@Factory\r\nexport class Board extends ExtrudeSolid\r\n{\r\n private _Rotation = {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n };\r\n private _BoardType: BoardType;\r\n private _Name = \"\";\r\n private _BoardProcessOption: BoardProcessOption;\r\n //板件排钻表,与之碰撞板件为key\r\n private _DrillList: Map = new Map();\r\n private _LayerNails: ObjectId[] = [];\r\n @AutoRecord RelativeHardware: ObjectId[] = [];\r\n @AutoRecord OpenDir: BoardOpenDir = BoardOpenDir.None;\r\n private _IsChaiDan: boolean = true;\r\n constructor()\r\n {\r\n super();\r\n this.InitBoardData();\r\n }\r\n\r\n /**\r\n * 创建一个代理数组,数组改变时被监听\r\n */\r\n private CreateArray(): T[]\r\n {\r\n return new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n this.WriteAllObjectRecord();\r\n return Reflect.set(target, key, value, receiver);\r\n }\r\n });\r\n }\r\n\r\n private InitBoardData()\r\n {\r\n let defaultData: BoardProcessOption =\r\n {\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n boardName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n composingFace: ComposingType.Arbitrary,\r\n highSealed: this.CreateArray(),\r\n sealedUp: \"1\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n spliteHeight: \"\",\r\n spliteWidth: \"\",\r\n spliteThickness: \"\",\r\n highDrill: this.CreateArray(),\r\n frontDrill: true,\r\n backDrill: true,\r\n drillType: \"\",\r\n remarks: this.CreateArray(),\r\n };\r\n\r\n this._BoardProcessOption = new Proxy(defaultData, {\r\n get: function (target, key, receiver)\r\n {\r\n return Reflect.get(target, key, receiver);\r\n },\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (key === \"highDrill\" || key === \"highSealed\")\r\n {\r\n let arr = this.CreateArray() as any[];\r\n arr.push(...value);\r\n target[key] = arr;\r\n return true;\r\n }\r\n let result = Reflect.set(target, key, value, receiver);\r\n if (key === EBoardKeyList.Lines)\r\n this.Update(UpdateDraw.Geometry);\r\n return result;\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n //初始化板件 来自长宽高\r\n InitBoard(length: number, width: number, thickness: number, boardType: BoardType = BoardType.Layer)\r\n {\r\n this._BoardType = boardType;\r\n if (boardType === BoardType.Layer)\r\n {\r\n this.ColorIndex = 2;\r\n this._Name = \"层板\";\r\n }\r\n else if (boardType === BoardType.Vertical)\r\n {\r\n this.ColorIndex = 11;\r\n this._Name = \"立板\";\r\n }\r\n else\r\n {\r\n this.ColorIndex = 3;\r\n this._Name = \"背板\";\r\n }\r\n\r\n let types = [...userConfig.DrillConfigs.keys(), \"不排\"];\r\n let type = types.includes(this.BoardProcessOption.drillType) ? this.BoardProcessOption.drillType : types[0];\r\n this._BoardProcessOption.drillType = type;\r\n this._BoardProcessOption.highDrill = Array(4).fill(type);\r\n\r\n this.ConverToRectSolid(width, length, thickness);\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n static CreateBoard(length: number, width: number, thickness: number, boardType: BoardType = BoardType.Layer)\r\n {\r\n let board = new Board();\r\n board.InitBoard(length, width, thickness, boardType);\r\n board.ApplyMatrix(board.RotateMat);\r\n board._SpaceOCS.identity();\r\n return board;\r\n }\r\n get DrillList()\r\n {\r\n return this._DrillList;\r\n }\r\n\r\n get LayerNails()\r\n {\r\n return this._LayerNails;\r\n }\r\n\r\n AppendNails(ids: ObjectId[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LayerNails.push(...ids);\r\n }\r\n ClearLayerNails()\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let nail of this._LayerNails)\r\n {\r\n if (nail.Object && !nail.IsErase)\r\n nail.Object.Erase();\r\n }\r\n this._LayerNails.length = 0;\r\n }\r\n\r\n /**\r\n * 你可以安心的修改它,这样会直接影响到板件,因为板件对这个对象添加了代理.\r\n */\r\n get BoardProcessOption()\r\n {\r\n return this._BoardProcessOption;\r\n }\r\n\r\n set BoardProcessOption(obj: BoardProcessOption)\r\n {\r\n Object.assign(this._BoardProcessOption, obj, { [EBoardKeyList.HighSealed]: obj[EBoardKeyList.HighSealed].slice() });\r\n }\r\n get NeedUpdateRelevanceGroove()\r\n {\r\n if (super.NeedUpdateRelevanceGroove)\r\n return true;\r\n\r\n for (let k of this.RelativeHardware)\r\n {\r\n if (!k || !k.Object) continue;\r\n if (this.__CacheKnifVersion__[k.Index] !== ((k.Object)).__UpdateVersion__)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n protected GetRelevanceKnifes(knifs: ExtrudeSolid[])\r\n {\r\n super.GetRelevanceKnifes(knifs);\r\n for (let e of this.RelativeHardware)\r\n {\r\n if (e.IsErase) continue;\r\n let hardware = e.Object;\r\n if (hardware instanceof HardwareCompositeEntity)\r\n {\r\n if (hardware.HardwareOption.isHole)\r\n {\r\n let holes = hardware.GetAllEntity(true, e => e instanceof ExtrudeHole || e instanceof ExtrudeSolid) as (ExtrudeHole | ExtrudeSolid)[];\r\n\r\n for (let i = 0; i < holes.length; i++)\r\n {\r\n let h = holes[i];\r\n let g = h instanceof ExtrudeHole ? h.Convert2ExtrudeSolid() : h;\r\n g.__TempIndexVersion__ = { Index: hardware.Id.Index, Version: hardware.__UpdateVersion__ };\r\n knifs.push(g);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n ClearRelevance(en?: ExtrudeSolid)\r\n {\r\n for (let id of this.RelativeHardware)\r\n {\r\n let e = id.Object;\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n arrayRemoveIf(e.RelevanceBoards, i => !i || i.Index === this.Id.Index);\r\n }\r\n }\r\n this.RelativeHardware.length = 0;\r\n super.ClearRelevance(en);\r\n }\r\n\r\n get SplitBoards()\r\n {\r\n let brs = this.SplitExtrudes;\r\n //拆单或者bbs的时候会重新加入最新的原板件的排钻和层板钉数据\r\n for (let br of brs)\r\n {\r\n if (br.__OriginalEnt__)\r\n {\r\n br._DrillList = new Map(this._DrillList.entries());\r\n br._LayerNails = [...this._LayerNails];\r\n br.ProcessingGroupList = [...this.ProcessingGroupList];\r\n br._BoardProcessOption = { ...this._BoardProcessOption };\r\n }\r\n }\r\n return brs;\r\n }\r\n\r\n get BoardModeling()\r\n {\r\n let models: IModeling[] = [];\r\n for (let g of this.grooves)\r\n {\r\n let cu = g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCS));\r\n\r\n let outline = Contour.CreateContour(cu, false);\r\n let holes: Contour[] = [];\r\n for (let subG of g.Grooves)\r\n {\r\n let holeCu = subG.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(subG.OCS));\r\n holes.push(Contour.CreateContour(holeCu, false));\r\n }\r\n\r\n let s = new Shape(outline, holes);\r\n\r\n models.push({\r\n shape: s,\r\n thickness: g.Thickness,\r\n dir: equaln(g.Position.applyMatrix4(this.OCSInv).z, 0) && g.Thickness < this.thickness - 1e-6 ? FaceDirection.Back : FaceDirection.Front,\r\n knifeRadius: g.KnifeRadius,\r\n addLen: g.GroovesAddLength,\r\n addWidth: g.GroovesAddWidth,\r\n addDepth: g.GroovesAddDepth,\r\n });\r\n }\r\n return models;\r\n }\r\n set BoardModeling(models: IModeling[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.length = 0;\r\n\r\n for (let model of models)\r\n {\r\n let g = new ExtrudeSolid();\r\n g.OCS = this.OCS;\r\n g.ContourCurve = model.shape.Outline.Curve;\r\n g.Thickness = model.thickness;\r\n g.GroovesAddLength = model.addLen;\r\n g.KnifeRadius = model.knifeRadius;\r\n\r\n for (let hole of model.shape.Holes)\r\n {\r\n let subG = new ExtrudeSolid();\r\n subG.OCS = this.OCS;\r\n subG.ContourCurve = hole.Curve;\r\n subG.Thickness = model.thickness;\r\n\r\n g.AppendGroove(subG);\r\n }\r\n\r\n if (model.dir === FaceDirection.Front)\r\n g.ApplyMatrix(MoveMatrix(new Vector3(0, 0, this.thickness - g.Thickness)));\r\n\r\n this.grooves.push(g);\r\n }\r\n this.Update();\r\n }\r\n get IsChaiDan()\r\n {\r\n return this._IsChaiDan;\r\n }\r\n set IsChaiDan(v: boolean)\r\n {\r\n if (this._IsChaiDan !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._IsChaiDan = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n ClearBoardModeling()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.length = 0;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n /**\r\n * 注意传入的排钻列表,避免指针被引用\r\n */\r\n AppendDrillList(k: ObjectId, drs: ObjectId[][])\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldDrs = this._DrillList.get(k);\r\n if (oldDrs)\r\n oldDrs.push(...drs);//同类型板件时,会触发这里.\r\n else\r\n this._DrillList.set(k, drs);\r\n }\r\n ClearDrillList(k: ObjectId)\r\n {\r\n let drids = this._DrillList.get(k);\r\n if (drids)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let drillents of drids)\r\n {\r\n for (let objId of drillents)\r\n {\r\n if (!objId.IsErase)\r\n objId.Object.Erase();\r\n }\r\n }\r\n this._DrillList.delete(k);\r\n\r\n if (k && k.Object)\r\n {\r\n //必须在这里删除\r\n let br = k.Object as Board;\r\n br.ClearDrillList(this.Id);\r\n }\r\n }\r\n }\r\n\r\n ClearAllDrillList()\r\n {\r\n for (const [id] of this._DrillList)\r\n {\r\n this.ClearDrillList(id);\r\n }\r\n }\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n\r\n if (!isErase) return;\r\n\r\n //记录数据,避免下面记录的时候,排钻已经被删除,导致排钻数据被优化掉.\r\n this.WriteAllObjectRecord();\r\n\r\n for (const [, driss] of this._DrillList)\r\n {\r\n for (let dris of driss)\r\n for (let d of dris)\r\n if (d && d.Object)\r\n d.Object.Erase();\r\n }\r\n this.ClearLayerNails();\r\n }\r\n get RotateMat()\r\n {\r\n let roMat = new Matrix4();\r\n\r\n switch (this._BoardType)\r\n {\r\n case BoardType.Layer:\r\n roMat.makeBasis(\r\n new Vector3(0, 1, 0),\r\n new Vector3(-1, 0, 0),\r\n new Vector3(0, 0, 1)\r\n );\r\n break;\r\n case BoardType.Vertical:\r\n roMat.makeBasis(\r\n new Vector3(0, 1, 0),\r\n new Vector3(0, 0, 1),\r\n new Vector3(1, 0, 0)\r\n );\r\n break;\r\n case BoardType.Behind:\r\n roMat.makeBasis(\r\n new Vector3(1, 0, 0),\r\n new Vector3(0, 0, 1),\r\n new Vector3(0, -1, 0)\r\n );\r\n }\r\n return roMat;\r\n }\r\n get Height()\r\n {\r\n return this.height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this.ContourCurve instanceof Circle)\r\n return;\r\n\r\n if (!equaln(v, this.height, 1e-2))\r\n {\r\n this.WriteAllObjectRecord();\r\n let refHeight = this.height / 2;\r\n let dist = v - this.height;\r\n\r\n let contour = Contour.CreateContour(this.ContourCurve, false);\r\n let isSuccess = contour.UnEqualProportionScale(refHeight, dist, \"y\");\r\n\r\n if (isSuccess)\r\n {\r\n this.height = v;\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n }\r\n }\r\n get Width()\r\n {\r\n return this.width;\r\n }\r\n set Width(v: number)\r\n {\r\n if (this.ContourCurve instanceof Circle)\r\n return;\r\n\r\n if (!equaln(v, this.width, 1e-2))\r\n {\r\n this.WriteAllObjectRecord();\r\n let refDist = this.width / 2;\r\n let dist = v - this.width;\r\n let contour = Contour.CreateContour(this.ContourCurve, false);\r\n let isSuccess = contour.UnEqualProportionScale(refDist, dist, \"x\");\r\n if (isSuccess)\r\n {\r\n this.width = v;\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n }\r\n }\r\n get BoardType(): BoardType\r\n {\r\n return this._BoardType;\r\n }\r\n set BoardType(type: BoardType)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (type !== this._BoardType)\r\n {\r\n let spaceCS = this._SpaceOCS.clone();\r\n this._BoardType = type;\r\n this.ApplyMatrix(this.OCSInv);\r\n\r\n this.ApplyMatrix(this.RotateMat);\r\n\r\n this._SpaceOCS.identity();\r\n\r\n this.ApplyMatrix(spaceCS);\r\n\r\n this.Update();\r\n }\r\n }\r\n\r\n //设置板件类型并且不做任何的事情\r\n SetBoardType(type: BoardType)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._BoardType = type;\r\n }\r\n\r\n //最左下角的点\r\n get MinPoint(): Vector3\r\n {\r\n switch (this._BoardType)\r\n {\r\n case BoardType.Layer:\r\n return new Vector3(0, this.height).applyMatrix4(this.OCS);\r\n case BoardType.Vertical:\r\n return this.Position;\r\n case BoardType.Behind:\r\n return new Vector3(0, 0, this.thickness).applyMatrix4(this.OCS);\r\n }\r\n }\r\n get MaxPoint(): Vector3\r\n {\r\n let pt = new Vector3(this.width, this.height, -this.thickness);\r\n pt.applyMatrix4(this.OCS);\r\n return pt;\r\n }\r\n\r\n get IsRect()\r\n {\r\n return this.isRect;\r\n }\r\n\r\n get IsSpecialShape()\r\n {\r\n return !this.isRect;\r\n }\r\n\r\n get HasGroove()\r\n {\r\n return this.grooves.length > 0;\r\n }\r\n\r\n get Name()\r\n {\r\n return this._Name;\r\n }\r\n set Name(n: string)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Name = n;\r\n }\r\n\r\n /**\r\n * 板件的轮廓,在板件坐标系中的表现方式.\r\n */\r\n get ContourCurve()\r\n {\r\n return super.ContourCurve;\r\n }\r\n set ContourCurve(cu: ExtureContourCurve)\r\n {\r\n //标识是否被初始化\r\n TempRectHoleOption.up = \"\";\r\n\r\n if (!this.contourCurve || cu.EndParam !== this.contourCurve.EndParam || !this.BoardProcessOption.drillType)\r\n {\r\n let drillTypes = [...userConfig.DrillConfigs.keys(), \"不排\"];\r\n let defaultType = this._BoardProcessOption.drillType;\r\n if (!defaultType || !drillTypes.includes(defaultType))\r\n {\r\n defaultType = drillTypes[0];\r\n this._BoardProcessOption.drillType = defaultType;\r\n }\r\n this._BoardProcessOption.highDrill = Array(cu.EndParam).fill(defaultType);\r\n }\r\n else\r\n {\r\n if (this.isRect)\r\n InitRectBoardHoleOption(this, TempRectHoleOption);\r\n }\r\n super.ContourCurve = cu;\r\n\r\n if (this.isRect && TempRectHoleOption.up)\r\n SetRectHighHole(this, TempRectHoleOption);\r\n }\r\n\r\n Explode()\r\n {\r\n return Board2Regions(this);\r\n // return this.m_Shape.Explode().map(cu => cu.ApplyMatrix(this.OCS));\r\n }\r\n RotateBoard(rox: number, roy: number, roz: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this._Rotation.x = rox;\r\n this._Rotation.y = roy;\r\n this._Rotation.z = roz;\r\n\r\n let spcocs = this.SpaceOCS;\r\n let roMatX = new Matrix4().makeRotationX(rox);\r\n let roMatY = new Matrix4().makeRotationY(roy);\r\n let roMatZ = new Matrix4().makeRotationZ(roz);\r\n\r\n this.ApplyMatrix(this.OCSInv)\r\n .ApplyMatrix(this.RotateMat)\r\n .ApplyMatrix(roMatX)\r\n .ApplyMatrix(roMatY)\r\n .ApplyMatrix(roMatZ)\r\n .ApplyMatrix(spcocs);\r\n\r\n this._SpaceOCS.copy(spcocs);\r\n this.Update();\r\n }\r\n get Rotation()\r\n {\r\n return this._Rotation;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n\r\n get UCGenerator()\r\n {\r\n if (this.BoardProcessOption.lines === LinesType.Positive)\r\n return boardUVGenerator;\r\n else\r\n return boardUVGenerator2;\r\n }\r\n UpdateUV(geo: Geometry, ocs: Matrix4, isRev = false)\r\n {\r\n super.UpdateUV(geo, ocs, this.BoardProcessOption.lines === LinesType.Reverse);\r\n }\r\n\r\n //从一个实体拷贝数据,实体类型必须相同.\r\n CopyFrom(obj: Board)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let drillBak = this._DrillList;\r\n this._DrillList = new Map();\r\n let layerNailsBak = this._LayerNails;\r\n this._LayerNails = [];\r\n\r\n super.CopyFrom(obj);\r\n\r\n this._DrillList = drillBak;\r\n this._LayerNails = layerNailsBak;\r\n }\r\n\r\n Clone(): this\r\n {\r\n let br = super.Clone();\r\n br._DrillList.clear();\r\n br._LayerNails.length = 0;\r\n br.RelativeHardware.length = 0;\r\n return br;\r\n }\r\n Join(target: this)\r\n {\r\n let res = super.Join(target);\r\n if (res && target.RelativeHardware)\r\n {\r\n for (let hw of target.RelativeHardware)\r\n {\r\n if (!this.RelativeHardware.includes(hw))\r\n this.RelativeHardware.push(hw);\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n private GetLinesDir()\r\n {\r\n let l: LineSegments;\r\n let len: number;\r\n let width: number;\r\n\r\n switch (this.BoardProcessOption.lines)\r\n {\r\n case LinesType.Positive:\r\n len = this.height / 3;\r\n width = Math.min(this.width, this.height) / 8;\r\n break;\r\n case LinesType.Reverse:\r\n len = this.width / 2;\r\n width = Math.min(this.width, this.height) / 8;\r\n break;\r\n case LinesType.CanReversal:\r\n len = this.height / 3;\r\n width = this.width / 2;\r\n default:\r\n break;\r\n }\r\n\r\n l = new LineSegments(\r\n BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesDirPts(len, width, this.BoardProcessOption.lines)),\r\n ColorMaterial.GetLineMaterial(8)\r\n );\r\n let l1 = l.clone();\r\n l1.material = ColorMaterial.GetLineMaterial(7);\r\n l.position.set(this.width / 2, this.height / 2, 0);\r\n l1.position.set(this.width / 2, this.height / 2, this.thickness);\r\n\r\n l.updateMatrix();\r\n l1.updateMatrix();\r\n\r\n return [l, l1];\r\n }\r\n HandleSpliteEntitys(splitEntitys: this[])\r\n {\r\n let nails: ObjectId[] = [];\r\n for (let nail of this.LayerNails)\r\n {\r\n if (nail?.Object && !nail.IsErase)\r\n nails.push(nail);\r\n }\r\n let record = this._Owner.Object as BlockTableRecord;\r\n for (let en of splitEntitys)\r\n {\r\n let ocsInv = en.OCSInv;\r\n let nids: ObjectId[] = [];\r\n let needAddNailEnts: Board[] = [];\r\n nails = nails.filter(id =>\r\n {\r\n let n = id.Object as CylinderHole;\r\n let position = n.Position.applyMatrix4(ocsInv).setZ(0);\r\n if (en.contourCurve.PtInCurve(position))\r\n {\r\n let n1 = n.Clone();\r\n n1.MId = n.MId;\r\n n1.FId = n.FId;\r\n\r\n if (n.MId === this.Id)\r\n {\r\n n1.MId = en.Id;\r\n needAddNailEnts.push(n1.FId.Object as Board);\r\n }\r\n\r\n if (n.FId === this.Id)\r\n {\r\n n1.FId = en.Id;\r\n needAddNailEnts.push(n1.MId.Object as Board);\r\n }\r\n\r\n n.Erase();\r\n record.Add(n1);\r\n nids.push(n1.Id);\r\n\r\n return false;\r\n }\r\n return true;\r\n });\r\n en.AppendNails(nids);\r\n needAddNailEnts.forEach(e => e.AppendNails(nids));\r\n\r\n if (!userConfig.openDrillingReactor)\r\n {\r\n for (let [bid, idss] of this._DrillList)\r\n {\r\n if (!bid) continue;\r\n let board = bid.Object as Board;\r\n for (let ids of idss)\r\n {\r\n if (!ids[0]?.Object || ids[0].IsErase) continue;\r\n let holes = ids.map(i => i.Object) as CylinderHole[];\r\n if (holes[0] instanceof CylinderHole)\r\n {\r\n let isInBoard = CyHoleInBoard(holes, en, en.OCSInv);\r\n if (isInBoard)\r\n {\r\n let cloneHoles = holes.map(h => h.Clone());\r\n\r\n for (let h of cloneHoles)\r\n {\r\n if (h.FId === this.Id)\r\n {\r\n h.FId = en.Id;\r\n }\r\n if (h.MId === this.Id)\r\n {\r\n h.MId = en.Id;\r\n }\r\n record.Add(h);\r\n }\r\n for (let h of holes)\r\n h.Erase();\r\n en.AppendDrillList(bid, [cloneHoles.map(c => c.Id)]);\r\n board.AppendDrillList(en.Id, [cloneHoles.map(c => c.Id)]);\r\n }\r\n }\r\n else\r\n {\r\n //TODO:处理自定义排钻\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n InitDrawObject(renderType = RenderType.Wireframe)\r\n {\r\n let obj = super.InitDrawObject(renderType);\r\n this.HandleBoardMaterial(renderType, obj);\r\n return obj;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let o = super.UpdateDrawObject(renderType, obj);\r\n\r\n this.HandleBoardMaterial(renderType, obj);\r\n\r\n return o;\r\n }\r\n private HandleBoardMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (!this.IsChaiDan)\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2)\r\n {\r\n obj.children.length = 1;\r\n (obj.children[0] as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n else if (renderType !== RenderType.Wireframe)\r\n {\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n }\r\n if ((renderType === RenderType.Wireframe || renderType === RenderType.Conceptual) && userConfig.showLines && this.IsChaiDan)\r\n obj.add(...this.GetLinesDir());\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n super.UpdateDrawObjectMaterial(renderType, obj);\r\n if (!this.IsChaiDan)\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2)\r\n {\r\n (obj.children[0] as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n else if (renderType !== RenderType.Wireframe)\r\n {\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n }\r\n }\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n if (this.RelativeHardware.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n if (ver < 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n this._BoardType = file.Read();\r\n this._Name = file.Read();\r\n //兼容旧版本\r\n if (ver > 2)\r\n {\r\n deserializationBoardData(file, this._BoardProcessOption, ver);\r\n }\r\n else\r\n {\r\n let opt = file.Read();\r\n this._BoardProcessOption = Object.assign(this._BoardProcessOption,\r\n typeof opt === \"string\" ? JSON.parse(opt) : opt);\r\n }\r\n\r\n //读取排钻列表\r\n this._DrillList.clear();\r\n let size = file.Read();\r\n\r\n //没有与任何板件关联的排钻\r\n let noRelevancyDrillings: ObjectId[][] = [];\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let drIdList: ObjectId[][] = [];\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let drIDs: ObjectId[] = [];\r\n let count1 = file.Read();\r\n for (let j = 0; j < count1; j++)\r\n {\r\n let fileId = file.ReadObjectId();\r\n fileId && drIDs.push(fileId);\r\n }\r\n if (drIDs.length > 0)\r\n drIdList.push(drIDs);\r\n }\r\n\r\n if (drIdList.length === 0)\r\n continue;\r\n\r\n if (!id)\r\n noRelevancyDrillings.push(...drIdList);\r\n else\r\n this._DrillList.set(id, drIdList);\r\n }\r\n\r\n if (noRelevancyDrillings.length > 0)\r\n this._DrillList.set(undefined, noRelevancyDrillings);\r\n\r\n if (ver > 1)\r\n {\r\n this._LayerNails.length = 0;\r\n let nailsCount = file.Read();\r\n for (let i = 0; i < nailsCount; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this._LayerNails.push(objId);\r\n }\r\n }\r\n if (ver > 4)\r\n this._Rotation = { x: file.Read(), y: file.Read(), z: file.Read() };\r\n if (ver >= 7)\r\n {\r\n let count = file.Read();\r\n this.RelativeHardware.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this.RelativeHardware.push(objId);\r\n }\r\n }\r\n if (ver >= 8)\r\n this.OpenDir = file.Read();\r\n\r\n if (ver >= 9)\r\n this._IsChaiDan = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(9);\r\n // file.Write(this._SpaceOCS.toArray()); ver < 6\r\n file.Write(this._BoardType);\r\n file.Write(this._Name);\r\n serializeBoardData(file, this._BoardProcessOption);\r\n\r\n file.Write(this._DrillList.size);\r\n for (let [id, idList] of this._DrillList)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(idList.length);\r\n for (let ids of idList)\r\n {\r\n file.Write(ids.length);\r\n for (let id of ids)\r\n file.WriteObjectId(id);\r\n }\r\n }\r\n file.Write(this._LayerNails.length);\r\n for (let nail of this._LayerNails)\r\n {\r\n file.WriteObjectId(nail);\r\n }\r\n file.Write(this._Rotation.x);\r\n file.Write(this._Rotation.y);\r\n file.Write(this._Rotation.z);\r\n\r\n file.Write(this.RelativeHardware.length);\r\n for (let id of this.RelativeHardware)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(this.OpenDir);\r\n file.Write(this._IsChaiDan);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Object3D, Shape as TShape, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Shape } from \"../DatabaseServices/Shape\";\r\nimport { FaceDirection } from \"../UI/Store/BoardInterface\";\r\nimport { MoveMatrix } from \"./GeUtils\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\n\r\n//FIXME: #IWBPB 性能缺陷和BUG. 等待废弃或者改进\r\nexport function CreateWireframe(en3D: Board | ExtrudeSolid)\r\n{\r\n let mat = ColorMaterial.GetLineMaterial(1);\r\n let lines: Object3D[] = [];\r\n\r\n let upShape = new Shape(Contour.CreateContour(en3D.ContourCurve));\r\n let downShape = new Shape(Contour.CreateContour(en3D.ContourCurve));\r\n\r\n if (en3D instanceof Board)\r\n {\r\n for (let m of en3D.BoardModeling)\r\n {\r\n let geo = new BufferGeometry().setFromPoints(m.shape.Shape.getPoints(10));\r\n let ocs = m.shape.Outline.Curve.OCS;\r\n let cloneShape = m.shape.Clone();\r\n cloneShape.Outline.Curve.Position = cloneShape.Outline.Curve.Position.setZ(0);\r\n\r\n let isCut = false;\r\n appendLines(m.shape.Outline.Curve, en3D.Thickness, lines, mat);\r\n\r\n if (m.thickness < en3D.Thickness)\r\n {\r\n appendLines(m.shape.Outline.Curve, m.thickness, lines, mat);\r\n //正面\r\n if (m.dir === FaceDirection.Front)\r\n {\r\n let ss = upShape.SubstactBoolOperation([cloneShape]);\r\n if (ss.length > 0 && ss[0].Holes.length === 0)\r\n {\r\n upShape = ss[0];\r\n isCut = true;\r\n }\r\n }\r\n else\r\n {\r\n let ss = downShape.SubstactBoolOperation([cloneShape]);\r\n if (ss.length > 0 && ss[0].Holes.length === 0)\r\n {\r\n downShape = ss[0];\r\n isCut = true;\r\n }\r\n }\r\n }\r\n if (!isCut || m.dir === FaceDirection.Back)\r\n {\r\n let geoClone = geo.clone();\r\n geoClone.applyMatrix4(MoveMatrix(new Vector3(0, 0, m.thickness))).applyMatrix4(ocs);\r\n lines.push(new Line(geoClone, mat));\r\n }\r\n\r\n if (!isCut || m.dir === FaceDirection.Front)\r\n {\r\n lines.push(new Line(geo.applyMatrix4(ocs), mat));\r\n }\r\n }\r\n }\r\n\r\n let downGeo = new BufferGeometry().setFromPoints(downShape.Shape.getPoints(10))\r\n .applyMatrix4(en3D.ContourCurve.OCS);\r\n let upGeo = new BufferGeometry().setFromPoints(upShape.Shape.getPoints(10))\r\n .applyMatrix4(MoveMatrix(new Vector3(0, 0, en3D.Thickness)))\r\n .applyMatrix4(en3D.ContourCurve.OCS);\r\n\r\n lines.push(\r\n new Line(downGeo, mat),\r\n new Line(upGeo, mat));\r\n\r\n appendLines(en3D.ContourCurve, en3D.Thickness, lines, mat);\r\n\r\n return lines;\r\n}\r\n\r\nfunction appendLines(cu: Curve, thick: number, lines: Object3D[], mat: LineBasicMaterial)\r\n{\r\n let pts = cu.GetStretchPoints();\r\n for (let p of pts)\r\n {\r\n let geo = new Geometry().setFromPoints([p, p.clone().add(new Vector3(0, 0, thick))]);\r\n lines.push(new Line(geo, mat));\r\n }\r\n}\r\n\r\nexport function FastWireframe(br: ExtrudeSolid, color = 0)\r\n{\r\n color = color || br.ColorIndex;\r\n let material = ColorMaterial.GetLineMaterial(color);\r\n\r\n let thickness = br.Thickness;\r\n\r\n let cu = br.ContourCurve;\r\n let pts = cu.Shape.getPoints(6);\r\n\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n let edgeCoords: number[] = [];\r\n\r\n for (let p of pts)\r\n {\r\n coords.push(p.x, p.y, 0);\r\n if (p[\"_mask_\"])\r\n edgeCoords.push(p.x, p.y, 0, p.x, p.y, thickness);\r\n }\r\n for (let p of pts)\r\n coords.push(p.x, p.y, thickness);\r\n\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(edgeCoords, 3));\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n\r\n let line = new Line(geo, material);\r\n line.applyMatrix4(cu.OCS);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCS);\r\n\r\n let result = [line, edge];\r\n\r\n let ocsInv = br.OCSInv;\r\n for (let g of br.Grooves)\r\n {\r\n let m = ocsInv.clone().multiply(g.OCS);\r\n let lines = FastWireframe(g, color);\r\n for (let l of lines)\r\n {\r\n l.applyMatrix4(m);\r\n result.push(l);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\nexport function FastWireframe2(dr: ExtrudeHole, color = 0)\r\n{\r\n color = color || dr.ColorIndex;\r\n let material = ColorMaterial.GetLineMaterial(color);\r\n\r\n let height = dr.Height;\r\n\r\n let cu = dr.ContourCurve;\r\n let pts = cu.Shape.getPoints(6);\r\n\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n let edgeCoords: number[] = [];\r\n\r\n for (let p of pts)\r\n {\r\n coords.push(p.x, p.y, 0);\r\n if (p[\"_mask_\"])\r\n edgeCoords.push(p.x, p.y, 0, p.x, p.y, height);\r\n }\r\n for (let p of pts)\r\n coords.push(p.x, p.y, height);\r\n\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(edgeCoords, 3));\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n\r\n let line = new Line(geo, material);\r\n line.applyMatrix4(cu.OCS);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCS);\r\n\r\n let result = [line, edge];\r\n\r\n return result;\r\n}\r\n","import { BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayClone, arrayLast, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { FastWireframe2 } from \"../../Geometry/CreateWireframe\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/ExtrudeEdgeGeometry\";\r\nimport { AsVector3, equaln, equalv2, equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Contour } from \"../Contour\";\r\nimport { DragPointType } from \"../Entity/DragPointType\";\r\nimport { ExtrudeSolid, ExtureContourCurve } from \"../Entity/Extrude\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { Shape } from \"../Shape\";\r\nimport { OBB } from './../../Geometry/OBB/obb';\r\nimport { Hole } from \"./Hole\";\r\n\r\n@Factory\r\nexport class ExtrudeHole extends Hole\r\n{\r\n private _contourCurve: ExtureContourCurve = new Polyline();\r\n private _EdgeGeometry: BufferGeometry;\r\n protected _knifeRadius: number = 3;\r\n @AutoRecord isHole = true;\r\n @AutoRecord isThrough = false;\r\n get KnifeRadius()\r\n {\r\n return this._knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this._knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._knifeRadius = v;\r\n }\r\n }\r\n Explode()\r\n {\r\n return [this.ContourCurve.Clone().ApplyMatrix(this.OCS)];\r\n }\r\n get ContourCurve()\r\n {\r\n return this._contourCurve;\r\n }\r\n\r\n set ContourCurve(curve: ExtureContourCurve)\r\n {\r\n if (!curve.IsClose) return;\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n curve.CloseMark = true;\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n\r\n //如果曲线被旋转了,那么修正它的旋转矩阵,避免纹路错误\r\n let ocs = curve.OCS;\r\n if (!equaln(ocs.elements[0], 1))// || ocs.elements[9] || ocs.elements[10]\r\n {\r\n for (let p of pts)\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n curve.OCS = new Matrix4();\r\n }\r\n curve.ClearDraw();\r\n }\r\n\r\n this.WriteAllObjectRecord();\r\n this._contourCurve = curve;\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n CheckContourCurve()\r\n {\r\n let box = this._contourCurve.BoundingBox;\r\n\r\n //修正轮廓基点\r\n if (!equalv3(box.min, ZeroVec))\r\n {\r\n this._contourCurve.Position =\r\n this._contourCurve.Position.sub(box.min);\r\n\r\n let v = box.min.applyMatrix4(this.OCS.setPosition(ZeroVec));\r\n this._Matrix.setPosition(this.Position.add(v));\r\n }\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let cu = this.ContourCurve;\r\n cu.ApplyMatrix(this.OCS);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n this.Update();\r\n return this;\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n\r\n contour.Position = contour.Position.add(this.Normal.multiplyScalar(this.Height));\r\n pts.push(\r\n ...contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n if (snapMode === ObjectSnapMode.Mid)\r\n pts.push(...contour.GetStretchPoints().map(p => p.add(this.Normal.multiplyScalar(-this.Height / 2))));\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n get Shape()\r\n {\r\n let contour = Contour.CreateContour(this.ContourCurve.Clone(), false);\r\n\r\n return new Shape(contour);\r\n }\r\n get BoundingBoxInOCS()\r\n {\r\n let box = new Box3Ext().copy(this.ContourCurve.BoundingBox);\r\n box.max.add(new Vector3(0, 0, this.Height));\r\n return box;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = this.ContourCurve.BoundingBox;\r\n box.max.add(new Vector3(0, 0, this.Height));\r\n box.applyMatrix4(this.OCS);\r\n return box;\r\n }\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let pts = [this.ContourCurve.Shape.getPoints(6).map(AsVector3)];\r\n this._EdgeGeometry = GenerateExtrudeEdgeGeometry(pts, this.Height).applyMatrix4(this._contourCurve.OCSNoClone);\r\n return this._EdgeGeometry;\r\n }\r\n private _MeshGeometry: BufferGeometry | Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n this._MeshGeometry = this.GeneralMeshGeometry();\r\n return this._MeshGeometry;\r\n }\r\n private GeneralMeshGeometry()\r\n {\r\n let extrudeSettings: ExtrudeGeometryOptions = {\r\n curveSegments: 12,\r\n steps: 1,\r\n bevelEnabled: false,\r\n depth: this.Height,\r\n };\r\n let geo = new ExtrudeGeometry(this.ContourCurve.Shape, extrudeSettings);\r\n geo.applyMatrix4(this._contourCurve.OCS);\r\n return geo;\r\n }\r\n GetGripOrStretchPoints(dragType: DragPointType)\r\n {\r\n let isGrip = dragType === DragPointType.Grip;\r\n\r\n let pts = isGrip ? this.ContourCurve.GetGripPoints() : this.ContourCurve.GetStretchPoints();\r\n let v = new Vector3(0, 0, this.Height);\r\n pts.push(...pts.map(p => p.clone().add(v)));\r\n pts.forEach(p => { p.applyMatrix4(this.OCS); });\r\n\r\n return pts;\r\n }\r\n private GetStrectchPointCountList(dragType: DragPointType): number\r\n {\r\n return this.ContourCurve.GetDragPointCount(dragType) * 2;\r\n }\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (dragType === DragPointType.Stretch && indexList.length === this.GetStrectchPointCountList(dragType))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n arraySortByNumber(indexList);\r\n this.MoveGripOrStretchPointsOnly(indexList, vec, dragType);\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n IsStretchHeight(indexs: number[])\r\n {\r\n let count = this.ContourCurve.GetStretchPoints().length;\r\n if (indexs.length === count)\r\n {\r\n let isF = indexs[0] < count;\r\n return indexs.every(i => isF === (i < count));\r\n }\r\n return false;\r\n }\r\n MoveGripOrStretchPointsOnly(indexList: Array, vec: Vector3, dragType: DragPointType)\r\n {\r\n let stretchCount = this.ContourCurve.GetDragPointCount(dragType);\r\n\r\n if (dragType === DragPointType.Stretch)\r\n {\r\n //Move\r\n if (indexList.length === stretchCount * 2)\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n //判断是否拉伸厚度\r\n if (this.IsStretchHeight(indexList))\r\n {\r\n let isFront = indexList[0] < stretchCount;\r\n\r\n if (indexList.every(v => v < stretchCount === isFront))\r\n {\r\n //Change thickness\r\n let lvec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n if (isFront)\r\n {\r\n this.Height -= lvec.z;\r\n //移动位置而不改变内部拉槽\r\n let v = this.Normal.multiplyScalar(lvec.z);\r\n this._Matrix.elements[12] += v.x;\r\n this._Matrix.elements[13] += v.y;\r\n this._Matrix.elements[14] += v.z;\r\n }\r\n else\r\n {\r\n this.Height += lvec.z;\r\n }\r\n return;\r\n }\r\n }\r\n\r\n indexList = arrayClone(indexList);\r\n }\r\n\r\n //修正点的索引\r\n for (let i = 0; i < indexList.length; i++)\r\n {\r\n let index = indexList[i];\r\n if (index >= stretchCount)\r\n {\r\n index -= stretchCount;\r\n indexList[i] = index;\r\n }\r\n }\r\n\r\n indexList = [...new Set(indexList)];\r\n\r\n let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n\r\n if (dragType === DragPointType.Grip)\r\n {\r\n if (this.ContourCurve instanceof Polyline\r\n && indexList.length === 1\r\n && indexList[0] % 2 === 1)\r\n {\r\n let param = indexList[0] / 2;\r\n if (this.ContourCurve.GetBuilgeAt(Math.floor(param)) === 0)\r\n {\r\n let der = this.ContourCurve.GetFistDeriv(param).normalize();\r\n [der.x, der.y] = [der.y, -der.x];\r\n let d = localVec.dot(der);\r\n localVec.copy(der).multiplyScalar(d);\r\n }\r\n }\r\n this.ContourCurve.MoveGripPoints(indexList, localVec);\r\n }\r\n else\r\n this.ContourCurve.MoveStretchPoints(indexList, localVec);\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n GetStretchPoints()\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n Convert2ExtrudeSolid()\r\n {\r\n let g = new ExtrudeSolid();\r\n g.KnifeRadius = this.KnifeRadius;\r\n g.SetContourCurve(this.ContourCurve);\r\n g.Thickness = this.Height;\r\n g.ApplyMatrix(this.OCS);\r\n return g;\r\n }\r\n GetPrintObject3D()\r\n {\r\n let geometry = new LineGeometry();\r\n let lineSegments = new Float32Array(this.EdgeGeometry.attributes.position.array);\r\n let instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n geometry.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n geometry.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n let line = new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetPrintConceptualMaterial());\r\n return [line, mesh];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical || renderType === RenderType.Physical2)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(...FastWireframe2(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new Object3D().add(...this.GetPrintObject3D());\r\n }\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n\r\n if (renderType !== RenderType.Wireframe)\r\n Object3DRemoveAll(obj);\r\n\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n this.MeshGeometry;\r\n\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n obj.add(...this.GetPrintObject3D());\r\n }\r\n else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical || renderType === RenderType.Physical2)\r\n {\r\n obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Jig)\r\n obj.add(...FastWireframe2(this));\r\n\r\n return obj;\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType !== RenderType.Jig && renderType !== RenderType.Print)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n get OBB(): OBB\r\n {\r\n let size = this.ContourCurve.BoundingBox.getSize(new Vector3).setZ(this.Height);\r\n return new OBB(this.OCS, size.multiplyScalar(0.5));\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n this._contourCurve = file.ReadObject() as ExtureContourCurve;\r\n this._knifeRadius = file.Read();\r\n if (ver > 1)\r\n {\r\n this.isHole = file.Read();\r\n }\r\n if (ver > 2)\r\n this.isThrough = file.Read();\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.WriteObject(this._contourCurve);\r\n file.Write(this._knifeRadius);\r\n file.Write(this.isHole);\r\n file.Write(this.isThrough);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, curveLinkGroup, equalCurve, IRectInfo, IsRect } from \"../../Common/CurveUtils\";\r\nimport { matrixAlignCoordSys } from \"../../Common/Matrix4Utils\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { AsVector2, AsVector3, comparePoint, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\n\r\n/**\r\n * 优化走刀路径,连接偏移后的曲线数组\r\n * @param offsetCus 偏移后的曲线组\r\n * @param originShape 原始走刀形状\r\n * @param rad 刀半径\r\n * @returns tool path\r\n */\r\nexport function OptimizeToolPath(offsetCus: Curve[], originShape: Shape, rad: number): Curve[]\r\n{\r\n // 去掉最外轮廓\r\n let outline = offsetCus.shift();\r\n\r\n let plList: Polyline[] = [];\r\n let noCloseCus: Curve[] = [];\r\n for (let cu of offsetCus)\r\n {\r\n if (!cu.IsClose)\r\n {\r\n noCloseCus.push(cu);\r\n continue;\r\n }\r\n if (cu instanceof Polyline)\r\n {\r\n //轮廓朝下的逆时针轮廓需要翻转\r\n //如果走刀不止一条,第一刀为顺时针,其余为逆时针\r\n if (cu.IsClose)\r\n {\r\n if (offsetCus.length === 1)\r\n {\r\n if (cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n }\r\n else\r\n if ((cu.Normal.z * cu.Area2 < 0) === (cu !== offsetCus[0]))\r\n cu.Reverse();\r\n }\r\n plList.push(cu);\r\n }\r\n else if (cu instanceof Circle)\r\n {\r\n let c = ConverCircleToPolyline(cu);\r\n if (offsetCus.length > 1 && cu === offsetCus[0])\r\n c.Reverse();\r\n c.ColorIndex = cu.ColorIndex;\r\n plList.push(c);\r\n }\r\n else\r\n console.warn(\"错误形状\");\r\n }\r\n\r\n if (noCloseCus.length > 0)\r\n {\r\n let culist: Curve[] = [];\r\n noCloseCus.forEach(c =>\r\n {\r\n if (c instanceof Polyline)\r\n culist.push(...c.Explode() as Curve[]);\r\n else\r\n culist.push(c);\r\n });\r\n //移除相等的曲线避免重复走刀\r\n RempveEqualCurves(culist);\r\n let groups = curveLinkGroup(culist);\r\n for (let g of groups)\r\n {\r\n let pl = Polyline.Combine(g);;\r\n pl.ColorIndex = noCloseCus[0].ColorIndex;\r\n plList.push(pl);\r\n }\r\n }\r\n let dir = GetCurveToInDir(outline);\r\n let cantIntCur: Curve[] = [outline];\r\n cantIntCur.push(...GetOffsetCurves(outline, rad * dir));\r\n if (originShape.Holes.length > 0)\r\n {\r\n for (let h of originShape.Holes)\r\n {\r\n let dir = Math.sign(h.Curve.Area2);\r\n if (h.Curve instanceof Circle)\r\n dir = 1;\r\n cantIntCur.push(h.Curve, ...GetOffsetCurves(h.Curve, rad * dir));\r\n }\r\n }\r\n\r\n //曲线统一起点\r\n ChangePlListStartPt(plList);\r\n //对多段线进行排序,按最起始点远近排序\r\n SortPlByStartPt(plList);\r\n\r\n let result: Curve[] = [];\r\n let firstPl = plList[0];\r\n firstPl.CloseMark = false;\r\n\r\n for (let i = 1; i < plList.length; i++)\r\n {\r\n let ePt = firstPl.EndPoint;\r\n let isDisVail: boolean;\r\n if (plList[i].TempData?.isOut && !equalv3(ePt, plList[i].StartPoint))\r\n isDisVail = true;\r\n else\r\n {\r\n let refLine = new Line(ePt, plList[i].StartPoint);\r\n isDisVail = cantIntCur.some(c => c.IntersectWith(refLine, 0).length > 1);\r\n }\r\n\r\n if (isDisVail)\r\n {\r\n result.push(firstPl);\r\n firstPl = plList[i];\r\n firstPl.CloseMark = false;\r\n }\r\n else\r\n {\r\n let alMat = matrixAlignCoordSys(plList[i].OCS, firstPl.OCS);\r\n let cuPtsBul = plList[i].PtsBuls;\r\n\r\n for (let i = 0; i < cuPtsBul.pts.length; i++)\r\n {\r\n //坐标系对齐\r\n let p = cuPtsBul.pts[i];\r\n p.copy(AsVector2(AsVector3(p).applyMatrix4(alMat)));\r\n firstPl.LineData.push({ pt: p, bul: cuPtsBul.buls[i] });\r\n }\r\n }\r\n }\r\n result.push(firstPl);\r\n return result;\r\n}\r\n\r\n/**\r\n* 设定走刀路径起始点\r\n* 为了统一刀路起点,最外轮廓左左点为起始点,其余轮廓以最接近最外轮廓起始点的点左起始点\r\n* @param plList\r\n*/\r\nfunction ChangePlListStartPt(plList: Polyline[])\r\n{\r\n let firstPl = plList[0];\r\n if (firstPl.IsClose)\r\n {\r\n let minP = undefined;\r\n let compare = comparePoint(\"xy\");\r\n for (let p of firstPl.GetStretchPoints())\r\n {\r\n if (!minP)\r\n minP = p;\r\n else\r\n if (compare(minP, p) === 1)\r\n minP = p;\r\n }\r\n let par = firstPl.GetParamAtPoint(minP);\r\n firstPl.ResetStartPoint(par);\r\n }\r\n\r\n let firstSpt = firstPl.StartPoint;\r\n\r\n for (let i = 1; i < plList.length; i++)\r\n {\r\n let pl = plList[i];\r\n\r\n if (pl.IsClose)\r\n {\r\n let pts = pl.GetStretchPoints().sort((p1, p2) =>\r\n {\r\n let dist1 = p1.distanceToSquared(firstSpt);\r\n let dist2 = p2.distanceToSquared(firstSpt);\r\n\r\n return dist1 - dist2;\r\n });\r\n let par = pl.GetParamAtPoint(pts[0]);\r\n pl.ResetStartPoint(par);\r\n }\r\n else\r\n {\r\n let sPt = pl.StartPoint;\r\n let ePt = pl.EndPoint;\r\n let dist1 = sPt.distanceToSquared(firstSpt);\r\n let dist2 = ePt.distanceToSquared(firstSpt);\r\n if (dist1 > dist2)\r\n pl.Reverse();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 排序多段线数组,按照起点之间的距离\r\n */\r\nfunction SortPlByStartPt(pls: Polyline[]): Polyline[]\r\n{\r\n if (pls.length <= 1) return pls;\r\n\r\n let result = [pls[0]];\r\n let usedPl = new WeakSet([pls[0]]);\r\n\r\n let p = pls[0].StartPoint;\r\n while (true)\r\n {\r\n if (pls.length === result.length)\r\n break;\r\n\r\n let vaildPl: Polyline;\r\n let minDist: number = Infinity;\r\n for (let pl of pls)\r\n {\r\n if (usedPl.has(pl))\r\n continue;\r\n let dist = pl.StartPoint.distanceToSquared(p);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n vaildPl = pl;\r\n }\r\n }\r\n p = vaildPl.StartPoint;\r\n result.push(vaildPl);\r\n usedPl.add(vaildPl);\r\n }\r\n pls.length = 0;\r\n pls.push(...result);\r\n}\r\n\r\nfunction RempveEqualCurves(cus: Curve[])\r\n{\r\n let needRemoveCurve: Set = new Set();\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu1 = cus[i];\r\n if (needRemoveCurve.has(cu1)) continue;\r\n for (let j = i + 1; j < cus.length; j++)\r\n {\r\n let cu2 = cus[j];\r\n if (needRemoveCurve.has(cu2)) continue;\r\n if (equalCurve(cu1, cu2))\r\n {\r\n needRemoveCurve.add(cu2);\r\n }\r\n }\r\n }\r\n arrayRemoveIf(cus, (c) => needRemoveCurve.has(c));\r\n}\r\n\r\n/**获取内偏移的轮廓 */\r\nexport function GetOffsetCurves(cu: Curve, dist: number, rectInfo?: IRectInfo): Curve[]\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (rectInfo?.isRect)\r\n {\r\n let r = RectOffset(cu, rectInfo, Math.abs(dist));\r\n return r ? [r] : [];\r\n }\r\n return cu.GetFeedingToolPath(dist).filter(c => !equaln(c.Length, 0, 1e-5));\r\n }\r\n else\r\n return cu.GetOffsetCurves(dist);\r\n}\r\n\r\n/** 获得曲线内偏移方向*/\r\nexport function GetCurveToInDir(cu: Curve): number\r\n{\r\n return cu.IsClockWise ? 1 : -1;\r\n}\r\n\r\n/**矩形偏移,正为内偏移 */\r\nexport function RectOffset(rect: Polyline, res: IRectInfo, dist: number)\r\n{\r\n if (!res.isRect || equaln(dist, 0)) return;\r\n\r\n let box = res.box;\r\n let size = res.size;\r\n let min = box.min.clone();\r\n let max = box.max.clone();\r\n\r\n if (dist > Math.min(size.x, size.y) / 2 + 1e-2) return;\r\n\r\n if (equaln(size.x / 2, dist, 1e-5))\r\n {\r\n let x = (box.min.x + box.max.x) * 0.5;\r\n let sPt = new Vector3(x, box.min.y + dist);\r\n let ePt = new Vector3(x, box.max.y - dist);\r\n return new Polyline([{ pt: AsVector2(sPt), bul: 0 }, { pt: AsVector2(ePt), bul: 0 }]).ApplyMatrix(res.OCS);\r\n }\r\n else if (equaln(size.y / 2, dist, 1e-5))\r\n {\r\n let y = (box.min.y + box.max.y) * 0.5;\r\n let sPt = new Vector3(box.min.x + dist, y);\r\n let ePt = new Vector3(box.max.x - dist, y);\r\n return new Polyline([{ pt: AsVector2(sPt), bul: 0 }, { pt: AsVector2(ePt), bul: 0 }]).ApplyMatrix(res.OCS);\r\n }\r\n else\r\n {\r\n min.add(new Vector3(dist, dist));\r\n max.add(new Vector3(-dist, -dist));\r\n return new Polyline().RectangleFrom2Pt(min, max).ApplyMatrix(res.OCS);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, equalCurve, IsRect, MergeCurvelist } from \"../../Common/CurveUtils\";\r\nimport { LogEnable } from \"../../Common/Log\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board, IModeling } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { ShapeManager } from \"../../DatabaseServices/ShapeManager\";\r\nimport { userConfig } from \"../../Editor/UserConfig\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { Route } from \"../../Geometry/CurveMap\";\r\nimport { GetSideFaceMtx } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { angleTo, AsVector2, equaln, isParallelTo, MoveMatrix, XAxis } from \"../../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../../Geometry/RegionParse\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { FaceDirection } from \"../../UI/Store/BoardInterface\";\r\nimport { BoolOpeartionType, isTargetCurInOrOnSourceCur } from \"../BoolOperateUtils\";\r\nimport { GetSealedBoardContour } from \"../CalcEdgeSealing\";\r\nimport { GetCurveToInDir, GetOffsetCurves, OptimizeToolPath } from \"./OptimizeToolPath\";\r\n\r\n/**\r\n *计算走刀工具类\r\n */\r\nexport class FeedingToolPath extends Singleton\r\n{\r\n /**\r\n * 处理形状,内偏移\r\n * @param shape 造型Shape\r\n * @param knifRadius 刀半径/偏移距离\r\n * @param [isOut=true] 是否是最外轮廓,如果是,洞需要外偏移一个刀半径,多段线偏移保留不闭合轮廓\r\n */\r\n private HandleShape(shape: Shape, knifRadius: number, isOut = true): Curve[]\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (isOut)\r\n outline = outline.Clone();\r\n\r\n\r\n let dir = GetCurveToInDir(outline);\r\n\r\n let offsetCus: Curve[] = [outline];\r\n //获得形状外孔轮廓\r\n let holes: Contour[] = [];\r\n /**用于判断孤岛是否与外轮廓相交 */\r\n let holeOffsetCus: Curve[] = [];\r\n\r\n for (let h of shape.Holes)\r\n {\r\n if (!isOut)\r\n holes.push(h.Clone());\r\n else\r\n {\r\n let dir = -GetCurveToInDir(h.Curve);\r\n let cus: Curve[];\r\n if (h.Curve instanceof Circle)\r\n cus = h.Curve.GetOffsetCurves(knifRadius * dir);\r\n else\r\n cus = h.Curve.GetFeedingToolPath(knifRadius * dir);\r\n\r\n holeOffsetCus.push(...h.Curve.GetOffsetCurves(knifRadius * dir).filter(c => c.IsClose));\r\n\r\n holes.push(...this.GetContours(cus as Polyline[], offsetCus));\r\n }\r\n }\r\n\r\n let offsetDist = 0;\r\n\r\n let rectInfo = IsRect(outline);\r\n\r\n while (true)\r\n {\r\n if ((!isOut || offsetDist >= knifRadius) && rectInfo.isRect)\r\n offsetDist += knifRadius * 2;\r\n else\r\n offsetDist += knifRadius;\r\n\r\n let retCus: Curve[] = [];\r\n\r\n let tempOffsetCus = GetOffsetCurves(outline, offsetDist * dir, rectInfo);\r\n retCus.push(...tempOffsetCus);\r\n\r\n //最后一次内偏移如果是矩形,需在偏移一个刀半径避免没切到中心\r\n if (retCus.length === 0 && rectInfo.isRect && offsetDist > knifRadius)\r\n {\r\n offsetDist -= knifRadius;\r\n retCus.push(...GetOffsetCurves(outline, offsetDist * dir, rectInfo));\r\n }\r\n\r\n if (retCus.length === 0) break;\r\n //是否和孤岛相交\r\n let isInt = false;\r\n for (let c of retCus)\r\n {\r\n if (holes.length > 0)\r\n {\r\n isInt = holes.some(h => h.Curve.IntersectWith(c, 0).length > 0 || h.CuInOutline(c));\r\n if (isInt) break;\r\n }\r\n if (isOut && offsetDist === knifRadius)\r\n c.TempData = { isOut: true };\r\n offsetCus.push(c);\r\n }\r\n if (isInt)\r\n {\r\n //洞形状管理器\r\n let holesMg = new ShapeManager();\r\n if (isOut)\r\n holes = Shape.mergeContours(holes, false); //#I1MUQD 正好擦边的孔不合并\r\n holesMg.AppendShapeList(holes.map(h => new Shape(h)));\r\n let shapeMg = new ShapeManager();\r\n let cons = this.GetContours(retCus as Polyline[], offsetCus);\r\n shapeMg.AppendShapeList(cons.map(c => new Shape(c)));\r\n shapeMg.BoolOper(holesMg, BoolOpeartionType.Subtract);\r\n for (let s of shapeMg.ShapeList)\r\n {\r\n if (isOut && tempOffsetCus.length > 1)\r\n s.Outline.Curve.TempData = { isOut: true };\r\n offsetCus.push(...this.HandleShape(s, knifRadius, false));\r\n }\r\n break;\r\n }\r\n }\r\n let vailHoles: Contour[] = [];\r\n\r\n for (let i = 0; i < holes.length; i++)\r\n {\r\n let h = holes[i];\r\n //如果加工洞外圈和最外轮廓相交,则去掉\r\n if (h.Curve.IntersectWith(outline, 0).length > 0)\r\n continue;\r\n let isVail = true;\r\n //若最外轮廓内偏移一个刀半径的曲线 和最内轮廓相交或者被包含,则去掉.且不与洞曲线相等\r\n if (isOut)\r\n {\r\n let outlineOffsetCus = outline.GetOffsetCurves(dir * knifRadius).filter(c => c.IsClose) as Curve[];\r\n let outlineCus = GetOffsetCurves(outline, dir * knifRadius).filter(c => c.IsClose) as Curve[];;\r\n let ho = holeOffsetCus[i];\r\n let maxArea = Math.max(...(outlineOffsetCus.map(c => c.Area)));\r\n for (let j = 0; j < outlineOffsetCus.length; j++)\r\n {\r\n let c = outlineOffsetCus[j];\r\n if (h.Curve.IntersectWith(outlineCus[j], 0).length > 0)\r\n {\r\n if (!(equalCurve(ho, c) || isTargetCurInOrOnSourceCur(c as Polyline, h.Curve)))\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n else if (isTargetCurInOrOnSourceCur(h.Curve, c as Polyline))\r\n {\r\n offsetCus.push(c);\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n else if (ho.Area > maxArea)\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n }\r\n if (isVail)\r\n vailHoles.push(h);\r\n }\r\n\r\n offsetCus.push(...vailHoles.map(h => h.Curve));\r\n return offsetCus;\r\n }\r\n /**用于测试走刀路径 */\r\n TestCalcPath(br: Board, isCd = false)\r\n {\r\n let modelings = br.BoardModeling;\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n modelings.push(...allModeling.modeling);\r\n if (isCd && userConfig.chaidanOption.useDefaultRad)\r\n modelings.forEach(m => m.knifeRadius = userConfig.chaidanOption.radius);\r\n if (isCd)\r\n arrayRemoveIf(modelings, m =>\r\n {\r\n let c = m.shape.Outline.Curve;\r\n if (c instanceof Circle && c.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n return true;\r\n return false;\r\n });\r\n\r\n let cus = this.CalcPath(modelings, br);\r\n //不同走刀路径区分颜色\r\n cus.forEach((c, i) => c.ColorIndex = (i + 1 === 8 || i + 1 === 18 || i + 1 === 19) ? i + 2 : i + 1);\r\n let outline = br.ContourCurve as Polyline;\r\n let dir = Math.sign(outline.Area2);\r\n let sideOutlines: Polyline[] = [];\r\n //优化侧面造型模拟走刀位置\r\n for (let m of allModeling.sideModeling)\r\n {\r\n let c = outline.GetCurveAtIndex(m.dir);\r\n let derv = c.GetFistDeriv(0);\r\n if (dir < 0)\r\n derv.negate();\r\n let mat = MoveMatrix(dir > 0 ? c.StartPoint : c.EndPoint)\r\n .multiply(new Matrix4().makeRotationZ(angleTo(XAxis, derv)))\r\n .multiply(MoveMatrix(new Vector3(0, -br.Thickness)));\r\n m.shape.ApplyMatrix(mat);\r\n let pl = new Polyline().RectangleFrom2Pt(new Vector3(), new Vector3(c.Length, br.Thickness));\r\n pl.ColorIndex = 6;\r\n pl.ApplyMatrix(mat);\r\n sideOutlines.push(pl);\r\n }\r\n\r\n cus.push(...this.CalcPath(allModeling.sideModeling, br));\r\n //加入板件轮廓\r\n cus.unshift(br.ContourCurve.Clone());\r\n if (cus.length === 1)\r\n return cus;\r\n //加入造型外轮廓和洞\r\n for (let { shape, thickness } of modelings)\r\n {\r\n let outline = shape.Outline.Curve.Clone();\r\n outline.Position = outline.Position.setZ(0);\r\n outline.ColorIndex = 8;\r\n cus.push(outline);\r\n if (thickness < br.Thickness)\r\n {\r\n cus.push(...shape.Holes.map(h =>\r\n {\r\n let c = h.Curve.Clone();\r\n c.Position = c.Position.setZ(0);\r\n c.ColorIndex = 8;\r\n return c;\r\n }));\r\n }\r\n }\r\n cus.push(...sideOutlines);\r\n return cus;\r\n }\r\n /**\r\n * 计算走刀路径\r\n */\r\n CalcPath(modelings: IModeling[], br: Board): Curve[]\r\n {\r\n let cus: Curve[] = [];\r\n for (let m of modelings)\r\n {\r\n cus.push(...this.GetModelFeedPath(br, m));\r\n }\r\n return cus;\r\n }\r\n GetModelFeedPath(br: Board, m: IModeling): Curve[]\r\n {\r\n const brThickness = br.Thickness;\r\n let cus: Curve[] = [];\r\n let { shape, thickness, knifeRadius, addLen, addWidth, addDepth } = m;\r\n if (!knifeRadius) knifeRadius = 3;\r\n if (addDepth)\r\n thickness += addDepth;\r\n shape = shape.Clone();\r\n shape.Z0();\r\n this.GrooveAddSize(shape, addLen, addWidth);\r\n this.HandleThoughGroove(br, shape, knifeRadius);\r\n\r\n //造型半径和刀半径相等,返回重合点的线\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle && equaln(outline.Radius, m.knifeRadius))\r\n return [new Polyline([{ pt: AsVector2(outline.Center), bul: 0 }, { pt: AsVector2(outline.Center), bul: 0 }])];\r\n\r\n if (thickness >= brThickness)\r\n {\r\n //通孔只切一刀\r\n let dir = GetCurveToInDir(outline);\r\n let paths: Curve[];\r\n if (outline instanceof Circle)\r\n outline = ConverCircleToPolyline(outline);\r\n\r\n paths = outline.GetFeedingToolPath(dir * knifeRadius);\r\n for (let path of paths)\r\n {\r\n if (dir < 0)\r\n path.Reverse();\r\n\r\n // 有些走刀会变成一条线,或者某些地方退化成线,这个时候这个判断是错误的\r\n // if (!path.IsClockWise)\r\n // throw \"程序错误:全深网洞加工数据并不为逆时针!\";\r\n }\r\n cus.push(...paths);\r\n }\r\n else\r\n {\r\n let offsetCus = this.HandleShape(shape, knifeRadius);\r\n if (offsetCus.length > 1)\r\n cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius));\r\n }\r\n return cus;\r\n }\r\n private GrooveAddSize(shape: Shape, addLen: number, addWidth: number)\r\n {\r\n shape.Outline.Curve.Position = shape.Outline.Curve.Position.setZ(0);\r\n //若是矩形,应用槽加长\r\n if (addLen > 0 || addWidth > 0)\r\n {\r\n let curveData = IsRect(shape.Outline.Curve);\r\n if (curveData.isRect)\r\n {\r\n let box = curveData.box;\r\n let size = curveData.size;\r\n if (size.x > size.y)\r\n {\r\n box.max.add(new Vector3(addLen / 2, addWidth / 2));\r\n box.min.add(new Vector3(-addLen / 2, -addWidth / 2));\r\n }\r\n else\r\n {\r\n box.max.add(new Vector3(addWidth / 2, addLen / 2));\r\n box.min.add(new Vector3(-addWidth / 2, -addLen / 2));\r\n }\r\n let pl = new Polyline().RectangleFrom2Pt(box.min, box.max).ApplyMatrix(curveData.OCS);\r\n shape.Outline = Contour.CreateContour(pl);\r\n }\r\n }\r\n }\r\n private GetContours(cus: (Polyline | Circle)[], retCus: Curve[])\r\n {\r\n let cons: Contour[] = [];\r\n for (let c of cus)\r\n {\r\n if (c.IsClose)\r\n {\r\n cons.push(Contour.CreateContour(c));\r\n }\r\n else\r\n {\r\n let expCus = c.Explode() as Curve[];\r\n let regParse = new RegionParse(expCus);\r\n\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c && c.Area > 1e-3)\r\n cons.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n for (let c of expCus)\r\n {\r\n if (!regParse.GetCueveUsed(c))\r\n {\r\n retCus.push(c);\r\n }\r\n }\r\n\r\n }\r\n }\r\n return cons;\r\n }\r\n CheckModeling(br: Board)\r\n {\r\n let errorIndexs: number[] = [];\r\n let modelings = br.BoardModeling;\r\n for (let i = 0; i < modelings.length; i++)\r\n {\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n modelings[i].knifeRadius = userConfig.chaidanOption.radius;\r\n let cus = this.GetModelFeedPath(br, modelings[i]);\r\n if (cus.length === 0)\r\n errorIndexs.push(i);\r\n }\r\n return errorIndexs;\r\n }\r\n CheckCustomHole(br: Board)\r\n {\r\n let { modeling, sideModeling } = GetModelingFromCustomDrill(br);\r\n\r\n let errHoles: ExtrudeHole[] = [];\r\n\r\n for (let m of [...modeling, ...sideModeling])\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n let cus = this.GetModelFeedPath(br, m);\r\n if (cus.length === 0)\r\n errHoles.push(m.originEn);\r\n }\r\n\r\n return errHoles;\r\n }\r\n HandleThoughGroove(br: Board, shape: Shape, knifeRadius: number)\r\n {\r\n let brCon = br.ContourCurve;\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle) return;\r\n\r\n let cus = outline.Explode();\r\n MergeCurvelist(cus);\r\n let hasChange = false;\r\n let curveBak: Curve;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n if (c instanceof Line)\r\n {\r\n let mp = (curveBak ?? c).Midpoint;\r\n curveBak = undefined;\r\n if (brCon.PtOnCurve(mp))\r\n {\r\n hasChange = true;\r\n let cs = c.GetOffsetCurves(knifeRadius);\r\n cus[i] = cs[0];\r\n let fline = cus[FixIndex(i - 1, cus.length)];\r\n\r\n let isAddLine = false;\r\n\r\n if (fline instanceof Line)\r\n {\r\n let intPts = fline.IntersectWith2(cs[0], 3);\r\n if (intPts.length === 0)\r\n {\r\n console.error(\"未知错误情况\");\r\n return;\r\n }\r\n\r\n if (intPts[0].thisParam >= 0 && intPts[0].argParam <= 1)\r\n {\r\n fline.EndPoint = intPts[0].pt;\r\n cs[0].StartPoint = intPts[0].pt;\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n\r\n if (isAddLine)\r\n {\r\n let newLine = new Line(fline.EndPoint, cs[0].StartPoint);\r\n if (i === 0)\r\n {\r\n cus.push(newLine);\r\n }\r\n else\r\n {\r\n cus.splice(i, 0, newLine);\r\n i++;\r\n }\r\n }\r\n\r\n let backLine = cus[FixIndex(i + 1, cus.length)];\r\n\r\n isAddLine = false;\r\n\r\n if (backLine instanceof Line)\r\n {\r\n let intPts = backLine.IntersectWith2(cs[0], 3);\r\n if (intPts.length === 0)\r\n {\r\n if (LogEnable.Display)\r\n console.error(\"未知错误情况\");\r\n return;\r\n }\r\n\r\n if (intPts[0].thisParam <= 1 && intPts[0].argParam >= 0)\r\n {\r\n curveBak = backLine.Clone();\r\n backLine.StartPoint = intPts[0].pt;\r\n cs[0].EndPoint = intPts[0].pt;\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n if (isAddLine)\r\n {\r\n let newLine = new Line(cs[0].EndPoint, backLine.StartPoint);\r\n if (i + 1 === cus.length)\r\n {\r\n cus.unshift(newLine);\r\n }\r\n else\r\n {\r\n cus.splice(i + 1, 0, newLine);\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (hasChange)\r\n {\r\n let con = Contour.CreateContour(Polyline.Combine(cus));\r\n if (con)\r\n shape.Outline = con;\r\n else\r\n console.error(\"错误\");\r\n }\r\n }\r\n}\r\nexport function GetModelingFromCustomDrill(br: Board)\r\n{\r\n let normal = br.Normal;\r\n let outline = GetSealedBoardContour(br, true) as Polyline;\r\n\r\n let modeling: (IModeling & { originEn: ExtrudeHole; })[] = [];\r\n let sideModeling: (IModeling & { originEn: ExtrudeHole; })[] = [];\r\n\r\n const holes: ExtrudeHole[] = [];\r\n let bbox = br.BoundingBoxInOCS;\r\n\r\n let holeBoxMap = new WeakMap();\r\n\r\n for (let [, idss] of br.DrillList)\r\n {\r\n for (let ids of idss)\r\n {\r\n for (let id of ids)\r\n {\r\n if (id?.Object && !id.Object.IsErase && id.Object instanceof ExtrudeHole && id.Object.isHole)\r\n {\r\n if (!(id.Object.ContourCurve instanceof Circle))\r\n {\r\n let en = id.Object as ExtrudeHole;\r\n let enBox = en.GetBoundingBoxInMtx(br.OCSInv);\r\n holeBoxMap.set(en, enBox);\r\n if (enBox.clone().intersect(bbox).isSolid(0.1))\r\n holes.push(id.Object);\r\n }\r\n }\r\n else break;\r\n }\r\n }\r\n }\r\n\r\n\r\n for (let en of holes)\r\n {\r\n let box = holeBoxMap.get(en);\r\n let max = box.max;\r\n let min = box.min;\r\n let dir: FaceDirection;\r\n let shape = en.Shape;\r\n let diff = br.OCSInv.multiply(en.OCS);\r\n shape.ApplyMatrix(diff);\r\n let thickness: number;\r\n if (isParallelTo(normal, en.Normal))\r\n {\r\n if (min.z > br.Thickness - 1e-6) continue;\r\n\r\n //在板件的世界,0.01的误差应该不能被看出来,所以我们允许0.01的容差(这样应该是没问题的)\r\n //也避免了一些二维转三维出现的缝隙排钻不能被拆解的问题\r\n if (max.z >= br.Thickness - 1e-2)//较大的容差(0.01)\r\n {\r\n dir = FaceDirection.Front;\r\n shape.Position = shape.Position.setZ(min.z);\r\n thickness = br.Thickness - min.z;\r\n }\r\n else if (min.z < 1e-2)//较大的容差\r\n {\r\n dir = FaceDirection.Back;\r\n thickness = max.z;\r\n }\r\n else\r\n continue;\r\n\r\n if (thickness > +1e-6 && isTargetCurInOrOnSourceCur(outline, shape.Outline.Curve.Clone().Z0()))\r\n {\r\n modeling.push({\r\n shape,\r\n thickness,\r\n dir,\r\n knifeRadius: en.KnifeRadius,\r\n addLen: 0,\r\n originEn: en,\r\n });\r\n }\r\n }\r\n else\r\n {\r\n if (min.z <= 0 || max.z >= br.Thickness) continue;\r\n let spt = en.Position.applyMatrix4(br.OCSInv).setZ(0);\r\n\r\n if (outline.PtOnCurve(spt)) continue;\r\n let line = new Line(spt, en.Position.add(en.Normal.multiplyScalar(en.Height)).applyMatrix4(br.OCSInv).setZ(0));\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt) continue;\r\n\r\n let index = Math.floor(outline.GetParamAtPoint(pt));\r\n let thickness = line.StartPoint.distanceTo(pt);\r\n\r\n let shape = en.Shape.ApplyMatrix(en.OCS).ApplyMatrix(br.OCSInv);\r\n let vec = line.GetFistDeriv(0).normalize().multiplyScalar(thickness);\r\n shape.Position = shape.Position.add(vec);\r\n\r\n let cu = outline.GetCurveAtIndex(index);\r\n\r\n shape.ApplyMatrix(new Matrix4().getInverse(GetSideFaceMtx(cu)));\r\n sideModeling.push({\r\n shape,\r\n thickness,\r\n dir: index,\r\n knifeRadius: en.KnifeRadius,\r\n addLen: 0,\r\n originEn: en,\r\n });\r\n }\r\n }\r\n\r\n return { modeling, sideModeling };\r\n}\r\n"],"names":["Shape","Plane","TLine","TShape","BufferGeometryUtils2","cache","FixIndex","Line"],"mappings":"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C;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG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"} \ No newline at end of file +{"version":3,"file":"api.esm.js","sources":["../src/DatabaseServices/CADFactory.ts","../src/DatabaseServices/AllObjectData.ts","../src/DatabaseServices/AutoRecord.ts","../src/DatabaseServices/EraseEntityData.ts","../src/DatabaseServices/CADObject.ts","../src/DatabaseServices/ObjectId.ts","../src/ApplicationServices/HostApplicationServices.ts","../src/Common/Dispose.ts","../src/Geometry/CoordinateSystem.ts","../src/Common/eval.ts","../src/Common/StoreageKeys.ts","../src/Common/Utils.ts","../src/Geometry/GeUtils.ts","../src/Common/Matrix4Utils.ts","../src/Common/Status.ts","../src/GraphicsSystem/RenderType.ts","../src/Common/SystemEnum.ts","../src/Editor/UserConfig.ts","../src/Geometry/Box.ts","../src/DatabaseServices/Entity/Entity.ts","../src/DatabaseServices/CADFiler.ts","../src/GLSL/GoochShader.ts","../src/Common/ColorPalette.ts","../src/Common/ArrayExt.ts","../src/Editor/ObjectSnapMode.ts","../src/Editor/BufferGeometry2GeometryCacheMap.ts","../src/Geometry/BufferGeometryUtils.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/Matrix2.ts","../src/Geometry/RotateUV.ts","../src/ApplicationServices/mesh/createBoard.ts","../src/Geometry/CurveMap.ts","../src/Geometry/RegionParse.ts","../src/GraphicsSystem/BoolOperateUtils.ts","../src/DatabaseServices/Entity/Curve.ts","../src/DatabaseServices/Contour.ts","../src/Geometry/Plane.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Line.ts","../src/GraphicsSystem/OffsetPolyline.ts","../src/DatabaseServices/PointInPolyline.ts","../src/DatabaseServices/Entity/DragPointType.ts","../src/DatabaseServices/Entity/Polyline.ts","../src/GraphicsSystem/IntersectWith.ts","../src/DatabaseServices/Entity/Circle.ts","../src/Geometry/Count.ts","../src/Geometry/Orbit.ts","../src/Common/CurveUtils.ts","../src/DatabaseServices/Entity/Arc.ts","../src/Common/Log.ts","../src/Common/Singleton.ts","../src/Geometry/UVUtils.ts","../src/DatabaseServices/Shape.ts","../src/DatabaseServices/ShapeManager.ts","../src/DatabaseServices/Entity/Region.ts","../src/Add-on/BoardEditor/Board2Regions.ts","../src/Common/BoardKeyList.ts","../src/Add-on/BoardEditor/SerializeBoardData.ts","../src/Geometry/BoardUVGenerator.ts","../src/UI/Store/BoardInterface.ts","../src/Common/AddEntityDrawObject.ts","../src/csg/core/math/IsMirrot.ts","../src/csg/core/constants.ts","../src/csg/core/math/Vector3.ts","../src/csg/core/math/Vector2.ts","../src/csg/core/math/Vertex3.ts","../src/csg/core/math/Plane.ts","../src/csg/core/math/Polygon3.ts","../src/csg/core/trees.ts","../src/csg/core/FuzzyFactory.ts","../src/csg/core/FuzzyFactory3d.ts","../src/csg/core/utils/canonicalize.ts","../src/csg/core/utils/csgMeasurements.ts","../src/csg/core/utils.ts","../src/csg/core/math/Line2.ts","../src/csg/core/math/OrthoNormalBasis.ts","../src/csg/core/math/reTesselateCoplanarPolygons.ts","../src/csg/core/utils/retesellate.ts","../src/csg/core/CSG.ts","../src/csg/core/Geometry2CSG.ts","../src/Geometry/BSPGroupParse.ts","../src/Geometry/ExtrudeEdgeGeometry.ts","../src/Add-on/testEntity/SimplifyPolyline.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/Common/Toaster.ts","../src/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/UI/Store/WineRackInterface.ts","../src/UI/Store/BoardFindInterface.ts","../src/UI/Store/LatticeInterface.ts","../src/UI/Store/DoorInterface.ts","../src/UI/Components/RightPanel/RightPanelInterface.ts","../src/Editor/DefaultConfig.ts","../src/Nest/Common/Util.ts","../src/Geometry/SweepGeometry.ts","../src/DatabaseServices/Spline.ts","../src/Geometry/OBB/obb.ts","../src/DatabaseServices/3DSolid/SweepSolid.ts","../src/DatabaseServices/Hardware/HardwareTopline.ts","../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Common/Report.ts","../src/Common/ShowSelectObjects.ts","../src/Common/Deving.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/Production/Product.ts","../src/Geometry/CurveIntersection.ts","../src/Geometry/CreateContour2.ts","../src/Geometry/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Geometry/PointShapeUtils.ts","../src/DatabaseServices/Entity/Board.ts","../src/Geometry/CreateWireframe.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts"],"sourcesContent":["\r\n/**\r\n * CAD对象工厂,通过注册 和暴露的创建方法,动态创建对象\r\n */\r\nexport class CADFactory\r\n{\r\n private constructor() { }\r\n private objectNameMap = new Map();\r\n private static factory = new CADFactory();\r\n static RegisterObject(C: any)\r\n {\r\n this.factory.objectNameMap.set(C.name, C);\r\n }\r\n static RegisterObjectAlias(C: any, name: string)\r\n {\r\n this.factory.objectNameMap.set(name, C);\r\n }\r\n static CreateObject(name: string): any\r\n {\r\n let C = this.factory.objectNameMap.get(name);\r\n if (C) return new C();\r\n }\r\n}\r\n\r\n//可以通过添加装饰器 在类前面(@Factory),自动注册工厂的序列化\r\nexport function Factory(target: Object)\r\n{\r\n CADFactory.RegisterObject(target);\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\nimport { CADObject } from './CADObject';\r\n\r\n/**\r\n * 保存对象创建或者修改时的所有数据记录\r\n */\r\n@Factory\r\nexport class AllObjectData implements ISerialize\r\n{\r\n file: CADFiler;\r\n constructor(obj?: CADObject)\r\n {\r\n this.file = new CADFiler();\r\n if (obj)\r\n obj.WriteFile(this.file);\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n let data = file.Read();\r\n this.file.Data = data;\r\n return this;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.file.Data);\r\n return this;\r\n }\r\n}\r\n","\r\n\r\nexport const ISPROXYKEY = \"_isProxy\";\r\n\r\n/**\r\n * 自动对CADObject的属性添加属性记录器,自动调用 `WriteAllObjectRecord`\r\n * 如果属性是数组,那么自动添加`Proxy`.\r\n * 可以使用`ISPROXYKEY`覆盖这个函数的代理行为(使用CADObject.CreateProxyArray快速覆盖)\r\n *\r\n * @param target\r\n * @param property\r\n * @param [descriptor]\r\n */\r\nexport function AutoRecord(\r\n target: { WriteAllObjectRecord: () => void; },\r\n property: string,\r\n descriptor?: PropertyDecorator)\r\n{\r\n let privateKey = '__' + property;\r\n Object.defineProperty(target, property,\r\n {\r\n set: function (value)\r\n {\r\n if (value instanceof Array)\r\n {\r\n if (!this[privateKey])\r\n {\r\n if (value[ISPROXYKEY])\r\n this[privateKey] = value;\r\n else\r\n this[privateKey] = new Proxy(value, {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n this.WriteAllObjectRecord();\r\n return Reflect.set(target, key, value, receiver);\r\n },\r\n get: (target, key, receiver) =>\r\n {\r\n if (key === ISPROXYKEY)\r\n return true;\r\n //实体先被删除后在触发length = xxx\r\n if (key === \"splice\" || key === \"pop\" || key === \"shift\")\r\n this.WriteAllObjectRecord();\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n else\r\n {\r\n let arr = this[privateKey] as Array;\r\n arr.length = 0;\r\n arr.push(...value);\r\n }\r\n }\r\n else\r\n {\r\n let oldv = this[privateKey];\r\n if (oldv !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this[privateKey] = value;\r\n }\r\n }\r\n },\r\n get: function ()\r\n {\r\n return this[privateKey];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n }\r\n );\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\n@Factory\r\nexport class EraseEntityData implements ISerialize\r\n{\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.isErase = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.isErase);\r\n return this;\r\n }\r\n constructor(public isErase = true)\r\n {\r\n }\r\n}\r\n","import { iaop } from 'xaop';\r\nimport { AllObjectData } from './AllObjectData';\r\nimport { ISPROXYKEY } from './AutoRecord';\r\nimport { CADFactory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CommandHistoryRecord } from './CommandHistoryRecord';\r\nimport { Database } from './Database';\r\nimport { EraseEntityData } from './EraseEntityData';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\r\n\r\nexport abstract class CADObject\r\n{\r\n protected _Owner: ObjectId;\r\n /**\r\n * 用于储存临时数据\r\n */\r\n public TempData: any;\r\n\r\n //下面的三个数据由Rect2Board使用\r\n __CacheBox__: any;\r\n __CacheBoard__: any;\r\n __CacheSize__: any;\r\n __CachePolyline__: any;\r\n\r\n set Owner(owner: ObjectId)\r\n {\r\n this._Owner = owner;\r\n }\r\n get Owner()\r\n {\r\n return this._Owner;\r\n }\r\n\r\n Destroy()\r\n {\r\n //在效果图同步反应器中,需要知道被删除的实体的id,所以不删除这个属性\r\n // this.objectId = undefined;\r\n this._db = undefined;\r\n }\r\n\r\n //对象被彻底遗弃\r\n GoodBye(): any\r\n {\r\n this.Destroy();\r\n this.Erase(true);\r\n }\r\n\r\n /**\r\n * 当实体异步更新绘制实体完成后触发这个函数.\r\n * Application通过注入的方式得知这个事件,刷新视图显示.\r\n */\r\n @iaop\r\n AsyncUpdated()\r\n {\r\n }\r\n\r\n //-------------------------DB-------------------------\r\n protected _db: Database;\r\n get Db(): Database\r\n {\r\n return this._db;\r\n }\r\n\r\n //对象在加入数据库时,必须指定一个源数据库,否则无法读取引用id.\r\n SetDefaultDb(db: Database)\r\n {\r\n if (!this._db)\r\n this._db = db;\r\n else\r\n console.warn(\"重复设置默认Database!\");\r\n\r\n return this;\r\n }\r\n\r\n //private 私有的方法,暴露给Db的添加对象,方法使用.\r\n //只用对象加入到db中,我们才初始化ObjectId.\r\n //从db池中分配id给自身使用. 除非你创建对象往db里面加,否则不要调用该方法\r\n SetOwnerDatabase(db: Database)\r\n {\r\n if (!this._db)\r\n {\r\n this._db = db;\r\n this.objectId = db.AllocateId();\r\n this.objectId.Object = this;\r\n }\r\n else\r\n console.warn(\"重复设置源Database!\");\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * WblockClone 的时候,id是db分配的,此刻我们只需要设置它的db\r\n */\r\n SetDatabase(db: Database)\r\n {\r\n this._db = db;\r\n }\r\n\r\n //-------------------------DB End-------------------------\r\n\r\n // -------------------------isErase-------------------------\r\n protected _isErase: boolean = false;\r\n get IsErase(): boolean\r\n {\r\n return this._isErase;\r\n }\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this._isErase)\r\n return;\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n undoData.CreateEraseHistory(this, isErase);\r\n this._isErase = isErase;\r\n }\r\n //-------------------------isErase End-------------------------\r\n\r\n // -------------------------id-------------------------\r\n\r\n //操作这个需要谨慎!\r\n objectId: ObjectId;\r\n\r\n get Id(): ObjectId\r\n {\r\n return this.objectId;\r\n }\r\n\r\n // -------------------------id End-------------------------\r\n\r\n // -------------------------File-------------------------\r\n\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n //write Id;\r\n let id = file.ReadObjectId();\r\n if (!this.objectId && id)//避免CopyFrom时错误的修改自身Id\r\n {\r\n this.objectId = id;\r\n id.Object = this;\r\n }\r\n this._isErase = file.Read();\r\n if (ver > 1)\r\n this.Owner = file.ReadObjectId();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.WriteObjectId(this.objectId);\r\n file.Write(this._isErase);\r\n file.WriteObjectId(this.Owner);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: ISerialize)\r\n {\r\n if (undoData instanceof AllObjectData)\r\n {\r\n undoData.file.database = this._db;\r\n undoData.file.Reset();\r\n this.ReadFile(undoData.file);\r\n }\r\n else if (undoData instanceof EraseEntityData)\r\n {\r\n this.Erase(undoData.isErase);\r\n }\r\n }\r\n\r\n //撤销所保存的位置\r\n UndoRecord(): CommandHistoryRecord\r\n {\r\n if (this._db && this.objectId)\r\n return this._db.hm.UndoData;\r\n }\r\n //写入所有的对象数据 以便还原对象\r\n WriteAllObjectRecord(): boolean\r\n {\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n {\r\n undoData.WriteObjectSnapshoot(this);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //复制出一个实体,如果存在关联,则指向原关联实体\r\n Clone(): this\r\n {\r\n let newObject = CADFactory.CreateObject(this.constructor.name) as this;\r\n\r\n //备份\r\n let bakId = this.objectId;\r\n this.objectId = undefined;\r\n\r\n let file = new CADFiler();\r\n file.database = this._db;\r\n this.WriteFile(file);\r\n file.Reset();\r\n newObject.ReadFile(file);\r\n\r\n newObject.objectId = undefined;\r\n newObject._db = undefined;\r\n\r\n this.objectId = bakId;\r\n return newObject;\r\n }\r\n\r\n DeepClone(\r\n ownerObject: CADObject,\r\n cloneObejct: CADObject,\r\n idMaping: Map = undefined,\r\n isPrimary = true\r\n ): this\r\n {\r\n return this;\r\n }\r\n\r\n //从一个实体拷贝数据,实体类型必须相同.\r\n CopyFrom(obj: CADObject)\r\n {\r\n let idBak = this.objectId;\r\n let ownerBak = this._Owner;\r\n this.WriteAllObjectRecord();\r\n let f = new CADFiler();\r\n obj.WriteFile(f);\r\n this.ReadFile(f);\r\n this.objectId = idBak;\r\n this._Owner = ownerBak;\r\n }\r\n\r\n //-------------------------File End-------------------------\r\n\r\n //Utils\r\n /**\r\n * 配合 `@AutoRecord` 使用\r\n * 使用这个方法来覆盖AutoRecord的监听行为.\r\n * 这个行为只能用来监听实体添加和实体修改.\r\n * 实体删除行为暂时无法监听\r\n * @param setCallback 设置新的实体到数组时的回调函数\r\n */\r\n protected CreateProxyArray(setCallback: (v: any) => void)\r\n {\r\n return new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n setCallback(value);\r\n }\r\n return Reflect.set(target, key, value, receiver);\r\n },\r\n get: (target, key, receiver) =>\r\n {\r\n if (key === ISPROXYKEY)\r\n return true;\r\n //实体先被删除后在触发length = xxx\r\n if (key === \"splice\" || key === \"pop\" || key === \"shift\")\r\n {\r\n this.WriteAllObjectRecord();\r\n setCallback(undefined);\r\n }\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n}\r\n","import { CADObject } from './CADObject';\r\n\r\nexport enum RelevancyType\r\n{\r\n General = 0,\r\n Soft = 1,\r\n Hard = 2,\r\n}\r\n\r\n/*\r\nCADObject对象拥有Id属性,用来记录引用关系.\r\n通过id可以得到对应的关联实体,或者记录实体的关联关系.\r\n\r\nObjectId必须使用 Database分配(db里面会存id的列表,以便同时更新id指向实体)\r\n\r\n*/\r\nexport class ObjectId\r\n{\r\n _RelevancyType = RelevancyType.General;\r\n constructor(private index = 0, private obj?: CADObject)\r\n {\r\n }\r\n\r\n get IsErase(): boolean\r\n {\r\n return !this.obj || this.obj.IsErase;\r\n }\r\n set Object(obj: CADObject)\r\n {\r\n this.obj = obj;\r\n }\r\n get Object(): CADObject\r\n {\r\n return this.obj;\r\n }\r\n get Index(): number\r\n {\r\n return this.index;\r\n }\r\n set Index(index: number)\r\n {\r\n this.index = index;\r\n }\r\n}\r\n","import { ApplicationService } from './Application';\r\nimport { MeshBasicMaterial, MeshStandardMaterial } from 'three';\r\n\r\ninterface IHostApplicationServices\r\n{\r\n Application?: ApplicationService;\r\n DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n UseShadow?: boolean;\r\n ShowHistoryLog?: boolean;\r\n}\r\n\r\nexport let HostApplicationServices: IHostApplicationServices = { ShowHistoryLog: true };\r\n","import { Object3D } from \"three\";\r\n\r\n/**\r\n * 销毁Object对象的Geometry,并不会销毁材质(新版本销毁材质,好像问题不大?)\r\n */\r\nexport function DisposeThreeObj(obj: Object3D)\r\n{\r\n for (let o of obj.children)\r\n {\r\n let oany = o as any;\r\n //文字的geometry缓存保留下来\r\n if (oany.geometry && oany.geometry.name !== \"Text\")\r\n oany.geometry.dispose();\r\n\r\n if (oany.material)\r\n if (Array.isArray(oany.material))\r\n {\r\n for (let m of oany.material)\r\n m.dispose();\r\n }\r\n else\r\n {\r\n oany.material.dispose();\r\n }\r\n\r\n DisposeThreeObj(o);\r\n\r\n // 下面这个代码可能导致Object3d无法复用,删除它应该问题不大\r\n // o.parent = null;\r\n // o.dispatchEvent({ type: \"removed\" });\r\n }\r\n // 下面这个代码可能导致Object3d无法复用,删除它应该问题不大\r\n // obj.children.length = 0;\r\n return obj;\r\n}\r\n\r\nexport function Object3DRemoveAll(obj: Object3D)\r\n{\r\n for (let o of obj.children)\r\n {\r\n o.parent = null;\r\n o.dispatchEvent({ type: \"removed\" });\r\n }\r\n obj.children.length = 0;\r\n return obj;\r\n}\r\n","import { Matrix4, Vector3 } from 'three';\r\n\r\n/**\r\n * 坐标系运算.\r\n */\r\nexport class CoordinateSystem\r\n{\r\n Postion: Vector3;\r\n XAxis: Vector3;\r\n YAxis: Vector3;\r\n ZAxis: Vector3;\r\n\r\n constructor(postion?: Vector3, xAxis?: Vector3, yAxis?: Vector3, zAxis?: Vector3)\r\n {\r\n this.Postion = postion || new Vector3(0, 0, 0);\r\n this.XAxis = xAxis || new Vector3(1, 0, 0);\r\n this.YAxis = yAxis || new Vector3(0, 1, 0);\r\n this.ZAxis = zAxis || new Vector3(0, 0, 1);\r\n }\r\n\r\n applyMatrix4(mat4: Matrix4)\r\n {\r\n this.Postion.applyMatrix4(mat4);\r\n let roMat = mat4.clone().setPosition(new Vector3());\r\n this.XAxis.applyMatrix4(roMat);\r\n this.YAxis.applyMatrix4(roMat);\r\n this.ZAxis.applyMatrix4(roMat);\r\n return this;\r\n }\r\n\r\n getMatrix4(): Matrix4\r\n {\r\n let m = new Matrix4();\r\n m.makeBasis(this.XAxis, this.YAxis, this.ZAxis);\r\n m.setPosition(this.Postion);\r\n return m;\r\n }\r\n CopyForm(mat4: Matrix4)\r\n {\r\n this.Postion.setFromMatrixPosition(mat4);\r\n mat4.extractBasis(this.XAxis, this.YAxis, this.ZAxis);\r\n return this;\r\n }\r\n\r\n extractBasis(xAxisA: Vector3, yAxisA: Vector3, zAxisA: Vector3)\r\n {\r\n xAxisA.copy(this.XAxis);\r\n yAxisA.copy(this.YAxis);\r\n zAxisA.copy(this.ZAxis);\r\n }\r\n copy(cs: CoordinateSystem): CoordinateSystem\r\n {\r\n this.Postion.copy(cs.Postion);\r\n this.XAxis.copy(cs.XAxis);\r\n this.YAxis.copy(cs.YAxis);\r\n this.ZAxis.copy(cs.ZAxis);\r\n return this;\r\n }\r\n clone()\r\n {\r\n let r = new CoordinateSystem();\r\n r.Postion = this.Postion.clone();\r\n r.XAxis = this.XAxis.clone();\r\n r.YAxis = this.YAxis.clone();\r\n r.ZAxis = this.ZAxis.clone();\r\n return r;\r\n }\r\n}\r\n","import { equaln } from \"../Geometry/GeUtils\";\r\nimport { clamp as CLAMP, FixedNotZero } from \"./Utils\";\r\n\r\nlet abs = Math.abs;\r\nlet acos = Math.acos;\r\nlet acosh = Math.acosh;\r\nlet asin = Math.asin;\r\nlet asinh = Math.asinh;\r\nlet atan = Math.atan;\r\nlet atanh = Math.atanh;\r\nlet atan2 = Math.atan2;\r\nlet ceil = Math.ceil;\r\nlet cbrt = Math.cbrt;\r\nlet expm1 = Math.expm1;\r\nlet clz32 = Math.clz32;\r\nlet cos = Math.cos;\r\nlet cosh = Math.cosh;\r\nlet exp = Math.exp;\r\nlet floor = Math.floor;\r\nlet fround = Math.fround;\r\nlet hypot = Math.hypot;\r\nlet imul = Math.imul;\r\nlet log = Math.log;\r\nlet log1p = Math.log1p;\r\nlet log2 = Math.log2;\r\nlet log10 = Math.log10;\r\nlet max = Math.max;\r\nlet min = Math.min;\r\nlet pow = Math.pow;\r\nlet random = Math.random;\r\nlet round = Math.round;\r\nlet sign = Math.sign;\r\nlet sin = Math.sin;\r\nlet sinh = Math.sinh;\r\nlet sqrt = Math.sqrt;\r\nlet tan = Math.tan;\r\nlet tanh = Math.tanh;\r\nlet trunc = Math.trunc;\r\nlet E = Math.E;\r\nlet LN10 = Math.LN10;\r\nlet LN2 = Math.LN2;\r\nlet LOG10E = Math.LOG10E;\r\nlet LOG2E = Math.LOG2E;\r\nlet PI = Math.PI;\r\nlet SQRT1_2 = Math.SQRT1_2;\r\nlet SQRT2 = Math.SQRT2;\r\nlet clamp = CLAMP;\r\nlet eq = equaln;\r\n\r\nlet OPERATORS = new Set([\"+\", \"-\", \"*\", \"/\"]);\r\n\r\n/**\r\n * eval2(\"+10\", { L: 100 }, \"L\")\r\n * @param expr\r\n * @param [params]\r\n * @param [defaultParam] 当输入 +10 这样的表达式时,设置默认的操作变量\r\n * @returns 计算结果\r\n */\r\nexport function eval2(expr: string, params?: {}, defaultParam?: string): number\r\n{\r\n let code = \"\";\r\n if (params)\r\n for (let name in params)\r\n code += `let ${name} = ${params[name]};`;\r\n\r\n if (defaultParam)\r\n {\r\n expr = expr.trimLeft();\r\n if (expr[0] && OPERATORS.has(expr[0]))\r\n expr = defaultParam + expr;\r\n }\r\n\r\n code += expr;\r\n\r\n let result = eval(code);\r\n\r\n if (typeof result === \"function\")\r\n return result();\r\n\r\n return Number(result);//防止bigint乱入\r\n}\r\n\r\nexport function safeEval(expr: string, params?: {}, defaultParam?: string): number\r\n{\r\n try\r\n {\r\n return eval2(expr, params);\r\n }\r\n catch (error)\r\n {\r\n return NaN;\r\n }\r\n}\r\n\r\nexport function CheckExpr(expr: string, params: any)\r\n{\r\n let resultObj = { res: undefined, error: undefined };\r\n try\r\n {\r\n resultObj.res = eval2(expr, params);\r\n }\r\n catch (error)\r\n {\r\n resultObj.error = error;\r\n }\r\n return resultObj;\r\n}\r\n\r\nconst Reg_Expr = /\\{[^\\}]+\\}/g;\r\n/**解析大括号内的 */\r\nexport function ParseExpr(expr: string, params?: {})\r\n{\r\n let strs = expr.match(Reg_Expr);\r\n if (!strs) return expr;\r\n for (let str of strs)\r\n expr = expr.replace(str, FixedNotZero(safeEval(str.slice(1, -1), params), 2));\r\n return expr;\r\n}\r\n","export enum StoreageKeys\r\n{\r\n IsLogin = \"isLogin\",\r\n PlatSession = \"platSession\",\r\n PlatToken = \"platToken\",\r\n UserName = \"userName\",\r\n UserPhone = \"userPhone\",\r\n RenderType = \"renderType\",\r\n ExactDrill = \"openExactDrill\",\r\n ConfigName = \"configName_\",\r\n IsNewErp = \"isNewErp\",\r\n RoomName = \"roomName\",\r\n LastOpenFileId = \"lastfid\",\r\n Uid = \"uid\",\r\n Goods = \"Goods_\",\r\n DrillTemp = \"drilltemp_\",\r\n DrillReactor = \"drillRreactor\",\r\n kjlConfig = \"kjl\",\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { safeEval } from \"./eval\";\r\nimport { StoreageKeys } from \"./StoreageKeys\";\r\nimport { ObjectId } from \"../DatabaseServices/ObjectId\";\r\n\r\n//仅数字构成的3位字符串(不以0开头)\r\nexport const digitStrReg = /^[^0\\D]\\d{0,2}$/;\r\nexport const commandReg = /[^A-Za-z0-9]/g;\r\n//仅可输入英文\r\nexport const onlyEnExpReg = /[^A-Za-z]/g;\r\n/**替换收口条柜名后缀 */\r\nexport const ClosingStripReg = /[左|右|上]{1}收口$/;\r\nexport const FileFormatReg = /^\\[(\\d+,){5}[(true)|(false)].+\\]$/;\r\n\r\n/**扣除封边是否相连和连接共用精度 */\r\nexport const LINK_FUZZ = 1e-3;\r\n\r\nexport function IsNumber(keyCode: number)\r\n{\r\n return (keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105);\r\n}\r\nexport function IsChar(keyCode: number)\r\n{\r\n return keyCode >= 65 && keyCode <= 90;\r\n}\r\nexport function isLetter(s: string)\r\n{\r\n let code = s.charCodeAt(0);\r\n return (code >= 97 && code <= 122) || (code >= 65 && code <= 90);\r\n}\r\nexport function isNum(s: string)\r\n{\r\n return !isNaN(safeEval(s));\r\n}\r\n\r\nexport function clamp(value: number, min: number, max: number)\r\n{\r\n return Math.max(min, Math.min(max, value));\r\n}\r\n\r\nexport function FixIndex(index: number, arr: Array | number)\r\n{\r\n let count = (arr instanceof Array) ? arr.length : arr;\r\n if (index < 0)\r\n return count + index;\r\n else if (index >= count)\r\n return index - count;\r\n else\r\n return index;\r\n}\r\n//格式化日期\r\nexport function formateDate(date: Date, fmt: string)\r\n{\r\n let o = {\r\n \"M+\": date.getMonth() + 1, //月份\r\n \"d+\": date.getDate(), //日\r\n \"h+\": date.getHours(), //小时\r\n \"m+\": date.getMinutes(), //分\r\n \"s+\": date.getSeconds(), //秒\r\n \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度\r\n \"S\": date.getMilliseconds() //毫秒\r\n };\r\n //如:yyyy\r\n if (/(y+)/.test(fmt))\r\n {\r\n fmt = fmt.replace(RegExp.$1, (date.getFullYear().toString()).substr(4 - RegExp.$1.length));\r\n }\r\n //yyyy-MM-dd hh:mm:ss\r\n for (let k in o)\r\n {\r\n if (new RegExp(\"(\" + k + \")\").test(fmt))\r\n {\r\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((\"00\" + o[k]).substr((\"\" + o[k]).length)));\r\n }\r\n }\r\n return fmt;\r\n}\r\n\r\n//判断v在v1和v2之间.(v1>v2 or v2>v1)\r\nexport function isBetweenNums(v1: number, v2: number, v: number, fuzz = 1e-8)\r\n{\r\n if (v1 > v2) [v1, v2] = [v2, v1];\r\n return equaln(v, clamp(v, v1, v2), fuzz);\r\n}\r\n\r\n//深复制对象数组\r\nexport function sliceDeep(arr: object[], start?: number, end?: number): object[]\r\n{\r\n return arr.slice(start, end).map((obj) => Object.assign({}, obj));\r\n}\r\n\r\nfunction fallbackCopyTextToClipboard(text)\r\n{\r\n let textArea = document.createElement(\"textarea\");\r\n textArea.value = text;\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n try\r\n {\r\n let successful = document.execCommand('copy');\r\n } catch (err)\r\n {\r\n }\r\n document.body.removeChild(textArea);\r\n}\r\nexport async function copyTextToClipboard(text: string)\r\n{\r\n if (!navigator[\"clipboard\"])\r\n {\r\n fallbackCopyTextToClipboard(text);\r\n return;\r\n }\r\n return await navigator[\"clipboard\"].writeText(text);\r\n}\r\n\r\n//ref: https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript\r\n\r\n/**\r\n * 读取剪切板的字符串\r\n */\r\nexport async function readClipboardText()\r\n{\r\n if (navigator[\"clipboard\"])\r\n return await navigator[\"clipboard\"].readText();\r\n return \"\";\r\n}\r\n\r\n//使用定点表示法来格式化一个数,小数点后面不尾随0. 如 FixedNotZero(1.1 , 3) => 1.1\r\nexport function FixedNotZero(v: number | string, fractionDigits: number = 0)\r\n{\r\n if (typeof v === \"string\")\r\n v = parseFloat(v);\r\n if (isNaN(v)) return \"\";\r\n if (equaln(v, 0)) return \"0\";\r\n let str = v.toFixed(fractionDigits);\r\n let commonIndex = str.indexOf(\".\");\r\n if (commonIndex !== -1)\r\n {\r\n let zeroCount = 0;\r\n let strCount = str.length;\r\n for (let l = strCount; l--;)\r\n {\r\n if (str[l] === \"0\")\r\n zeroCount++;\r\n else\r\n break;\r\n }\r\n if (zeroCount > 0)\r\n {\r\n if (zeroCount === (strCount - commonIndex - 1))\r\n zeroCount++;\r\n return str.slice(0, strCount - zeroCount);\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n/**\r\n * To fixed\r\n * @param v\r\n * @param [fractionDigits]\r\n * @returns\r\n */\r\nexport function ToFixed(v: number, fractionDigits: number = 5)\r\n{\r\n if (equaln(v, 0, Math.pow(0.1, fractionDigits))) return \"0\";\r\n return v.toFixed(fractionDigits);\r\n}\r\n\r\nexport function GetEntity(obj: Object3D): Entity | undefined\r\n{\r\n while (obj)\r\n {\r\n if (obj.userData.Entity)\r\n return obj.userData.Entity;\r\n\r\n obj = obj.parent;\r\n }\r\n}\r\n\r\nexport function IsEntity(obj: Object3D): boolean\r\n{\r\n return GetEntity(obj) instanceof Entity;\r\n}\r\n\r\nexport function IsNoErase(id: ObjectId): boolean\r\n{\r\n return id && !id.IsErase;\r\n}\r\n\r\n/**\r\n * 原图地址转换为对应缩略图地址\r\n */\r\nexport function getThumbsUrl(url: string)\r\n{\r\n return url ? url.replace(/\\/\\w*\\.\\w*$/, mat => \"/thumbs\" + mat.replace(\".\", \"_100.\")) : \"\";\r\n}\r\n\r\n/**\r\n * 快速判断a是不是被修改了\r\n */\r\nexport function equalObject(a: Object, b: Object)\r\n{\r\n for (let key in a)\r\n {\r\n if (a[key] !== b[key])\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function cloneObject(a: T): T\r\n{\r\n return Object.assign({}, a);\r\n}\r\n\r\nexport function Uint8ArrayToBase64(bytes: Uint8Array)\r\n{\r\n let binary = \"\";\r\n let len = bytes.byteLength;\r\n for (let i = 0; i < len; i++)\r\n binary += String.fromCharCode(bytes[i]);\r\n return window.btoa(binary);\r\n}\r\n\r\n/**转换服务端获取的文件大小 */\r\nexport function getFileSize(size: number)\r\n{\r\n let units = [\"B\", \"KB\", \"MB\", \"GB\"];\r\n for (let u of units)\r\n {\r\n if (size > 1 && size < 1024)\r\n return FixedNotZero(size, 2) + u;\r\n else\r\n size /= 1024;\r\n }\r\n}\r\n\r\nexport function GetIndexDBID(id: string)\r\n{\r\n return localStorage.getItem(StoreageKeys.Uid) + \":\" + id;\r\n}\r\n\r\nexport function FixDigits(v: number, fractionDigits = 2)\r\n{\r\n return parseFloat(v.toFixed(fractionDigits));\r\n}\r\n","import { Box3, BufferGeometry, Geometry, Line, Matrix4, Mesh, Object3D, Vector, Vector2, Vector3 } from 'three';\r\nimport { ToFixed } from '../Common/Utils';\r\n\r\nexport const IdentityMtx4 = new Matrix4();\r\nexport const ZeroVec = new Vector3();\r\nexport const XAxis = new Vector3(1, 0, 0);\r\nexport const XAxisN = new Vector3(-1, 0, 0);\r\nexport const YAxis = new Vector3(0, 1, 0);\r\nexport const YAxisN = new Vector3(0, -1, 0);\r\nexport const ZAxis = new Vector3(0, 0, 1);\r\n\r\nexport function AsVector2(p: { x: number, y: number; })\r\n{\r\n return new Vector2(p.x, p.y);\r\n}\r\nexport function AsVector3(p: { x: number, y: number, z?: number; })\r\n{\r\n return new Vector3(p.x, p.y, p.z);\r\n}\r\n\r\n/**\r\n * 判断一维线段a和b是否存在交集\r\n */\r\nexport function isIntersect(amin: number, amax: number, bmin: number, bmax: number, eps = 0)\r\n{\r\n return Math.max(amin, bmin) < Math.min(amax, bmax) + eps;\r\n}\r\n\r\nexport function isIntersect2(a1: number, a2: number, b1: number, b2: number, eps = 0)\r\n{\r\n if (a1 > a2) [a1, a2] = [a2, a1];\r\n if (b1 > b2) [b1, b2] = [b2, b1];\r\n return Math.max(a1, b1) < Math.min(a2, b2) + eps;\r\n}\r\n\r\n/**\r\n * 旋转一个点,旋转中心在原点\r\n * @param {Vector3} p 点\r\n * @param {number} a 角度.\r\n * @returns {Vector3} 返回pt不拷贝.\r\n */\r\nexport function rotatePoint(p: Vector3, a: number): Vector3\r\n{\r\n let s = Math.sin(a);\r\n let c = Math.cos(a);\r\n\r\n let x = p.x * c - p.y * s;\r\n let y = p.x * s + p.y * c;\r\n\r\n p.x = x;\r\n p.y = y;\r\n return p;\r\n}\r\n\r\nexport function equaln(v1: number, v2: number, fuzz = 1e-5)\r\n{\r\n return Math.abs(v1 - v2) <= fuzz;\r\n}\r\n\r\nexport function equalnn(dis = 5)\r\n{\r\n let fuzz = 0.1 ** dis;\r\n return function (v1: number, v2: number)\r\n {\r\n return Math.abs(v1 - v2) <= fuzz;\r\n };\r\n}\r\n\r\ninterface P2\r\n{\r\n x: number; y: number;\r\n}\r\n\r\nexport function equalv3(v1: Vector3, v2: Vector3, fuzz = 1e-8)\r\n{\r\n return equaln(v1.x, v2.x, fuzz) && equaln(v1.y, v2.y, fuzz) && equaln(v1.z, v2.z, fuzz);\r\n}\r\nexport function equalv2(v1: P2, v2: P2, fuzz = 1e-8)\r\n{\r\n return equaln(v1.x, v2.x, fuzz) && equaln(v1.y, v2.y, fuzz);\r\n}\r\n\r\n/**\r\n * 按照极坐标的方式移动一个点\r\n *\r\n * @export\r\n * @template\r\n * @param {T} v 向量(2d,3d)\r\n * @param {number} an 角度\r\n * @param {number} dis 距离\r\n * @returns {T}\r\n */\r\nexport function polar(v: T, an: number, dis: number): T\r\n{\r\n v.x += Math.cos(an) * dis;\r\n v.y += Math.sin(an) * dis;\r\n return v;\r\n}\r\n\r\nexport function angle(v: Vector3 | Vector2): number\r\n{\r\n let angle = Math.atan2(v.y, v.x);\r\n if (equaln(angle, 0, 1e-8)) return 0;\r\n if (angle < 0) angle += Math.PI * 2;\r\n return angle;\r\n}\r\n\r\n/**\r\n * 求两个向量的夹角,顺时针为负,逆时针为正\r\n *\r\n * @param {Vector3} v1\r\n * @param {Vector3} v2\r\n * @param {Vector3} [ref] 参考向量,如果为世界坐标系则为0,0,1\r\n * @returns\r\n */\r\nexport function angleTo(v1: Vector3, v2: Vector3, ref: Vector3 = ZAxis): number\r\n{\r\n if (v1.equals(ZeroVec) || v2.equals(ZeroVec))\r\n return 0;\r\n\r\n v1 = v1.clone();\r\n v2 = v2.clone();\r\n\r\n if (ref !== ZAxis && !ref.equals(ZAxis))\r\n {\r\n ref = ref.clone();\r\n //任意轴坐标系. 使用相机的构造矩阵.\r\n ref.multiplyScalar(-1);\r\n let up = getLoocAtUpVec(ref);\r\n let refOcs = new Matrix4();\r\n refOcs.lookAt(ZeroVec, ref, up);\r\n let refOcsInv = new Matrix4().getInverse(refOcs);\r\n v1.applyMatrix4(refOcsInv);\r\n v2.applyMatrix4(refOcsInv);\r\n v1.z = 0;\r\n v2.z = 0;\r\n }\r\n\r\n if (v1.equals(ZeroVec) || v2.equals(ZeroVec))//修复,这里有可能被更改为0\r\n return 0;\r\n\r\n //平行的向量返回0向量,不需要归一化\r\n let cv = new Vector3().crossVectors(v1, v2);\r\n if (equalv3(cv, ZeroVec))\r\n return 0;\r\n\r\n cv.normalize();\r\n return equaln(cv.z, 0) ? v1.angleTo(v2) : v1.angleTo(v2) * cv.z;\r\n}\r\n\r\nexport function getLoocAtUpVec(dir: Vector3): Vector3\r\n{\r\n if (dir.equals(ZeroVec))\r\n {\r\n throw (\"zero vector\");\r\n }\r\n let norm = dir.clone().normalize();\r\n if (norm.equals(ZAxis))\r\n {\r\n return new Vector3(0, 1, 0);\r\n }\r\n else if (norm.equals(ZAxis.clone().negate()))\r\n {\r\n return new Vector3(0, -1, 0);\r\n }\r\n else\r\n {\r\n let xv: Vector3 = new Vector3();\r\n xv.crossVectors(ZAxis, norm);\r\n\r\n let up = new Vector3();\r\n up.crossVectors(norm, xv);\r\n return up;\r\n }\r\n}\r\n\r\nexport function createLookAtMat4(dir: Vector3): Matrix4\r\n{\r\n let up = getLoocAtUpVec(dir);\r\n let mat = new Matrix4();\r\n mat.lookAt(ZeroVec, dir, up);\r\n return mat;\r\n}\r\n\r\n/**\r\n * 判断2个向量是不是平行,尽量传入单位向量,才能保证计算精度\r\n */\r\nexport function isParallelTo(v1: Vector3, v2: Vector3, fuzz = 1e-8): boolean\r\n{\r\n return v1.clone().cross(v2).lengthSq() < fuzz;\r\n}\r\n\r\n/**\r\n * 垂直向量\r\n */\r\nexport function isPerpendicularityTo(v1: Vector3, v2: Vector3, fuzz = 1e-8)\r\n{\r\n return equaln(v1.dot(v2), 0, fuzz);\r\n}\r\n\r\nexport function ptToString(v: Vector3, fractionDigits: number = 3): string\r\n{\r\n return v.toArray().map(o => ToFixed(o, fractionDigits)).join(\",\");\r\n}\r\n\r\nexport function midPoint(v1: Vector3, v2: Vector3): Vector3\r\n{\r\n return v1.clone().add(v2).multiplyScalar(0.5);\r\n}\r\nexport function midPoint2(v1: Vector2, v2: Vector2): Vector2\r\n{\r\n return v1.clone().add(v2).multiplyScalar(0.5);\r\n}\r\n\r\n/**\r\n * 获得Three对象的包围盒.\r\n * @param obj\r\n * @param [updateMatrix] 是否应该更新对象矩阵\r\n * @returns box\r\n */\r\nexport function GetBox(obj: Object3D, updateMatrix?: boolean): Box3\r\n{\r\n let box = new Box3();\r\n if (updateMatrix) obj.updateMatrixWorld(false);\r\n if (!obj.visible) return box;\r\n\r\n obj.traverseVisible(o =>\r\n {\r\n if (!o.visible) return;\r\n //@ts-ignore\r\n let geo = o.geometry as BufferGeometry;\r\n if (geo)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n let geoBox = geo.boundingBox.clone().applyMatrix4(o.matrixWorld);\r\n if (geoBox.max.z > 1e5)\r\n console.log();\r\n box.union(geoBox);\r\n }\r\n });\r\n return box;\r\n}\r\n\r\nexport function GetBoxArr(arr: Array): Box3\r\n{\r\n let box = new Box3();\r\n for (let o of arr)\r\n {\r\n let b = GetBox(o);\r\n if (!b.isEmpty())\r\n box.union(b);\r\n }\r\n return box;\r\n}\r\n\r\nexport function MoveMatrix(v: Vector3): Matrix4\r\n{\r\n return new Matrix4().setPosition(v);\r\n}\r\n\r\n//获得输入点在2线组成的4个区间的位置\r\nexport function getPtPostion(sp: Vector3, ep: Vector3, c: Vector3, inPt: Vector3)\r\n{\r\n let l1 = sp.clone().sub(c);\r\n let l2 = ep.clone().sub(c);\r\n let l3 = l1.clone().negate();\r\n let l4 = l2.clone().negate();\r\n let inputLine = inPt.clone().sub(c);\r\n let ang1 = angleTo(l1, l2);\r\n let ang2 = Math.PI;\r\n let ang3 = ang2 + Math.abs(ang1);\r\n let inputAng = angleTo(l1, inputLine);\r\n if (ang1 * inputAng < 0)\r\n inputAng = (Math.PI * 2 - Math.abs(inputAng));\r\n ang1 = Math.abs(ang1);\r\n inputAng = Math.abs(inputAng);\r\n if (inputAng <= ang1)\r\n return { sp, ep };\r\n else if (inputAng > ang1 && inputAng <= ang2)\r\n return { sp: c.clone().add(l3), ep };\r\n else if (inputAng > ang2 && inputAng <= ang3)\r\n return { sp: c.clone().add(l3), ep: c.clone().add(l4) };\r\n else\r\n return { sp, ep: c.clone().add(l4) };\r\n}\r\nexport function angleAndX(v: Vector3 | Vector2)\r\n{\r\n return v.x ? Math.atan(v.y / v.x) : Math.PI / 2;\r\n}\r\n\r\n/**\r\n * 将角度调整为0-2pi之间\r\n */\r\nexport function clampRad(an: number)\r\n{\r\n an = an % (Math.PI * 2);\r\n if (an < 0) an += Math.PI * 2;\r\n return an;\r\n}\r\n\r\nexport function updateGeometry(l: Line | Mesh, geometry: Geometry | BufferGeometry)\r\n{\r\n let geo = l.geometry as Geometry;\r\n geo.dispose();\r\n l.geometry = geometry;\r\n geometry.computeBoundingSphere();\r\n}\r\n\r\nexport function UpdateBoundingSphere(obj: Object3D)\r\n{\r\n //@ts-ignore\r\n let geo = obj.geometry as Geometry;\r\n if (geo)\r\n geo.computeBoundingSphere();\r\n}\r\n\r\n\r\nexport type compareVectorFn = (v1: Vector, v2: Vector3) => number;\r\n\r\nconst comparePointCache: Map = new Map();\r\n\r\n/**\r\n * 构建返回一个用来排序的函数.根据key创建排序规则.\r\n *\r\n * 当key = \"xyz\" 时,点集按 x从小到大,y从小到大 z从小到大\r\n * key = \"X\" 时,点集按 x从大到小\r\n * 以此类推.\r\n *\r\n * 例子:\r\n * let pts:Vector3[] =...;\r\n * pts.sort(comparePoint(\"x\")); //x从小到大排序\r\n * pts.sort(comparePoint(\"zX\")); //z从小到大 x从大到小\r\n *\r\n * @export\r\n * @param {string} sortKey\r\n * @returns {compareVectorFn}\r\n */\r\nexport function comparePoint(sortKey: string): compareVectorFn\r\n{\r\n if (comparePointCache.has(sortKey))\r\n return comparePointCache.get(sortKey);\r\n\r\n let sortIndex = [];\r\n\r\n const keys = ['x', 'X', 'y', 'Y', 'z', 'Z'];\r\n for (let char of sortKey)\r\n {\r\n let index = keys.indexOf(char);\r\n\r\n let i2 = index / 2;\r\n let ci = Math.floor(i2);\r\n sortIndex.push([ci, i2 > ci ? 1 : -1]);\r\n }\r\n\r\n let compareFunction = (v1: Vector, v2: Vector3): number =>\r\n {\r\n if (!v1) return -1;\r\n if (!v2) return 1;\r\n for (let s of sortIndex)\r\n {\r\n let vv1 = v1.getComponent(s[0]);\r\n let vv2 = v2.getComponent(s[0]);\r\n if (equaln(vv1, vv2)) continue;\r\n if (vv2 > vv1) return s[1];\r\n else return -s[1];\r\n }\r\n return 0;\r\n };\r\n\r\n comparePointCache.set(sortKey, compareFunction);\r\n return compareFunction;\r\n}\r\n\r\n/**\r\n *计算各轴旋转角度\r\n */\r\nexport function GetEulerAngle(x: Vector3, y: Vector3, z: Vector3)\r\n{\r\n let roY = Math.atan2(x.z, Math.sqrt(x.x ** 2 + x.y ** 2)) * -180 / Math.PI;\r\n let roZ = Math.atan2(x.y, x.x);\r\n let vec = YAxis.clone();\r\n let roMat = new Matrix4().makeRotationZ(roZ);\r\n roZ *= 180 / Math.PI;\r\n vec.applyMatrix4(roMat);\r\n let roX = Math.atan2(z.dot(vec), y.dot(vec)) * -180 / Math.PI;\r\n return { roX, roY, roZ };\r\n}\r\n\r\n/**\r\n * 方形框捕捉\r\n * @param sqCenter 正方形点\r\n * @param snapPt 被捕捉的点\r\n * @param size 捕捉框大小\r\n */\r\nexport function SnapPoint(sqCenter: Vector3, snapPt: Vector3, size: number): boolean\r\n{\r\n return Math.abs(sqCenter.x - snapPt.x) < size\r\n && Math.abs(sqCenter.y - snapPt.y) < size;\r\n}\r\n\r\nexport function SelectNearP(pts: Vector3[], refPt: Vector3): Vector3\r\n{\r\n if (pts.length > 1)\r\n {\r\n let dist1 = refPt.distanceToSquared(pts[0]);\r\n let dist2 = refPt.distanceToSquared(pts[1]);\r\n return dist1 <= dist2 ? pts[0] : pts[1];\r\n }\r\n return pts[0];\r\n}\r\n\r\n/**n是否在AB之间,fuzz 若为负的,允许相等 */\r\nexport function IsBetweenA2B(n: number, A: number, B: number, fuzz = -1e-8)\r\n{\r\n return n > A + fuzz && n < B - fuzz;\r\n}\r\n\r\n/** 矩阵是世界坐标系 */\r\nexport function MatrixIsIdentityCS(mtx: Matrix4): boolean\r\n{\r\n return mtx.elements[0] === 1 && mtx.elements[5] === 1 && mtx.elements[10] === 1 && mtx.elements[12] === 0 && mtx.elements[13] === 0 && mtx.elements[14] === 0;\r\n}\r\n","import { Matrix4, Vector2, Vector3 } from 'three';\r\nimport { CoordinateSystem } from '../Geometry/CoordinateSystem';\r\nimport { equaln, isParallelTo } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 设置矩阵的某列的向量\r\n * @param {Matrix4} mat 矩阵\r\n * @param {number} col 列索引,0x 1y 2z 3org\r\n * @param {Vector3} v 向量或点\r\n */\r\nexport function matrixSetVector(mat: Matrix4, col: number, v: Vector3)\r\n{\r\n let index = col * 4;\r\n mat.elements[index] = v.x;\r\n mat.elements[index + 1] = v.y;\r\n mat.elements[index + 2] = v.z;\r\n}\r\n\r\n/**\r\n * 返回矩阵,该坐标系将坐标系与原点的坐标系映射为坐标系,\r\n * 并将坐标系与X轴坐标系,\r\n * Y轴坐标轴以及Z轴坐标系统之间的坐标系统坐标系统的原点坐标系和原点坐标系统坐标轴的坐标系分别设置为XAxis,YAxis和ZAxis\r\n * @returns {Matrix4} 返回新的矩阵\r\n */\r\nexport function matrixAlignCoordSys(matrixFrom: Matrix4, matrixTo: Matrix4): Matrix4\r\n{\r\n return new Matrix4().getInverse(matrixTo).multiply(matrixFrom);\r\n}\r\n\r\n/**\r\n * 判断2个矩形共面\r\n * @param {Matrix4} matrixFrom\r\n * @param {Matrix4} matrixTo\r\n * @returns {boolean} 2个矩阵共面\r\n */\r\nexport function matrixIsCoplane(matrixFrom: Matrix4, matrixTo: Matrix4, fuzz = 1e-5): boolean\r\n{\r\n let nor1 = new Vector3().setFromMatrixColumn(matrixFrom, 2);\r\n let nor2 = new Vector3().setFromMatrixColumn(matrixTo, 2);\r\n\r\n //法线共面\r\n if (!isParallelTo(nor1, nor2))\r\n return false;\r\n\r\n //高共面\r\n let pt = new Vector3().setFromMatrixPosition(matrixTo);\r\n //变换到自身对象坐标系.\r\n pt.applyMatrix4(new Matrix4().getInverse(matrixFrom));\r\n\r\n return equaln(pt.z, 0, fuzz);\r\n}\r\n\r\n//构造缩放矩阵\r\nexport function matrixScale(scale: number, center?: Vector3)\r\n{\r\n let scaleMat = new Matrix4().makeScale(scale, scale, scale);\r\n if (center)\r\n scaleMat.setPosition(center.clone().multiplyScalar(1 - scale));\r\n return scaleMat;\r\n}\r\n\r\n/**\r\n * 设置旋转矩阵,不改变矩阵的基点\r\n */\r\nexport function setRotationOnAxis(mtx: Matrix4, axis: Vector3, ro: number)\r\n{\r\n let pos = new Vector3().setFromMatrixPosition(mtx);\r\n mtx.makeRotationAxis(axis, ro);\r\n mtx.setPosition(pos);\r\n return mtx;\r\n}\r\n\r\n/**\r\n * 修正镜像后矩阵\r\n */\r\nexport function reviseMirrorMatrix(mtx: Matrix4): Matrix4\r\n{\r\n let cs = new CoordinateSystem().applyMatrix4(mtx);\r\n cs.YAxis.negate();\r\n mtx.copy(cs.getMatrix4());\r\n return mtx;\r\n}\r\n\r\nlet cacheVec: Vector3;\r\nexport function Vector2ApplyMatrix4(mtx: Matrix4, vec: Vector2)\r\n{\r\n if (!cacheVec) cacheVec = new Vector3();\r\n\r\n cacheVec.x = vec.x;\r\n cacheVec.y = vec.y;\r\n\r\n cacheVec.applyMatrix4(mtx);\r\n\r\n vec.x = cacheVec.x;\r\n vec.y = cacheVec.y;\r\n}\r\nexport function GetMirrorMat(v: Vector3)\r\n{\r\n let mirrorMat = new Matrix4();\r\n let xAxis = new Vector3(1 - 2 * v.x ** 2, -2 * v.x * v.y, -2 * v.x * v.z);\r\n let yAxis = new Vector3(-2 * v.x * v.y, 1 - 2 * v.y ** 2, -2 * v.y * v.z);\r\n let zAxis = new Vector3(-2 * v.x * v.z, -2 * v.y * v.z, 1 - 2 * v.z ** 2);\r\n mirrorMat.makeBasis(xAxis, yAxis, zAxis);\r\n return mirrorMat;\r\n}\r\n\r\nexport function ApplyMatrix4IgnorePosition(vec: { x: number, y: number, z: number; }, m: Matrix4)\r\n{\r\n let { x, y, z } = vec;\r\n let e = m.elements;\r\n vec.x = e[0] * x + e[4] * y + e[8] * z;\r\n vec.y = e[1] * x + e[5] * y + e[9] * z;\r\n vec.z = e[2] * x + e[6] * y + e[10] * z;\r\n return vec;\r\n}\r\n\r\n/**\r\n * 把变换矩阵展平成2d矩阵,避免出现三维坐标.\r\n */\r\nexport function MatrixPlanarizere(mtx: Matrix4, z0 = true)\r\n{\r\n mtx.elements[2] = 0;\r\n mtx.elements[6] = 0;\r\n mtx.elements[8] = 0;\r\n mtx.elements[9] = 0;\r\n mtx.elements[10] = Math.sign(mtx.elements[10]);\r\n\r\n if (z0)\r\n mtx.elements[14] = 0;\r\n\r\n return mtx;\r\n}\r\n\r\nexport const tempMatrix1 = new Matrix4;\r\n\r\nexport const ZMirrorMatrix = GetMirrorMat(new Vector3(0, 0, 1));\r\n","\r\n\r\n\r\nexport enum Status\r\n{\r\n False = 0,\r\n True = 1,\r\n Canel = -1,\r\n\r\n ConverToCircle = 101,\r\n\r\n DuplicateRecordName = 102,\r\n}\r\n\r\nexport enum UpdateDraw\r\n{\r\n None = 0,\r\n Matrix = 1,\r\n Geometry = 2,\r\n Material = 4,\r\n All = ~(~0 << 6)\r\n}\r\n\r\n/**\r\n * WblockClne时,遇到重复记录的操作方式\r\n */\r\nexport enum DuplicateRecordCloning\r\n{\r\n Ignore = 1,\r\n Replace = 2,\r\n Rename = 3,\r\n}\r\n","\r\n/**\r\n * 场景的渲染类型.\r\n */\r\nexport enum RenderType\r\n{\r\n /**\r\n * 线框模式\r\n */\r\n Wireframe = 1,\r\n\r\n /**\r\n * 概念\r\n */\r\n Conceptual = 2,\r\n\r\n\r\n /**\r\n * 物理着色PBR\r\n */\r\n Physical = 3,\r\n\r\n Jig = 4,\r\n Print = 5,\r\n /**物理带线框 */\r\n Physical2 = 6,\r\n Edge = 7,\r\n\r\n /******************************************** 在视口时的渲染模式 */\r\n /**\r\n * 线框模式\r\n */\r\n WireframePrint = 101,\r\n\r\n /**\r\n * 概念\r\n */\r\n ConceptualPrint = 102,\r\n\r\n\r\n /**\r\n * 物理着色PBR\r\n */\r\n PhysicalPrint = 103,\r\n\r\n JigPrint = 104,\r\n PrintPrint = 105,\r\n /**物理带线框 */\r\n Physical2Print = 106,\r\n}\r\n","export enum AAType\r\n{\r\n FXAA = 0,//快速近似抗锯齿(性能更好)\r\n SMAA = 1,//多重采样抗锯齿(质量更好)\r\n}\r\n\r\nexport enum ViewDirType\r\n{\r\n FS = 0,\r\n YAS = 1,\r\n ZS = 2,\r\n YS = 3,\r\n QS = 4,\r\n HS = 5,\r\n XN = 6,\r\n}\r\n","import { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { DrillingOption } from \"../UI/Store/drillInterface\";\r\nimport { observable, reaction, toJS } from \"mobx\";\r\nimport { StoreageKeys } from \"../Common/StoreageKeys\";\r\nimport { IWineRackOption } from \"../UI/Store/WineRackInterface\";\r\nimport { IBaseOption, IGrooveOption } from \"../UI/Store/BoardInterface\";\r\nimport { IConfigStore } from \"../UI/Store/BoardStore\";\r\nimport { IConfigOption } from \"../UI/Components/Board/UserConfig\";\r\nimport { AAType, ViewDirType } from \"../Common/SystemEnum\";\r\n\r\nexport interface IMaxSizeProps extends IBaseOption\r\n{\r\n height: number;\r\n width: number;\r\n isShow: boolean;\r\n}\r\n\r\nexport interface ISystemConfig extends IBaseOption\r\n{\r\n aaType: AAType;\r\n maxHightightCount: number;\r\n snapSize: number;\r\n background: string;\r\n layoutBackground: string;\r\n}\r\n\r\nexport interface ICursorConfig extends IBaseOption\r\n{\r\n D2: number;\r\n D3: number;\r\n SquareSize: number;\r\n}\r\n\r\nexport class UserConfig implements IConfigStore\r\n{\r\n private readonly _version = 13;\r\n _renderType: RenderType = RenderType.Wireframe;\r\n @observable maxSize: IMaxSizeProps = {\r\n isShow: false,\r\n height: 2440,\r\n width: 1220,\r\n };\r\n @observable private _drillConfigs: Map = new Map();\r\n @observable openDrillingReactor = true;\r\n @observable openAutoCuttingReactor = true;\r\n /**打开将检测排钻是否在板件内*/\r\n @observable openExactDrill = true;\r\n winerackConfig: IWineRackOption;\r\n userConfigName: { [key: string]: string; } = {};\r\n private modeling2HoleRad = 20; //圆造型小于等于该值拆成孔数据\r\n @observable isAdmin = false;\r\n isMaster = false;\r\n rights = [];\r\n @observable kjlConfig: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"1\",\r\n };\r\n @observable SystemConfig: ISystemConfig = {\r\n maxHightightCount: 15000,\r\n snapSize: 15,\r\n aaType: AAType.FXAA,\r\n background: \"#000000\",\r\n layoutBackground: \"#cccccc\",\r\n };\r\n @observable viewDirType: ViewDirType = ViewDirType.XN;\r\n @observable useCtrlRotate = true;\r\n @observable cursorSize: ICursorConfig = {\r\n D2: 1000,\r\n D3: 100,\r\n SquareSize: 10,\r\n };\r\n @observable autoSaveConfig = {\r\n enable: true,\r\n time: 1,\r\n };\r\n @observable showLines = false;\r\n @observable keepConfig = false;\r\n @observable autoClearHistory = true;\r\n @observable chaidanOption = {\r\n changXiuBian: 6,\r\n duanXiuBian: 6,\r\n useDefaultRad: false,\r\n radius: 2.5,\r\n modeling2HoleRad: 20, //圆造型小于等于该值拆成孔数据\r\n isCheckInterfere: false,\r\n noModeingData: \"\", //非造型遭数据\r\n };\r\n @observable autoLines = false;\r\n dimTextHeight = 60;\r\n\r\n @observable performanceConfig = {\r\n fakersweep: false,\r\n disablerefcut: false,\r\n disablecheckgroove: false,\r\n };\r\n lineWidth = 2; //打印线框\r\n @observable forceFilterPxl = true;\r\n checkSealing = false;\r\n sealingColorMap: [string, string][] = [];\r\n constructor()\r\n {\r\n this.Init();\r\n }\r\n Init()\r\n {\r\n let type = Number(localStorage.getItem(StoreageKeys.RenderType));\r\n if (type && type !== RenderType.Edge)\r\n this._renderType = type;\r\n }\r\n set RenderType(t: RenderType)\r\n {\r\n if (t !== this._renderType)\r\n {\r\n this._renderType = t;\r\n this.checkSealing = t === RenderType.Edge;\r\n this.SetRenderTypeEvent();\r\n\r\n localStorage.setItem(StoreageKeys.RenderType, t.toString());\r\n }\r\n }\r\n\r\n get RenderType() { return this._renderType; }\r\n\r\n SetRenderTypeEvent() { }\r\n get DrillConfigs()\r\n {\r\n return this._drillConfigs || new Map();\r\n }\r\n set DrillConfigs(config: Map)\r\n {\r\n observable(this._drillConfigs).replace(config);\r\n this.SetDrillConfigsEvent();\r\n }\r\n SetDrillConfigsEvent() { }\r\n configName = \"default\";\r\n configsNames: string[] = [];\r\n InitOption()\r\n {\r\n this.openDrillingReactor = true;\r\n this.openAutoCuttingReactor = true;\r\n Object.assign(this.maxSize, {\r\n height: 2440,\r\n width: 1220\r\n });\r\n Object.assign(this.kjlConfig, {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"1\"\r\n });\r\n Object.assign(this.chaidanOption, {\r\n changXiuBian: 6,\r\n duanXiuBian: 6,\r\n useDefaultRad: false,\r\n radius: 2.5,\r\n modeling2HoleRad: 20,\r\n noModeingData: \"\",\r\n });\r\n this.dimTextHeight = 60;\r\n }\r\n SaveConfig()\r\n {\r\n return {\r\n option: {\r\n version: this._version,\r\n openDrillingReactor: this.openDrillingReactor,\r\n openAutoCuttingReactor: this.openAutoCuttingReactor,\r\n maxSize: toJS(this.maxSize),\r\n kjlConfig: toJS(this.kjlConfig),\r\n systemConfig: toJS(this.SystemConfig),\r\n viewDirType: this.viewDirType,\r\n useCtrlRotate: this.useCtrlRotate,\r\n cursorSize: toJS(this.cursorSize),\r\n autoSaveConfig: toJS(this.autoSaveConfig),\r\n showLines: this.showLines,\r\n keepConfig: this.keepConfig,\r\n autoClearHistory: this.autoClearHistory,\r\n chaidanOption: toJS(this.chaidanOption),\r\n autoLines: this.autoLines,\r\n dimTextHeight: this.dimTextHeight,\r\n lineWidth: this.lineWidth,\r\n forceFilterPxl: this.forceFilterPxl,\r\n checkSealing: this.checkSealing,\r\n sealingColorMap: this.sealingColorMap\r\n }\r\n };\r\n }\r\n UpdateOption(config: IConfigOption)\r\n {\r\n this.openDrillingReactor = config.option.openDrillingReactor;\r\n this.openAutoCuttingReactor = config.option.openAutoCuttingReactor;\r\n Object.assign(this.maxSize, config.option.maxSize);\r\n Object.assign(this.kjlConfig, config.option.kjlConfig);\r\n this.modeling2HoleRad = config.option.modeling2HoleRad;\r\n\r\n if (config.option.version > 1)\r\n {\r\n Object.assign(this.SystemConfig, config.option.systemConfig);\r\n }\r\n if (config.option.version > 2)\r\n {\r\n this.viewDirType = config.option.viewDirType;\r\n this.useCtrlRotate = config.option.useCtrlRotate;\r\n }\r\n\r\n if (config.option.version > 3)\r\n {\r\n Object.assign(this.cursorSize, config.option.cursorSize);\r\n }\r\n if (config.option.version > 4)\r\n {\r\n Object.assign(this.autoSaveConfig, config.option.autoSaveConfig);\r\n }\r\n if (config.option.version > 5)\r\n {\r\n this.showLines = config.option.showLines;\r\n }\r\n if (config.option.version > 6)\r\n {\r\n this.keepConfig = config.option.keepConfig;\r\n }\r\n if (config.option.version > 7)\r\n {\r\n this.autoClearHistory = config.option.autoClearHistory;\r\n }\r\n if (config.option.version > 8)\r\n {\r\n config.option.chaidanOption.modeling2HoleRad = Number(config.option.chaidanOption.modeling2HoleRad);\r\n Object.assign(this.chaidanOption, config.option.chaidanOption);\r\n this.autoLines = config.option.autoLines;\r\n }\r\n else\r\n this.chaidanOption.modeling2HoleRad = this.modeling2HoleRad;\r\n\r\n if (config.option.version > 9)\r\n this.dimTextHeight = config.option.dimTextHeight;\r\n if (config.option.version > 10)\r\n this.lineWidth = config.option.lineWidth;\r\n\r\n if (config.option.version > 11)\r\n this.forceFilterPxl = config.option.forceFilterPxl;\r\n\r\n if (config.option.version > 12)\r\n {\r\n this.checkSealing = config.option.checkSealing;\r\n this.sealingColorMap = config.option.sealingColorMap;\r\n }\r\n }\r\n}\r\n\r\nexport const userConfig = new UserConfig();\r\n","import { Vector3, Box3 } from 'three';\r\n\r\n/**\r\n * 盒子的切割类型\r\n */\r\nexport enum SplitType\r\n{\r\n X = 0,\r\n Y = 1,\r\n Z = 2,\r\n}\r\n\r\n/**\r\n * 扩展Box3,添加切割方法,体积等\r\n */\r\nexport class Box3Ext extends Box3\r\n{\r\n TempData: any;\r\n get Volume()\r\n {\r\n let size = this.getSize(new Vector3());\r\n return size.x * size.y * size.z;\r\n }\r\n\r\n //每个轴的大小必须大于最小的size\r\n isSolid(minSize = 1)\r\n {\r\n return this.getSize(new Vector3()).toArray().every(x => x > minSize);\r\n }\r\n substract(b: Box3Ext, spaceType: SplitType)\r\n {\r\n let interBox = this.clone().intersect(b) as this;\r\n if (interBox.isEmpty() || !interBox.isSolid())\r\n return [this];\r\n\r\n let p1 = interBox.min.clone().setComponent(spaceType, this.min.getComponent(spaceType));\r\n let p2 = interBox.max.clone().setComponent(spaceType, interBox.min.getComponent(spaceType));\r\n\r\n let p3 = interBox.min.clone().setComponent(spaceType, interBox.max.getComponent(spaceType));\r\n let p4 = interBox.max.clone().setComponent(spaceType, this.max.getComponent(spaceType));\r\n\r\n return [\r\n new Box3Ext(p1, p2),\r\n new Box3Ext(p3, p4)\r\n ].filter(b => b.isSolid());\r\n }\r\n clampSpace(b2: Box3Ext, splitType: SplitType)\r\n {\r\n let interBox = this.clone();\r\n interBox.min.max(b2.min);\r\n interBox.max.min(b2.max);\r\n interBox.min.setComponent(splitType, Math.min(this.max.getComponent(splitType), b2.max.getComponent(splitType)));\r\n interBox.max.setComponent(splitType, Math.max(this.min.getComponent(splitType), b2.min.getComponent(splitType)));\r\n return interBox;\r\n }\r\n intersectsBox(box: Box3, fuzz = 1e-8): boolean\r\n {\r\n return IntersectsBox(this, box, fuzz);\r\n }\r\n}\r\n\r\nexport function IntersectsBox(box1: Box3, box2: Box3, fuzz = 1e-6): boolean\r\n{\r\n return box2.max.x < box1.min.x - fuzz || box2.min.x > box1.max.x + fuzz ||\r\n box2.max.y < box1.min.y - fuzz || box2.min.y > box1.max.y + fuzz ||\r\n box2.max.z < box1.min.z - fuzz || box2.min.z > box1.max.z + fuzz ? false : true;\r\n}\r\n\r\n/**盒子二维面是否相交 */\r\nexport function IntersectBox2(box1: Box3, box2: Box3, fuzz = 1e-3)\r\n{\r\n return box2.max.x < box1.min.x - fuzz || box2.min.x > box1.max.x + fuzz ||\r\n box2.max.y < box1.min.y - fuzz || box2.min.y > box1.max.y + fuzz ? false : true;\r\n}\r\n","import { Box3, Material, Matrix3, Matrix4, MeshStandardMaterial, Object3D, Vector3 } from 'three';\r\nimport { iaop } from 'xaop';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { matrixIsCoplane, MatrixPlanarizere } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { userConfig } from '../../Editor/UserConfig';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { equaln, equalv3, UpdateBoundingSphere, IdentityMtx4 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { CADObject } from '../CADObject';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { PhysicalMaterialRecord } from '../PhysicalMaterialRecord';\r\n\r\n/**\r\n * Entity 是所有图元的基类,绘制的实体都集成该类.\r\n */\r\n@Factory\r\nexport class Entity extends CADObject\r\n{\r\n\r\n IsEmbedEntity = false;\r\n\r\n /**\r\n * 该实体的只有一个渲染类型,任何渲染类型都一个样\r\n */\r\n protected OnlyRenderType = false;\r\n protected _CacheDrawObject = new Map();\r\n //材质id\r\n protected materialId: ObjectId;\r\n protected _Color: number = 7;\r\n\r\n //自身坐标系\r\n protected _Matrix = new Matrix4();\r\n\r\n //模块空间的标系\r\n protected _SpaceOCS: Matrix4 = new Matrix4();\r\n get SpaceOCS()\r\n {\r\n return this._SpaceOCS.clone();\r\n }\r\n get SpaceOCSInv()\r\n {\r\n return new Matrix4().getInverse(this._SpaceOCS);\r\n }\r\n set SpaceOCS(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SpaceOCS.copy(m);\r\n }\r\n\r\n protected _Visible = true;\r\n\r\n @AutoRecord GroupId: ObjectId;\r\n @AutoRecord Template: ObjectId;\r\n //加工组\r\n @AutoRecord ProcessingGroupList: ObjectId[] = [];\r\n\r\n /**\r\n * 当AutoUpdate为false时,记录需要更新的标志.\r\n * 以便延迟更新时找到相应的更新标志.\r\n */\r\n NeedUpdateFlag: UpdateDraw = UpdateDraw.None;\r\n AutoUpdate = true;\r\n\r\n set Material(materialId: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.materialId = materialId;\r\n this.Update();\r\n }\r\n\r\n get Material()\r\n {\r\n return this.materialId;\r\n }\r\n\r\n set ColorIndex(color: number)\r\n {\r\n if (color !== this._Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Color = color;\r\n this.Update(UpdateDraw.Material);\r\n }\r\n }\r\n get ColorIndex(): number\r\n {\r\n return this._Color;\r\n }\r\n /**\r\n * 炸开实体\r\n */\r\n Explode(): Entity[] { return []; }\r\n\r\n /**\r\n * 返回对象的包围框.\r\n */\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3();\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let mtxBak = this._Matrix;\r\n this._Matrix = IdentityMtx4;\r\n let box = this.BoundingBox;\r\n this._Matrix = mtxBak;\r\n return new Box3Ext().copy(box);\r\n }\r\n\r\n GetBoundingBoxInMtx(mtx: Matrix4): Box3Ext\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCS.premultiply(mtx));\r\n }\r\n\r\n get BoundingBoxInSpaceCS(): Box3Ext\r\n {\r\n return this.GetBoundingBoxInMtx(this.SpaceOCSInv);\r\n }\r\n\r\n get OCS(): Matrix4\r\n {\r\n return this._Matrix.clone();\r\n }\r\n\r\n get OCSNoClone()\r\n {\r\n return this._Matrix;\r\n }\r\n\r\n //直接设置实体的矩阵,谨慎使用该函数,没有更新实体.\r\n set OCS(mat4: Matrix4)\r\n {\r\n this._Matrix.copy(mat4);\r\n }\r\n get Normal(): Vector3\r\n {\r\n return new Vector3().setFromMatrixColumn(this._Matrix, 2);\r\n }\r\n get Position(): Vector3\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n\r\n set Position(pt: Vector3)\r\n {\r\n let moveX = pt.x - this._Matrix.elements[12];\r\n let moveY = pt.y - this._Matrix.elements[13];\r\n let moveZ = pt.z - this._Matrix.elements[14];\r\n\r\n if (moveX === 0 && moveY === 0 && moveZ === 0) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(pt);\r\n this._SpaceOCS.elements[12] += moveX;\r\n this._SpaceOCS.elements[13] += moveY;\r\n this._SpaceOCS.elements[14] += moveZ;\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n\r\n //Z轴归0\r\n Z0()\r\n {\r\n if (this._Matrix.elements[14] === 0) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Matrix.elements[14] = 0;\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\r\n }\r\n\r\n //坐标系二维化\r\n MatrixPlanarizere()\r\n {\r\n let z = this._Matrix.elements[10];\r\n if (equaln(Math.abs(z), 1, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n MatrixPlanarizere(this._Matrix, false);\r\n }\r\n return this;\r\n }\r\n\r\n get OCSInv(): Matrix4\r\n {\r\n return new Matrix4().getInverse(this._Matrix);\r\n }\r\n\r\n /**\r\n * 与指定实体是否共面.\r\n */\r\n IsCoplaneTo(e: Entity): boolean\r\n {\r\n return matrixIsCoplane(this._Matrix, e.OCS, 1e-4);\r\n }\r\n\r\n /**\r\n * 测试两个实体的包围盒是否相交.\r\n */\r\n BoundingBoxIntersectWith(en: Entity): boolean\r\n {\r\n let box = this.BoundingBox;\r\n let box2 = en.BoundingBox;\r\n return box && box2 && box.intersectsBox(box2);\r\n }\r\n\r\n //#region Draw\r\n\r\n ClearDraw()\r\n {\r\n if (this._drawObject)\r\n {\r\n DisposeThreeObj(this._drawObject);\r\n this._drawObject = undefined;\r\n }\r\n\r\n for (let [, obj] of this._CacheDrawObject)\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.clear();\r\n return this;\r\n }\r\n ClearDrawOfJig()\r\n {\r\n let jig = this._CacheDrawObject.get(RenderType.Jig);\r\n if (jig)\r\n this._CacheDrawObject.delete(RenderType.Jig);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.clear();\r\n if (jig)\r\n this._CacheDrawObject.set(RenderType.Jig, jig);\r\n }\r\n\r\n get IsOnlyRender()\r\n {\r\n return this.OnlyRenderType;\r\n }\r\n _drawObject: Object3D;\r\n\r\n get DrawObject()\r\n {\r\n if (this._drawObject)\r\n return this._drawObject;\r\n\r\n this._drawObject = new Object3D();\r\n if (!this.IsEmbedEntity)\r\n this._drawObject.userData.Entity = this;\r\n if (this.IsVisible)\r\n {\r\n this._CurRenderType = userConfig.RenderType;\r\n let obj = this.GetDrawObjectFromRenderType(userConfig.RenderType);\r\n if (obj) this._drawObject.add(obj);\r\n }\r\n else\r\n this._drawObject.visible = false;\r\n return this._drawObject;\r\n }\r\n\r\n get JigObject()\r\n {\r\n let obj = this.GetDrawObjectFromRenderType(RenderType.Jig);\r\n if (obj && !this.IsEmbedEntity)\r\n obj.userData.Entity = this;\r\n return obj;\r\n }\r\n\r\n DestroyJigObject()\r\n {\r\n let obj = this._CacheDrawObject.get(RenderType.Jig);\r\n if (obj)\r\n {\r\n this._CacheDrawObject.delete(RenderType.Jig);\r\n DisposeThreeObj(obj);\r\n if (obj.parent)\r\n obj.parent.remove(obj);\r\n }\r\n }\r\n\r\n //当前绘制类型,在.DrawObject 和 UpdateRenderType中初始化和更新\r\n protected _CurRenderType: RenderType;\r\n UpdateRenderType(type: RenderType)\r\n {\r\n if (this._CurRenderType !== type || this.DrawObject.children.length === 0)\r\n {\r\n this._CurRenderType = type;\r\n if ((this.OnlyRenderType && this.DrawObject.children.length > 0) || !this.Visible) return;\r\n Object3DRemoveAll(this.DrawObject);\r\n let obj = this.GetDrawObjectFromRenderType(type);\r\n if (obj) this.DrawObject.add(obj);\r\n }\r\n }\r\n\r\n GetDrawObjectFromRenderType(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (this.OnlyRenderType)\r\n {\r\n if (renderType === RenderType.Jig)\r\n return;\r\n if (renderType < 100)\r\n renderType = RenderType.Wireframe;\r\n else\r\n renderType = RenderType.WireframePrint;\r\n }\r\n\r\n if (this._CacheDrawObject.has(renderType))\r\n {\r\n return this._CacheDrawObject.get(renderType);\r\n }\r\n else\r\n {\r\n let drawObj = this.InitDrawObject(renderType);\r\n if (drawObj === undefined)\r\n {\r\n if (renderType > 100)//如果实体没有实现打印类型,那么就使用原先的实体的渲染类型\r\n return this.GetDrawObjectFromRenderType(renderType - 100);\r\n return;\r\n };\r\n\r\n //矩阵直接使用指针,因为已经关闭自动更新,所以矩阵不会被Object3D修改.\r\n drawObj.matrixAutoUpdate = false;\r\n drawObj.matrix = this._Matrix;\r\n drawObj.updateMatrixWorld(true);\r\n drawObj.traverse(UpdateBoundingSphere);\r\n\r\n if (!this.IsEmbedEntity)\r\n drawObj.userData.Entity = this;\r\n\r\n this._CacheDrawObject.set(renderType, drawObj);\r\n return drawObj;\r\n }\r\n }\r\n\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n return undefined;\r\n }\r\n\r\n //实体绘制更新版本号\r\n __UpdateVersion__ = 0;\r\n\r\n /**\r\n * 当实体数据改变时,绘制的实体必须做出改变.供框架调用\r\n */\r\n @iaop\r\n Update(mode = UpdateDraw.All)\r\n {\r\n this.__UpdateVersion__++;\r\n this.NeedUpdateFlag |= mode;\r\n if (this.AutoUpdate)\r\n this.DeferUpdate();\r\n }\r\n\r\n //三维实体总是一起生成线框实体和网格实体,这个通知更新,然后统一更新就好了\r\n //避免重复更新\r\n UpdateDrawGeometry() { }\r\n\r\n DeferUpdate()\r\n {\r\n let mode = this.NeedUpdateFlag;\r\n if (mode === 0) return;\r\n\r\n if (mode & UpdateDraw.Geometry && this._CacheDrawObject.size > 0)\r\n this.UpdateDrawGeometry();\r\n\r\n this.UpdateVisible();\r\n\r\n let isJigIng = this._CacheDrawObject.has(RenderType.Jig);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (isJigIng && type !== RenderType.Jig)\r\n continue;\r\n\r\n if (mode & UpdateDraw.Geometry)\r\n {\r\n if (obj.userData.IsClone)\r\n {\r\n let parent = obj.parent;\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.delete(type);\r\n let newObj = this.GetDrawObjectFromRenderType(type);\r\n if (parent)\r\n {\r\n parent.remove(obj);\r\n parent.add(newObj);\r\n }\r\n obj = newObj;\r\n }\r\n else\r\n this.UpdateDrawObject(type, obj);\r\n }\r\n\r\n if (mode & UpdateDraw.Material)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n\r\n if (mode & UpdateDraw.Matrix || mode & UpdateDraw.Geometry)\r\n {\r\n obj.updateMatrixWorld(true);\r\n // if (this.Id)//如果这个是Jig实体,那么我们更新这个盒子球似乎也没有意义 (虽然这在某些情况能改进性能,但是在绘制圆弧的时候,因为没有更新圆弧的盒子,导致绘制出来的圆弧无法被选中)\r\n obj.traverse(UpdateBoundingSphere);\r\n }\r\n\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n /**\r\n * 当实体需要更新时,需要重载该方法,实现实体更新\r\n */\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n\r\n }\r\n\r\n protected get MeshMaterial()\r\n {\r\n if (this.materialId && this.materialId.Object)\r\n return (this.materialId.Object).Material as MeshStandardMaterial;\r\n return HostApplicationServices.DefaultMeshMaterial;\r\n }\r\n\r\n /**\r\n * 更新实体Jig状态时的材质\r\n */\r\n UpdateJigMaterial(color = 8)\r\n {\r\n }\r\n RestoreJigMaterial()\r\n {\r\n for (let [type, en] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, en);\r\n }\r\n get Visible()\r\n {\r\n return this._Visible;\r\n }\r\n set Visible(v: boolean)\r\n {\r\n if (v !== this._Visible)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Visible = v;\r\n this.UpdateVisible();\r\n }\r\n }\r\n\r\n private get IsVisible()\r\n {\r\n return !this._isErase && this._Visible;\r\n }\r\n\r\n UpdateVisible()\r\n {\r\n if (this._drawObject)\r\n {\r\n this._drawObject.visible = this.IsVisible;\r\n if (this.IsVisible)\r\n this.UpdateRenderType(userConfig.RenderType);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n GoodBye()\r\n {\r\n super.GoodBye();\r\n if (this._drawObject && this._drawObject.parent)\r\n this._drawObject.parent.remove(this._drawObject);\r\n this.ClearDraw();\r\n }\r\n\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this._isErase)\r\n return;\r\n this.__UpdateVersion__++;\r\n super.Erase(isErase);\r\n this.UpdateVisible();\r\n this.EraseEvent(isErase);\r\n }\r\n\r\n @iaop\r\n EraseEvent(isErase: boolean)\r\n {\r\n\r\n }\r\n /**\r\n * 使用统一的方法设置对象的矩阵.\r\n * 需要对缩放矩形进行重载.避免对象矩阵不是单位矩阵\r\n */\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (equaln(m.getMaxScaleOnAxis(), 1))\r\n {\r\n let xA = new Vector3();\r\n let yA = new Vector3();\r\n let zA = new Vector3();\r\n m.extractBasis(xA, yA, zA);\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n if (!equalv3(xA.clone().cross(yA).normalize(), zA))\r\n this.ApplyMirrorMatrix(m);\r\n else\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n else\r\n {\r\n this.ApplyScaleMatrix(m);\r\n }\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n\r\n }\r\n\r\n /**\r\n *\r\n * @param snapMode 捕捉模式(单一)\r\n * @param pickPoint const\r\n * @param lastPoint const\r\n * @param viewXform const 最近点捕捉需要这个变量\r\n * @returns object snap points\r\n */\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n return [];\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n *\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\r\n * @memberof Entity\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n\r\n }\r\n IntersectWith(curve: Entity, intType: IntersectOption): Vector3[] { return; }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._CurRenderType = this._CurRenderType;\r\n ent.Template = undefined;\r\n ent.CloneDrawObject(this);\r\n return ent;\r\n }\r\n\r\n CloneDrawObject(from: this)\r\n {\r\n for (let [type, obj] of from._CacheDrawObject)\r\n {\r\n let oldUserDaata = obj.userData;\r\n obj.traverse(o => o.userData = {});\r\n let newObj = obj.clone();\r\n obj.userData = oldUserDaata;\r\n obj.userData.IsClone = true;\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n newObj.userData.IsClone = true;\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n static __ReadFileIng__: boolean;\r\n __ReadFileIng__: boolean;\r\n\r\n get ReadFileIng()\r\n {\r\n return this.__ReadFileIng__ || Entity.__ReadFileIng__;\r\n }\r\n\r\n /**\r\n * 从文件读取,序列化自身,如果需要,重载_ReadFile\r\n */\r\n ReadFile(file: CADFiler)\r\n {\r\n this.__ReadFileIng__ = true;\r\n this._ReadFile(file);\r\n this.Update();\r\n this.__ReadFileIng__ = false;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._Color = file.Read();\r\n this.materialId = file.ReadHardObjectId();\r\n this._Matrix.fromArray(file.Read());\r\n\r\n if (ver === 2)\r\n this.Owner = file.ReadObjectId();\r\n\r\n if (ver > 3)\r\n this.Template = file.ReadObjectId();\r\n\r\n if (ver > 4)\r\n this.GroupId = file.ReadHardObjectId();\r\n\r\n if (ver > 5)\r\n this._Visible = file.Read();\r\n if (ver > 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n if (ver > 7)\r\n {\r\n let count = file.Read();\r\n this.ProcessingGroupList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.ProcessingGroupList.push(file.ReadHardObjectId());\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(8);\r\n super.WriteFile(file);\r\n file.Write(this._Color);\r\n file.WriteHardObjectId(this.materialId);\r\n file.Write(this._Matrix.toArray());\r\n file.WriteObjectId(this.Template);\r\n file.WriteHardObjectId(this.GroupId);\r\n file.Write(this._Visible);\r\n file.Write(this._SpaceOCS.toArray());\r\n\r\n file.Write(this.ProcessingGroupList.length);\r\n for (let id of this.ProcessingGroupList)\r\n file.WriteHardObjectId(id);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n\r\n CopyFrom(obj: CADObject)\r\n {\r\n let templateIdBak = this.Template;\r\n super.CopyFrom(obj);\r\n this.Update();\r\n this.Template = templateIdBak;\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { CADFactory } from './CADFactory';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\r\nimport { Entity } from './Entity/Entity';\r\n\r\n/**\r\n * CAD文件数据\r\n */\r\nexport class CADFiler\r\n{\r\n database: Database;\r\n private readIndex: number = 0;\r\n constructor(protected _datas: any[] = [])\r\n {\r\n }\r\n\r\n Destroy()\r\n {\r\n delete this._datas;\r\n delete this.readIndex;\r\n }\r\n\r\n get Data(): any[]\r\n {\r\n return this._datas;\r\n }\r\n\r\n set Data(data: any[])\r\n {\r\n this._datas = data;\r\n this.Reset();\r\n }\r\n\r\n Clear()\r\n {\r\n this._datas.length = 0;\r\n return this.Reset();\r\n }\r\n Reset()\r\n {\r\n this.readIndex = 0;\r\n return this;\r\n }\r\n\r\n WriteString(str: string)\r\n {\r\n this._datas.push(str);\r\n return this;\r\n }\r\n\r\n ReadString(): string\r\n {\r\n return this._datas[this.readIndex++] as string;\r\n }\r\n\r\n WriteObject(obj: ISerialize)\r\n {\r\n if (!obj)\r\n {\r\n this.Write(\"\");\r\n return;\r\n }\r\n this.WriteString(obj.constructor.name);\r\n obj.WriteFile(this);\r\n\r\n return this;\r\n }\r\n\r\n ReadObject(obj?: T): T\r\n {\r\n let className = this.ReadString();\r\n if (className)\r\n {\r\n if (obj === undefined)\r\n {\r\n obj = CADFactory.CreateObject(className);\r\n if (this.database !== undefined && obj instanceof CADObject)\r\n obj.SetDefaultDb(this.database);\r\n }\r\n obj.ReadFile(this);\r\n return obj;\r\n }\r\n }\r\n\r\n CloneObjects(objects: CADObject[], clonedObjects: CADObject[] = [])\r\n {\r\n for (let o of objects)\r\n this.WriteObject(o);\r\n let count = objects.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let obj = this.ReadObject();\r\n if (obj instanceof Entity)\r\n obj.CloneDrawObject(objects[i] as Entity);\r\n clonedObjects.push(obj);\r\n }\r\n\r\n return clonedObjects;\r\n }\r\n\r\n Write(data: any)\r\n {\r\n if (data instanceof ObjectId)\r\n this._datas.push(data.Index);\r\n else\r\n this._datas.push(data);\r\n\r\n return this;\r\n }\r\n\r\n Read(): any\r\n {\r\n return this._datas[this.readIndex++];\r\n }\r\n\r\n ReadArray(count: number): any[]\r\n {\r\n let arr = this._datas.slice(this.readIndex, this.readIndex + count);\r\n this.readIndex += count;\r\n return arr;\r\n }\r\n\r\n //------------------------ID序列化------------------------\r\n /*\r\n Id关联分为三种情况:\r\n 1.普通关联:关联对象未被拷贝时,关联到空对象.\r\n 2.软关联 :关联对象未被拷贝时,关联到原先的对象.\r\n 3.硬关联 :对象被拷贝时,被关联的对象必须也被拷贝.\r\n */\r\n\r\n //-------1.普通关联\r\n WriteObjectId(id: ObjectId): this\r\n {\r\n if (id)\r\n this.Write(id.Index);\r\n else\r\n this.Write(0);\r\n return this;\r\n }\r\n\r\n ReadObjectId(): ObjectId\r\n {\r\n let index = this.Read();\r\n if (this.database)\r\n return this.database.GetObjectId(index, true);\r\n }\r\n\r\n //-------2.软关联\r\n WriteSoftObjectId(id: ObjectId): this\r\n {\r\n return this.WriteObjectId(id);\r\n }\r\n ReadSoftObjectId(): ObjectId\r\n {\r\n return this.ReadObjectId();\r\n }\r\n\r\n //-------3.硬关联\r\n WriteHardObjectId(id: ObjectId): this\r\n {\r\n return this.WriteObjectId(id);\r\n }\r\n ReadHardObjectId()\r\n {\r\n return this.ReadObjectId();\r\n }\r\n\r\n //序列化\r\n ToString()\r\n {\r\n return JSON.stringify(this._datas);\r\n }\r\n FromString(str: string)\r\n {\r\n this._datas = JSON.parse(str);\r\n }\r\n}\r\n","import { ShaderMaterialParameters, Vector3 } from \"three\";\r\n\r\n//https://github.com/arefin86/arefin86.github.io/blob/master/js/shaders/GoochShader.js\r\nexport function GetGoochShader()\r\n{\r\n return {\r\n uniforms: {\r\n \"LightPosition\": { type: \"v3\", value: new Vector3(-200, 0, 200) },\r\n \"SurfaceColor\": { type: \"v3\", value: new Vector3(1.0, 1.0, 0.) },\r\n \"WarmColor\": { type: \"v3\", value: new Vector3(1.0, 0.5, 0.0) },\r\n \"CoolColor\": { type: \"v3\", value: new Vector3(0, 0, 0.7) },\r\n \"DiffuseWarm\": { type: \"f\", value: 0.45 },\r\n \"DiffuseCool\": { type: \"f\", value: 0.1 }\r\n },\r\n\r\n vertexShader: require(\"./Goodch2.vs\"),\r\n fragmentShader: require(\"./Goodch2.fs\")\r\n };\r\n}\r\n\r\nexport function GetGoodShaderSimple(color: Vector3 = new Vector3): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color }\r\n },\r\n vertexShader: require(\"./GoodchSimple.vs\"),\r\n fragmentShader: require(\"./GoodchSimple.fs\"),\r\n\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: 1\r\n };\r\n}\r\n","import { Color, DoubleSide, LineBasicMaterial, LineDashedMaterial, MeshBasicMaterial, ShaderMaterial, Vector3, Vector2 } from 'three';\r\nimport { GetGoodShaderSimple } from '../GLSL/GoochShader';\r\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\r\n\r\nconst ColorPalette = [\r\n [0, 0, 0, 0], //----- 0 - lets make it red for an example\r\n //[255, 255, 255, 255],//----- 0 - ByBlock - White\r\n [255, 0, 0, 255], //----- 1 - Red\r\n // [255, 0, 0, 255], //----- 1 - Red\r\n [255, 255, 0, 255], //----- 2 - Yellow\r\n [0, 255, 0, 255], //----- 3 - Green\r\n [0, 255, 255, 255], //----- 4 - Cyan\r\n [0, 0, 255, 255], //----- 5 - Blue\r\n [255, 0, 255, 255], //----- 6 - Magenta\r\n // [255, 0, 0, 255], //----- 7 - More red Red\r\n // [255, 0, 0, 255], //----- 8 - More red Red\r\n // [255, 0, 0, 255], //----- 9 - More red Red\r\n [255, 255, 255, 255],//----- 7 - White\r\n [128, 128, 128, 255],//----- 8\r\n [192, 192, 192, 255],//----- 9\r\n [255, 0, 0, 255], //----- 10\r\n [255, 127, 127, 255],//----- 11\r\n [165, 0, 0, 255], //----- 12\r\n [165, 82, 82, 255], //----- 13\r\n [127, 0, 0, 255], //----- 14\r\n [127, 63, 63, 255], //----- 15\r\n [76, 0, 0, 255], //----- 16\r\n [76, 38, 38, 255], //----- 17\r\n [38, 0, 0, 255], //----- 18\r\n [38, 19, 19, 255], //----- 19\r\n [255, 63, 0, 255], //----- 20\r\n [255, 159, 127, 255],//----- 21\r\n [165, 41, 0, 255], //----- 22\r\n [165, 103, 82, 255], //----- 23\r\n [127, 31, 0, 255], //----- 24\r\n [127, 79, 63, 255], //----- 25\r\n [76, 19, 0, 255], //----- 26\r\n [76, 47, 38, 255], //----- 27\r\n [38, 9, 0, 255], //----- 28\r\n [38, 23, 19, 255], //----- 29\r\n [255, 127, 0, 255], //----- 30\r\n [255, 191, 127, 255],//----- 31\r\n [165, 82, 0, 255], //----- 32\r\n [165, 124, 82, 255], //----- 33\r\n [127, 63, 0, 255], //----- 34\r\n [127, 95, 63, 255], //----- 35\r\n [76, 38, 0, 255], //----- 36\r\n [76, 57, 38, 255], //----- 37\r\n [38, 19, 0, 255], //----- 38\r\n [38, 28, 19, 255], //----- 39\r\n [255, 191, 0, 255], //----- 40\r\n [255, 223, 127, 255],//----- 41\r\n [165, 124, 0, 255], //----- 42\r\n [165, 145, 82, 255], //----- 43\r\n [127, 95, 0, 255], //----- 44\r\n [127, 111, 63, 255], //----- 45\r\n [76, 57, 0, 255], //----- 46\r\n [76, 66, 38, 255], //----- 47\r\n [38, 28, 0, 255], //----- 48\r\n [38, 33, 19, 255], //----- 49\r\n [255, 255, 0, 255], //----- 50\r\n [255, 255, 127, 255],//----- 51\r\n [165, 165, 0, 255], //----- 52\r\n [165, 165, 82, 255], //----- 53\r\n [127, 127, 0, 255], //----- 54\r\n [127, 127, 63, 255], //----- 55\r\n [76, 76, 0, 255], //----- 56\r\n [76, 76, 38, 255], //----- 57\r\n [38, 38, 0, 255], //----- 58\r\n [38, 38, 19, 255], //----- 59\r\n [191, 255, 0, 255], //----- 60\r\n [223, 255, 127, 255],//----- 61\r\n [124, 165, 0, 255], //----- 62\r\n [145, 165, 82, 255], //----- 63\r\n [95, 127, 0, 255], //----- 64\r\n [111, 127, 63, 255], //----- 65\r\n [57, 76, 0, 255], //----- 66\r\n [66, 76, 38, 255], //----- 67\r\n [28, 38, 0, 255], //----- 68\r\n [33, 38, 19, 255], //----- 69\r\n [127, 255, 0, 255], //----- 70\r\n [191, 255, 127, 255],//----- 71\r\n [82, 165, 0, 255], //----- 72\r\n [124, 165, 82, 255], //----- 73\r\n [63, 127, 0, 255], //----- 74\r\n [95, 127, 63, 255], //----- 75\r\n [38, 76, 0, 255], //----- 76\r\n [57, 76, 38, 255], //----- 77\r\n [19, 38, 0, 255], //----- 78\r\n [28, 38, 19, 255], //----- 79\r\n [63, 255, 0, 255], //----- 80\r\n [159, 255, 127, 255],//----- 81\r\n [41, 165, 0, 255], //----- 82\r\n [103, 165, 82, 255], //----- 83\r\n [31, 127, 0, 255], //----- 84\r\n [79, 127, 63, 255], //----- 85\r\n [19, 76, 0, 255], //----- 86\r\n [47, 76, 38, 255], //----- 87\r\n [9, 38, 0, 255], //----- 88\r\n [23, 38, 19, 255], //----- 89\r\n [0, 255, 0, 255], //----- 90\r\n [127, 255, 127, 255],//----- 91\r\n [0, 165, 0, 255], //----- 92\r\n [82, 165, 82, 255], //----- 93\r\n [0, 127, 0, 255], //----- 94\r\n [63, 127, 63, 255], //----- 95\r\n [0, 76, 0, 255], //----- 96\r\n [38, 76, 38, 255], //----- 97\r\n [0, 38, 0, 255], //----- 98\r\n [19, 38, 19, 255], //----- 99\r\n [0, 255, 63, 255], //----- 100\r\n [127, 255, 159, 255],//----- 101\r\n [0, 165, 41, 255], //----- 102\r\n [82, 165, 103, 255], //----- 103\r\n [0, 127, 31, 255], //----- 104\r\n [63, 127, 79, 255], //----- 105\r\n [0, 76, 19, 255], //----- 106\r\n [38, 76, 47, 255], //----- 107\r\n [0, 38, 9, 255], //----- 108\r\n [19, 38, 23, 255], //----- 109\r\n [0, 255, 127, 255], //----- 110\r\n [127, 255, 191, 255],//----- 111\r\n [0, 165, 82, 255], //----- 112\r\n [82, 165, 124, 255], //----- 113\r\n [0, 127, 63, 255], //----- 114\r\n [63, 127, 95, 255], //----- 115\r\n [0, 76, 38, 255], //----- 116\r\n [38, 76, 57, 255], //----- 117\r\n [0, 38, 19, 255], //----- 118\r\n [19, 38, 28, 255], //----- 119\r\n [0, 255, 191, 255], //----- 120\r\n [127, 255, 223, 255],//----- 121\r\n [0, 165, 124, 255], //----- 122\r\n [82, 165, 145, 255], //----- 123\r\n [0, 127, 95, 255], //----- 124\r\n [63, 127, 111, 255], //----- 125\r\n [0, 76, 57, 255], //----- 126\r\n [38, 76, 66, 255], //----- 127\r\n [0, 38, 28, 255], //----- 128\r\n [19, 38, 33, 255], //----- 129\r\n [0, 255, 255, 255], //----- 130\r\n [127, 255, 255, 255],//----- 131\r\n [0, 165, 165, 255], //----- 132\r\n [82, 165, 165, 255], //----- 133\r\n [0, 127, 127, 255], //----- 134\r\n [63, 127, 127, 255], //----- 135\r\n [0, 76, 76, 255], //----- 136\r\n [38, 76, 76, 255], //----- 137\r\n [0, 38, 38, 255], //----- 138\r\n [19, 38, 38, 255], //----- 139\r\n [0, 191, 255, 255], //----- 140\r\n [127, 223, 255, 255],//----- 141\r\n [0, 124, 165, 255], //----- 142\r\n [82, 145, 165, 255], //----- 143\r\n [0, 95, 127, 255], //----- 144\r\n [63, 111, 127, 255], //----- 145\r\n [0, 57, 76, 255], //----- 146\r\n [38, 66, 76, 255], //----- 147\r\n [0, 28, 38, 255], //----- 148\r\n [19, 33, 38, 255], //----- 149\r\n [0, 127, 255, 255], //----- 150\r\n [127, 191, 255, 255],//----- 151\r\n [0, 82, 165, 255], //----- 152\r\n [82, 124, 165, 255], //----- 153\r\n [0, 63, 127, 255], //----- 154\r\n [63, 95, 127, 255], //----- 155\r\n [0, 38, 76, 255], //----- 156\r\n [38, 57, 76, 255], //----- 157\r\n [0, 19, 38, 255], //----- 158\r\n [19, 28, 38, 255], //----- 159\r\n [0, 63, 255, 255], //----- 160\r\n [127, 159, 255, 255],//----- 161\r\n [0, 41, 165, 255], //----- 162\r\n [82, 103, 165, 255], //----- 163\r\n [0, 31, 127, 255], //----- 164\r\n [63, 79, 127, 255], //----- 165\r\n [0, 19, 76, 255], //----- 166\r\n [38, 47, 76, 255], //----- 167\r\n [0, 9, 38, 255], //----- 168\r\n [19, 23, 38, 255], //----- 169\r\n [0, 0, 255, 255], //----- 170\r\n [127, 127, 255, 255],//----- 171\r\n [0, 0, 165, 255], //----- 172\r\n [82, 82, 165, 255], //----- 173\r\n [0, 0, 127, 255], //----- 174\r\n [63, 63, 127, 255], //----- 175\r\n [0, 0, 76, 255], //----- 176\r\n [38, 38, 76, 255], //----- 177\r\n [0, 0, 38, 255], //----- 178\r\n [19, 19, 38, 255], //----- 179\r\n [63, 0, 255, 255], //----- 180\r\n [159, 127, 255, 255],//----- 181\r\n [41, 0, 165, 255], //----- 182\r\n [103, 82, 165, 255], //----- 183\r\n [31, 0, 127, 255], //----- 184\r\n [79, 63, 127, 255], //----- 185\r\n [19, 0, 76, 255], //----- 186\r\n [47, 38, 76, 255], //----- 187\r\n [9, 0, 38, 255], //----- 188\r\n [23, 19, 38, 255], //----- 189\r\n [127, 0, 255, 255], //----- 190\r\n [191, 127, 255, 255],//----- 191\r\n [82, 0, 165, 255], //----- 192\r\n [124, 82, 165, 255], //----- 193\r\n [63, 0, 127, 255], //----- 194\r\n [95, 63, 127, 255], //----- 195\r\n [38, 0, 76, 255], //----- 196\r\n [57, 38, 76, 255], //----- 197\r\n [19, 0, 38, 255], //----- 198\r\n [28, 19, 38, 255], //----- 199\r\n [191, 0, 255, 255], //----- 200\r\n [223, 127, 255, 255],//----- 201\r\n [124, 0, 165, 255], //----- 202\r\n [145, 82, 165, 255], //----- 203\r\n [95, 0, 127, 255], //----- 204\r\n [111, 63, 127, 255], //----- 205\r\n [57, 0, 76, 255], //----- 206\r\n [66, 38, 76, 255], //----- 207\r\n [28, 0, 38, 255], //----- 208\r\n [33, 19, 38, 255], //----- 209\r\n [255, 0, 255, 255], //----- 210\r\n [255, 127, 255, 255],//----- 211\r\n [165, 0, 165, 255], //----- 212\r\n [165, 82, 165, 255], //----- 213\r\n [127, 0, 127, 255], //----- 214\r\n [127, 63, 127, 255], //----- 215\r\n [76, 0, 76, 255], //----- 216\r\n [76, 38, 76, 255], //----- 217\r\n [38, 0, 38, 255], //----- 218\r\n [38, 19, 38, 255], //----- 219\r\n [255, 0, 191, 255], //----- 220\r\n [255, 127, 223, 255],//----- 221\r\n [165, 0, 124, 255], //----- 222\r\n [165, 82, 145, 255], //----- 223\r\n [127, 0, 95, 255], //----- 224\r\n [127, 63, 111, 255], //----- 225\r\n [76, 0, 57, 255], //----- 226\r\n [76, 38, 66, 255], //----- 227\r\n [38, 0, 28, 255], //----- 228\r\n [38, 19, 33, 255], //----- 229\r\n [255, 0, 127, 255], //----- 230\r\n [255, 127, 191, 255],//----- 231\r\n [165, 0, 82, 255], //----- 232\r\n [165, 82, 124, 255], //----- 233\r\n [127, 0, 63, 255], //----- 234\r\n [127, 63, 95, 255], //----- 235\r\n [76, 0, 38, 255], //----- 236\r\n [76, 38, 57, 255], //----- 237\r\n [38, 0, 19, 255], //----- 238\r\n [38, 19, 28, 255], //----- 239\r\n [255, 0, 63, 255], //----- 240\r\n [255, 127, 159, 255],//----- 241\r\n [165, 0, 41, 255], //----- 242\r\n [165, 82, 103, 255], //----- 243\r\n [127, 0, 31, 255], //----- 244\r\n [127, 63, 79, 255], //----- 245\r\n [76, 0, 19, 255], //----- 246\r\n [76, 38, 47, 255], //----- 247\r\n [38, 0, 9, 255], //----- 248\r\n [38, 19, 23, 255], //----- 249\r\n [84, 84, 84, 255], //----- 250\r\n [118, 118, 118, 255],//----- 251\r\n [152, 152, 152, 255],//----- 252\r\n [186, 186, 186, 255],//----- 253\r\n [220, 220, 220, 255],//----- 254\r\n [255, 255, 255, 255],//----- 255\r\n [0, 0, 0, 0] //----- ByLayer - White\r\n];\r\n\r\nexport const LINE_WIDTH = 2;\r\n\r\n//颜色材质,对于二维图像来说可能有用,应该不对三维对象使用该材质\r\nexport class ColorMaterial\r\n{\r\n private constructor() { }\r\n private static _LineMaterialMap = new Map();\r\n private static _BasicMaterialMap = new Map();\r\n static GetLineMaterial(color: number): LineBasicMaterial\r\n {\r\n if (this._LineMaterialMap.has(color))\r\n return this._LineMaterialMap.get(color);\r\n let mat = new LineBasicMaterial({ color: this.GetColor(color), side: DoubleSide });\r\n this._LineMaterialMap.set(color, mat);\r\n return mat;\r\n }\r\n\r\n static GetBasicMaterial(color: number): MeshBasicMaterial\r\n {\r\n if (this._BasicMaterialMap.has(color))\r\n return this._BasicMaterialMap.get(color);\r\n let mtl = new MeshBasicMaterial({ color: this.GetColor(color) });\r\n this._BasicMaterialMap.set(color, mtl);\r\n return mtl;\r\n }\r\n\r\n private static _BasicDoubleSideMaterialMap = new Map();\r\n static GetBasicMaterialDoubleSide(color: number): MeshBasicMaterial\r\n {\r\n if (this._BasicDoubleSideMaterialMap.has(color))\r\n return this._BasicDoubleSideMaterialMap.get(color);\r\n let mtl = new MeshBasicMaterial({ color: this.GetColor(color), side: DoubleSide });\r\n this._BasicDoubleSideMaterialMap.set(color, mtl);\r\n return mtl;\r\n }\r\n\r\n private static _ConceptualMaterial: Map = new Map();\r\n static GetConceptualMaterial(color: number)\r\n {\r\n if (this._ConceptualMaterial.has(color))\r\n return this._ConceptualMaterial.get(color);\r\n\r\n let shaderParams = GetGoodShaderSimple(\r\n new Vector3().fromArray(this.GetColor(color).toArray())\r\n );\r\n let mtl = new ShaderMaterial(shaderParams);\r\n this._ConceptualMaterial.set(color, mtl);\r\n return mtl;\r\n }\r\n private static _printConceptualMaterial: ShaderMaterial;\r\n static GetPrintConceptualMaterial()\r\n {\r\n if (!this._printConceptualMaterial)\r\n {\r\n this._printConceptualMaterial = new ShaderMaterial({\r\n uniforms: {\r\n \"SurfaceColor\": { value: [1.0, 1.0, 1.0] }\r\n },\r\n vertexShader: require(\"../GLSL/GoodchSimple.vs\"),\r\n fragmentShader: require(\"../GLSL/GoodchSimple2.fs\"),\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: LINE_WIDTH\r\n });\r\n }\r\n return this._printConceptualMaterial;\r\n }\r\n\r\n private static _BasicTransparentMaterialMap: Map = new Map();\r\n static GetBasicMaterialTransparent(color: number, opacity: number)\r\n {\r\n let key = `${color},${opacity}`;\r\n let mat = this._BasicTransparentMaterialMap.get(key);\r\n if (mat) return mat;\r\n mat = new MeshBasicMaterial({ transparent: true, opacity: opacity, side: DoubleSide });\r\n this._BasicTransparentMaterialMap.set(key, mat);\r\n return mat;\r\n }\r\n\r\n private static _BasicTransparentMaterialMap2: Map = new Map();\r\n static GetBasicMaterialTransparent2(color: number, opacity: number)\r\n {\r\n let key = `${color},${opacity}`;\r\n let mat = this._BasicTransparentMaterialMap2.get(key);\r\n if (mat) return mat;\r\n mat = new MeshBasicMaterial({ transparent: true, opacity: opacity });\r\n this._BasicTransparentMaterialMap2.set(key, mat);\r\n return mat;\r\n }\r\n\r\n static GetColor(color: number)\r\n {\r\n let rgb = ColorPalette[color];\r\n if (rgb)\r\n return new Color(rgb[0] / 255, rgb[1] / 255, rgb[2] / 255);\r\n\r\n //避免无法获得到颜色而产生的错误\r\n return new Color();\r\n }\r\n\r\n //橡皮筋材质: 黄色 点划线\r\n static RubberBandMaterial = new LineDashedMaterial({\r\n color: 0xF0B41E,\r\n dashSize: 20,\r\n gapSize: 8,\r\n });\r\n\r\n //极轴材质: 绿色 点划线\r\n static SnapAxisMaterial = new LineDashedMaterial({\r\n color: 0x008B00,\r\n dashSize: 5,\r\n gapSize: 5\r\n });\r\n static PrintLineMatrial = new LineMaterial({\r\n color: 0x000000,\r\n linewidth: LINE_WIDTH,\r\n dashed: false,\r\n resolution: new Vector2(1000, 1000),\r\n side: DoubleSide,\r\n });\r\n static GrayTransparentMeshMaterial = new MeshBasicMaterial({\r\n color: 0xcccccc,\r\n transparent: true,\r\n opacity: 0.3,\r\n });\r\n static TransparentMeshMaterial = new MeshBasicMaterial({\r\n transparent: true,\r\n opacity: 0,\r\n });\r\n static TransparentLineMaterial = new MeshBasicMaterial({\r\n transparent: true,\r\n opacity: 0,\r\n });\r\n}\r\n","/**\r\n * 删除数组中指定的元素,返回数组本身\r\n * @param {Array} arr 需要操作的数组\r\n * @param {*} el 需要移除的元素\r\n */\r\nexport function arrayRemove(arr: Array, el: T): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (arr[i] !== el)\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\n\r\nexport function arrayRemoveOnce(arr: Array, el: T): Array\r\n{\r\n let index = arr.indexOf(el);\r\n if (index !== -1)\r\n arr.splice(index, 1);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 删除通过函数校验的元素\r\n * @param {(e: T) => boolean} checkFuntion 校验函数\r\n */\r\nexport function arrayRemoveIf(arr: Array, checkFuntion: (e: T) => boolean): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (!checkFuntion(arr[i]))\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\nexport function arrayFirst(arr: Array): T\r\n{\r\n return arr[0];\r\n}\r\n\r\nexport function arrayLast(arr: { [key: number]: T, length: number; }): T\r\n{\r\n return arr[arr.length - 1];\r\n}\r\n\r\n/**\r\n * 根据数值从小到大排序数组\r\n * @param {Array} arr\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arraySortByNumber(arr: Array): Array\r\n{\r\n arr.sort(sortNumberCompart);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 对排序好的数组进行去重操作\r\n * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arrayRemoveDuplicateBySort(arr: Array, checkFuction: (e1: T, e2: T) => boolean = checkEqual): Array\r\n{\r\n if (arr.length < 2) return arr;\r\n let j = 1;\r\n for (let i = 1, l = arr.length; i < l; i++)\r\n if (!checkFuction(arr[j - 1], arr[i]))\r\n arr[j++] = arr[i];\r\n arr.length = j;\r\n return arr;\r\n}\r\n\r\n//原地更新数组,注意这个函数并不会比map快.\r\nexport function arrayMap(arr: Array, mapFunc: (v: T) => T): Array\r\n{\r\n for (let i = 0, count = arr.length; i < count; i++)\r\n arr[i] = mapFunc(arr[i]);\r\n return arr;\r\n}\r\n\r\nfunction sortNumberCompart(e1: any, e2: any)\r\n{\r\n return e1 - e2;\r\n}\r\n\r\nfunction checkEqual(e1: any, e2: any): boolean\r\n{\r\n return e1 === e2;\r\n}\r\n\r\n/**\r\n * 改变数组的值顺序\r\n * @param arr 需要改变初始值位置的数组\r\n * @param index //将index位置以后的值放到起始位置\r\n */\r\nexport function changeArrayStartIndex(arr: T[], index: number): T[]\r\n{\r\n arr.unshift(...arr.splice(index));\r\n return arr;\r\n}\r\n\r\nexport function equalArray(a: T[], b: T[], checkF = checkEqual)\r\n{\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (var i = 0; i < a.length; ++i)\r\n if (!checkF(a[i], b[i])) return false;\r\n return true;\r\n}\r\n\r\nexport function arrayClone(arr: T[]): T[]\r\n{\r\n return arr.slice();\r\n}\r\n\r\n//https://jsperf.com/merge-array-implementations/30\r\nexport function arrayPushArray(arr1: T[], arr2: T[]): T[]\r\n{\r\n let arr1Length = arr1.length;\r\n let arr2Length = arr2.length;\r\n arr1.length = arr1Length + arr2Length;\r\n for (let i = 0; i < arr2Length; i++)\r\n arr1[arr1Length + i] = arr2[i];\r\n\r\n return arr1;\r\n}\r\n\r\nexport function arraySum(arr: number[])\r\n{\r\n let sum = 0;\r\n for (let n of arr) sum += n;\r\n return sum;\r\n}\r\n\r\nexport function FilterSet(s: Set, fn: (el: T) => boolean): Set\r\n{\r\n let ns = new Set();\r\n for (let el of s)\r\n {\r\n if (fn(el))\r\n ns.add(el);\r\n }\r\n return ns;\r\n}\r\n","\r\n/**\r\n * OSMODE\r\n */\r\nexport enum ObjectSnapMode\r\n{\r\n None = 0, //无\r\n End = 1, //端点\r\n Mid = 2, //中点\r\n Cen = 4, //圆心\r\n Node = 8,//节点\r\n Qua = 16,//象限点\r\n Int = 32,//交点\r\n Ins = 64,//插入点\r\n Per = 128,//垂足\r\n Tan = 256,//切点\r\n Nea = 512,//最近点\r\n NotEntitySnap = 1024,//清除所有对象捕捉\r\n App = 2048,//外观交点\r\n Ext = 4096,//延伸\r\n Par = 8192,//平行\r\n Axis = 16384,//极轴\r\n All = ~(~0 << 15) - 1024,\r\n}\r\n","import { BufferGeometry, Geometry } from \"three\";\r\n\r\nexport const BufferGeometry2GeometryCacheMap = new WeakMap();\r\nglobalThis.fuck = BufferGeometry2GeometryCacheMap;\r\n","import { BufferGeometry, Vector3, BufferAttribute, ShapeGeometry, Shape } from \"three\";\r\nimport { BufferGeometry2GeometryCacheMap } from \"../Editor/BufferGeometry2GeometryCacheMap\";\r\n\r\nexport namespace BufferGeometryUtils\r\n{\r\n export function CreateFromPts(pts: Vector3[]): BufferGeometry\r\n {\r\n return new BufferGeometry().setFromPoints(pts);\r\n }\r\n\r\n /**\r\n * 更新BufferGeometry的顶点\r\n * @param geo\r\n * @param pts\r\n * @returns 当成功时返回true,更新失败时返回false\r\n */\r\n export function UpdatePts(geo: BufferGeometry, pts: Vector3[]): boolean\r\n {\r\n let bf = geo.getAttribute(\"position\") as BufferAttribute;\r\n if (bf === undefined)\r\n geo.setFromPoints(pts);\r\n else if (bf.count >= pts.length)\r\n {\r\n bf.copyVector3sArray(pts);\r\n bf.needsUpdate = true;\r\n geo.drawRange.count = pts.length;\r\n }\r\n else\r\n return false;\r\n\r\n BufferGeometry2GeometryCacheMap.delete(geo);\r\n return true;\r\n }\r\n\r\n let arrowGeometry: ShapeGeometry;\r\n export function ArrowGeometry()\r\n {\r\n if (arrowGeometry)\r\n return arrowGeometry;\r\n else\r\n {\r\n let arrowShape = new Shape();\r\n arrowShape.lineTo(-0.5, -1.8);\r\n arrowShape.lineTo(0.5, -1.8);\r\n arrowGeometry = new ShapeGeometry(arrowShape);\r\n arrowGeometry.computeBoundingBox();\r\n return arrowGeometry;\r\n }\r\n }\r\n\r\n export function MergeBufferGeometries(geometries: BufferGeometry[], useGroups: boolean = false): BufferGeometry\r\n {\r\n if (geometries.length === 0)\r\n return new BufferGeometry();\r\n let isIndexed = geometries[0].index !== null;\r\n\r\n let attributesUsed = new Set(Object.keys(geometries[0].attributes));\r\n let morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes));\r\n\r\n let attributes = {};\r\n let morphAttributes = {};\r\n\r\n let morphTargetsRelative = geometries[0].morphTargetsRelative;\r\n\r\n let mergedGeometry = new BufferGeometry();\r\n\r\n let offset = 0;\r\n\r\n for (let i = 0; i < geometries.length; ++i)\r\n {\r\n\r\n let geometry = geometries[i];\r\n\r\n // ensure that all geometries are indexed, or none\r\n\r\n if (isIndexed !== (geometry.index !== null)) return null;\r\n\r\n // gather attributes, exit early if they're different\r\n\r\n for (let name in geometry.attributes)\r\n {\r\n\r\n if (!attributesUsed.has(name)) continue;\r\n\r\n if (attributes[name] === undefined) attributes[name] = [];\r\n\r\n attributes[name].push(geometry.attributes[name]);\r\n\r\n }\r\n\r\n // gather morph attributes, exit early if they're different\r\n\r\n if (morphTargetsRelative !== geometry.morphTargetsRelative) return null;\r\n\r\n for (let name in geometry.morphAttributes)\r\n {\r\n\r\n if (!morphAttributesUsed.has(name)) continue;\r\n\r\n if (morphAttributes[name] === undefined) morphAttributes[name] = [];\r\n\r\n morphAttributes[name].push(geometry.morphAttributes[name]);\r\n\r\n }\r\n\r\n // gather .userData\r\n\r\n mergedGeometry.userData.mergedUserData = mergedGeometry.userData.mergedUserData || [];\r\n mergedGeometry.userData.mergedUserData.push(geometry.userData);\r\n\r\n if (useGroups)\r\n {\r\n\r\n let count: number;\r\n\r\n if (isIndexed)\r\n {\r\n\r\n count = geometry.index.count;\r\n\r\n } else if (geometry.attributes.position !== undefined)\r\n {\r\n\r\n count = geometry.attributes.position.count;\r\n\r\n } else\r\n {\r\n\r\n return null;\r\n\r\n }\r\n\r\n mergedGeometry.addGroup(offset, count, i);\r\n\r\n offset += count;\r\n\r\n }\r\n\r\n }\r\n\r\n // merge indices\r\n\r\n if (isIndexed)\r\n {\r\n\r\n let indexOffset = 0;\r\n let mergedIndex = [];\r\n\r\n for (let i = 0; i < geometries.length; ++i)\r\n {\r\n\r\n let index = geometries[i].index;\r\n\r\n for (let j = 0; j < index.count; ++j)\r\n {\r\n\r\n mergedIndex.push(index.getX(j) + indexOffset);\r\n\r\n }\r\n\r\n indexOffset += geometries[i].attributes.position.count;\r\n\r\n }\r\n\r\n mergedGeometry.setIndex(mergedIndex);\r\n\r\n }\r\n\r\n // merge attributes\r\n\r\n for (let name in attributes)\r\n {\r\n\r\n let mergedAttribute = MergeBufferAttributes(attributes[name]);\r\n\r\n if (!mergedAttribute) return null;\r\n\r\n mergedGeometry.setAttribute(name, mergedAttribute);\r\n\r\n }\r\n\r\n // merge morph attributes\r\n\r\n for (let name in morphAttributes)\r\n {\r\n\r\n let numMorphTargets = morphAttributes[name][0].length;\r\n\r\n if (numMorphTargets === 0) break;\r\n\r\n mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\r\n mergedGeometry.morphAttributes[name] = [];\r\n\r\n for (let i = 0; i < numMorphTargets; ++i)\r\n {\r\n\r\n let morphAttributesToMerge: any[] = [];\r\n\r\n for (let j = 0; j < morphAttributes[name].length; ++j)\r\n {\r\n\r\n morphAttributesToMerge.push(morphAttributes[name][j][i]);\r\n\r\n }\r\n\r\n let mergedMorphAttribute = MergeBufferAttributes(morphAttributesToMerge);\r\n\r\n if (!mergedMorphAttribute) return null;\r\n\r\n mergedGeometry.morphAttributes[name].push(mergedMorphAttribute);\r\n\r\n }\r\n\r\n }\r\n\r\n return mergedGeometry;\r\n\r\n }\r\n\r\n export function MergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute\r\n {\r\n let TypedArray;\r\n let itemSize: number;\r\n let normalized: boolean;\r\n let arrayLength = 0;\r\n\r\n for (let i = 0; i < attributes.length; ++i)\r\n {\r\n\r\n let attribute = attributes[i];\r\n\r\n if (TypedArray === undefined) TypedArray = attribute.array.constructor;\r\n if (TypedArray !== attribute.array.constructor) return null;\r\n\r\n if (itemSize === undefined) itemSize = attribute.itemSize;\r\n if (itemSize !== attribute.itemSize) return null;\r\n\r\n if (normalized === undefined) normalized = attribute.normalized;\r\n if (normalized !== attribute.normalized) return null;\r\n\r\n arrayLength += attribute.array.length;\r\n\r\n }\r\n\r\n let array = new TypedArray(arrayLength);\r\n let offset = 0;\r\n\r\n for (let i = 0; i < attributes.length; ++i)\r\n {\r\n\r\n array.set(attributes[i].array, offset);\r\n\r\n offset += attributes[i].array.length;\r\n\r\n }\r\n\r\n return new BufferAttribute(array, itemSize, normalized);\r\n\r\n }\r\n\r\n}\r\n","import { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { clamp } from \"../Common/Utils\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\n\r\nexport class Shape2 extends Shape\r\n{\r\n getPoints(divisions: number = 12)\r\n {\r\n divisions = divisions || 12;\r\n let points = [], last: Vector2;\r\n for (let i = 0, curves = this.curves; i < curves.length; i++)\r\n {\r\n let curve = curves[i];\r\n //@ts-ignore\r\n let resolution = (curve && curve.isEllipseCurve) ? clamp(curve.getLength() / 20, divisions * 2, 60)\r\n //@ts-ignore\r\n : (curve && (curve.isLineCurve || curve.isLineCurve3)) ? 1\r\n //@ts-ignore\r\n : (curve && curve.isSplineCurve) ? divisions * curve.points.length\r\n : divisions;\r\n\r\n let pts = curve.getPoints(resolution);\r\n\r\n for (let j = 0; j < pts.length; j++)\r\n {\r\n let point = pts[j];\r\n if (last && equalv2(last, point, 1e-4))\r\n continue; // ensures no consecutive points are duplicates\r\n\r\n points.push(point);\r\n last = point;\r\n\r\n if (j === pts.length - 1)\r\n point[\"_mask_\"] = true;\r\n }\r\n }\r\n if (this.autoClose\r\n && points.length > 1\r\n && !points[points.length - 1].equals(points[0]))\r\n {\r\n points.push(points[0]);\r\n }\r\n return points;\r\n }\r\n\r\n\r\n absellipse(aX: number, aY: number, xRadius: number, yRadius: number, aStartAngle: number, aEndAngle: number, aClockwise: boolean, aRotation: number): this\r\n {\r\n let curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation);\r\n\r\n /*\r\n if (this.curves.length > 0)\r\n {\r\n // if a previous curve is present, attempt to join\r\n let firstPoint = curve.getPoint(0);\r\n if (!equalv2(firstPoint, this.currentPoint))\r\n {\r\n this.lineTo(firstPoint.x, firstPoint.y);\r\n }\r\n }\r\n */\r\n\r\n this.curves.push(curve);\r\n\r\n let lastPoint = curve.getPoint(1);\r\n this.currentPoint.copy(lastPoint);\r\n\r\n return this;\r\n }\r\n}\r\n","import { Vector2, Vector3, Matrix4 } from \"three\";\r\n\r\nexport class Matrix2\r\n{\r\n //column-major\r\n el = [1, 0, 0, 1]; //ix iy jx jy [a c b d]\r\n\r\n set(ix: number, iy: number, jx: number, jy: number)\r\n {\r\n this.el[0] = ix;\r\n this.el[1] = iy;\r\n this.el[2] = jx;\r\n this.el[3] = jy;\r\n }\r\n\r\n applyVector(vec: Vector2 | Vector3)\r\n {\r\n let x = vec.x;\r\n let y = vec.y;\r\n let e = this.el;\r\n vec.x = e[0] * x + e[2] * y;\r\n vec.y = e[1] * x + e[3] * y;\r\n return this;\r\n }\r\n\r\n fromMatrix4(mtx4: Matrix4)\r\n {\r\n this.set(mtx4.elements[0], mtx4.elements[1],\r\n mtx4.elements[3], mtx4.elements[4]\r\n );\r\n }\r\n\r\n setRotate(theta: number): this\r\n {\r\n let c = Math.cos(theta);\r\n let s = Math.sin(theta);\r\n this.set(c, s, -s, c);\r\n return this;\r\n }\r\n\r\n //自我求逆矩阵,返回自身\r\n invert(): this\r\n {\r\n //ref:https://www.mathsisfun.com/algebra/matrix-inverse.html\r\n let [a, c, b, d] = this.el;\r\n let det = 1 / (a * d - b * c);\r\n this.set(d * det, -c * det,\r\n -b * det, a * det\r\n );\r\n return this;\r\n }\r\n}\r\n","import { Matrix2 } from './Matrix2';\r\n\r\nlet r = new Matrix2();\r\nexport function RotateUVs(geo: THREE.Geometry)\r\n{\r\n r.set(0, -1,\r\n 1, 0);\r\n\r\n for (let uvs of geo.faceVertexUvs)\r\n {\r\n for (let uv of uvs)\r\n {\r\n for (let v of uv)\r\n r.applyVector(v);\r\n }\r\n }\r\n geo.uvsNeedUpdate = true;\r\n}\r\n","import { ExtrudeGeometry, Matrix4, Mesh, Shape, Vector2 } from 'three';\r\nimport { Shape2 } from '../../DatabaseServices/Shape2';\r\nimport { AsVector3, equaln, polar } from '../../Geometry/GeUtils';\r\nimport { RotateUVs } from '../../Geometry/RotateUV';\r\n\r\nexport namespace CreateBoardUtil\r\n{\r\n //解析二维圆弧\r\n export class Arc2d\r\n {\r\n _StartAn: number;\r\n _EndAn: number;\r\n _StartPoint: Vector2;\r\n _EndPoint: Vector2;\r\n _Center: Vector2;\r\n _Radius: number;\r\n constructor(p1: Vector2, p2: Vector2, bul: number)\r\n {\r\n this._StartPoint = p1.clone();\r\n this._EndPoint = p2.clone();\r\n\r\n let vec: Vector2 = p2.clone().sub(p1);\r\n let len = vec.length();\r\n let an = vec.angle();\r\n this._Radius = len / Math.sin(2 * Math.atan(bul)) / 2;\r\n let allAngle = Math.atan(bul) * 4;\r\n let delDis = bul * len / 2;\r\n let toDis = this._Radius - delDis;\r\n an += Math.PI * 0.5;\r\n\r\n this._Center = p1.clone().add(p2);\r\n this._Center.multiplyScalar(0.5);\r\n\r\n polar(this._Center, an, toDis);\r\n\r\n this._StartAn = p1.clone().sub(this._Center).angle();\r\n this._EndAn = p2.clone().sub(this._Center).angle();\r\n if (bul < 0)\r\n {\r\n //一个神奇的特性 它需要这么做\r\n this._StartAn -= Math.PI;\r\n this._EndAn -= Math.PI;\r\n }\r\n }\r\n }\r\n\r\n\r\n //创建轮廓 通过点表和凸度\r\n export function CreatePath(pts: Vector2[], buls: number[]): Shape\r\n {\r\n let shape = new Shape2();\r\n if (pts.length === 0) return shape;\r\n let firstPt = pts[0];\r\n\r\n shape.moveTo(firstPt.x, firstPt.y);\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let nextPt = pts[i + 1];\r\n if (equaln(buls[i], 0, 1e-8))\r\n {\r\n shape.lineTo(nextPt.x, nextPt.y);\r\n }\r\n else\r\n {\r\n let pt = pts[i];\r\n //参考\r\n //http://www.dorodnic.com/blog/tag/three-js/ 绘制一个齿轮\r\n //https://www.kirupa.com/html5/drawing_circles_canvas.htm //html5\r\n let arc2 = new Arc2d(pt, nextPt, buls[i]);\r\n let cen = arc2._Center;\r\n shape.absarc(cen.x, cen.y, arc2._Radius, arc2._StartAn, arc2._EndAn, buls[i] < 0);\r\n }\r\n }\r\n return shape;\r\n }\r\n\r\n //创建板件 暂时这么写\r\n export function createBoard(boardData: object)\r\n {\r\n var pts: Vector2[] = new Array();\r\n var buls: number[] = new Array();\r\n var boardPts = boardData[\"Pts\"];\r\n var boardBuls = boardData[\"Buls\"];\r\n\r\n let boardHeight = boardData[\"H\"];\r\n\r\n var boardMat = new Matrix4();\r\n var matInv: Matrix4 = new Matrix4();\r\n //InitBoardMat\r\n {\r\n\r\n var xD = AsVector3(boardData[\"XVec\"]);\r\n var yD = AsVector3(boardData[\"YVec\"]);\r\n var ZD = AsVector3(boardData[\"ZVec\"]);\r\n var pBase = AsVector3(boardData[\"BasePoint\"]).multiplyScalar(0.001);\r\n\r\n boardMat.makeBasis(xD, yD, ZD);\r\n boardMat.setPosition(pBase);\r\n matInv.getInverse(boardMat);\r\n }\r\n\r\n for (let i = 0; i < boardPts.length; i++)\r\n {\r\n var pt = AsVector3(boardPts[i]).multiplyScalar(0.001);\r\n pt.applyMatrix4(matInv);\r\n pts.push(new Vector2(pt.x, pt.y));\r\n buls.push(boardBuls[i]);\r\n }\r\n\r\n var sp = CreatePath(pts, buls);\r\n var extrudeSettings = {\r\n steps: 1,\r\n bevelEnabled: false,\r\n amount: boardHeight * 0.001\r\n };\r\n\r\n var ext = new ExtrudeGeometry(sp, extrudeSettings);\r\n ext.translate(0, 0, -boardHeight * 0.001);\r\n ext.applyMatrix4(boardMat);\r\n\r\n if (boardData[\"BoardName\"] === \"地脚线\")\r\n {\r\n RotateUVs(ext);\r\n }\r\n\r\n var mesh = new Mesh(ext);\r\n return mesh;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { angle, clampRad, equalv3 } from \"./GeUtils\";\r\n\r\n//顶点\r\nexport interface Vertice\r\n{\r\n //位置\r\n position: Vector3;\r\n //路径\r\n routes: Route[];\r\n}\r\n\r\n//路线\r\nexport interface Route\r\n{\r\n curve: Curve; //路线的曲线\r\n from: Vertice;\r\n to: Vertice; //终点的点\r\n length: number;\r\n isReverse: boolean;\r\n an?: number; //角度\r\n\r\n s: Vector3;\r\n e: Vector3;\r\n}\r\n\r\n/**\r\n * 曲线连接图\r\n * 所有的顶点和边的关系\r\n */\r\nexport class CurveMap\r\n{\r\n constructor(\r\n public numdimensions = 4,\r\n public _RemoveSortLine = false,\r\n private multiplier = 10 ** numdimensions,\r\n ) { }\r\n\r\n /*\r\n 节点图.\r\n 每个节点对应下一个路口的路线表.\r\n 路口表使用逆时针排序,起始角度使用正x轴.\r\n */\r\n _VerticeMap = new Map();\r\n\r\n _Vertices: Vertice[] = [];\r\n\r\n /**\r\n * 得到节点图的所有站点列表\r\n */\r\n get Stands(): Vertice[]\r\n {\r\n return this._Vertices;\r\n }\r\n\r\n /**\r\n * @param curve\r\n * @param [isArc=curve instanceof Arc]\r\n * @param [removeDuplicate=false]\r\n * @returns 加入成功?\r\n */\r\n AddCurveToMap(curve: Curve, isArc: boolean = curve instanceof Arc, removeDuplicate: boolean = false, parseAngle = false): boolean\r\n {\r\n let sp = curve.StartPoint;\r\n let ep = curve.EndPoint;\r\n let startS = this.GetOnlyVertice(sp);\r\n let endS = this.GetOnlyVertice(ep);\r\n\r\n //在面域分析中,路线指向同一个顶点已经没有意义了\r\n if (this._RemoveSortLine && startS === endS)\r\n return false;\r\n\r\n if (removeDuplicate)//删除重复\r\n {\r\n let index = startS.routes.findIndex(r =>\r\n {\r\n if (r.to === endS && r.curve.constructor.name === curve.constructor.name)\r\n {\r\n if (isArc)\r\n return equalv3(curve.GetPointAtParam(0.5), r.curve.GetPointAtParam(0.5));\r\n return true;\r\n }\r\n });\r\n if (index !== -1) return false;\r\n }\r\n\r\n let length = curve.Length;\r\n curve.TempData = 0;\r\n\r\n let routeS2E: Route = { curve, isReverse: false, length, from: startS, to: endS, s: sp, e: ep };\r\n let routeE2S: Route = { curve, isReverse: true, length, from: endS, to: startS, e: sp, s: ep };\r\n\r\n if (!isArc && parseAngle)\r\n {\r\n let an = angle(endS.position.clone().sub(startS.position));\r\n routeS2E.an = an;\r\n routeE2S.an = clampRad(an + Math.PI);\r\n }\r\n startS.routes.push(routeS2E);\r\n endS.routes.push(routeE2S);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * 获得唯一的顶点\r\n */\r\n GetOnlyVertice(p: Vector3): Vertice\r\n {\r\n let gp = this.GenerateP(p);\r\n if (this._VerticeMap.has(gp))\r\n return this._VerticeMap.get(gp);\r\n\r\n let vertice: Vertice = { position: gp, routes: [] };\r\n this._VerticeMap.set(p, vertice);\r\n this._Vertices.push(vertice);\r\n return vertice;\r\n }\r\n\r\n _LookupTable: { [key: string]: Vector3; } = {};\r\n\r\n /**\r\n * 生成一个唯一的向量.\r\n */\r\n GenerateP(p: Vector3): Vector3\r\n {\r\n let key = \"\";\r\n let els = p.toArray();\r\n for (let n of els)\r\n {\r\n let valueQuantized = Math.round(n * this.multiplier);\r\n key += valueQuantized + '/';\r\n }\r\n\r\n if (key in this._LookupTable)\r\n return this._LookupTable[key];\r\n\r\n let hashparts = els.map((el) =>\r\n {\r\n let q0 = Math.floor(el * this.multiplier);\r\n let q1 = q0 + 1;\r\n return ['' + q0 + '/', '' + q1 + '/'];\r\n });\r\n\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n key = '';\r\n hashparts.forEach(function (hashpart)\r\n {\r\n key += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this._LookupTable[key] = p;\r\n }\r\n return p;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveIf, arrayRemoveOnce } from \"../Common/ArrayExt\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { CurveMap, Route, Vertice } from \"./CurveMap\";\r\nimport { angle } from \"./GeUtils\";\r\n\r\n//区域的路线表 表示了一个区域\r\ntype RegionRouteS = Route[][];\r\n\r\n/**\r\n面域分析,基于最小循环图重新实现的版本,拓展了实现求最大轮廓。\r\n当最大轮廓=最小轮廓时,只绘制最大轮廓(独立轮廓无分裂)。\r\n\r\n算法只实现去重模式,业务场景应该没有非去重模式。\r\n如果需要非去重模式,那么应该获取到多个CurveMap,然后对多个CurveMap进行面域分析,得出多个重叠的面域。\r\n */\r\nexport class RegionParse\r\n{\r\n //区域列表 通常是外轮廓\r\n RegionsOutline: RegionRouteS = [];\r\n //区域列表 通常是内轮廓\r\n RegionsInternal: RegionRouteS = [];\r\n\r\n //碎线 曲线进入到这里会被炸开.\r\n ExpLineMap: Map = new Map();\r\n\r\n private _CurveCount: number;\r\n\r\n /**\r\n * @param cuList 请不要传递圆和椭圆.\r\n * @param [numDimensions=3] 精度:小数点后个数\r\n * @param [removeDuplicate=true] 删除重复(现在必须是true,请不要修改它)\r\n */\r\n constructor(cuList: Curve[], public numDimensions = 3, private removeDuplicate = true)\r\n {\r\n //需要搜索的站\r\n let vertices = this.GenerateVerticeMap(cuList);\r\n\r\n //移除细丝\r\n while (true)\r\n {\r\n let v = vertices.find(v => v.routes.length < 2);\r\n if (v) this.RemoveFilamentAt(v, vertices);\r\n else break;\r\n }\r\n let lowerVertice: Vertice;\r\n while (vertices.length > 0)\r\n {\r\n lowerVertice = lowerVertice?.routes.length > 1 ? lowerVertice : this.FindLowerLeftStand(vertices);\r\n let minWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Min);\r\n let maxWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Max);\r\n\r\n this.RemoveEdge(minWalk[0]);\r\n this.RemoveFilamentAt(minWalk[0].from, vertices);\r\n this.RemoveFilamentAt(minWalk[0].to, vertices);\r\n\r\n minWalk = ReduceWalk(minWalk);\r\n maxWalk = ReduceWalk(maxWalk);\r\n if (maxWalk.length > 1)\r\n {\r\n this.RegionsOutline.push(maxWalk);\r\n if (minWalk.length === maxWalk.length && minWalk.every((w1, index) => w1 === maxWalk[index]))//大小重叠\r\n {\r\n //直接remove,不用计算引用个数\r\n for (let w of minWalk)\r\n {\r\n this.RemoveEdge(w);\r\n this.RemoveFilamentAt(w.from, vertices);\r\n this.RemoveFilamentAt(w.to, vertices);\r\n }\r\n continue;//继续循环\r\n }\r\n else\r\n for (let w of maxWalk)\r\n w.curve.TempData = 1;\r\n }\r\n\r\n if (minWalk.length > 1)// && minWalk.every(w => (w.curve.TempData) < 2) 没有重复线应该不会被用2次\r\n {\r\n this.RegionsInternal.push(minWalk);\r\n for (let w of minWalk)\r\n {\r\n w.curve.TempData++;\r\n if (w.curve.TempData === 2)\r\n {\r\n this.RemoveEdge(w);\r\n this.RemoveFilamentAt(w.from, vertices);\r\n this.RemoveFilamentAt(w.to, vertices);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n RemoveFilamentAt(v: Vertice, vertices: Vertice[])\r\n {\r\n let current = v;\r\n while (current && current.routes.length < 2)\r\n {\r\n vertices = arrayRemoveOnce(vertices, current);\r\n let r = current.routes[0];\r\n if (r)\r\n {\r\n this.RemoveEdge(r);\r\n current = r.to;\r\n }\r\n else\r\n current = undefined;\r\n }\r\n }\r\n\r\n RemoveEdge(r: Route)\r\n {\r\n let index = r.from.routes.findIndex(rr => rr.curve === r.curve);\r\n if (index !== -1)\r\n r.from.routes.splice(index, 1);\r\n\r\n index = r.to.routes.findIndex(rr => rr.curve === r.curve);\r\n if (index !== -1)\r\n r.to.routes.splice(index, 1);\r\n }\r\n\r\n /**\r\n * 找到最下方并且最左边的站 yx\r\n */\r\n private FindLowerLeftStand(vertices: Vertice[]): Vertice\r\n {\r\n return vertices.reduce((m, v) =>\r\n {\r\n let dy = v.position.y - m.position.y;\r\n if (dy < 0) return v;\r\n if (dy > 0) return m;\r\n return v.position.x - m.position.x < 0 ? v : m;\r\n });\r\n }\r\n\r\n /**\r\n * 构造路线图. 每个节点对应下一个路口的路线表. 路口表使用逆时针排序,起始角度使用正x轴.\r\n * @returns 所有的顶点\r\n */\r\n private GenerateVerticeMap(curveList: Curve[]): Array\r\n {\r\n let curveMap = new CurveMap(this.numDimensions, true);\r\n\r\n //将多段线炸开\r\n let plcus: Curve[] = [];\r\n arrayRemoveIf(curveList, c =>\r\n {\r\n if (c instanceof Polyline)\r\n {\r\n let cus = c.Explode();\r\n\r\n //如果为圆弧,提前打断\r\n let arcs: Arc[] = [];\r\n arrayRemoveIf(cus, c =>\r\n {\r\n if (c.Length < 1e-5) return true;\r\n\r\n if (c instanceof Arc)\r\n {\r\n let arcBrs = this.BreakArc(c);\r\n for (let arc of arcBrs)\r\n arcs.push(arc);\r\n }\r\n\r\n return false;\r\n });\r\n //加入到计算\r\n cus.push(...arcs);\r\n\r\n this.ExpLineMap.set(c, cus);\r\n plcus.push(...cus);\r\n return true;\r\n }\r\n return false;\r\n });\r\n curveList.push(...plcus);\r\n\r\n this._CurveCount = curveList.length;\r\n\r\n for (let cu of curveList)\r\n {\r\n //由于圆弧可能导致最低点计算错误的问题.\r\n if (cu instanceof Arc)\r\n {\r\n let arcs = this.BreakArc(cu);\r\n if (arcs.length > 1)\r\n {\r\n arcs.forEach(a => curveMap.AddCurveToMap(a, true, this.removeDuplicate, true));\r\n this.ExpLineMap.set(cu, arcs);\r\n continue;\r\n }\r\n else\r\n curveMap.AddCurveToMap(cu, true, this.removeDuplicate, true);\r\n }\r\n else\r\n curveMap.AddCurveToMap(cu, false, this.removeDuplicate, true);\r\n }\r\n\r\n //排序,根据角度逆时针排序.\r\n for (let v of curveMap._Vertices)\r\n {\r\n let minLength = Infinity;\r\n for (let r of v.routes)\r\n if (r.length < minLength) minLength = r.length;\r\n for (let r of v.routes)\r\n CalcRouteAngle(r, minLength * 0.2);\r\n v.routes.sort((r1, r2) => r1.an - r2.an);\r\n }\r\n return curveMap.Stands;\r\n }\r\n\r\n private BreakArc(arc: Arc): Arc[]\r\n {\r\n let underPt = arc.Center.add(new Vector3(0, -arc.Radius));\r\n let param = arc.GetParamAtPoint(underPt);\r\n if (param > 0.01 && param < 0.99)\r\n return arc.GetSplitCurves(param);\r\n else\r\n return [arc];\r\n }\r\n\r\n /**\r\n * 曲线是否已经被算法使用\r\n */\r\n GetCueveUsed(cu: Curve): boolean\r\n {\r\n if (this.ExpLineMap.has(cu))\r\n {\r\n let use = this.ExpLineMap.get(cu).some(c => c.TempData > 0);\r\n if (!use)\r\n this.ExpLineMap.delete(cu);\r\n return use;\r\n }\r\n else\r\n return cu.TempData > 0;\r\n }\r\n}\r\n\r\nfunction CalcRouteAngle(r: Route, length: number)\r\n{\r\n if (r.an !== undefined) return;\r\n let cu = r.curve;\r\n let p = r.isReverse ?\r\n cu.GetPointAtParam(cu.GetParamAtDist(r.length - length))\r\n : cu.GetPointAtParam(cu.GetParamAtDist(length));\r\n r.an = angle(p.sub(r.from.position));\r\n}\r\n\r\nenum WalkType\r\n{\r\n Min = 1,\r\n Max = -1,\r\n}\r\n\r\nfunction ClosedWalkFrom(startVertice: Vertice, maxRoute: number, type = WalkType.Min): Route[]\r\n{\r\n let walk: Route[] = [];\r\n let curVertice: Vertice = startVertice;\r\n let preRoute: Route;\r\n // console.log(\"start\", type, startVertice.position.toArray());\r\n do\r\n {\r\n let route = GetNextRoute(curVertice, preRoute, type);\r\n if (type === WalkType.Max && route.curve.TempData > 0)\r\n return [];\r\n // console.log(route.to.position.toArray());\r\n walk.push(route);\r\n [curVertice, preRoute] = [route.to, route];\r\n if (walk.length > maxRoute * 2)\r\n throw \"超过计算次数限制\";\r\n }\r\n while (curVertice !== startVertice);\r\n\r\n return walk;\r\n}\r\n\r\n/**\r\n * 删除中途回路\r\n */\r\nfunction ReduceWalk(w: Route[]): Route[]\r\n{\r\n if (w.length === 0) return w;\r\n //未构成回路,直接回家\r\n if (w[0].curve === arrayLast(w).curve) return [];\r\n\r\n for (let i = 0; i < w.length; i++)\r\n {\r\n let r1 = w[i];\r\n for (let j = w.length; j--;)\r\n {\r\n if (i === j) break;\r\n let r2 = w[j];\r\n if (r1.to === r2.to)\r\n {\r\n if (j > i)\r\n w.splice(i + 1, j - i);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return w;\r\n}\r\n\r\nfunction GetNextRoute(v: Vertice, prev?: Route, type: WalkType = WalkType.Min): Route\r\n{\r\n if (!prev)\r\n return arrayLast(v.routes); //顺时针 cw \\|/ 从左往右\r\n\r\n //逆时针 ccw 往左\r\n let index = v.routes.findIndex(r => r.curve === prev.curve);\r\n let newIndex = FixIndex(index + 1 * type, v.routes);\r\n return v.routes[newIndex];\r\n}\r\n","import { Vector3 } from 'three';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { IntersectOption } from './IntersectWith';\r\n\r\nexport enum BoolOpeartionType\r\n{\r\n Intersection = 0,\r\n Union = 1,\r\n Subtract = 2\r\n}\r\n\r\nconst fuzz = 1e-3;\r\nlet fuzzV3 = new Vector3(fuzz, fuzz, fuzz);\r\n\r\n//判断曲线是否在源封闭曲线内\r\nexport function isTargetCurInOrOnSourceCur(sourceCur: Polyline | Circle | Ellipse, targetCur: Curve)\r\n{\r\n if (!sourceCur.BoundingBox.expandByVector(fuzzV3).containsBox(targetCur.BoundingBox))\r\n return false;\r\n\r\n let cus: Curve[] = [];\r\n if (targetCur instanceof Polyline)\r\n cus = targetCur.Explode();\r\n else\r\n cus = [targetCur];\r\n\r\n return cus.every(c =>\r\n {\r\n let pts = getIntPtContextPts(sourceCur, c);\r\n if (pts.length <= 1)\r\n pts.push(c.StartPoint, c.EndPoint);\r\n return IsPtsAllInOrOnReg(sourceCur, pts);\r\n });\r\n}\r\n\r\n//获取交点处上下距0.01par的点\r\nfunction getIntPtContextPts(sourceCur: Curve, cu: Curve, pts: Vector3[] = [])\r\n{\r\n let interPts = cu.IntersectWith(sourceCur, IntersectOption.OnBothOperands);\r\n if (interPts.length > 0)\r\n {\r\n let pars = interPts.map(pt => cu.GetParamAtPoint(pt));\r\n for (let par of pars)\r\n {\r\n if (par >= 0.02)\r\n pts.push(cu.GetPointAtParam(par - 0.01));\r\n\r\n if (par <= (cu.EndParam - 0.02))\r\n pts.push(cu.GetPointAtParam(par + 0.01));\r\n }\r\n }\r\n return pts;\r\n}\r\n//判断点点是否全部都在封闭区域内或者在曲线上\r\nfunction IsPtsAllInOrOnReg(sourceReg: Polyline | Circle | Ellipse, pts: Vector3[])\r\n{\r\n return pts.every(pt =>\r\n {\r\n //是否点在封闭曲线内\r\n return sourceReg.PtOnCurve(pt) || sourceReg.PtInCurve(pt);\r\n });\r\n}\r\n\r\n//判断点是否全部都在封闭区域外或者在曲线上\r\nexport function IsPtsAllOutOrOnReg(sourceReg: Polyline | Circle, pts: Vector3[])\r\n{\r\n return pts.every(pt =>\r\n {\r\n //是否点在封闭曲线内\r\n return sourceReg.PtOnCurve(pt) || !sourceReg.PtInCurve(pt);\r\n });\r\n}\r\n","import { Line, Material, Object3D, Shape, Vector3 } from 'three';\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { Status } from '../../Common/Status';\r\nimport { equaln, equalv3 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectResult } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Entity } from './Entity';\r\n\r\nexport enum ExtendType\r\n{\r\n /**\r\n * 前后都不延伸\r\n */\r\n None = 0,\r\n /**\r\n * 只允许延伸前面\r\n */\r\n Front = 1,\r\n /**\r\n * 只允许延伸后面\r\n */\r\n Back = 2,\r\n /**\r\n * 前后延伸\r\n */\r\n Both = 3,\r\n}\r\n\r\n/**\r\n * 曲线的基类,子类请实现以下方法.\r\n */\r\n@Factory\r\nexport abstract class Curve extends Entity\r\n{\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Is2D()\r\n {\r\n return equaln(this._Matrix.elements[14], 0);\r\n }\r\n\r\n get StartPoint(): Vector3 { return; }\r\n set StartPoint(v: Vector3) { return; }\r\n get StartParam(): number { return; }\r\n get EndPoint(): Vector3 { return; }\r\n set EndPoint(v: Vector3) { return; }\r\n\r\n /** 曲线中点 */\r\n get Midpoint()\r\n {\r\n return this.GetPointAtParam(this.MidParam);\r\n }\r\n\r\n get MidParam()\r\n {\r\n if (this.EndParam === 1)\r\n return 0.5;\r\n else\r\n return this.GetParamAtDist(this.Length * 0.5);\r\n }\r\n\r\n get EndParam(): number { return; }\r\n get Area(): number { return 0; }\r\n /**\r\n *获得曲线的面积,逆时针为正,顺时针为负.\r\n */\r\n get Area2(): number { return 0; }\r\n get Length(): number { return 0; }\r\n get IsClose(): boolean { return false; }\r\n /** 曲线为顺时针 */\r\n get IsClockWise(): boolean { return this.Area2 < 0; }\r\n\r\n abstract get Shape(): Shape;\r\n\r\n GetPointAtParam(param: number): Vector3 { return; }\r\n GetPointAtDistance(distance: number): Vector3 { return; }\r\n GetDistAtParam(param: number): number { return; }\r\n GetDistAtPoint(pt: Vector3): number { return; }\r\n GetParamAtPoint(pt: Vector3): number { return; }\r\n GetParamAtPoint2(pt: Vector3): number { return this.GetParamAtPoint(pt); }\r\n\r\n GetParamAtDist(d: number): number { return; }\r\n\r\n /**\r\n * 返回曲线在指定位置的一阶导数(在wcs内)\r\n *\r\n * @param {(number | Vector3)} param\r\n * @returns {Vector3}\r\n * @memberof Curve\r\n */\r\n GetFistDeriv(param: number | Vector3): Vector3 { return; }\r\n GetFistDerivAngle(param: number | Vector3): number\r\n {\r\n let d = this.GetFistDeriv(param);\r\n return Math.atan2(d.y, d.x);\r\n }\r\n\r\n /**\r\n * 返回切割曲线后的结果.总是从起点开始切割,并且按顺序返回曲线.\r\n * @param {(number[] | number)} param\r\n * @returns {Array}\r\n */\r\n GetSplitCurves(param: number[] | number): Array { return; }\r\n //未完善\r\n GetCurveAtParamRange(startParam: number, EndParam: number): Array { return; }\r\n GetSplitCurvesByPts(pt: Vector3[] | Vector3): Array\r\n {\r\n let pts = Array.isArray(pt) ? pt : [pt];\r\n let pars = pts.map(p => this.GetParamAtPoint(p));\r\n return this.GetSplitCurves(pars);\r\n }\r\n protected SplitParamSort(param: number[] | number): number[]\r\n {\r\n if (Array.isArray(param))\r\n {\r\n param = param.filter(p => this.ParamOnCurve(p));\r\n if (param.length === 0)\r\n return [];\r\n param.push(0, this.EndParam);\r\n arraySortByNumber(param);\r\n arrayRemoveDuplicateBySort(param, (e1, e2) => equaln(e1, e2, 1e-7));\r\n return param;\r\n }\r\n else if (this.ParamOnCurve(param))\r\n return [0, param, this.EndParam];\r\n else\r\n return [];\r\n }\r\n Extend(newParam: number) { }\r\n /**\r\n * 连接曲线到本曲线,如果成功返回true\r\n * @param {Curve} cu 需要连接的曲线\r\n * @returns {boolean} 连接成功\r\n * @memberof Curve\r\n */\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-4): Status { return Status.False; }\r\n\r\n //翻转曲线.首尾调换.\r\n Reverse(): this { return this; }\r\n\r\n //点在曲线上\r\n PtOnCurve(pt: Vector3, fuzz = 1e-6): boolean\r\n {\r\n return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt));\r\n }\r\n\r\n //点在曲线中,不在起点或者终点.\r\n PtOnCurve2(pt: Vector3): boolean\r\n {\r\n return !(equalv3(this.StartPoint, pt, 1e-6) || equalv3(this.EndPoint, pt, 1e-6)) && this.ParamOnCurve(this.GetParamAtPoint(pt), 0);\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n return this.PtOnCurve(p, fuzz);\r\n }\r\n\r\n //参数在曲线上 容差,1e-6\r\n ParamOnCurve(param: number, fuzz = 1e-6): boolean { return !isNaN(param) && param >= -fuzz && param <= this.EndParam + fuzz; }\r\n GetOffsetCurves(offsetDist: number): Array { return; }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3 { return; }\r\n\r\n /**\r\n * 曲线相交点\r\n */\r\n IntersectWith(curve: Curve, intType: IntersectOption, tolerance = 1e-6): Vector3[]\r\n {\r\n return this.IntersectWith2(curve, intType, tolerance).map(r => r.pt);\r\n }\r\n\r\n /**\r\n * 曲线相交点和点的参数\r\n */\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-6): IntersectResult[] { return []; }\r\n\r\n\r\n /**\r\n * 拽托点个数\r\n */\r\n GetDragPointCount(drag: DragPointType): number { return 0; }\r\n\r\n //------------------绘制相关------------------\r\n //重载\r\n protected OnlyRenderType = true;\r\n\r\n /**\r\n * 重载:更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (type === RenderType.WireframePrint)\r\n {\r\n //打印模式暂时不需要改颜色\r\n }\r\n else\r\n {\r\n let m = obj as Line;\r\n m.material = material || ColorMaterial.GetLineMaterial(this._Color);\r\n }\r\n }\r\n\r\n UpdateJigMaterial(color = 8)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n this.UpdateDrawObjectMaterial(type, obj, ColorMaterial.GetLineMaterial(color));\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { curveLinkGroup, equalCurve } from \"../Common/CurveUtils\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { IntersectBox2 } from \"../Geometry/Box\";\r\nimport { Route } from \"../Geometry/CurveMap\";\r\nimport { equaln, equalv3 } from \"../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../Geometry/RegionParse\";\r\nimport { isTargetCurInOrOnSourceCur } from \"../GraphicsSystem/BoolOperateUtils\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\nimport { Arc } from \"./Entity/Arc\";\r\nimport { Circle } from \"./Entity/Circle\";\r\nimport { Curve } from \"./Entity/Curve\";\r\nimport { Polyline } from \"./Entity/Polyline\";\r\n\r\nlet cache = new WeakMap();\r\n\r\nconst COMBINE_FUZZ = 1e-2;\r\n\r\nexport class Contour\r\n{\r\n private _Curve: Polyline | Circle;\r\n\r\n protected SetCurve(cu: Polyline | Circle)\r\n {\r\n if (cu instanceof Polyline)\r\n {\r\n if (cu.Area2 < 0)\r\n cu.Reverse();\r\n }\r\n this._Curve = cu;\r\n }\r\n /**会将传入的闭合轮廓改为逆时针 */\r\n static CreateContour(cus: Curve[] | Polyline | Circle, needLink = true)\r\n {\r\n if (cus instanceof Curve)\r\n {\r\n if (cus.IsClose)\r\n {\r\n let c = new Contour();\r\n c.SetCurve(cus);\r\n return c;\r\n }\r\n return;\r\n }\r\n\r\n let closeCurve = Contour.Combine(cus, needLink, COMBINE_FUZZ) as Polyline | Circle;\r\n if (closeCurve && closeCurve.IsClose)\r\n {\r\n if (closeCurve instanceof Polyline && closeCurve.CloseMark === false)\r\n {\r\n closeCurve.CloseMark = true;\r\n closeCurve.RemoveVertexAt(closeCurve.NumberOfVertices - 1);\r\n }\r\n\r\n let c = new Contour();\r\n c.SetCurve(closeCurve);\r\n return c;\r\n }\r\n }\r\n get Curve(): Polyline | Circle\r\n {\r\n return this._Curve;\r\n }\r\n get Area()\r\n {\r\n return this._Curve.Area;\r\n }\r\n get BoundingBox()\r\n {\r\n return this._Curve.BoundingBox;\r\n }\r\n /**\r\n * 不等比例缩放\r\n * @param {number} ref 缩放参考值,大于该值的点缩放\r\n * @param {number} dist 缩放距离\r\n * @param {string} dir x y z\r\n */\r\n UnEqualProportionScale(ref: number, dist: number, dir: \"x\" | \"y\")\r\n {\r\n let cu = this._Curve;\r\n if (cu instanceof Polyline)\r\n {\r\n let lineData = cu.LineData;\r\n let length = lineData.length;\r\n let p = cu.Position[dir];\r\n\r\n let moveIndexs: number[] = [];\r\n for (let i = 0; i < length; i++)\r\n {\r\n if (lineData[i].pt[dir] + p > ref)\r\n moveIndexs.push(i);\r\n }\r\n let moveVec = new Vector3();\r\n moveVec[dir] = dist;\r\n cu.MoveStretchPoints(moveIndexs, moveVec);\r\n return true;\r\n }\r\n return false;\r\n }\r\n Clone()\r\n {\r\n return Contour.CreateContour([this._Curve.Clone()]);\r\n }\r\n //交集:结果数组为空则失败\r\n IntersectionBoolOperation(target: Contour): Contour[]\r\n {\r\n if (!IntersectBox2(this.BoundingBox, target.BoundingBox))\r\n return [];\r\n let resultCus = this.GetIntersetAndUnionList(target);\r\n return Contour.GetAllContour(resultCus.intersectionList);\r\n }\r\n //并集:结果轮廓数组长度大于2,则失败.等于1则成功.\r\n UnionBoolOperation(target: Contour): { contours: Contour[], holes: Contour[]; }\r\n {\r\n let resultCus = this.GetIntersetAndUnionList(target);\r\n\r\n //快速\r\n if (resultCus.unionList.every(c => c.IsClose))\r\n return {\r\n contours: Contour.GetAllContour(resultCus.unionList),\r\n holes: [],\r\n };\r\n\r\n //并集后的线段表如果有共线的直接合并起来\r\n let cus: Curve[] = [];\r\n for (let pl of resultCus.unionList)\r\n {\r\n if (pl instanceof Polyline)\r\n cus.push(...pl.Explode());\r\n else\r\n cus.push(pl);\r\n }\r\n let cuGroups = curveLinkGroup(cus);\r\n for (let g of cuGroups)\r\n {\r\n for (let i = 0; i < g.length; i++)\r\n {\r\n let c1 = g[i];\r\n let nextI = FixIndex(i + 1, g);\r\n let c2 = g[nextI];\r\n\r\n let status = c1.Join(c2);\r\n if (status === Status.True)\r\n {\r\n g.splice(nextI, 1);\r\n i--;\r\n }\r\n else if (status === Status.ConverToCircle)\r\n {\r\n g.length = 0;\r\n let a = c1 as Arc;\r\n g.push(new Circle(a.Center, a.Radius));\r\n break;\r\n }\r\n }\r\n }\r\n let allContour = Contour.GetAllContour(cuGroups);\r\n if (allContour.length < 2)\r\n {\r\n return {\r\n contours: allContour,\r\n holes: [],\r\n };\r\n }\r\n else\r\n {\r\n let cache = new WeakMap();\r\n for (let c of allContour)\r\n cache.set(c, c.Area);\r\n allContour.sort((a, b) => cache.get(b) - cache.get(a));\r\n return {\r\n contours: [allContour[0]],\r\n holes: allContour.slice(1)\r\n };\r\n }\r\n\r\n }\r\n //差集:等于0完全被减去\r\n SubstactBoolOperation(target: Contour): Contour[]\r\n {\r\n let subtractList = this.GetSubtractList(target);\r\n\r\n //纯网洞\r\n if (subtractList.every(c => c.IsClose))\r\n return Contour.GetAllContour(subtractList);\r\n\r\n let regParse = new RegionParse(subtractList, 2);\r\n\r\n let contours: Contour[] = [];\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c\r\n && !equalCurve(c.Curve, this.Curve)\r\n && !equalCurve(c.Curve, target.Curve)\r\n && c.Area > 1e-3)\r\n contours.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n\r\n return contours;\r\n }\r\n /**\r\n * 计算与目标轮廓布尔运算后的结果曲线.\r\n */\r\n GetIntersetAndUnionList(target: Contour): { intersectionList: Curve[], unionList: Curve[]; }\r\n {\r\n let intersectionList: Curve[] = [];\r\n let unionList: Curve[] = [];\r\n\r\n let sourceOutline = this._Curve;\r\n let targetOutline = target.Curve;\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3);\r\n\r\n //可能会有提升,但是好像不大(并且还有更慢的趋势)\r\n // if (!sourceOutline.BoundingBox.intersectsBox(targetOutline.BoundingBox, 1e-3))\r\n // return { intersectionList, unionList };\r\n\r\n let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n\r\n let sourceContainerTarget: boolean;\r\n let targetContainerSource: boolean;\r\n if (sourceOutline.Area > targetOutline.Area)\r\n {\r\n sourceContainerTarget = interPts.length === 0 ? fastCurveInCurve(sourceOutline as Polyline, targetOutline as Polyline) : this.CuInOutline(targetOutline);\r\n targetContainerSource = false;\r\n }\r\n else\r\n {\r\n sourceContainerTarget = false;\r\n targetContainerSource = interPts.length === 0 ? fastCurveInCurve(targetOutline as Polyline, sourceOutline as Polyline) : target.CuInOutline(sourceOutline);\r\n }\r\n\r\n //包含.相交.分离(三种状态)\r\n if (sourceContainerTarget)//源包含目标\r\n {\r\n intersectionList.push(targetOutline);\r\n unionList.push(sourceOutline);\r\n }\r\n else if (targetContainerSource)//目标包含源\r\n {\r\n unionList.push(targetOutline);\r\n intersectionList.push(sourceOutline);\r\n }\r\n else if (interPts.length <= 1)//分离\r\n {\r\n unionList.push(sourceOutline, targetOutline);\r\n }\r\n else//相交 interPts.length > 0\r\n {\r\n let pars1 = interPts.map(r => r.thisParam);\r\n let pars2 = interPts.map(r => r.argParam);\r\n\r\n let sourceCus: Array = sourceOutline.GetSplitCurves(pars1);\r\n let targetCus: Array = targetOutline.GetSplitCurves(pars2);\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let hasEqualCus = false;\r\n for (let i = 0; i < targetCus.length; i++)\r\n {\r\n let cu = targetCus[i];\r\n hasEqualCus = fastEqualCurve(cu, pl);\r\n if (hasEqualCus)\r\n {\r\n //方向相同\r\n if (\r\n equalv3(cu.GetFistDeriv(cu.EndParam * 0.5).normalize(), pl.GetFistDeriv(pl.EndParam * 0.5).normalize(), 1e-3)\r\n === isEqualNormal\r\n )\r\n {\r\n unionList.push(pl);\r\n intersectionList.push(pl);\r\n }\r\n targetCus.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n if (hasEqualCus)\r\n continue;\r\n\r\n if (fastCurveInCurve(targetOutline, pl))\r\n intersectionList.push(pl);\r\n else\r\n unionList.push(pl);\r\n }\r\n\r\n for (let pl of targetCus)\r\n {\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n intersectionList.push(pl);\r\n else\r\n unionList.push(pl);\r\n }\r\n\r\n //特殊的分离\r\n if (intersectionList.length === 0 && unionList.length === (sourceCus.length + targetCus.length))\r\n {\r\n return { intersectionList, unionList: [sourceOutline, targetOutline] };\r\n }\r\n }\r\n return { intersectionList, unionList };\r\n }\r\n GetSubtractList(target: Contour): Polyline[]\r\n {\r\n let sourceOutline = this._Curve as Polyline;\r\n let targetOutline = target.Curve as Polyline;\r\n\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3);\r\n\r\n let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n\r\n if (interPts.length <= 1)\r\n {\r\n //反包含\r\n if (fastCurveInCurve2(targetOutline, sourceOutline) || equalCurve(targetOutline, sourceOutline))\r\n return [];\r\n //包含\r\n if (fastCurveInCurve2(sourceOutline, targetOutline))\r\n return [sourceOutline, targetOutline];\r\n else//分离\r\n return [sourceOutline];\r\n }\r\n\r\n //相交\r\n let subtractList: Polyline[] = [];\r\n let sourceCus = sourceOutline.GetSplitCurves(interPts.map(r => r.thisParam)) as Polyline[];\r\n let targetCus = targetOutline.GetSplitCurves(interPts.map(r => r.argParam)) as Polyline[];\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let plMidParam = pl.MidParam;\r\n let plDir = pl.GetFistDeriv(plMidParam).normalize();\r\n\r\n let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl));\r\n if (index !== -1)\r\n {\r\n let cu = targetCus[index];\r\n let cuMidParam = cu.MidParam;\r\n let cuDir = cu.GetFistDeriv(cuMidParam).normalize();\r\n\r\n if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3))//不同向\r\n subtractList.push(pl);\r\n\r\n targetCus.splice(index, 1);\r\n\r\n continue;\r\n }\r\n if (!fastCurveInCurve(targetOutline, pl))\r\n subtractList.push(pl);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceCus.length;\r\n\r\n for (let pl of targetCus)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceCus.length)\r\n return [sourceOutline];\r\n\r\n return subtractList;\r\n }\r\n GetSubtractListByMoreTargets(targets: Contour[])\r\n {\r\n let { holes, subtractList } = this.GetSubListWithCus(targets);\r\n\r\n //纯网洞\r\n if (subtractList.every(c => c.IsClose))\r\n return {\r\n holes: holes.map(h => Contour.CreateContour(h)),\r\n outlines: Contour.GetAllContour(subtractList)\r\n };\r\n\r\n let regParse = new RegionParse(subtractList, 2);\r\n\r\n let contours: Contour[] = [];\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c\r\n && !equalCurve(c.Curve, this.Curve)\r\n && targets.every(target => !equalCurve(c.Curve, target.Curve))\r\n && c.Area > 1e-3)\r\n contours.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n\r\n return {\r\n holes: holes.map(h => Contour.CreateContour(h)),\r\n outlines: contours\r\n };\r\n\r\n }\r\n GetSubListWithCus(targets: Contour[])\r\n {\r\n let sourceOutline = this._Curve as Polyline;\r\n let subtractList: Polyline[] = [];\r\n let holes: Polyline[] = [];\r\n let intPars: number[] = [];\r\n let cuMap = new Map();\r\n\r\n let outBox = sourceOutline.BoundingBox;\r\n\r\n for (let con of targets)\r\n {\r\n const targetOutline = con.Curve as Polyline;\r\n\r\n if (!IntersectBox2(outBox, targetOutline.BoundingBox))\r\n continue;\r\n\r\n let pts = sourceOutline.IntersectWith2(con.Curve, IntersectOption.OnBothOperands, COMBINE_FUZZ);\r\n if (pts.length <= 1)\r\n {\r\n //反包含\r\n if (fastCurveInCurve2(targetOutline, sourceOutline) || equalCurve(targetOutline, sourceOutline))\r\n return { holes, subtractList };\r\n //包含\r\n if (fastCurveInCurve2(sourceOutline, targetOutline))\r\n holes.push(targetOutline);\r\n else//分离\r\n {\r\n\r\n }\r\n }\r\n else\r\n {\r\n intPars.push(...pts.map(r => r.thisParam));\r\n cuMap.set(targetOutline, pts.map(r => r.argParam));\r\n }\r\n }\r\n intPars.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(intPars, (e1, e2) => equaln(e1, e2, 1e-8));\r\n let sourceCus = sourceOutline.GetSplitCurves(intPars) as Polyline[];\r\n let targetCus: Polyline[] = [];\r\n\r\n let targetMap = new WeakMap();\r\n\r\n let isEqualNormal: boolean;\r\n\r\n for (let [c, pars] of cuMap)\r\n {\r\n let cus = c.GetSplitCurves(pars) as Polyline[];\r\n cus.forEach(cu => targetMap.set(cu, c));\r\n targetCus.push(...cus);\r\n }\r\n\r\n for (let pl of sourceCus)\r\n {\r\n let plMidParam = pl.MidParam;\r\n let plDir = pl.GetFistDeriv(plMidParam).normalize();\r\n\r\n let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl, 0.05));\r\n if (index !== -1)\r\n {\r\n let cu = targetCus[index];\r\n isEqualNormal = equalv3(sourceOutline.Normal, targetMap.get(cu).Normal, 1e-3);\r\n let cuMidParam = cu.MidParam;\r\n let cuDir = cu.GetFistDeriv(cuMidParam).normalize();\r\n\r\n if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3))//不同向\r\n subtractList.push(pl);\r\n\r\n targetCus.splice(index, 1);\r\n\r\n continue;\r\n }\r\n\r\n if (targets.every(t => !fastCurveInCurve(t.Curve as Polyline, pl)))\r\n subtractList.push(pl);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceCus.length;\r\n\r\n for (let pl of targetCus)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceCus.length)\r\n return { subtractList: [sourceOutline], holes };\r\n\r\n return { subtractList, holes };\r\n\r\n }\r\n /**\r\n * 获得全部闭合曲线\r\n * @若传入二维曲线数据,将默认子数组为闭合曲线段\r\n */\r\n static GetAllContour(cus: Curve[] | Curve[][]): Contour[]\r\n {\r\n if (cus.length === 0)\r\n return [];\r\n\r\n let cuGroups: Curve[][];\r\n if (Array.isArray(cus[0]))\r\n cuGroups = cus as Curve[][];\r\n else\r\n cuGroups = curveLinkGroup(cus as Curve[]);\r\n\r\n let contours: Contour[] = [];\r\n\r\n for (let g of cuGroups)\r\n contours.push(Contour.CreateContour(g, false));\r\n return contours.filter(c => c !== undefined && !equaln(c.Area, 0, 1e-6));\r\n }\r\n /**\r\n * 合并曲线组成为多段线\r\n * @param cus 曲线组\r\n * @param [needLink=true] 需要解析成首尾连接状态\r\n * @returns 单一曲线,如果返回超过1个,其他的将被遗弃.\r\n */\r\n static Combine(cus: Curve[], needLink = true, tolerance = 1e-3): Curve\r\n {\r\n if (cus.length === 0) return undefined;\r\n\r\n let groups = needLink ? curveLinkGroup(cus) : [cus];\r\n for (let g of groups)\r\n {\r\n if (g.length === 1)\r\n return g[0].Clone();\r\n else\r\n {\r\n if (cache.has(g))\r\n return cache.get(g);\r\n\r\n let gclone = g.map(c => c.Clone());\r\n\r\n arrayRemoveDuplicateBySort(gclone, (cu1: Curve, cu2: Curve) => cu1.Join(cu2, false, tolerance) === Status.True);\r\n\r\n if (gclone.length > 1 && gclone[0].Join(arrayLast(gclone), false, tolerance))\r\n gclone.pop();\r\n\r\n let pl = Polyline.Combine(gclone, tolerance);\r\n\r\n cache.set(g, pl);\r\n\r\n return pl;\r\n }\r\n }\r\n }\r\n get Shape(): THREE.Shape\r\n {\r\n return this._Curve.Shape;\r\n }\r\n CuInOutline(targetCur: Curve)\r\n {\r\n return isTargetCurInOrOnSourceCur(this._Curve, targetCur);\r\n }\r\n Equal(tar: Contour)\r\n {\r\n return equalCurve(this._Curve, tar._Curve);\r\n }\r\n}\r\n\r\n/**\r\n * 对于轮廓切割后的曲线判断相同,使用这个函数进行快速判断\r\n */\r\nfunction fastEqualCurve(c1: Curve, c2: Curve, tolerance = 1e-3)\r\n{\r\n let sp1 = c1.StartPoint;\r\n let ep1 = c1.EndPoint;\r\n let sp2 = c2.StartPoint;\r\n let ep2 = c2.EndPoint;\r\n\r\n if (!(\r\n (equalv3(sp1, sp2, tolerance) && equalv3(ep1, ep2, tolerance))\r\n || (equalv3(sp1, ep2, tolerance) && equalv3(ep1, sp2, tolerance))\r\n ))\r\n return false;\r\n\r\n return equalv3(c1.Midpoint, c2.Midpoint, tolerance);\r\n}\r\n\r\n\r\n//对于双多段线互相切割后的结果,快速判断曲线是否在另一条曲线内部\r\n//也许有一天这个中点算法需要改一下, 使用 src\\Geometry\\ExtrudeEdgeGeometry2.ts->CenterPoint 会比较稳妥\r\nfunction fastCurveInCurve(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.GetPointAtParam(targetCu.EndParam * 0.5));\r\n}\r\n\r\nfunction fastCurveInCurve2(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.StartPoint) &&\r\n sourceCu.PtInCurve(targetCu.GetPointAtParam(targetCu.EndParam * 0.5));\r\n}\r\n","import { Line3, Plane, Ray, Vector3 } from \"three\";\r\n\r\nexport class PlaneExt extends Plane\r\n{\r\n constructor(normal = new Vector3(0, 0, 1), constant?: number | Vector3)\r\n {\r\n super(normal);\r\n if (typeof constant === \"number\")\r\n this.constant = constant;\r\n else if (constant)\r\n this.constant = -this.normal.dot(constant);\r\n }\r\n\r\n intersectLine(line: Line3, optionalTarget = new Vector3(), extendLine = false): Vector3\r\n {\r\n let v1 = new Vector3();\r\n\r\n let direction = line.delta(v1);\r\n\r\n let denominator = this.normal.dot(direction);\r\n\r\n if (denominator === 0)\r\n {\r\n // line is coplanar, return origin\r\n if (this.distanceToPoint(line.start) === 0)\r\n {\r\n return optionalTarget.copy(line.start);\r\n }\r\n // Unsure if this is the correct method to handle this case.\r\n return undefined;\r\n }\r\n\r\n let t = - (line.start.dot(this.normal) + this.constant) / denominator;\r\n //If you not extendLine,check intersect point in Line\r\n if (!extendLine && (t < -1e-6 || t > 1))\r\n {\r\n return undefined;\r\n }\r\n\r\n return optionalTarget.copy(direction).multiplyScalar(t).add(line.start);\r\n }\r\n intersectRay(ray: Ray, optionalTarget?: Vector3, extendLine?: boolean): Vector3\r\n {\r\n // 从射线初始位置\r\n let line = new Line3(ray.origin.clone(), ray.origin.clone().add(ray.direction));\r\n return this.intersectLine(line, optionalTarget, extendLine);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Matrix3, Matrix4, Object3D, Shape, Vector3, Line as TLine, MathUtils } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getDeterminantFor2V, getArcOrCirNearPts, getTanPtsOnEllipse, Pts2Polyline } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { angle, equaln, equalv3, MoveMatrix, rotatePoint, angleTo, AsVector2, AsVector3 } from '../../Geometry/GeUtils';\r\nimport { IntersectEllipse, IntersectEllipseAndCircleOrArc, IntersectEllipseAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Arc } from './Arc';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\n\r\n@Factory\r\nexport class Ellipse extends Curve\r\n{\r\n private _radX: number;\r\n private _radY: number;\r\n private _rotate: number;\r\n private _startAngle = 0;\r\n private _endAngle = Math.PI * 2;\r\n constructor(\r\n center?: Vector3,\r\n radX: number = 1e-3,\r\n radY: number = 1e-3,\r\n angle: number = 0)\r\n {\r\n super();\r\n center && this._Matrix.setPosition(center);\r\n this._radX = radX;\r\n this._radY = radY;\r\n this._rotate = angle;\r\n }\r\n get StartParam(): number\r\n {\r\n return 0;\r\n }\r\n get EndParam(): number\r\n {\r\n return 1;\r\n }\r\n get StartPoint()\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get EndPoint()\r\n {\r\n return this.GetPointAtParam(1);\r\n }\r\n get Shape(): Shape\r\n {\r\n let sp = new Shape();\r\n sp.ellipse(0, 0, this._radX, this._radY, this._startAngle, this._endAngle, false, this._rotate);\r\n return sp;\r\n }\r\n get IsClose(): boolean\r\n {\r\n return equaln(this.TotalAngle, Math.PI * 2);\r\n }\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(v);\r\n this.Update();\r\n }\r\n get RadX()\r\n {\r\n return this._radX;\r\n }\r\n set RadX(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._radX = v;\r\n this.Update();\r\n }\r\n get RadY()\r\n {\r\n return this._radY;\r\n }\r\n set RadY(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._radY = v;\r\n this.Update();\r\n }\r\n get Rotation()\r\n {\r\n return this._rotate;\r\n }\r\n set Rotation(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._rotate = v;\r\n this.Update();\r\n }\r\n get StartAngle()\r\n {\r\n return this._startAngle;\r\n }\r\n get EndAngle()\r\n {\r\n return this._startAngle;\r\n }\r\n set StartAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._startAngle = v;\r\n this.Update();\r\n }\r\n set EndAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._endAngle = v;\r\n this.Update();\r\n }\r\n get Length()\r\n {\r\n let a = this._radX;\r\n let b = this._radY;\r\n return Math.PI * Math.abs(3 * (a + b) - Math.sqrt((3 * a + b) * (a + 3 * b))) * this.TotalAngle / Math.PI * 0.5;\r\n }\r\n get Area()\r\n {\r\n let area = Math.PI * this._radX * this._radY;\r\n let an = this._endAngle - this._startAngle;\r\n if (an < 0)\r\n an = Math.PI * 2 + an;\r\n area *= an / Math.PI * 0.5;\r\n let area2 = Math.abs(\r\n getDeterminantFor2V(\r\n AsVector2(this.StartPoint.sub(this.Center)),\r\n AsVector2(this.EndPoint.sub(this.Center)))\r\n ) / 2;\r\n if (an < Math.PI)\r\n area -= area2;\r\n else\r\n area += area2;\r\n return area;\r\n }\r\n get TotalAngle()\r\n {\r\n let totolAngle = this._endAngle - this._startAngle;\r\n if (totolAngle < 0)\r\n totolAngle = Math.PI * 2 + totolAngle;\r\n return totolAngle;\r\n }\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3().setFromPoints(this.GetGripPoints());\r\n }\r\n PtInCurve(pt: Vector3)\r\n {\r\n let p = rotatePoint(pt.clone().sub(this.Center), -this.Rotation);\r\n return p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2 < 1;\r\n }\r\n PtOnCurve(pt: Vector3)\r\n {\r\n if (this.PtOnEllipse(pt))\r\n {\r\n let a = this.GetCircleAngleAtPoint(pt);\r\n return a <= this.TotalAngle + 1e-6;\r\n }\r\n return false;\r\n }\r\n PtOnEllipse(pt: Vector3)\r\n {\r\n let p = rotatePoint(pt.clone().applyMatrix4(this.OCSInv), -this.Rotation);\r\n return equaln(p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2, 1, 1e-3);\r\n }\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.TotalAngle * param + this._startAngle;\r\n\r\n if (an > Math.PI)\r\n an -= 2 * Math.PI;\r\n\r\n let a = this.RadX;\r\n let b = this.RadY;\r\n let pt = new Vector3(a * Math.cos(an), b * Math.sin(an), 0);\r\n\r\n pt.applyMatrix4(new Matrix4().makeRotationZ(this._rotate));\r\n\r\n return pt.applyMatrix4(this.OCS);\r\n }\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnEllipse(pt))\r\n {\r\n return NaN;\r\n }\r\n let an = this.GetCircleAngleAtPoint(pt);\r\n let par = an / this.TotalAngle;\r\n\r\n if (this.IsClose || par < 1 + 1e-6)\r\n return par;\r\n else\r\n {\r\n let diffPar = Math.PI * 2 / this.TotalAngle - 1;\r\n if (par - 1 < diffPar / 2)\r\n return par;\r\n else\r\n return par - 1 - diffPar;\r\n }\r\n }\r\n GetPointAtDistance(distance: number)\r\n {\r\n let param = distance / this.Length;\r\n return this.GetPointAtParam(param);\r\n }\r\n GetDistAtParam(param: number)\r\n {\r\n return this.Length * param;\r\n }\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n GetAngleAtParam(par: number)\r\n {\r\n let pt = this.GetPointAtParam(par).applyMatrix4(this.OCSInv).applyMatrix4(new Matrix4().makeRotationZ(-this.Rotation));\r\n return angle(pt) + this._startAngle;\r\n }\r\n GetCircleAngleAtPoint(pt: Vector3)\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv);\r\n let an = angle(pt) - this._rotate;\r\n if (an < 0)\r\n an = Math.PI * 2 - an;\r\n if (an > Math.PI * 2)\r\n an -= Math.PI * 2;\r\n let dist = pt.length();\r\n let k = dist * Math.cos(an) / this._radX;\r\n if (Math.abs(k) > 1)\r\n k = Math.floor(Math.abs(k)) * Math.sign(k);\r\n if (Math.abs(an) <= Math.PI)\r\n an = Math.acos(k);\r\n else\r\n an = Math.PI * 2 - Math.acos(k);\r\n\r\n an -= this._startAngle;\r\n\r\n if (an < 0)\r\n an = Math.PI * 2 + an;\r\n return an;\r\n }\r\n\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n if (typeof pt === \"number\")\r\n pt = this.GetPointAtParam(pt);\r\n else\r\n pt = pt.clone();\r\n\r\n let refPts = this.GetGripPoints();\r\n\r\n let p = pt.clone().applyMatrix4(this.OCSInv).applyMatrix4(new Matrix4().makeRotationZ(-this._rotate));\r\n let vec = new Vector3();\r\n if (equalv3(pt, refPts[0]))\r\n vec.set(0, 1, 0);\r\n else if (equalv3(pt, refPts[1]))\r\n {\r\n vec.set(0, -1, 0);\r\n }\r\n else if (p.y > 0)\r\n {\r\n let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y);\r\n vec.set(-1, -k, 0);\r\n }\r\n else\r\n {\r\n let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y);\r\n vec.set(1, k, 0);\r\n }\r\n vec.applyMatrix4(new Matrix4().makeRotationZ(this._rotate));\r\n\r\n return vec.applyMatrix4(new Matrix4().extractRotation(this.OCS));\r\n }\r\n GetClosestPointTo(p: Vector3, extend: boolean): Vector3\r\n {\r\n //参考:https://wet-robots.ghost.io/simple-method-for-distance-to-ellipse/\r\n let ro = new Matrix4().makeRotationZ(this._rotate);\r\n let roInv = new Matrix4().getInverse(ro);\r\n let pt = p.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(roInv);\r\n let px = pt.x;\r\n let py = pt.y;\r\n let t = angle(pt);\r\n let a = this._radX;\r\n let b = this._radY;\r\n let x: number, y: number;\r\n for (let i = 0; i < 3; i++)\r\n {\r\n x = a * Math.cos(t);\r\n y = b * Math.sin(t);\r\n let ex = (a ** 2 - b ** 2) * Math.cos(t) ** 3 / a;\r\n let ey = (b * b - a * a) * Math.sin(t) ** 3 / b;\r\n let rx = x - ex;\r\n let ry = y - ey;\r\n let qx = px - ex;\r\n let qy = py - ey;\r\n\r\n let r = Math.sqrt(ry ** 2 + rx ** 2);\r\n let q = Math.sqrt(qy ** 2 + qx ** 2);\r\n\r\n let dc = r * Math.asin((rx * qy - ry * qx) / (r * q));\r\n let dt = dc / Math.sqrt(a * a + b * b - x * x - y * y);\r\n\r\n t += dt;\r\n }\r\n let retPt = new Vector3(x, y).applyMatrix4(ro).applyMatrix4(this.OCS);\r\n if (this.IsClose || extend)\r\n {\r\n return retPt;\r\n }\r\n else if (this.PtOnCurve(retPt))\r\n {\r\n return retPt;\r\n }\r\n else\r\n {\r\n let d1 = p.distanceToSquared(this.StartPoint);\r\n let d2 = p.distanceToSquared(this.EndPoint);\r\n return d1 < d2 ? this.StartPoint : this.EndPoint;\r\n }\r\n }\r\n GetOffsetCurves(offsetDist: number)\r\n {\r\n if ((offsetDist + Math.min(this._radX, this._radY)) > 0)\r\n {\r\n let el = this.Clone();\r\n el.RadX = this._radX + offsetDist;\r\n el.RadY = this._radY + offsetDist;\r\n return [el];\r\n }\r\n return [];\r\n }\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params: number[];\r\n if (param instanceof Array)\r\n {\r\n params = param.filter(p => this.ParamOnCurve(p));\r\n params.sort((a1, a2) => a2 - a1);//从大到小\r\n }\r\n else\r\n params = [param];\r\n\r\n //补上最后一个到第一个的弧\r\n if (this.IsClose)\r\n params.unshift(arrayLast(params));\r\n else\r\n {\r\n params.unshift(1);\r\n params.push(0);\r\n }\r\n arrayRemoveDuplicateBySort(params);\r\n\r\n let anglelist = params.map(param => this.TotalAngle * param + this._startAngle);\r\n let elllist: this[] = [];\r\n for (let i = 0; i < anglelist.length - 1; i++)\r\n {\r\n let sa = anglelist[i];\r\n let ea = anglelist[i + 1];\r\n let el = this.Clone();\r\n if (!equaln(sa, ea, 1e-6))\r\n {\r\n el.StartAngle = ea;\r\n el.EndAngle = equaln(sa, 0) ? Math.PI * 2 : sa;\r\n elllist.push(el);\r\n }\r\n }\r\n return elllist;\r\n }\r\n Join(el: Ellipse)\r\n {\r\n if (this.IsClose || el.IsClose || !this.IsCoplaneTo(el) || !equalv3(el.Center, this.Center))\r\n return Status.False;\r\n\r\n let status = Status.False;\r\n\r\n if (equaln(this._endAngle, this._startAngle))\r\n {\r\n this.EndAngle = this._endAngle;\r\n status = Status.True;\r\n }\r\n else if (equaln(this._startAngle, el._endAngle))\r\n {\r\n this.StartAngle = el._startAngle;\r\n status = Status.True;\r\n }\r\n if (status === Status.True && !this.IsClose && equaln(this._startAngle, this._endAngle))\r\n {\r\n this.StartAngle = 0;\r\n this.EndAngle = Math.PI * 2;\r\n }\r\n return status;\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n {\r\n let pts = this.GetGripPoints();\r\n return pts;\r\n }\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Nea:\r\n {\r\n return getArcOrCirNearPts(this, pickPoint, viewXform);\r\n }\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n return [this.GetClosestPointTo(lastPoint, false)];\r\n }\r\n case ObjectSnapMode.Tan:\r\n {\r\n //TODO:过某点获取椭圆全部切点\r\n if (lastPoint)\r\n {\r\n return getTanPtsOnEllipse(this, lastPoint);\r\n }\r\n }\r\n default:\r\n return [];\r\n }\r\n }\r\n IntersectWith2(curve: Curve, intType: IntersectOption)\r\n {\r\n //TODO:优化椭圆和椭圆,椭圆和圆相交\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectEllipseAndLine(curve, this, reverseIntersectOption(intType)));\r\n }\r\n else if (curve instanceof Circle || curve instanceof Arc)\r\n {\r\n return IntersectEllipseAndCircleOrArc(this, curve, intType);\r\n }\r\n else if (curve instanceof Polyline)\r\n {\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, intType));\r\n }\r\n else if (curve instanceof Ellipse)\r\n {\r\n return IntersectEllipse(this, curve, intType);\r\n }\r\n else\r\n return [];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let line = new TLine(this.UpdateGeometry(), ColorMaterial.GetLineMaterial(this._Color));\r\n this.UpdateDrawObject(renderType, line);\r\n return line;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let geo = (obj as TLine).geometry as BufferGeometry;\r\n this.UpdateGeometry(geo);\r\n }\r\n //更新Geometry\r\n private UpdateGeometry(geo?: BufferGeometry)\r\n {\r\n if (!geo)\r\n geo = new BufferGeometry();\r\n let curve = this.Shape;\r\n geo.setFromPoints(curve.getPoints(60));\r\n return geo;\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let tmpMat4 = new Matrix4().makeRotationZ(this.Rotation);\r\n let pts = [\r\n new Vector3(this._radX, 0),\r\n new Vector3(-this._radX, 0),\r\n new Vector3(0, this._radY),\r\n new Vector3(0, -this._radY)\r\n ].map(p => p.applyMatrix4(tmpMat4).applyMatrix4(this.OCS));\r\n\r\n if (!equaln(0, this._startAngle))\r\n pts.push(this.StartPoint);\r\n if (!equaln(0, this._endAngle))\r\n pts.push(this.EndPoint);\r\n\r\n pts.push(this.Center);\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n let pts = this.GetStretchPoints();\r\n\r\n if (indexList.length > 0)\r\n {\r\n let p = pts[indexList[0]].clone();\r\n p.add(vec);\r\n\r\n if (indexList[0] <= 1)\r\n this.RadX = p.distanceTo(this.Center);\r\n else if (indexList[0] <= 3)\r\n this.RadY = p.distanceTo(this.Center);\r\n else\r\n {\r\n let p1 = pts[indexList[0]];\r\n //TODO:跟cad不一致待优化\r\n if (equalv3(p1, this.StartPoint))\r\n {\r\n let v1 = p1.clone().sub(this.Center);\r\n let v2 = p.clone().sub(this.Center);\r\n let an = angleTo(v1, v2);\r\n this.StartAngle = this.StartAngle + an;\r\n }\r\n else if (equalv3(p1, this.EndPoint))\r\n {\r\n let v1 = p1.clone().sub(this.Center);\r\n let v2 = p.clone().sub(this.Center);\r\n let an = angleTo(v2, v1);\r\n this.EndAngle = this.EndAngle + an;\r\n }\r\n else\r\n this.Center = p;\r\n }\r\n }\r\n }\r\n Convert2Polyline(count = 0)\r\n {\r\n const MIN_LEN = 80;\r\n const par = this.TotalAngle / Math.PI * 0.5;\r\n if (!count)\r\n {\r\n count = Math.floor(this.Length / par / MIN_LEN);\r\n count = MathUtils.clamp(count, 15, 80);\r\n }\r\n\r\n count = Math.floor(count * par);\r\n\r\n if ((count & 1) === 0)\r\n count++;\r\n\r\n let pts = this.Shape.getPoints(count);\r\n if (this.IsClose)\r\n pts.pop();\r\n\r\n let pl = Pts2Polyline(pts, this.IsClose);\r\n pl.ApplyMatrix(this.OCS);\r\n if (this.IsClose)\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._radX = file.Read();\r\n this._radY = file.Read();\r\n this._rotate = file.Read();\r\n this._startAngle = file.Read();\r\n this._endAngle = file.Read();\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);\r\n file.Write(this.RadX);\r\n file.Write(this.RadY);\r\n file.Write(this.Rotation);\r\n file.Write(this._startAngle);\r\n file.Write(this._endAngle);\r\n }\r\n\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Line3, Matrix3, Matrix4, Object3D, Shape, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { PlaneExt } from '../../Geometry/Plane';\r\nimport { IntersectEllipseAndLine, IntersectLineAndArc, IntersectLineAndCircle, IntersectLineAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Arc } from './Arc';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Polyline } from './Polyline';\r\n\r\n@Factory\r\nexport class Line extends Curve\r\n{\r\n\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3)\r\n {\r\n super();\r\n }\r\n\r\n get Is2D()\r\n {\r\n return super.Is2D && equaln(this._StartPoint.z, 0) && equaln(this._EndPoint.z, 0);\r\n }\r\n\r\n get Shape()\r\n {\r\n return new Shape([AsVector2(this._StartPoint), AsVector2(this._EndPoint)]);\r\n }\r\n\r\n Z0()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.StartPoint = this.StartPoint.setZ(0);\r\n this.EndPoint = this.EndPoint.setZ(0);\r\n return this;\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.StartPoint = this.StartPoint.applyMatrix4(m);\r\n this.EndPoint = this.EndPoint.applyMatrix4(m);\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this.StartPoint = sp;\r\n this.EndPoint = ep;\r\n return this;\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let geo = BufferGeometryUtils.CreateFromPts([this._StartPoint, this._EndPoint]);\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry();\r\n geometry.setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, lineObj: TLine)\r\n {\r\n BufferGeometryUtils.UpdatePts(lineObj.geometry as BufferGeometry, [this._StartPoint, this._EndPoint]);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return [this.StartPoint, this.EndPoint];\r\n case ObjectSnapMode.Mid:\r\n return [this.GetPointAtParam(0.5)];\r\n case ObjectSnapMode.Nea:\r\n {\r\n let derv = this.GetFistDeriv(0).normalize();\r\n let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3);\r\n\r\n //平行不捕捉\r\n if (isParallelTo(viewNormal, derv))\r\n return [];\r\n\r\n let fNormal = new Vector3().crossVectors(viewNormal, derv);\r\n fNormal.crossVectors(derv, fNormal);\r\n\r\n let plane = new PlaneExt(fNormal, this.StartPoint);\r\n let plocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true);\r\n let pclosest = this.GetClosestPointTo(plocal, false);\r\n return [pclosest];\r\n }\r\n case ObjectSnapMode.Ext:\r\n return [this.GetClosestPointTo(pickPoint, true)];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(lastPoint, true);\r\n if (this.ParamOnCurve(param))\r\n return [closestPt];\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this.StartPoint, this.GetPointAtParam(0.5), this.EndPoint];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n if (index === 0)\r\n this.StartPoint = this.StartPoint.add(vec);\r\n else if (index === 2)\r\n this.EndPoint = this.EndPoint.add(vec);\r\n else\r\n {\r\n let m = MoveMatrix(vec);\r\n this.ApplyMatrix(m);\r\n }\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n if (index === 0)\r\n this.StartPoint = this.StartPoint.add(vec);\r\n else\r\n this.EndPoint = this.EndPoint.add(vec);\r\n }\r\n }\r\n\r\n GetFistDeriv(param: number | Vector3): Vector3\r\n {\r\n return this.EndPoint.sub(this.StartPoint);\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4)\r\n {\r\n if (curve instanceof Line)\r\n {\r\n return IntersectLineAndLine(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectLineAndArc(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectLineAndCircle(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Polyline)\r\n {\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n\r\n if (curve instanceof Ellipse)\r\n return IntersectEllipseAndLine(this, curve, intType, tolerance);\r\n\r\n //其他的尚未实现.\r\n return [];\r\n }\r\n\r\n //Param\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this.StartPoint.add(this.GetFistDeriv(0).multiplyScalar(param));\r\n }\r\n GetParamAtPoint(pt: Vector3): number\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(pt, true);\r\n if (!equalv3(closestPt, pt, 1e-5))\r\n return NaN;\r\n return param;\r\n }\r\n GetParamAtDist(d: number): number\r\n {\r\n return d / this.Length;\r\n }\r\n GetPointAtDistance(distance: number): Vector3\r\n {\r\n return this.GetPointAtParam(this.GetParamAtDist(distance));\r\n }\r\n GetDistAtParam(param: number): number\r\n {\r\n return this.Length * param;\r\n }\r\n GetDistAtPoint(pt: Vector3): number\r\n {\r\n return this.GetDistAtParam(this.GetParamAtPoint(pt));\r\n }\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params = this.SplitParamSort(param);\r\n let pts = params.map(param => this.GetPointAtParam(param));\r\n let ret = new Array();\r\n if (pts.length >= 2)\r\n {\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let newLine = this.Clone() as Line;\r\n newLine.ColorIndex = this.ColorIndex;\r\n newLine.StartPoint = pts[i];\r\n newLine.EndPoint = pts[i + 1];\r\n ret.push(newLine);\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n GetParamAtPoint2(pt: Vector3): number\r\n {\r\n let { param } = this.GetClosestAtPoint(pt, true);\r\n return param;\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n let { param } = this.GetClosestAtPoint(p, true);\r\n return this.ParamOnCurve(param, fuzz);\r\n }\r\n\r\n GetClosestAtPoint(pt: Vector3, extend: boolean): { closestPt: Vector3, param: number; }\r\n {\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n if (equalv3(pt, sp, 1e-8))\r\n return { closestPt: sp, param: 0 };\r\n else if (equalv3(pt, ep, 1e-8))\r\n return { closestPt: ep, param: 1 };\r\n\r\n let direction = this.GetFistDeriv(0);\r\n let length = direction.length();\r\n\r\n if (length === 0)\r\n {\r\n let param = NaN;\r\n if (equalv3(pt, this.StartPoint, 1e-6))\r\n param = 0;\r\n return { closestPt: sp, param: param };\r\n }\r\n\r\n direction.divideScalar(length);\r\n\r\n let diff = pt.clone().sub(sp);\r\n let param = direction.dot(diff);\r\n\r\n let closestPt: Vector3;\r\n if (extend)\r\n closestPt = sp.add(direction.multiplyScalar(param));\r\n else\r\n if (param < 0)\r\n {\r\n closestPt = sp;\r\n param = 0;\r\n }\r\n else if (param > length)\r\n {\r\n closestPt = this.EndPoint;\r\n param = length;\r\n }\r\n else\r\n closestPt = sp.add(direction.multiplyScalar(param));\r\n return {\r\n closestPt: closestPt,\r\n param: param / length\r\n };\r\n }\r\n\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.GetClosestAtPoint(pt, extend).closestPt;\r\n }\r\n\r\n Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < this.StartParam)\r\n {\r\n this.StartPoint = this.GetPointAtParam(newParam);\r\n }\r\n else if (newParam > this.EndParam)\r\n {\r\n this.EndPoint = this.GetPointAtParam(newParam);\r\n }\r\n }\r\n\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-5): Status\r\n {\r\n if (cu instanceof Line)\r\n {\r\n //平行\r\n if (!isParallelTo(this.GetFistDeriv(0).normalize(), cu.GetFistDeriv(0).normalize()))\r\n return Status.False;\r\n\r\n let sp = cu.StartPoint;\r\n let { closestPt: cp1, param: param1 } = this.GetClosestAtPoint(sp, true);\r\n if (!equalv3(sp, cp1, tolerance))//点在曲线上,允许较低的精度\r\n return Status.False;\r\n\r\n let ep = cu.EndPoint;\r\n let { closestPt: cp2, param: param2 } = this.GetClosestAtPoint(ep, true);\r\n if (!equalv3(ep, cp2, tolerance))\r\n return Status.False;\r\n\r\n if (param1 > param2)\r\n {\r\n [param1, param2] = [param2, param1];\r\n [sp, ep] = [ep, sp];\r\n }\r\n\r\n if (allowGap || Math.max(0, param1) < Math.min(1, param2) + tolerance / this.Length)//这里的容差是值容差,但是我们用它来判断参数,所以进行转换\r\n {\r\n if (param1 < 0)\r\n this.StartPoint = sp;\r\n if (param2 > 1)\r\n this.EndPoint = ep;\r\n return Status.True;\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n [this._StartPoint, this._EndPoint] = [this._EndPoint, this._StartPoint];\r\n return this;\r\n }\r\n\r\n GetOffsetCurves(offsetDist: number): Array\r\n {\r\n let derv = this.GetFistDeriv(0).normalize().multiplyScalar(offsetDist);\r\n derv.applyMatrix4(new Matrix4().makeRotationAxis(this.Normal, -Math.PI / 2));\r\n let newLine = this.Clone() as Line;\r\n newLine.StartPoint = this.StartPoint.add(derv);\r\n newLine.EndPoint = this.EndPoint.add(derv);\r\n return [newLine];\r\n }\r\n get BoundingBox(): Box3\r\n {\r\n return new Box3().setFromPoints([this.StartPoint, this.EndPoint]);\r\n }\r\n\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return 1;\r\n }\r\n //属性\r\n get Length(): number { return this._StartPoint.distanceTo(this._EndPoint); }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._StartPoint.fromArray(file.Read());\r\n this._EndPoint.fromArray(file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.Write(this._StartPoint.toArray());\r\n file.Write(this._EndPoint.toArray());\r\n }\r\n //#endregion-----------------------------File End-----------------------------\r\n\r\n //#region 属性\r\n set StartPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCS);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCS);\r\n }\r\n set EndPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline } from \"../Common/CurveUtils\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { IntersectsBox } from \"../Geometry/Box\";\r\nimport { CurveMap, Route, Vertice } from \"../Geometry/CurveMap\";\r\nimport { angle, equaln, equalv2, equalv3, IdentityMtx4, SelectNearP } from \"../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\ninterface IOffsetResult\r\n{\r\n index: number;\r\n curve: Curve;\r\n sp?: Vector3;\r\n preArc?: Curve;\r\n ep?: Vector3;\r\n nextArc?: Curve;\r\n paddingCurve?: Curve[];\r\n}\r\n\r\nclass CurveTreeNode\r\n{\r\n children: CurveTreeNode[];\r\n box: Box3;\r\n used: boolean;\r\n constructor(public curve: Curve, box?: Box3)\r\n {\r\n this.box = box || curve.BoundingBox;\r\n }\r\n\r\n TrimBy(contour: Contour, box: Box3)\r\n {\r\n if (IntersectsBox(box, this.box))\r\n {\r\n if (this.children !== undefined)\r\n {\r\n for (let c of this.children)\r\n c.TrimBy(contour, box);\r\n }\r\n else\r\n {\r\n if (contour.Curve instanceof Circle && this.curve instanceof Arc)\r\n {\r\n if (equalv3(contour.Curve.Center, this.curve.Center))\r\n {\r\n if (contour.Curve.Radius > this.curve.Radius + 1e-4)\r\n this.children = [];\r\n\r\n return;\r\n }\r\n }\r\n\r\n //交点参数列表\r\n let iParams = this.curve.IntersectWith(contour.Curve, IntersectOption.OnBothOperands)\r\n .map(p => this.curve.GetParamAtPoint2(p));\r\n\r\n let cus = this.curve.GetSplitCurves(iParams);\r\n if (cus.length === 0)\r\n {\r\n let p = this.curve.GetPointAtParam(0.5);\r\n if (box.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p)))\r\n this.children = [];\r\n }\r\n else\r\n {\r\n this.children = [];\r\n for (let c of cus)\r\n {\r\n let p = c.GetPointAtParam(0.5);\r\n if (CurveIsFine(c) && (!(box.containsPoint(p) && contour.Curve.PtInCurve(p)) || contour.Curve.PtOnCurve(p)))\r\n this.children.push(new CurveTreeNode(c));\r\n }\r\n if (this.children.length === cus.length)\r\n this.children = undefined;\r\n }\r\n }\r\n }\r\n }\r\n\r\n get Nodes()\r\n {\r\n if (!this.children) return [this];\r\n else\r\n {\r\n let cus: CurveTreeNode[] = [];\r\n for (let c of this.children)\r\n cus.push(...c.Nodes);\r\n return cus;\r\n }\r\n }\r\n}\r\n\r\nexport class OffsetPolyline\r\n{\r\n //多段线信息\r\n _CacheOCS: Matrix4;\r\n _Vertexs: Vector3[];\r\n _SubCurves: Curve[];\r\n _Circles: Circle[];\r\n\r\n //偏移子曲线\r\n _SubOffsetedCurves: IOffsetResult[];\r\n //用于裁剪的曲线节点\r\n _CurveTreeNodes: CurveTreeNode[];\r\n //裁剪完的曲线节点\r\n _CurveTrimedTreeNodes: CurveTreeNode[];\r\n\r\n //裁剪轮廓\r\n _TrimPolylineContours: Contour[];\r\n _TrimCircleContours: Circle[];\r\n _TrimArcContours: Contour[];\r\n\r\n //结果曲线\r\n _RetCurves: Polyline[];\r\n\r\n _IsClose: boolean;\r\n _OffsetDistSign: number;\r\n\r\n constructor(public _Polyline: Polyline, public _OffsetDist: number, public _ToolPath = false,\r\n private _OffsetDistSq = (_OffsetDist ** 2) * 2.1//对直角走刀不进行圆弧过度\r\n )\r\n {\r\n }\r\n\r\n Do(): Polyline[]\r\n {\r\n this._OffsetDistSign = Math.sign(this._OffsetDist);\r\n this._TrimPolylineContours = [];\r\n this._TrimCircleContours = [];\r\n this._TrimArcContours = [];\r\n\r\n this._RetCurves = [];\r\n this._CurveTreeNodes = [];\r\n\r\n this.InitSubCurves();\r\n if (this._SubCurves.length === 0)\r\n return this._RetCurves;\r\n\r\n this.GeneralCirclesAndVertexs();\r\n this.OffsetSubCurves();\r\n this.LinkSubCurves();\r\n\r\n if (this._SubOffsetedCurves.length === 0)\r\n {\r\n this._SubOffsetedCurves.push({ curve: this._Circles[0], index: 0, paddingCurve: this._Circles.slice(1) });\r\n\r\n this._TrimPolylineContours.push(\r\n ...this._Circles.map(c => Contour.CreateContour(c, false)),\r\n ...this._SubCurves.map(c => Contour.CreateContour([c, new Line(c.StartPoint, c.EndPoint)], false))\r\n );\r\n }\r\n else\r\n this.GeneralTrimContours();\r\n this.TrimByContours();\r\n this.FilterInvalidCurve();\r\n this.JoinCollinear();\r\n this.LinkResultPolyline();\r\n return this._RetCurves;\r\n }\r\n\r\n InitSubCurves()\r\n {\r\n this._CacheOCS = this._Polyline.OCS;\r\n this._IsClose = this._Polyline.IsClose;\r\n this._Polyline.OCS = IdentityMtx4;\r\n this._SubCurves = this._Polyline.Explode().filter(c => c.Length > 1e-4);\r\n this._Polyline.OCS = this._CacheOCS;\r\n return this;\r\n }\r\n\r\n protected GeneralCirclesAndVertexs()\r\n {\r\n this._Vertexs = this._SubCurves.map(c => c.StartPoint);\r\n let lastCu = arrayLast(this._SubCurves);\r\n if (!equalv3(lastCu.EndPoint, this._Vertexs[0], 1e-3))\r\n this._Vertexs.push(lastCu.EndPoint);\r\n\r\n let radius = Math.abs(this._OffsetDist);\r\n this._Circles = this._Vertexs.map(p => new Circle(p, radius));\r\n }\r\n\r\n protected OffsetSubCurves()\r\n {\r\n this._SubOffsetedCurves = [];\r\n for (let index = 0; index < this._SubCurves.length; index++)\r\n {\r\n let curveOld = this._SubCurves[index];\r\n if (curveOld.Length > 1e-6)\r\n {\r\n let curve = curveOld.GetOffsetCurves(this._OffsetDist)[0];\r\n if (curve)\r\n this._SubOffsetedCurves.push({ curve, index });\r\n else\r\n this._TrimArcContours.push(Contour.CreateContour([curveOld, new Line(curveOld.StartPoint, curveOld.EndPoint)], false));\r\n }\r\n }\r\n }\r\n\r\n //连接(延伸)曲线,或者补(圆弧,直线)\r\n protected LinkSubCurves()\r\n {\r\n let count = this._SubOffsetedCurves.length;\r\n if (!this._IsClose) count--;\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let curveResNow = this._SubOffsetedCurves[i];\r\n let iNext = FixIndex(i + 1, this._SubOffsetedCurves);\r\n let curveResNext = this._SubOffsetedCurves[iNext];\r\n let curveNow = curveResNow.curve;\r\n let curveNext = curveResNext.curve;\r\n let isNeighbor = FixIndex(curveResNow.index + 1, this._SubCurves) === curveResNext.index;\r\n\r\n if (isNeighbor)\r\n {\r\n let sp = curveNow.EndPoint;\r\n let ep = curveNext.StartPoint;\r\n //直连\r\n if (equalv3(sp, ep, 1e-3))\r\n continue;\r\n\r\n let iPts = curveNow.IntersectWith(curveNext, IntersectOption.ExtendBoth);\r\n let tPts = iPts.filter(p => curveNow.PtOnCurve3(p) && curveNext.PtOnCurve3(p));\r\n\r\n let code = EntityEncode2(curveNow, curveNext);\r\n\r\n let tp: Vector3;\r\n if (code === 1)\r\n {\r\n if (tPts.length > 0)//不走刀或者有真交点 this._ToolPath === false ||\r\n tp = iPts[0];\r\n else\r\n {\r\n if (iPts.length > 0 && curveNow.GetParamAtPoint(iPts[0]) > 1)\r\n {\r\n let refP = this._Vertexs[curveResNext.index];\r\n let distSq = iPts[0].distanceToSquared(refP);\r\n if (this._ToolPath && distSq > this._OffsetDistSq)\r\n {\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];\r\n this._TrimCircleContours.push(this._Circles[curveResNext.index]);\r\n }\r\n else\r\n tp = iPts[0];\r\n }\r\n // else\r\n // curveResNow.paddingCurve = [new Line(sp, ep)];\r\n }\r\n }\r\n else\r\n {\r\n let refP = this._Vertexs[curveResNext.index];\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(iPts, refP);\r\n else //补单圆 或者尝试连接\r\n {\r\n let arc = this.CreateArc(refP, sp, ep);\r\n\r\n if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext, refP))\r\n {\r\n //设置新的连接点,并且备份旧点\r\n let oldp: Vector3;\r\n if (curveResNow.sp)\r\n {\r\n oldp = curveNow.StartPoint;\r\n curveNow.StartPoint = curveResNow.sp;\r\n }\r\n let oldp2: Vector3;\r\n if (curveResNext.ep)\r\n {\r\n oldp2 = curveNext.EndPoint;\r\n curveNext.EndPoint = curveResNext.ep;\r\n }\r\n\r\n let p: Vector3;\r\n\r\n if (code === 2 && iPts.length === 2)\r\n {\r\n let c = curveNow as Arc;\r\n let minArc = new Arc(c.Center, c.Radius, c.EndAngle, 0, c.IsClockWise);\r\n\r\n let p1 = iPts[0];\r\n let a1 = minArc.GetAngleAtPoint(p1);\r\n let anAll1 = c.ParamOnCurve(c.GetParamAtAngle(a1)) ? Infinity : minArc.ComputeAnlge(a1);\r\n\r\n let p2 = iPts[1];\r\n let a2 = minArc.GetAngleAtPoint(p2);\r\n let anAll2 = c.ParamOnCurve(c.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2);\r\n\r\n if (anAll2 < anAll1)\r\n p = p2;\r\n else\r\n p = p1;\r\n }\r\n else\r\n p = SelectNearP(iPts, refP);\r\n\r\n let onPre: boolean;\r\n let param = curveNow.GetParamAtPoint2(p);\r\n if (curveNow instanceof Line)\r\n onPre = param > 1;\r\n else\r\n onPre = param < 0 || param > 1;\r\n\r\n let onNext: boolean = false;\r\n if (onPre)\r\n {\r\n let param2 = curveNext.GetParamAtPoint2(p);\r\n if (curveNext instanceof Line)\r\n onNext = param2 < 0;\r\n else\r\n onNext = param2 < 0 || param2 > 1;\r\n }\r\n\r\n if (curveResNow.sp)\r\n curveNow.StartPoint = oldp;\r\n if (curveResNext.ep)\r\n curveNext.EndPoint = oldp2;\r\n\r\n if (onPre && onNext)\r\n tp = p;\r\n else\r\n curveResNow.paddingCurve = [arc];\r\n }\r\n else\r\n curveResNow.paddingCurve = [arc];\r\n\r\n this._TrimCircleContours.push(this._Circles[curveResNext.index]);\r\n }\r\n }\r\n if (tp)\r\n {\r\n curveResNow.ep = tp;\r\n curveResNext.sp = tp;\r\n\r\n curveResNow.nextArc = curveNext;\r\n curveResNext.preArc = curveNow;\r\n }\r\n }\r\n else\r\n {\r\n let padCirs: Circle[] = [];\r\n for (let s = FixIndex(curveResNow.index + 1, this._Circles); ; s = FixIndex(s + 1, this._Circles))\r\n {\r\n let c = this._Circles[s];\r\n this._TrimCircleContours.push(c);\r\n padCirs.push(c);\r\n if (s === curveResNext.index)\r\n break;\r\n }\r\n curveResNow.paddingCurve = padCirs;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n private IsSharpCorner(curveResNow: IOffsetResult, curveResNext: IOffsetResult, refP: Vector3): boolean\r\n {\r\n let v1 = this._SubCurves[curveResNow.index].GetPointAtParam(0.9);\r\n let v2 = this._SubCurves[curveResNext.index].GetPointAtParam(0.1);\r\n v1.subVectors(refP, v1);\r\n v2.sub(refP);\r\n v1.cross(v2);\r\n return Math.sign(v1.z) === this._OffsetDistSign;\r\n }\r\n\r\n protected GeneralTrimContours()\r\n {\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let cu2 = d.curve;\r\n if (d.sp && d.ep)\r\n {\r\n let param1 = cu2.GetParamAtPoint(d.sp);\r\n let param2 = cu2.GetParamAtPoint(d.ep);\r\n\r\n if (cu2.ParamOnCurve(param1) && cu2.ParamOnCurve(param2) && param1 > param2)\r\n [d.sp, d.ep] = [d.ep, d.sp];\r\n }\r\n if (d.sp) cu2.StartPoint = d.sp;\r\n if (d.ep) cu2.EndPoint = d.ep;\r\n\r\n //这是极端情况,圆弧被压缩成0长度圆弧,本质是空圆弧(我们会在下面判断它)(因为精度的问题)\r\n //因为精度的问题,这种0圆心角的圆弧会被当成全圆,但是偏移算法中,应该不可能出现全圆弧的圆弧,所以我们压扁它\r\n if (cu2 instanceof Arc\r\n && equaln(cu2.StartAngle, cu2.EndAngle, 1e-6)\r\n // && !equaln((this._SubCurves[d.index]).AllAngle, Math.PI * 2, 1e-3) 应该不会出现\r\n )\r\n {\r\n if (cu2.IsClockWise)\r\n cu2.StartAngle = cu2.EndAngle + 1e-6;\r\n else\r\n cu2.EndAngle = cu2.StartAngle + 1e-6;\r\n }\r\n }\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let cu1 = this._SubCurves[d.index];\r\n let cu2 = d.curve;\r\n\r\n let [p1, p2, p3, p4] = [cu1.StartPoint, cu2.StartPoint, cu1.EndPoint, cu2.EndPoint];\r\n let l1 = new Line(p1, p2);\r\n let l2 = new Line(p3, p4);\r\n\r\n let ipts = l1.IntersectWith(l2, IntersectOption.OnBothOperands, 1e-8);\r\n if (ipts.length > 0)\r\n {\r\n let p = ipts[0];\r\n l1.EndPoint = p;\r\n l2.EndPoint = p;\r\n let cus = [cu1, l1, l2];\r\n let contour = Contour.CreateContour(cus, false);\r\n if (contour)\r\n {\r\n this._TrimPolylineContours.push(contour);\r\n continue;\r\n }\r\n else\r\n {\r\n console.error(\"未预料到的错误,构建轮廓失败\" + this._OffsetDist);\r\n }\r\n }\r\n\r\n //真理1:针脚线不可能同时被两个圆弧所切割\r\n let l1Intact = true;\r\n let l2Intact = true;\r\n if (cu2 instanceof Arc)\r\n {\r\n if (Math.sign(cu2.Bul) !== this._OffsetDistSign)\r\n {\r\n let ipts1 = cu2.IntersectWith(l1, IntersectOption.OnBothOperands);\r\n let ipts2 = cu2.IntersectWith(l2, IntersectOption.OnBothOperands);\r\n\r\n let sp: Vector3;\r\n let ep: Vector3;\r\n if (ipts1.length === 2)\r\n sp = SelectNearP(ipts1, p1);\r\n if (ipts2.length === 2)\r\n ep = SelectNearP(ipts2, p3);\r\n\r\n if (sp || ep) cu2 = cu2.Clone();\r\n if (sp)\r\n {\r\n l1.EndPoint = sp;\r\n cu2.StartPoint = sp;\r\n l1Intact = false;\r\n }\r\n if (ep)\r\n {\r\n l2.EndPoint = ep;\r\n cu2.EndPoint = ep;\r\n l2Intact = false;\r\n }\r\n }\r\n }\r\n\r\n let l1PadArc: Arc;\r\n let l2PadArc: Arc;\r\n //真理2:隔壁的圆弧不可能破坏当前的圆弧,只能破坏当前的针脚\r\n if (l1Intact && d.preArc && d.preArc instanceof Arc)\r\n {\r\n let a = d.preArc;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l1, IntersectOption.OnBothOperands);\r\n if (ipts.length === 2)\r\n {\r\n let sp = SelectNearP(ipts, p1);\r\n l1.EndPoint = sp;\r\n l1PadArc = a.Clone();\r\n l1PadArc.StartPoint = sp;\r\n }\r\n }\r\n }\r\n if (l2Intact && d.nextArc && d.nextArc instanceof Arc)\r\n {\r\n let a = d.nextArc;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l2, IntersectOption.OnBothOperands);\r\n if (ipts.length === 2)\r\n {\r\n let ep = SelectNearP(ipts, p3);\r\n l2.EndPoint = ep;\r\n l2PadArc = a.Clone();\r\n l2PadArc.EndPoint = ep;\r\n }\r\n }\r\n }\r\n\r\n let pl = new Polyline();\r\n let cus = [cu1, l1];\r\n if (l1PadArc) cus.push(l1PadArc);\r\n cus.push(cu2, l2);\r\n if (l2PadArc) cus.push(l2PadArc);\r\n\r\n for (let c of cus)\r\n pl.Join(c);\r\n\r\n let contour = Contour.CreateContour(pl, false);\r\n if (contour)\r\n this._TrimPolylineContours.push(contour);\r\n else\r\n console.error(\"未预料到的错误,构建轮廓失败\" + this._OffsetDist);\r\n }\r\n\r\n if (!this._IsClose)\r\n {\r\n if (this._TrimCircleContours[0] !== this._Circles[0])\r\n this._TrimCircleContours.push(this._Circles[0]);\r\n let lastTrimCircle = arrayLast(this._TrimCircleContours);\r\n let lastCircle = arrayLast(this._Circles);\r\n if (lastTrimCircle !== lastCircle)\r\n this._TrimCircleContours.push(lastCircle);\r\n if (this._SubOffsetedCurves[0].index !== 0)\r\n this._TrimCircleContours.push(this._Circles[this._SubOffsetedCurves[0].index]);\r\n\r\n let lastIndex = this._Circles.length - 1;\r\n let lastD = arrayLast(this._SubOffsetedCurves);\r\n if (lastIndex !== lastD.index)\r\n this._TrimCircleContours.push(this._Circles[lastD.index + 1]);\r\n }\r\n\r\n this._TrimPolylineContours.push(\r\n ...this._TrimCircleContours.map(c => Contour.CreateContour(c, false)),\r\n ...this._TrimArcContours\r\n );\r\n }\r\n\r\n // 通过构建的轮廓对偏移曲线进行裁剪\r\n protected TrimByContours()\r\n {\r\n for (let d of this._SubOffsetedCurves)\r\n {\r\n let c = d.curve;\r\n if (CurveIsFine(c))\r\n this._CurveTreeNodes.push(new CurveTreeNode(c));\r\n if (d.paddingCurve)\r\n this._CurveTreeNodes.push(...d.paddingCurve.map(c => new CurveTreeNode(c)));\r\n }\r\n\r\n for (let i = 0; i < this._TrimPolylineContours.length; i++)\r\n {\r\n let c = this._TrimPolylineContours[i];\r\n let cbox = c.BoundingBox;\r\n for (let curveNode of this._CurveTreeNodes)\r\n curveNode.TrimBy(c, cbox);\r\n }\r\n }\r\n\r\n //过滤方向相反和0长度线\r\n private FilterInvalidCurve()\r\n {\r\n this._CurveTrimedTreeNodes = [];\r\n for (let n of this._CurveTreeNodes)\r\n {\r\n let ns = n.Nodes;\r\n for (let sn of ns)\r\n {\r\n if (this.CheckPointDir(sn.curve.GetPointAtParam(0.5)))\r\n this._CurveTrimedTreeNodes.push(sn);\r\n }\r\n }\r\n }\r\n\r\n //合并共线\r\n private JoinCollinear()\r\n {\r\n for (let i = 0; i < this._CurveTrimedTreeNodes.length; i++)\r\n {\r\n let n = this._CurveTrimedTreeNodes[i];\r\n if (n.used) continue;\r\n let sp = n.curve.StartPoint;\r\n for (let j = i + 1; j < this._CurveTrimedTreeNodes.length; j++)\r\n {\r\n let n2 = this._CurveTrimedTreeNodes[j];\r\n if (n2.used) continue;\r\n let status = n.curve.Join(n2.curve);\r\n if (status === Status.ConverToCircle)\r\n {\r\n n.used = true;\r\n n2.used = true;\r\n let circle = new Circle((n.curve).Center, (n.curve).Radius);\r\n n.curve = circle;\r\n this._RetCurves.push(ConverCircleToPolyline(circle).ApplyMatrix(this._CacheOCS));\r\n }\r\n else if (status === Status.True)\r\n {\r\n if (equalv3(sp, n.curve.StartPoint))\r\n n2.used = true;\r\n else\r\n {\r\n n.used = true;\r\n n2.curve = n.curve;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //连接结果曲线,返回最终多段线\r\n private LinkResultPolyline()\r\n {\r\n let used = new Set();\r\n let cuMap = new CurveMap(1);\r\n for (let n of this._CurveTrimedTreeNodes)\r\n {\r\n if (!n.used)\r\n cuMap.AddCurveToMap(n.curve);\r\n }\r\n\r\n let preP: Vector3;\r\n\r\n let searchNext = (s: Vertice, pl: Polyline): Vertice =>\r\n {\r\n let minDist = Infinity;\r\n let minR: Route;\r\n for (let r of s.routes)\r\n {\r\n if (used.has(r.curve)) continue;\r\n\r\n if (preP)\r\n {\r\n let d = r.s.distanceToSquared(preP);\r\n if (d < minDist)\r\n {\r\n minR = r;\r\n minDist = d;\r\n }\r\n }\r\n else\r\n {\r\n minR = r;\r\n break;\r\n }\r\n }\r\n\r\n if (minR)\r\n {\r\n used.add(minR.curve);\r\n preP = minR.e;\r\n let status = pl.Join(minR.curve, false, 5e-2);\r\n if (status !== Status.True)\r\n console.warn(\"连接失败\");\r\n return minR.to;\r\n }\r\n };\r\n\r\n for (let s of cuMap.Stands)\r\n {\r\n preP = undefined;\r\n let pl = new Polyline();\r\n let ss = s;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl);\r\n ss = s;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl);\r\n\r\n if (pl.NumberOfVertices > 1)\r\n {\r\n //避免0长度的线\r\n if (pl.NumberOfVertices === 2 && pl.Length < 1e-6) continue;\r\n\r\n let d = pl.LineData;\r\n let ld = arrayLast(d);\r\n if (equalv2(d[0].pt, ld.pt, 1e-2))\r\n ld.pt.copy(d[0].pt);\r\n this._RetCurves.push(pl.ApplyMatrix(this._CacheOCS));\r\n }\r\n }\r\n }\r\n\r\n CheckPointDir(pt: Vector3): boolean\r\n {\r\n return this.GetPointAtCurveDir(pt) === this._OffsetDistSign;\r\n }\r\n\r\n GetPointAtCurveDir(pt: Vector3): number\r\n {\r\n let minIndex = Infinity;\r\n let minDist = Infinity;\r\n let minCp: Vector3;\r\n for (let i = 0; i < this._SubCurves.length; i++)\r\n {\r\n let c = this._SubCurves[i];\r\n let cp = c.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-5)) return 0;\r\n\r\n let dist = cp.distanceToSquared(pt);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n minIndex = i;\r\n minCp = cp;\r\n }\r\n }\r\n\r\n let c = this._SubCurves[minIndex];\r\n let param = c.GetParamAtPoint(minCp);\r\n\r\n if (equaln(param, 0) && ((minIndex === 0) ? this._IsClose : true))\r\n {\r\n let preIndex = FixIndex(minIndex - 1, this._SubCurves);\r\n let preCurve = this._SubCurves[preIndex];\r\n\r\n if (!equalv3(c.GetFistDeriv(0).normalize(), preCurve.GetFistDeriv(1).normalize()))\r\n {\r\n let p = c.StartPoint;\r\n let l1 = c.Length;\r\n let l2 = preCurve.Length;\r\n let minLength = Math.min(l1, l2) * 0.2;\r\n\r\n let nextP: Vector3;\r\n let preP: Vector3;\r\n if (c instanceof Arc)\r\n nextP = c.GetPointAtDistance(minLength);\r\n else\r\n nextP = c.EndPoint;\r\n\r\n if (preCurve instanceof Arc)\r\n preP = preCurve.GetPointAtDistance(l2 - minLength);\r\n else\r\n preP = preCurve.StartPoint;\r\n\r\n let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p)));\r\n\r\n let dir = arc.PtOnCurve3(pt) ? -1 : 1;\r\n return dir;\r\n }\r\n }\r\n else if (equaln(param, 1) && ((minIndex === this._SubCurves.length - 1) ? this._IsClose : true))\r\n {\r\n let nextIndex = FixIndex(minIndex + 1, this._SubCurves);\r\n let nextCurve = this._SubCurves[nextIndex];\r\n\r\n if (!equalv3(c.GetFistDeriv(1).normalize(), nextCurve.GetFistDeriv(0).normalize()))\r\n {\r\n let p = c.EndPoint;\r\n\r\n let l1 = c.Length;\r\n let l2 = nextCurve.Length;\r\n let minLength = Math.min(l1, l2) * 0.2;\r\n\r\n let nextP: Vector3;\r\n let preP: Vector3;\r\n if (c instanceof Arc)\r\n preP = c.GetPointAtDistance(l1 - minLength);\r\n else\r\n preP = c.StartPoint;\r\n\r\n if (nextCurve instanceof Arc)\r\n nextP = nextCurve.GetPointAtDistance(minLength);\r\n else\r\n nextP = nextCurve.EndPoint;\r\n\r\n let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p)));\r\n\r\n let dir = arc.PtOnCurve3(pt) ? -1 : 1;\r\n return dir;\r\n }\r\n }\r\n\r\n let dri = c.GetFistDeriv(param);\r\n let cross = dri.cross(pt.clone().sub(minCp));\r\n return -Math.sign(cross.z);\r\n }\r\n\r\n protected CreateArc(center: Vector3, startP: Vector3, endP?: Vector3)\r\n {\r\n let sa = angle(startP.clone().sub(center));\r\n let ea = endP ? angle(endP.clone().sub(center)) : sa;\r\n let arc = new Arc(center, Math.abs(this._OffsetDist), sa, ea, this._OffsetDist < 0);\r\n return arc;\r\n }\r\n}\r\n\r\nfunction EntityEncode(c: Curve)\r\n{\r\n if (c instanceof Line) return 1;\r\n else return 2;\r\n}\r\nfunction EntityEncode2(c1: Curve, c2: Curve)\r\n{\r\n return EntityEncode(c1) & EntityEncode(c2);\r\n}\r\n\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nfunction CurveIsFine(curve: Curve)\r\n{\r\n if (curve instanceof Arc && curve.AllAngle < 2e-6) return false;\r\n return curve.Length > 5e-5;\r\n}\r\n","import { Vector2, Vector3 } from 'three';\r\nimport { angle, equaln, equalv3 } from '../Geometry/GeUtils';\r\nimport { IntersectOption } from '../GraphicsSystem/IntersectWith';\r\nimport { Arc } from './Entity/Arc';\r\nimport { Line } from './Entity/Line';\r\nimport { Polyline } from './Entity/Polyline';\r\n\r\n/**\r\n * 点在扇形内部,提供一个简单实现的版本.\r\n * 优化版本请参照:http://www.cnblogs.com/miloyip/archive/2013/04/19/3029852.html\r\n * \r\n * @param arc 二维圆弧\r\n * @param pt \r\n * @returns 点在扇形内部.\r\n */\r\nfunction IsPointInCircularSector(arc: Arc, pt: Vector3): boolean\r\n{\r\n let center = arc.Center;\r\n let disSq = center.distanceTo(pt);\r\n if (disSq > arc.Radius * arc.Radius) return false;\r\n let an = angle(pt.clone().sub(center));\r\n let param = arc.GetParamAtAngle(an);\r\n return arc.ParamOnCurve(param);\r\n}\r\n\r\n/**\r\n * 点在弓型内部\r\n * \r\n * @param arc 二维圆弧\r\n * @param pt 点\r\n * @param isInChrodIsTrue 当点在弦上也认为在弓形内部\r\n * @returns 点在内部\r\n */\r\nexport function IsPointInBowArc(arc: Arc, pt: Vector3, isInChrodIsTrue = false): boolean\r\n{\r\n let pv = pt.clone().sub(arc.StartPoint);\r\n let av = arc.EndPoint.sub(arc.StartPoint);\r\n\r\n pv.cross(av);\r\n\r\n //未优化的代码\r\n // if (pv.z > 0 && arc.IsClockWise)\r\n // return false;\r\n // else if (pv.z < 0 && !arc.IsClockWise)\r\n // return false;\r\n // else\r\n // return arc.Center.distanceToSquared(pt) < arc.Radius * arc.Radius;\r\n\r\n //简化的代码\r\n if ((pv.z > 0) !== arc.IsClockWise || (isInChrodIsTrue && equaln(pv.z, 0)))\r\n {\r\n return arc.Center.distanceToSquared(pt) < arc.Radius * arc.Radius;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * 判断点在多段线内外\r\n * @param pl 多段线\r\n * @param pt 点\r\n * @returns 点在多段线内部\r\n */\r\nexport function IsPointInPolyLine(pl: Polyline, pt: Vector3): boolean\r\n{\r\n let crossings = 0;\r\n\r\n let insLine = new Line(pt, pt.clone().add(new Vector3(0, 10, 0)));\r\n\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n if (equaln(pl.GetBuilgeAt(i), 0, 5e-6))//直线\r\n {\r\n let sp = pl.GetPointAtParam(i);\r\n let ep = pl.GetPointAtParam(i + 1);\r\n //点位于线上面\r\n if (pt.y > Math.max(sp.y, ep.y))\r\n continue;\r\n //线垂直Y轴\r\n let derX = ep.x - sp.x;\r\n if (equaln(derX, 0, 5e-6))\r\n continue;\r\n\r\n //起点\r\n if (equaln(sp.x, pt.x, 5e-6))\r\n {\r\n if (sp.y > pt.y && derX < 0) crossings++;\r\n continue;\r\n }\r\n //终点\r\n if (equaln(ep.x, pt.x, 5e-6))\r\n {\r\n if (ep.y > pt.y && derX > 0) crossings++;\r\n continue;\r\n }\r\n\r\n //快速求交,只验证有没有交点\r\n let [x1, x2] = sp.x > ep.x ? [ep.x, sp.x] : [sp.x, ep.x];\r\n if (pt.x > x1 && pt.x < x2)\r\n {\r\n let derY = ep.y - sp.y;\r\n let k = derY / derX;\r\n\r\n if ((pt.x - sp.x) * k + sp.y > pt.y)\r\n crossings++;\r\n }\r\n }\r\n else //圆弧\r\n {\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n let sp = arc.StartPoint;\r\n let ep = arc.EndPoint;\r\n\r\n //如果相切\r\n if (equaln(Math.abs(pt.x - arc.Center.x), arc.Radius))\r\n {\r\n //当点和起点或者终点和点相切时\r\n if (equaln(sp.x, pt.x) && sp.y > pt.y)\r\n {\r\n if (ep.x - sp.x < -1e-5)\r\n crossings++;\r\n }\r\n else if (equaln(ep.x, pt.x) && ep.y > pt.y)\r\n {\r\n if (ep.x - sp.x > 1e-5)\r\n crossings++;\r\n }\r\n continue;\r\n }\r\n if (equaln(sp.x, pt.x) && sp.y > pt.y)\r\n {\r\n let der = arc.GetFistDeriv(0);\r\n if (der.x < -1e-5)\r\n crossings++;\r\n }\r\n if (equaln(ep.x, pt.x) && ep.y > pt.y)\r\n {\r\n let der = arc.GetFistDeriv(1);\r\n if (der.x > 1e-5)\r\n crossings++;\r\n }\r\n\r\n for (let pti of arc.IntersectWith(insLine, IntersectOption.ExtendArg))\r\n {\r\n if (pti.y < pt.y || equalv3(sp, pti, 1e-5) || equalv3(ep, pti, 1e-5))\r\n continue;\r\n\r\n let der = arc.GetFistDeriv(pti);\r\n if (!equaln(der.x, 0)) //相切.\r\n crossings++;\r\n }\r\n }\r\n }\r\n\r\n return (crossings % 2) === 1;\r\n}\r\n\r\n/**\r\n * 点在区域内部\r\n * \r\n * @param pt \r\n * @param pts \r\n * @returns \r\n */\r\nfunction IsPointInPolygon(pt: Vector3, pts: Vector2[])\r\n{\r\n let crossings = 0; //int\r\n let [px, py] = [pt.x, pt.y];\r\n\r\n let ptCout = pts.length;\r\n for (let i = 0; i < ptCout; i++)\r\n {\r\n let pti = pts[i];\r\n let ptn = pts[(i + 1) % ptCout];\r\n\r\n let [x1, x2] = [pti.x, ptn.x];\r\n\r\n /* This is done to ensure that we get the same result when\r\n the line goes from left to right and right to left */\r\n if (x1 > x2) [x1, x2] = [x2, x1];\r\n\r\n /* First check if the ray is possible to cross the line */\r\n if (px > x1 && px <= x2 && (py < pti.y || py <= ptn.y))\r\n {\r\n const eps = 0.000001;\r\n\r\n /* Calculate the equation of the line */\r\n let dx = ptn.x - pti.x;\r\n let dy = ptn.y - pti.y;\r\n let k;\r\n\r\n if (Math.abs(dx) < eps)\r\n k = 1e300;\r\n else\r\n k = dy / dx;\r\n\r\n let m = pti.y - k * pts[i].x;\r\n\r\n /* Find if the ray crosses the line */\r\n let y2 = k * px + m;\r\n if (py <= y2)\r\n crossings++;\r\n }\r\n }\r\n\r\n return crossings % 2 === 1;\r\n}\r\n","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Matrix3, Matrix4, Object3D, Vector2, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { CreateBoardUtil } from '../../ApplicationServices/mesh/createBoard';\r\nimport { arrayLast, arrayRemoveDuplicateBySort, changeArrayStartIndex } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { ComputerCurvesNormalOCS, getDeterminantFor2V } from '../../Common/CurveUtils';\r\nimport { matrixAlignCoordSys, matrixIsCoplane, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { FixIndex } from '../../Common/Utils';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, MatrixIsIdentityCS, updateGeometry } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../../GraphicsSystem/OffsetPolyline';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Arc } from './Arc';\r\nimport { Curve, ExtendType } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Line } from './Line';\r\n\r\nexport interface PolylineProps\r\n{\r\n pt: Vector2,\r\n bul: number;\r\n}\r\n@Factory\r\nexport class Polyline extends Curve\r\n{\r\n private _ClosedMark: boolean = false;\r\n constructor(private _LineData: PolylineProps[] = [])\r\n {\r\n super();\r\n }\r\n\r\n UpdateMatrixTo(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p = new Vector3().setFromMatrixPosition(m);\r\n p.applyMatrix4(this.OCSInv);\r\n if (equaln(p.z, 0))\r\n {\r\n let dir = Math.sign(this.Area2);\r\n let tm = matrixAlignCoordSys(this.OCS, m);\r\n for (let p of this._LineData)\r\n {\r\n let p3 = AsVector3(p.pt);\r\n p3.applyMatrix4(tm);\r\n p.pt.set(p3.x, p3.y);\r\n }\r\n this.OCS = m;\r\n let newDir = Math.sign(this.Area2);\r\n if (dir !== newDir)\r\n for (let p of this._LineData)\r\n p.bul *= -1;\r\n }\r\n }\r\n\r\n /**\r\n * 原地翻转,仅改变法向量\r\n */\r\n Flip()\r\n {\r\n this.WriteAllObjectRecord();\r\n let x = new Vector3();\r\n let y = new Vector3();\r\n let z = new Vector3();\r\n this._Matrix.extractBasis(x, y, z);\r\n z.negate();\r\n y.crossVectors(z, x);\r\n let p = this.Position;\r\n this._Matrix.makeBasis(x, y, z).setPosition(p);\r\n\r\n for (let d of this._LineData)\r\n {\r\n d.pt.y *= -1;\r\n d.bul *= -1;\r\n }\r\n this.Update();\r\n return this;\r\n }\r\n\r\n //翻转曲线,首尾调换\r\n Reverse(): this\r\n {\r\n if (this._LineData.length === 0)\r\n return this;\r\n this.WriteAllObjectRecord();\r\n\r\n let pts = [];\r\n let buls = [];\r\n for (let data of this._LineData)\r\n {\r\n pts.push(data.pt);\r\n buls.push(-data.bul);\r\n }\r\n\r\n let lastBul = buls.pop();\r\n buls.reverse();\r\n buls.push(lastBul);\r\n\r\n pts.reverse();\r\n\r\n if (this._ClosedMark && !equalv2(pts[0], arrayLast(pts)))\r\n {\r\n pts.unshift(pts.pop());\r\n buls.unshift(buls.pop());\r\n }\r\n\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let d = this._LineData[i];\r\n d.pt = pts[i];\r\n d.bul = buls[i];\r\n }\r\n\r\n return this;\r\n }\r\n set LineData(data: PolylineProps[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData = data;\r\n this.Update();\r\n }\r\n get LineData()\r\n {\r\n return this._LineData;\r\n }\r\n\r\n get NumberOfVertices(): number\r\n {\r\n return this._LineData.length;\r\n }\r\n\r\n /**\r\n * 在指定位置插入点.\r\n * 例如:\r\n * pl.AddVertexAt(pl.NumberOfVerticesk,p);//在末尾插入一个点\r\n *\r\n * @param {number} index 索引位置\r\n * @param {Vector2} pt 点\r\n * @returns {this}\r\n * @memberof Polyline\r\n */\r\n AddVertexAt(index: number, pt: Vector2 | Vector2[]): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let pts: PolylineProps[];\r\n if (Array.isArray(pt))\r\n {\r\n pts = pt.map(p =>\r\n {\r\n return {\r\n pt: p.clone(),\r\n bul: 0\r\n };\r\n });\r\n }\r\n else\r\n pts = [{ pt: pt.clone(), bul: 0 }];\r\n\r\n this._LineData.splice(index, 0, ...pts);\r\n this.Update();\r\n return this;\r\n }\r\n RemoveVertexAt(index: number): this\r\n {\r\n if (index < this._LineData.length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.splice(index, 1);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n RemoveVertexIn(from: number, to: number): this\r\n {\r\n if (from + 1 < this._LineData.length && to > from)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.splice(from + 1, to - from - 1);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * 重设闭合多段线的起点\r\n * @param index 起始index,如果index非整数,将用最接近的整数作为起始索引\r\n */\r\n ResetStartPoint(index: number)\r\n {\r\n if (!this.IsClose || index >= this.EndParam) return false;\r\n\r\n if (equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt))\r\n this._LineData.pop();\r\n\r\n changeArrayStartIndex(this._LineData, Math.floor(index + 0.5));\r\n this._LineData.push({\r\n pt: this._LineData[0].pt.clone(),\r\n bul: 0\r\n });\r\n return true;\r\n }\r\n GetPoint2dAt(index: number): Vector2 | undefined\r\n {\r\n if (index >= 0 && this._LineData.length > index)\r\n return this._LineData[index].pt.clone();\r\n }\r\n /**\r\n * 设置指定点的位置\r\n *\r\n * @param {number} index\r\n * @param {Vector2} pt\r\n * @memberof Polyline\r\n */\r\n SetPointAt(index: number, pt: Vector2): this\r\n {\r\n let d = this._LineData[index];\r\n if (d)\r\n {\r\n this.WriteAllObjectRecord();\r\n d.pt.copy(pt);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n for (let i = 0; i <= this.EndParam; i++)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n p.applyMatrix4(m).applyMatrix4(this.OCSInv);\r\n this.SetPointAt(i, AsVector2(p));\r\n }\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldPts = this.GetStretchPoints();\r\n reviseMirrorMatrix(this._Matrix);\r\n for (let i = 0; i < oldPts.length; i++)\r\n {\r\n let newP = oldPts[i].applyMatrix4(this.OCSInv);\r\n let newBul = -this.GetBuilgeAt(i);\r\n this.SetPointAt(i, AsVector2(newP));\r\n this.SetBulgeAt(i, newBul);\r\n }\r\n this.Reverse();\r\n return this;\r\n }\r\n SetBulgeAt(index: number, bul: number): this\r\n {\r\n let d = this._LineData[index];\r\n if (d)\r\n {\r\n this.WriteAllObjectRecord();\r\n d.bul = bul;\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n GetBuilgeAt(index: number): number\r\n {\r\n return this._LineData[index].bul;\r\n }\r\n Rectangle(length: number, height: number): this\r\n {\r\n this.LineData = [\r\n { pt: new Vector2(), bul: 0 },\r\n { pt: new Vector2(length), bul: 0 },\r\n { pt: new Vector2(length, height), bul: 0 },\r\n { pt: new Vector2(0, height), bul: 0 }];\r\n this.CloseMark = true;\r\n return this;\r\n }\r\n RectangleFrom2Pt(p1: Vector3, p2: Vector3): this\r\n {\r\n let box = new Box3();\r\n box.setFromPoints([p2, p1].map((p: Vector3) => p.clone().applyMatrix4(this.OCSInv)));\r\n\r\n let px1 = AsVector2(box.min);\r\n let px3 = AsVector2(box.max);\r\n let px2 = new Vector2(px3.x, px1.y);\r\n let px4 = new Vector2(px1.x, px3.y);\r\n\r\n this.LineData = [\r\n { pt: px1, bul: 0 },\r\n { pt: px2, bul: 0 },\r\n { pt: px3, bul: 0 },\r\n { pt: px4, bul: 0 }];\r\n\r\n this.CloseMark = true;\r\n return this;\r\n }\r\n //多段线起点\r\n get StartPoint()\r\n {\r\n if (this._LineData.length > 0)\r\n return AsVector3(this._LineData[0].pt).applyMatrix4(this.OCS);\r\n return new Vector3();\r\n }\r\n set StartPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n\r\n if (this._LineData.length === 0)\r\n this.AddVertexAt(0, AsVector2(p));\r\n else if (this._LineData.length === 1)\r\n this.SetPointAt(0, AsVector2(p));\r\n else\r\n {\r\n let bul = this.GetBuilgeAt(0);\r\n if (bul !== 0)\r\n {\r\n let arc = this.GetCurveAtParam(0) as Arc;\r\n arc.StartPoint = p;\r\n //前面线的凸度调整\r\n this.SetBulgeAt(0, Math.tan(arc.AllAngle / 4) * Math.sign(bul));\r\n }\r\n this.SetPointAt(0, AsVector2(p));\r\n }\r\n }\r\n get EndPoint()\r\n {\r\n if (this._ClosedMark) return this.StartPoint;\r\n if (this._LineData.length > 0)\r\n return AsVector3(this._LineData[this.EndParam].pt).applyMatrix4(this.OCS);\r\n return new Vector3();\r\n }\r\n set EndPoint(p: Vector3)\r\n {\r\n if (this._LineData.length < 2 || this.CloseMark)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n\r\n let bul = this.GetBuilgeAt(this.EndParam - 1);\r\n if (bul !== 0)\r\n {\r\n let arc = this.GetCurveAtParam(this.EndParam - 1) as Arc;\r\n arc.ApplyMatrix(this.OCSInv);\r\n arc.EndPoint = p;\r\n //前面线的凸度调整\r\n this.SetBulgeAt(this.EndParam - 1, Math.tan(arc.AllAngle / 4) * Math.sign(bul));\r\n }\r\n this.SetPointAt(this.EndParam, AsVector2(p));\r\n }\r\n\r\n get CurveCount(): number\r\n {\r\n return this.EndParam;\r\n }\r\n\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n\r\n /**\r\n * 表示最后一条曲线的终止参数,使用该参数可以直接遍历到多段线的所有子线段. for(i 1 && (equalv3(this.StartPoint, this.EndPoint, 1e-4)));\r\n }\r\n set CloseMark(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = v;\r\n this.Update();\r\n }\r\n\r\n DigestionCloseMark()\r\n {\r\n if (this._ClosedMark && this._LineData.length > 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = false;\r\n\r\n if (!equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt))\r\n this._LineData.push({ pt: AsVector2(this._LineData[0].pt), bul: 0 });\r\n }\r\n }\r\n\r\n get Length()\r\n {\r\n return this.Explode().reduce((l, cu) => l + cu.Length, 0);\r\n }\r\n\r\n /**\r\n * 获得指定参数所在的点.\r\n * 当曲线存在闭合标志时,参数必须在曲线内部.\r\n * 当曲线不存在闭合标志时,参数允许延伸出曲线.\r\n *\r\n * @param {number} param 参数\r\n * @returns {Vector3} 三维点,可为空\r\n * @memberof Polyline\r\n */\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n if (param === Math.floor(param) && this.ParamOnCurve(param))\r\n return AsVector3(this.GetPoint2dAt(FixIndex(param, this.NumberOfVertices))).applyMatrix4(this.OCS);\r\n let cu: Curve = this.GetCurveAtParam(param);\r\n if (cu)\r\n return cu.GetPointAtParam(this.GetCurveParamAtParam(param));\r\n return undefined;\r\n }\r\n\r\n GetDistAtParam(param: number): number\r\n {\r\n if (this._ClosedMark && !this.ParamOnCurve(param))\r\n return NaN;\r\n\r\n //参数 整数\r\n let paramFloor = Math.floor(param);\r\n //需要计算的曲线个数\r\n let cuCout = paramFloor > this.EndParam ? this.EndParam : paramFloor;\r\n\r\n let dist = 0;\r\n //首先计算完整曲线的长度\r\n for (let i = 0; i < cuCout; i++)\r\n {\r\n dist += this.GetCurveAtIndex(i).Length;\r\n }\r\n\r\n //参数已经大于索引,证明参数在线外.\r\n if (paramFloor !== cuCout)\r\n {\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCout);\r\n }\r\n else if (param > paramFloor)\r\n {\r\n let lastParam = param - paramFloor;\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(lastParam);\r\n }\r\n\r\n return dist;\r\n }\r\n GetPointAtDistance(dist: number): Vector3\r\n {\r\n let param = this.GetParamAtDist(dist);\r\n return this.GetPointAtParam(param);\r\n }\r\n\r\n /**\r\n * 返回参数所在的点. 如果曲线不闭合,会试图返回延伸点参数\r\n *\r\n * @param {Vector3} pt\r\n * @returns {number}\r\n * @memberof Polyline\r\n */\r\n GetParamAtPoint(pt: Vector3): number\r\n {\r\n let cus = this.Explode();\r\n if (cus.length === 0) return NaN;\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let param = cu.GetParamAtPoint(pt);\r\n if (cu.ParamOnCurve(param))\r\n return i + param; //返回点在曲线内部的参数\r\n }\r\n\r\n //当曲线闭合时,不需要延伸首尾去判断参数\r\n if (this._ClosedMark) return NaN;\r\n\r\n //起点终点参数集合\r\n let seParams: number[] = [];\r\n //点在第一条曲线上的参数\r\n let startParam = cus[0].GetParamAtPoint(pt);\r\n if (!isNaN(startParam) && startParam < 0)\r\n seParams.push(startParam);\r\n //点在最后一条线上的参数\r\n let endParam = cus[cus.length - 1].GetParamAtPoint(pt);\r\n if (!isNaN(endParam) && endParam > 0)\r\n seParams.push(endParam + this.EndParam - 1);\r\n\r\n if (seParams.length == 1)\r\n {\r\n return seParams[0];\r\n }\r\n else if (seParams.length == 2)\r\n {\r\n //返回较近的参数\r\n if (pt.distanceToSquared(this.StartPoint)\r\n < pt.distanceToSquared(this.EndPoint))\r\n return seParams[0];\r\n else\r\n return seParams[1];\r\n }\r\n return NaN;\r\n }\r\n GetParamAtDist(dist: number): number\r\n {\r\n let cus = this.Explode();\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let len = cu.Length;\r\n if (dist <= len)\r\n return i + cu.GetParamAtDist(dist);\r\n else if (equaln(dist, len, 1e-8))\r\n return i + 1;\r\n dist -= len;\r\n }\r\n if (!this._ClosedMark)\r\n return cus.length + cus[cus.length - 1].GetParamAtDist(dist);\r\n\r\n return NaN;\r\n }\r\n GetDistAtPoint(pt: Vector3): number\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n if (!this.ParamOnCurve(param)) return NaN;\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n /**\r\n * 返回曲线的一阶导数.\r\n * 当曲线闭合(标志)且点不在曲线上.\r\n * 或者曲线不闭合(标志) 且点不在曲线上也不在延伸上\r\n *\r\n * @param {(number | Vector3)} param\r\n * @returns {Vector3}\r\n * @memberof Polyline\r\n */\r\n GetFistDeriv(param: number | Vector3): Vector3\r\n {\r\n if (param instanceof Vector3)\r\n param = this.GetParamAtPoint(param);\r\n\r\n if (isNaN(param))\r\n return undefined;\r\n\r\n let cu = this.GetCurveAtParam(param);\r\n\r\n if (!cu) return undefined;\r\n\r\n return cu.GetFistDeriv(this.GetCurveParamAtParam(param));\r\n }\r\n GetSplitCurves(param: number[] | number): Array\r\n {\r\n //参数需要转化为参数数组\r\n let params: number[];\r\n if (typeof param == \"number\")\r\n params = [param];\r\n else\r\n params = param;\r\n\r\n //校验参数在曲线中,修正参数\r\n let endParam = this.EndParam;\r\n params = params.filter(p => this.ParamOnCurve(p) && p > -1e-6)\r\n .map(a =>\r\n {\r\n if (a < 0) return 0;\r\n if (a > endParam) return endParam;\r\n if (equaln(a, Math.floor(a + 0.5), 1e-8))\r\n return Math.floor(a + 0.5);\r\n return a;\r\n });\r\n //排序\r\n params.sort((a, b) => a - b);\r\n let hasEndParam = arrayLast(params) === this.EndParam;\r\n //必须加入最后一个参数,保证切割后的曲线完整\r\n if (!hasEndParam)\r\n params.push(this.EndParam);\r\n arrayRemoveDuplicateBySort(params, (e1, e2) => equaln(e1, e2, 1e-8));\r\n params = params.filter(p => this.ParamOnCurve(p));\r\n if (params.length === 0)\r\n return [];\r\n\r\n //判断是否存在0参数\r\n let hasZeroParam = params[0] === 0;\r\n if (hasZeroParam)\r\n params.shift();\r\n\r\n let { pts, buls } = this.PtsBuls;\r\n\r\n //返回的多段线集合\r\n let pls: Polyline[] = [];\r\n\r\n let len = 0;//已经走过的参数长度(整数)\r\n\r\n //上一个切割参数的位置 0-1\r\n let prePa = 0;\r\n for (let pa of params)\r\n {\r\n //参数所在点\r\n let pt = AsVector2(this.GetPointAtParam(pa).applyMatrix4(this.OCSInv));\r\n pa -= len;\r\n let pafloor = Math.floor(pa);\r\n len += pafloor;\r\n\r\n let plData: PolylineProps[] = [];\r\n\r\n //添加点\r\n for (let i = 0; i < pafloor; i++)\r\n {\r\n if (i === 0 && !equaln(buls[0], 0, 1e-8))\r\n {\r\n buls[0] = Math.tan((1 - prePa) * Math.atan(buls[0]));\r\n }\r\n plData.push({ pt: pts[0], bul: buls[0] });\r\n pts.shift();\r\n buls.shift();\r\n }\r\n\r\n if (equaln(pa, pafloor, 1e-8))//如果pa在点上\r\n {\r\n plData.push({ pt: pts[0].clone(), bul: buls[0] });\r\n }\r\n else //在曲线上\r\n {\r\n let bul: number = buls[0];\r\n if (!equaln(bul, 0, 1e-6))\r\n bul = Math.tan((pa - pafloor - (0 === pafloor ? prePa : 0)) * Math.atan(buls[0])); //->凸度\r\n\r\n //加入顶点+凸度\r\n plData.push({ pt: pts[0].clone(), bul });\r\n //终点\r\n plData.push({ pt, bul: 0 });\r\n\r\n //修正剩余的点表和凸度表\r\n pts[0].copy(pt);\r\n }\r\n\r\n prePa = pa - pafloor;\r\n if (plData.length > 1)\r\n {\r\n let pl = new Polyline(plData).ApplyMatrix(this.OCS);\r\n pl.ColorIndex = this.ColorIndex;\r\n pls.push(pl);\r\n }\r\n }\r\n\r\n //当曲线为闭合曲线,并且不存在0切割参数时,首尾连接曲线\r\n if (this._ClosedMark && !hasZeroParam && !hasEndParam)\r\n {\r\n let lastPl = pls[pls.length - 1];\r\n if (equalv2(arrayLast(lastPl._LineData).pt, pls[0]._LineData[0].pt))\r\n lastPl._LineData.pop();\r\n\r\n lastPl._LineData.push(...pls[0]._LineData);\r\n\r\n pls.shift();\r\n }\r\n return pls;\r\n }\r\n\r\n //未完善\r\n GetCurveAtParamRange(startParam: number, endParam: number): Array\r\n {\r\n let sfloor = Math.floor(startParam + 0.5);\r\n if (equaln(sfloor, startParam, 1e-8)) startParam = sfloor;\r\n else sfloor = Math.floor(startParam);\r\n let efloor = Math.floor(endParam + 0.5);\r\n if (equaln(efloor, endParam, 1e-8)) endParam = efloor;\r\n else efloor = Math.floor(efloor);\r\n\r\n const GetCurve = (index: number) =>\r\n {\r\n let d = this._LineData[index];\r\n let next = this._LineData[index + 1];\r\n if (!equaln(d.bul, 0, 1e-8))\r\n return new Arc().ParseFromBul(d.pt, next.pt, d.bul);\r\n else\r\n return new Line(AsVector3(d.pt), AsVector3(next.pt));\r\n };\r\n\r\n let lined: PolylineProps[] = [];\r\n if (startParam === sfloor)\r\n {\r\n let d = this._LineData[sfloor];\r\n lined.push({ pt: d.pt.clone(), bul: d.bul });\r\n }\r\n else\r\n {\r\n let d = this._LineData[sfloor];\r\n let cu = GetCurve(sfloor);\r\n let remParam = startParam - sfloor;\r\n let p = cu.GetPointAtParam(remParam);\r\n let bul = d.bul;\r\n if (!equaln(bul, 0))\r\n bul = Math.tan(Math.atan(bul) * (1 - remParam));\r\n lined.push({ pt: AsVector2(p), bul: bul });\r\n }\r\n\r\n for (let i = sfloor + 1; i < efloor; i++)\r\n {\r\n let d = this._LineData[i];\r\n lined.push({ pt: d.pt.clone(), bul: d.bul });\r\n }\r\n\r\n if (efloor !== endParam)\r\n {\r\n let d = this.LineData[efloor];\r\n let remParam = endParam - efloor;\r\n let cu = GetCurve(efloor);\r\n let p = cu.GetPointAtParam(remParam);\r\n let bul = d.bul;\r\n if (!equaln(bul, 0))\r\n {\r\n arrayLast(lined).bul = Math.tan(Math.atan(bul) * remParam);\r\n bul = Math.tan(Math.atan(bul) * (1 - remParam));\r\n }\r\n lined.push({ pt: AsVector2(p), bul });\r\n }\r\n\r\n let pl = new Polyline(lined);\r\n pl.OCS = this.OCSNoClone;\r\n return;\r\n }\r\n\r\n Extend(newParam: number)\r\n {\r\n if (this.CloseMark || this.ParamOnCurve(newParam)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let ptIndex: number;\r\n let bulIndex: number;\r\n\r\n if (newParam < 0)\r\n {\r\n ptIndex = 0;\r\n bulIndex = 0;\r\n }\r\n else if (newParam > this.EndParam)\r\n {\r\n ptIndex = this.EndParam;\r\n bulIndex = ptIndex - 1;\r\n }\r\n\r\n //修改顶点\r\n this._LineData[ptIndex].pt = AsVector2(this.GetPointAtParam(newParam).applyMatrix4(this.OCSInv));\r\n\r\n //修改凸度\r\n let oldBul = this._LineData[bulIndex].bul;\r\n if (oldBul != 0)\r\n this._LineData[bulIndex].bul = Math.tan(Math.atan(oldBul) * (1 + newParam - ptIndex));\r\n\r\n this.Update();\r\n }\r\n\r\n //const this\r\n MatrixAlignTo2(toMatrix: Matrix4)\r\n {\r\n if (!matrixIsCoplane(this._Matrix, toMatrix, 1e-4))\r\n return this.PtsBuls;\r\n\r\n let m = matrixAlignCoordSys(this._Matrix, toMatrix);\r\n\r\n let z1 = this.Normal;\r\n let z2 = new Vector3().setFromMatrixColumn(toMatrix, 2);\r\n let isMirror = equalv3(z1, z2.negate());\r\n\r\n let pts: Vector2[] = [];\r\n let buls: number[] = [];\r\n for (let d of this._LineData)\r\n {\r\n let p = AsVector2(AsVector3(d.pt).applyMatrix4(m));\r\n pts.push(p);\r\n buls.push(isMirror ? -d.bul : d.bul);\r\n }\r\n return { pts, buls };\r\n }\r\n\r\n Join(cu: Curve, allowGap = false, tolerance = 1e-4)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (this._ClosedMark)\r\n return Status.False;\r\n\r\n let [sp, ep, cuSp, cuEp] = [this.StartPoint, this.EndPoint, cu.StartPoint, cu.EndPoint];\r\n\r\n let ocsInv = this.OCSInv;\r\n let [cuSp2, cuEp2] = [cuSp, cuEp].map(p => AsVector2(p.clone().applyMatrix4(ocsInv)));\r\n\r\n if (this._LineData.length === 0)\r\n {\r\n if (cu instanceof Line)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: cu.Bul });\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (cu instanceof Polyline)\r\n {\r\n let f = new CADFiler();\r\n cu.WriteFile(f);\r\n this.ReadFile(f);\r\n }\r\n else\r\n return Status.False;\r\n }\r\n else\r\n {\r\n enum LinkType\r\n {\r\n None = 0,\r\n SpSp = 1,\r\n SpEp = 2,\r\n EpSp = 3,\r\n EpEp = 4,\r\n };\r\n\r\n let spspDisSq = cuSp.distanceToSquared(sp);\r\n let spepDisSq = cuSp.distanceToSquared(ep);\r\n let epspDisSq = cuEp.distanceToSquared(sp);\r\n let epepDisSq = cuEp.distanceToSquared(ep);\r\n let minDis = tolerance * tolerance;\r\n\r\n let linkType = LinkType.None;\r\n\r\n if (spspDisSq < minDis)\r\n {\r\n linkType = LinkType.SpSp;\r\n minDis = spspDisSq;\r\n }\r\n\r\n if (spepDisSq < minDis)\r\n {\r\n linkType = LinkType.SpEp;\r\n minDis = spepDisSq;\r\n }\r\n\r\n if (epspDisSq < minDis)\r\n {\r\n linkType = LinkType.EpSp;\r\n minDis = epspDisSq;\r\n }\r\n\r\n if (epepDisSq < minDis)\r\n linkType = LinkType.EpEp;\r\n\r\n if (linkType === LinkType.None)\r\n return Status.False;\r\n\r\n if (cu instanceof Line)\r\n {\r\n if (linkType === LinkType.SpSp)\r\n {\r\n this._LineData.unshift({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n this._LineData.unshift({ pt: cuSp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n }\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n let dir = equalv3(this.Normal, cu.Normal.negate()) ? -1 : 1;\r\n let bul = cu.Bul * dir;\r\n if (linkType === LinkType.SpSp)\r\n {\r\n this._LineData.unshift({ pt: cuEp2, bul: -bul });\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n arrayLast(this._LineData).bul = bul;\r\n this._LineData.push({ pt: cuEp2, bul: 0 });\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n this._LineData.unshift({ pt: cuSp2, bul: bul });\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n arrayLast(this._LineData).bul = -bul;\r\n this._LineData.push({ pt: cuSp2, bul: 0 });\r\n }\r\n }\r\n else if (cu instanceof Polyline)\r\n {\r\n if (cu.CloseMark) return Status.False;\r\n\r\n let { pts, buls } = this.PtsBuls;\r\n\r\n if (linkType === LinkType.SpSp)\r\n {\r\n cu.Reverse();\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n cuPtsBul.pts.pop();\r\n cuPtsBul.buls.pop();\r\n pts = cuPtsBul.pts.concat(pts);\r\n buls = cuPtsBul.buls.concat(buls);\r\n }\r\n else if (linkType === LinkType.SpEp)\r\n {\r\n pts.pop();\r\n buls.pop();\r\n\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n pts = pts.concat(cuPtsBul.pts);\r\n buls = buls.concat(cuPtsBul.buls);\r\n }\r\n else if (linkType === LinkType.EpSp)\r\n {\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n cuPtsBul.pts.pop();\r\n cuPtsBul.buls.pop();\r\n pts = cuPtsBul.pts.concat(pts);\r\n buls = cuPtsBul.buls.concat(buls);\r\n }\r\n else if (linkType === LinkType.EpEp)\r\n {\r\n pts.pop();\r\n buls.pop();\r\n\r\n cu.Reverse();\r\n let cuPtsBul = cu.MatrixAlignTo2(this.OCS);\r\n pts = pts.concat(cuPtsBul.pts);\r\n buls = buls.concat(cuPtsBul.buls);\r\n }\r\n\r\n this._LineData.length = 0;\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n this._LineData.push({ pt: pts[i], bul: buls[i] });\r\n }\r\n }\r\n else\r\n return Status.False;\r\n }\r\n\r\n //在上面的其他分支已经返回了假 所以这里直接返回真.\r\n this.Update();\r\n return Status.True;\r\n }\r\n\r\n /**\r\n * 将曲线数组组合成多段线\r\n * @param curves 已经使用CurveLinked的数组,总是首尾相连\r\n * @returns\r\n */\r\n static Combine(curves: Curve[], tolerance = 1e-5): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n pl.OCS = ComputerCurvesNormalOCS(curves);\r\n\r\n for (let cu of curves)\r\n pl.Join(cu, false, tolerance);\r\n\r\n let d = pl.LineData;\r\n if (d.length > 1)\r\n {\r\n let ld = arrayLast(d).pt;\r\n if (equalv2(d[0].pt, ld, tolerance))\r\n ld.copy(d[0].pt);\r\n }\r\n\r\n return pl;\r\n }\r\n /**首尾相连的曲线直接连接 */\r\n static FastCombine(curves: Curve[], tolerance = 1e-5): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n pl.OCS = ComputerCurvesNormalOCS(curves);\r\n\r\n let ocsInv = pl.OCSInv;\r\n\r\n let lineData: PolylineProps[] = [];\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let cu = curves[i];\r\n let bul = 0;\r\n if (cu instanceof Arc)\r\n bul = cu.Bul;\r\n\r\n lineData.push({\r\n pt: AsVector2(cu.StartPoint.applyMatrix4(ocsInv)),\r\n bul\r\n });\r\n\r\n if (i === curves.length - 1)\r\n {\r\n lineData.push({\r\n pt: AsVector2(cu.EndPoint.applyMatrix4(ocsInv)),\r\n bul: 0\r\n });\r\n }\r\n }\r\n\r\n if (lineData.length > 1)\r\n {\r\n let ld = arrayLast(lineData).pt;\r\n if (equalv2(lineData[0].pt, ld, tolerance))\r\n ld.copy(lineData[0].pt);\r\n }\r\n pl.LineData = lineData;\r\n return pl;\r\n }\r\n\r\n PtOnCurve(pt: Vector3): boolean\r\n {\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let c = this.GetCurveAtIndex(i);\r\n if (c.PtOnCurve(pt))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let c = this.GetCurveAtIndex(i);\r\n if (c.PtOnCurve3(p, fuzz))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n PtInCurve(pt: Vector3)\r\n {\r\n return this.IsClose && IsPointInPolyLine(this, pt);\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.GetClosestPointTo2(pt, extend ? ExtendType.Both : ExtendType.None);\r\n }\r\n GetClosestPointTo2(pt: Vector3, extType: ExtendType): Vector3\r\n {\r\n //当曲线空时,返回空\r\n if (this.EndParam < 1) return undefined;\r\n //当有闭合标志时,曲线在任何位置都不延伸\r\n if (this._ClosedMark) extType = ExtendType.None;\r\n\r\n //最近点\r\n let ptC = undefined;\r\n //最近点的距离\r\n let ptCDist = Infinity;\r\n\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n\r\n //前延伸\r\n if (i === 0 && (extType & ExtendType.Front) > 0)\r\n {\r\n let ptCFirst = cu.GetClosestPointTo(pt, true);\r\n if (cu.GetParamAtPoint(ptCFirst) <= 1)\r\n {\r\n ptC = ptCFirst;\r\n ptCDist = ptC.distanceToSquared(pt);\r\n }\r\n if (extType === ExtendType.Front)\r\n continue;\r\n }\r\n\r\n let ptCloseNew: Vector3; //新的最近点\r\n\r\n //后延伸 (此处与前延伸分开if 如果线只有一段,那么前后延伸都能同时触发)\r\n if (i === (this.EndParam - 1) && (extType & ExtendType.Back) > 0)\r\n {\r\n let ptCLast = cu.GetClosestPointTo(pt, true);\r\n if (cu.GetParamAtPoint(ptCLast) >= 0)\r\n ptCloseNew = ptCLast;\r\n else //如果延伸之后并不在曲线或者曲线的后延伸上\r\n ptCloseNew = cu.EndPoint;\r\n }\r\n else\r\n {\r\n ptCloseNew = cu.GetClosestPointTo(pt, false);\r\n }\r\n\r\n let newDist = ptCloseNew.distanceToSquared(pt);\r\n if (newDist < ptCDist)\r\n {\r\n ptC = ptCloseNew;\r\n ptCDist = newDist;\r\n }\r\n }\r\n\r\n return ptC;\r\n }\r\n //偏移\r\n GetOffsetCurves(offsetDist: number): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist);\r\n let curves = polyOffestUtil.Do();\r\n for (let cu of curves)\r\n cu.ColorIndex = this.ColorIndex;\r\n return curves;\r\n }\r\n GetFeedingToolPath(offsetDist: number, offsetDistSq = (offsetDist ** 2) * 2.1): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq);\r\n return polyOffestUtil.Do();\r\n }\r\n /**\r\n * 分解\r\n */\r\n Explode(): Curve[]\r\n {\r\n let exportCus: Curve[] = [];\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n exportCus.push(this.GetCurveAtIndex(i));\r\n }\r\n return exportCus;\r\n }\r\n\r\n /**\r\n * 根据参数得到参数所在的子曲线.\r\n *\r\n * 当曲线存在闭合标志时,参数必须在曲线内部,否则返回空.\r\n *\r\n * @param {number} param 参数值\r\n * @returns {Curve} 曲线(直线或者圆弧) 或空\r\n * @memberof Polyline\r\n */\r\n GetCurveAtParam(param: number): Curve\r\n {\r\n if (this._ClosedMark && !this.ParamOnCurve(param))\r\n return undefined;\r\n\r\n if (param < 0)\r\n return this.GetCurveAtIndex(0);\r\n else if (param >= this.EndParam)\r\n return this.GetCurveAtIndex(this.EndParam - 1);\r\n else return this.GetCurveAtIndex(Math.floor(param));\r\n }\r\n\r\n /**\r\n * 得到参数在子曲线中的表示\r\n *\r\n * @param {number} param 参数在多段线中表示\r\n * @returns {number} 参数在子曲线中表示\r\n * @memberof Polyline\r\n */\r\n GetCurveParamAtParam(param: number): number\r\n {\r\n if (param >= this.EndParam) param -= this.EndParam - 1;\r\n else if (param > 0) param -= Math.floor(param);\r\n\r\n return param;\r\n }\r\n\r\n /**\r\n * 获得曲线,来自索引位置.\r\n * @param {number} i 索引位置 整数\r\n */\r\n GetCurveAtIndex(i: number): Curve\r\n {\r\n if (i >= this._LineData.length) return undefined;\r\n\r\n if (!this.ParamOnCurve(i)) return undefined;\r\n\r\n if (!this._ClosedMark && i === this._LineData.length - 1) return undefined;\r\n\r\n let d1 = this._LineData[i];\r\n let d2 = this._LineData[FixIndex(i + 1, this._LineData)];\r\n\r\n let curve: Curve;\r\n if (equaln(d1.bul, 0, 1e-8))\r\n curve = new Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCS);\r\n else\r\n curve = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCS);\r\n\r\n curve.ColorIndex = this._Color;\r\n return curve;\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-5)\r\n {\r\n return IntersectPolylineAndCurve(this, curve, intType, tolerance);\r\n }\r\n\r\n //计算自交点.\r\n IntersectSelf(): number[]\r\n {\r\n let cus = this.Explode();\r\n if (cus.length === 0) return [];\r\n\r\n let intParams: number[] = [];\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n for (let j = i + 2; j < cus.length; j++)\r\n {\r\n let c2 = cus[j];\r\n let pts = c.IntersectWith(c2, IntersectOption.OnBothOperands);\r\n\r\n for (let p of pts)\r\n {\r\n intParams.push(i + c.GetParamAtPoint(p));\r\n intParams.push(j + c2.GetParamAtPoint(p));\r\n }\r\n }\r\n }\r\n return intParams;\r\n }\r\n IsIntersectSelf()\r\n {\r\n let cus = this.Explode().filter(c => !equaln(c.Length, 0, 1e-3));\r\n for (let i = 0; i < cus.length - 1; i++)\r\n {\r\n let c1 = cus[i];\r\n let c1IsLine = c1 instanceof Line;\r\n let d1 = c1.GetFistDeriv(c1IsLine ? 0 : 1).normalize();\r\n\r\n for (let j = i + 1; j < cus.length; j++)\r\n {\r\n let c2 = cus[j];\r\n let c2IsLine = c2 instanceof Line;\r\n let d2 = c2.GetFistDeriv(0).normalize();\r\n if (j === i + 1)\r\n {\r\n if (c1IsLine === c2IsLine)\r\n {\r\n if (c1IsLine)\r\n {\r\n if (equalv3(d1, d2.negate()))\r\n return true;\r\n continue;\r\n }\r\n else\r\n {\r\n if (equalv3(d1, d2.negate()) && equalv3((c1).Center, (c2).Center))\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n let intPts = c1.IntersectWith2(c2, 0);\r\n let intPtsLen = intPts.length;\r\n\r\n if (intPtsLen > 0)\r\n {\r\n if (intPtsLen === 2 && equalv3(intPts[0].pt, intPts[1].pt, 1e-3))\r\n {\r\n intPtsLen = 1;\r\n intPts.pop();\r\n }\r\n\r\n if (intPtsLen === 2 && j === i + 1 && cus.length === 2)\r\n {\r\n if (intPts.every(r => equaln(r.thisParam, 0, 1e-3) || equaln(r.thisParam, 1, 1e-3)))\r\n continue;\r\n }\r\n\r\n if (j === i + 1 && intPtsLen === 1)\r\n continue;\r\n if (this.IsClose && i === 0 && j === cus.length - 1 && intPtsLen === 1)\r\n continue;\r\n return true;\r\n }\r\n }\r\n\r\n }\r\n return false;\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n let box = new Box3Ext();\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n box.union(cu.BoundingBox);\r\n }\r\n return box;\r\n }\r\n\r\n /**\r\n * 得到曲线有用的点表和凸度(闭合曲线首尾重复)\r\n */\r\n get PtsBuls(): { pts: Vector2[], buls: number[]; }\r\n {\r\n let pts: Vector2[] = [];\r\n let buls: number[] = [];\r\n\r\n if (this._LineData.length === 0)\r\n return { pts, buls };\r\n\r\n for (let data of this._LineData)\r\n {\r\n pts.push(data.pt.clone());\r\n buls.push(data.bul);\r\n }\r\n //闭合且起点不等于终点\r\n if (this._ClosedMark &&\r\n !this._LineData[0].pt.equals(arrayLast(this._LineData).pt))\r\n {\r\n pts.push(pts[0].clone());\r\n buls.push(buls[0]);\r\n }\r\n\r\n return { pts, buls };\r\n }\r\n get IsBulge()\r\n {\r\n if (!this.IsClose) return false;\r\n\r\n let refDir = Math.sign(this.Area2);\r\n let c1: Curve;\r\n let c2: Curve;\r\n\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n c1 = this.GetCurveAtIndex(i);\r\n c2 = this.GetCurveAtIndex(FixIndex(i + 1, this.EndParam));\r\n\r\n let len1 = c1.Length;\r\n let len2 = c2.Length;\r\n let minLen = Math.min(len1, len2) * 0.2;\r\n\r\n let p = c1.EndPoint;\r\n let p1: Vector3;\r\n let p2: Vector3;\r\n\r\n if (c1 instanceof Arc)\r\n {\r\n let dir = c1.IsClockWise ? -1 : 1;\r\n if (dir !== refDir)\r\n return false;\r\n p1 = c1.GetPointAtDistance(len1 - minLen);\r\n }\r\n else\r\n p1 = c1.StartPoint;\r\n\r\n if (c2 instanceof Arc)\r\n {\r\n let dir = c2.IsClockWise ? -1 : 1;\r\n if (dir !== refDir)\r\n return false;\r\n p2 = c2.GetPointAtDistance(minLen);\r\n }\r\n else\r\n p2 = c2.EndPoint;\r\n\r\n let vec1 = p.clone().sub(p1);\r\n let vec2 = p2.sub(p);\r\n let dir = Math.sign(vec1.cross(vec2).z);\r\n\r\n if (dir !== 0 && dir !== refDir)\r\n return false;\r\n }\r\n return true;\r\n }\r\n get Shape()\r\n {\r\n let { pts, buls } = this.PtsBuls;\r\n let curve = CreateBoardUtil.CreatePath(pts, buls);\r\n return curve;\r\n }\r\n get SVG()\r\n {\r\n let sp = this.StartPoint;\r\n let str = `M${sp.x} ${sp.y} `;\r\n for (let i = 1; i <= this.EndParam; i++)\r\n {\r\n let bul = this.GetBuilgeAt(i - 1);\r\n let p = this.GetPointAtParam(i);\r\n if (bul === 0)\r\n str += `L${p.x} ${p.y} `;\r\n else\r\n {\r\n let arc = this.GetCurveAtIndex(i - 1) as Arc;\r\n str += `A ${arc.Radius} ${arc.Radius} 0 ${Math.abs(bul) >= 1 ? 1 : 0} ${arc.IsClockWise ? 0 : 1} ${p.x} ${p.y}`;\r\n }\r\n }\r\n return str;\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let shape = this.Shape;\r\n\r\n let geo = BufferGeometryUtils.CreateFromPts(shape.getPoints(50).map(AsVector3));\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry().setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let obj = new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n return obj;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let shape = this.Shape;\r\n let pts = shape.getPoints(50).map(AsVector3);\r\n let plObj = en as TLine;\r\n let geo = plObj.geometry as BufferGeometry;\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts))\r\n {\r\n updateGeometry(plObj, BufferGeometryUtils.CreateFromPts(pts));\r\n }\r\n }\r\n\r\n GetDragPointCount(drag: DragPointType): number\r\n {\r\n if (drag === DragPointType.Grip)\r\n {\r\n let count = this.EndParam * 2 + 1;\r\n if (this.CloseMark) count--;\r\n return count;\r\n }\r\n else\r\n {\r\n return this._LineData.length;\r\n }\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n let midPts = [];\r\n let enParam = this.EndParam;\r\n for (let i = 0.5; i < enParam; i++)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n p && midPts.push(p);\r\n }\r\n return midPts;\r\n case ObjectSnapMode.Nea:\r\n {\r\n let nea: Vector3[] = [];\r\n for (let cu of this.Explode())\r\n {\r\n let neaa = cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n if (neaa)\r\n nea.push(...neaa);\r\n }\r\n return nea;\r\n }\r\n case ObjectSnapMode.Ext:\r\n {\r\n let cp = this.GetClosestPointTo(pickPoint, true);\r\n if (cp)\r\n return [cp];\r\n break;\r\n }\r\n case ObjectSnapMode.Cen:\r\n let cenPts: Vector3[] = [];\r\n for (let i = 0; i < this._LineData.length; i++)\r\n {\r\n let data = this._LineData[i];\r\n if (!equaln(data.bul, 0))\r\n {\r\n let cu = this.GetCurveAtIndex(i) as Arc;\r\n if (cu)//end bul !== 0 但是并没有圆弧\r\n cenPts.push(cu.Center);\r\n }\r\n }\r\n return cenPts;\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n let cp = this.GetClosestPointTo(pickPoint, false);\r\n if (!cp) return [];\r\n let cparam = this.GetParamAtPoint(cp);\r\n let cu = this.GetCurveAtParam(cparam);\r\n if (cu)\r\n {\r\n let closestPt = cu.GetClosestPointTo(lastPoint, true);\r\n if (closestPt && this.PtOnCurve(closestPt))\r\n return [closestPt];\r\n }\r\n }\r\n case ObjectSnapMode.Tan:\r\n if (lastPoint)\r\n {\r\n let clostPt = this.GetClosestPointTo(pickPoint, false);\r\n if (!clostPt) return [];\r\n let par = this.GetParamAtPoint(clostPt);\r\n let cu = this.GetCurveAtParam(par);\r\n if (cu instanceof Arc)\r\n return cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint);\r\n return [];\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let ptList: Vector3[] = [];\r\n if (this._LineData.length < 2)\r\n return ptList;\r\n\r\n let enParam = this.EndParam;\r\n if (this.CloseMark) enParam -= 0.5;\r\n for (let i = 0; i < enParam + 0.5; i += 0.5)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n ptList.push(p);\r\n }\r\n return ptList;\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let moveVLoc = AsVector2(moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n\r\n let calcIndexList = indexList;\r\n if (indexList.length > 1)\r\n {\r\n let centerIndexes = indexList.filter(i => i % 2 === 0);\r\n if (centerIndexes.length > 0)\r\n calcIndexList = centerIndexes;\r\n }\r\n\r\n for (let index of calcIndexList)\r\n {\r\n if (index % 2 === 0)\r\n {\r\n let cuIndex = index / 2;\r\n\r\n let ptCout = this._LineData.length;\r\n\r\n let frontIndex = cuIndex - 1;\r\n if (this._ClosedMark)\r\n frontIndex = FixIndex(frontIndex, ptCout);\r\n\r\n if (frontIndex >= 0 && this.GetBuilgeAt(frontIndex))\r\n {\r\n let arc = this.GetCurveAtIndex(frontIndex) as Arc;\r\n arc.MoveGripPoints([2], moveVec);\r\n this._LineData[frontIndex].bul = arc.Bul;\r\n }\r\n if ((cuIndex !== ptCout - 1) && this.GetBuilgeAt(cuIndex))\r\n {\r\n let arc = this.GetCurveAtIndex(cuIndex) as Arc;\r\n arc.MoveGripPoints([0], moveVec);\r\n this._LineData[cuIndex].bul = arc.Bul;\r\n }\r\n this._LineData[cuIndex].pt.add(moveVLoc);\r\n }\r\n else\r\n {\r\n let ptIndex = (index - 1) / 2;\r\n let nextIndex = (FixIndex(ptIndex + 1, this._LineData));\r\n let d = this._LineData[ptIndex];\r\n if (d.bul == 0)\r\n {\r\n this._LineData[ptIndex].pt.add(moveVLoc);\r\n this._LineData[nextIndex].pt.add(moveVLoc);\r\n }\r\n else\r\n {\r\n let arc = this.GetCurveAtIndex(ptIndex) as Arc;\r\n arc.MoveGripPoints([1], moveVec);\r\n this._LineData[ptIndex].bul = arc.Bul;\r\n }\r\n }\r\n }\r\n\r\n this.Update();\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n let iswcs = MatrixIsIdentityCS(this._Matrix);\r\n let pts: Vector3[] = [];\r\n for (let data of this._LineData)\r\n {\r\n let p = AsVector3(data.pt);\r\n if (!iswcs) p.applyMatrix4(this._Matrix);\r\n pts.push(p);\r\n }\r\n return pts;\r\n }\r\n\r\n /**\r\n * 范围拉伸(stretch),对夹点进行拉伸.\r\n * 如果对圆弧的一侧进行拉伸,那么修改bul\r\n *\r\n * @param {Array} indexList\r\n * @param {Vector3} vec\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n //本地坐标系移动向量\r\n let moveVLoc = vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv));\r\n\r\n let ptCout = this._LineData.length;\r\n\r\n for (let index of indexList)\r\n {\r\n if (index >= ptCout)\r\n throw \"在拉伸多段线顶点时,尝试拉伸不存在的顶点!(通常是因为模块中的板轮廓被破坏,导致的顶点丢失!)\";\r\n\r\n let frontIndex = index - 1;\r\n let nextIndex = index + 1;\r\n if (this._ClosedMark)\r\n {\r\n frontIndex = FixIndex(frontIndex, ptCout);\r\n nextIndex = FixIndex(nextIndex, ptCout);\r\n }\r\n\r\n /**\r\n * 根据新的拉伸点修改凸度.\r\n *\r\n * @param {number} nextIndex 隔壁点索引\r\n * @param {number} bulIndex 需要修改凸度位置的索引\r\n * @returns\r\n */\r\n const ChangeBul = (nextIndex: number, bulIndex: number) =>\r\n {\r\n //需要修改的点的数据\r\n let d = this._LineData[bulIndex];\r\n if (d === undefined || d.bul == 0) return;\r\n\r\n //如果隔壁点不在拉伸列表中\r\n if (indexList.indexOf(nextIndex) === -1)\r\n {\r\n let needChangeP = this.GetPointAtParam(index);\r\n let notChangeP = this.GetPointAtParam(nextIndex);\r\n\r\n //原先的弦长的一半\r\n let oldChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5;\r\n\r\n //弓高\r\n let arcHeight = oldChordLengthHalf * d.bul;\r\n\r\n needChangeP.add(vec);\r\n\r\n let newChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5;\r\n\r\n d.bul = arcHeight / newChordLengthHalf;\r\n }\r\n };\r\n\r\n ChangeBul(frontIndex, frontIndex);\r\n ChangeBul(nextIndex, index);\r\n\r\n //修改顶点\r\n this._LineData[index].pt.add(AsVector2(moveVLoc));\r\n }\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._LineData.length = 0;\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let v = new Vector2().fromArray(file.Read());\r\n let bul = file.Read();\r\n\r\n this._LineData.push({ pt: v, bul: bul });\r\n }\r\n if (ver > 1)\r\n this._ClosedMark = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n file.Write(this._LineData.length);\r\n\r\n for (let l of this._LineData)\r\n {\r\n file.Write(l.pt.toArray());\r\n file.Write(l.bul);\r\n }\r\n file.Write(this._ClosedMark);\r\n }\r\n}\r\n\r\nexport const TempPolyline = new Polyline();\r\n","import { Matrix4, Vector3 } from 'three';\r\nimport { arrayRemoveDuplicateBySort } from '../Common/ArrayExt';\r\nimport { Arc } from '../DatabaseServices/Entity/Arc';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Line } from '../DatabaseServices/Entity/Line';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { comparePoint, equaln, equalv3 } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 相交延伸选项.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum IntersectOption\r\n{\r\n /**\r\n * 两者都不延伸\r\n */\r\n OnBothOperands = 0,\r\n /**\r\n * 延伸自身\r\n */\r\n ExtendThis = 1,\r\n /**\r\n * 延伸参数\r\n */\r\n ExtendArg = 2,\r\n /**\r\n * 延伸两者\r\n */\r\n ExtendBoth = 3,\r\n}\r\n\r\nexport interface IntersectResult\r\n{\r\n pt: Vector3,\r\n thisParam: number,\r\n argParam: number,\r\n}\r\n\r\n//延伸自身还是参数反转\r\nexport function reverseIntersectOption(intType: IntersectOption)\r\n{\r\n if (intType === IntersectOption.ExtendThis)\r\n intType = IntersectOption.ExtendArg;\r\n else if (intType === IntersectOption.ExtendArg)\r\n intType = IntersectOption.ExtendThis;\r\n return intType;\r\n}\r\n/**\r\n * 校验相交点是否满足延伸选项\r\n * 算法会计算无限延伸状态下的曲线交点,调用该方法进行校验返回校验后的点表\r\n *\r\n * @param {Vector3[]} intRes 相交点.曲线当作完全状态下的相交点\r\n * @param {Curve} c1 曲线1 由this参数传入\r\n * @param {Curve} c2 曲线2 由arg 参数传入\r\n * @param {Intersect} extType 延伸选项.\r\n * @returns {Array} 校验完成后的点表\r\n */\r\nfunction CheckPointOnCurve(intRes: IntersectResult[], c1: Curve, c2: Curve, extType: IntersectOption, tolerance = 1e-6): Array\r\n{\r\n return intRes.filter(r =>\r\n {\r\n if (!(extType & IntersectOption.ExtendThis))\r\n if (!c1.ParamOnCurve(r.thisParam, tolerance / c1.Length))\r\n return false;\r\n\r\n if (!(extType & IntersectOption.ExtendArg))\r\n if (!c2.ParamOnCurve(r.argParam, tolerance / c2.Length))\r\n return false;\r\n return true;\r\n });\r\n}\r\nexport function IntersectCircleAndCircle(cu1: Circle | Arc, cu2: Circle | Arc): IntersectResult[]\r\n{\r\n if (!cu1.IsCoplaneTo(cu2)) return [];\r\n\r\n let c1OcsInv = cu1.OCSInv;\r\n let c1Ocs = cu1.OCS;\r\n\r\n let center1 = cu1.Center.applyMatrix4(c1OcsInv);\r\n let center2 = cu2.Center.applyMatrix4(c1OcsInv);\r\n let radius1 = cu1.Radius;\r\n let radius2 = cu2.Radius;\r\n\r\n let pts: IntersectResult[] = [];\r\n let dist = center2.distanceTo(center1);\r\n\r\n if (dist < Math.abs(radius1 - radius2) - 1e-3\r\n || dist > (radius1 + radius2 + 1e-3))\r\n return pts;\r\n if (equaln(dist, 0, 1e-6)) return pts;\r\n\r\n let dstsqr = dist * dist;\r\n let r1sqr = radius1 * radius1;\r\n let r2sqr = radius2 * radius2;\r\n\r\n let a = (dstsqr - r2sqr + r1sqr) / (2 * dist);\r\n let h = Math.sqrt(Math.abs(r1sqr - (a * a)));\r\n\r\n let ratio_a = a / dist;\r\n let ratio_h = h / dist;\r\n\r\n let dx = center2.x - center1.x;\r\n let dy = center2.y - center1.y;\r\n\r\n let phix = center1.x + (ratio_a * dx);\r\n let phiy = center1.y + (ratio_a * dy);\r\n\r\n dx *= ratio_h;\r\n dy *= ratio_h;\r\n\r\n let p1 = new Vector3(phix + dy, phiy - dx);\r\n let p2 = new Vector3(phix - dy, phiy + dx);\r\n p1.applyMatrix4(c1Ocs);\r\n p2.applyMatrix4(c1Ocs);\r\n\r\n pts.push({\r\n pt: p1,\r\n thisParam: cu1.GetParamAtPoint(p1),\r\n argParam: cu2.GetParamAtPoint(p1),\r\n });\r\n if (!equalv3(p1, p2))//防止点重复\r\n pts.push({\r\n pt: p2,\r\n thisParam: cu1.GetParamAtPoint(p2),\r\n argParam: cu2.GetParamAtPoint(p2),\r\n });\r\n\r\n return pts;\r\n}\r\n/**\r\n * 计算圆与圆弧的交点.\r\n *\r\n * @export\r\n * @param {Circle} circle 圆\r\n * @param {Arc} arc 圆弧\r\n * @param {IntersectOption} extType 延伸选项\r\n * @returns 交点集合\r\n */\r\nexport function IntersectCircleAndArc(circle: Circle, arc: Arc, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let pts = IntersectCircleAndCircle(circle, arc);\r\n return CheckPointOnCurve(pts, circle, arc, extType | IntersectOption.ExtendThis, tolerance);\r\n}\r\n\r\n/**\r\n * 计算圆弧与圆弧的交点\r\n *\r\n * @export\r\n * @param {Arc} arc1 圆弧\r\n * @param {Arc} arc2 圆弧\r\n * @param {IntersectOption} extType 延伸选项\r\n * @returns 交点集合\r\n */\r\nexport function IntersectArcAndArc(arc1: Arc, arc2: Arc, extType: IntersectOption, tolerance = 1e-5)\r\n{\r\n let pts = IntersectCircleAndCircle(arc1, arc2);\r\n return CheckPointOnCurve(pts, arc1, arc2, extType, tolerance);\r\n}\r\n\r\nexport function IntersectEllipseAndLine(l: Line, el: Ellipse, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let pts = IntersectLineAndEllipseFor2D(l, el);\r\n return CheckPointOnCurve(pts, l, el, extType, tolerance);\r\n}\r\n\r\n/**\r\n * 通用方法:计算直线与圆的交点,默认延伸全部\r\n *\r\n * @export\r\n * @param {Line} line 直线\r\n * @param {(Circle | Arc)} circle 圆或圆弧\r\n * @returns 交点集合\r\n */\r\nfunction IntersectLineAndCircleOrArc(line: Line, circle: Circle | Arc): IntersectResult[]\r\n{\r\n let lineOrg = line.StartPoint;\r\n let lineDirection = line.EndPoint.sub(lineOrg);\r\n let dirLen = lineDirection.length();\r\n if (equaln(dirLen, 0)) return [];\r\n lineDirection.divideScalar(dirLen);\r\n\r\n let diff = lineOrg.clone().sub(circle.Center);\r\n let a0 = diff.dot(diff) - circle.Radius ** 2;\r\n let a1 = lineDirection.dot(diff);\r\n let discr = a1 ** 2 - a0;\r\n\r\n if (equaln(discr, 0, 1e-7))\r\n {\r\n let pt = lineOrg.add(lineDirection.multiplyScalar(-a1));\r\n\r\n return [{\r\n pt,\r\n thisParam: -a1 / dirLen,\r\n argParam: circle.GetParamAtPoint(pt)\r\n }];\r\n }\r\n else if (discr > 0)\r\n {\r\n let root = Math.sqrt(discr);\r\n let p1 = lineOrg.clone().add(lineDirection.clone().multiplyScalar(-a1 + root));\r\n let p2 = lineOrg.add(lineDirection.multiplyScalar(-a1 - root));\r\n\r\n return [\r\n {\r\n pt: p1,\r\n thisParam: (-a1 + root) / dirLen,\r\n argParam: circle.GetParamAtPoint(p1)\r\n }, {\r\n pt: p2,\r\n thisParam: (-a1 - root) / dirLen,\r\n argParam: circle.GetParamAtPoint(p2)\r\n }\r\n ];\r\n }\r\n return [];\r\n}\r\n\r\n//直线和圆\r\nexport function IntersectLineAndCircle(line: Line, circle: Circle, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let ptArr = IntersectLineAndCircleOrArc(line, circle);\r\n return CheckPointOnCurve(ptArr, line, circle, extType | IntersectOption.ExtendArg);\r\n}\r\n//直线和圆弧\r\nexport function IntersectLineAndArc(line: Line, arc: Arc, extType: IntersectOption, tolerance = 1e-6)\r\n{\r\n let ptArr = IntersectLineAndCircleOrArc(line, arc);\r\n return CheckPointOnCurve(ptArr, line, arc, extType, tolerance);\r\n}\r\n//直线和直线\r\nexport function IntersectLAndLFor2D(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3): Vector3\r\n{\r\n let dx1 = p1.x - p2.x;\r\n let dx2 = p3.x - p4.x;\r\n let dx3 = p4.x - p2.x;\r\n let dy1 = p1.y - p2.y;\r\n let dy2 = p3.y - p4.y;\r\n let dy3 = p4.y - p2.y;\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);\r\n\r\n if (equaln(det, 0.0, 1e-5))\r\n {\r\n // if (equaln(dx2 * dy3, dy2 * dx3, 1e-5))\r\n // {\r\n // return midPoint(midPoint(p1, p2), midPoint(p3, p4));\r\n // }\r\n return;\r\n }\r\n\r\n let pt = new Vector3;\r\n let ratio = ((dx1 * dy3) - (dy1 * dx3)) / det;\r\n pt.x = (ratio * dx2) + p4.x;\r\n pt.y = (ratio * dy2) + p4.y;\r\n\r\n return pt;\r\n}\r\n\r\nexport function IntersectLAndLFor2D2(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3): Vector3[]\r\n{\r\n let dx1 = p1.x - p2.x;\r\n let dx2 = p3.x - p4.x;\r\n let dx3 = p4.x - p2.x;\r\n let dy1 = p1.y - p2.y;\r\n let dy2 = p3.y - p4.y;\r\n let dy3 = p4.y - p2.y;\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);\r\n\r\n if (equaln(det, 0.0, 1e-5))\r\n {\r\n if (equaln(dx2 * dy3, dy2 * dx3, 1e-5))\r\n return [p1, p2, p3, p4];\r\n return [];\r\n }\r\n\r\n let pt = new Vector3;\r\n let ratio = ((dx1 * dy3) - (dy1 * dx3)) / det;\r\n pt.x = (ratio * dx2) + p4.x;\r\n pt.y = (ratio * dy2) + p4.y;\r\n\r\n return [pt];\r\n}\r\n\r\nexport function IntersectLine3AndLine3(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3, epsilon = 1e-6)\r\n{\r\n let pts = ShortestLine3AndLine3(p1, p2, p3, p4);\r\n if (pts) return pts[0];\r\n}\r\n\r\n/**\r\n * 三维中两行之间最短的直线\r\n * ref:https://stackoverflow.com/questions/2316490/the-algorithm-to-find-the-point-of-intersection-of-two-3d-line-segment\r\n * ref:http://paulbourke.net/geometry/pointlineplane/\r\n * ref:http://paulbourke.net/geometry/pointlineplane/calclineline.cs\r\n *\r\n * @export\r\n * @param {Vector3} p1 l1.start\r\n * @param {Vector3} p2 l1.end\r\n * @param {Vector3} p3 l2.start\r\n * @param {Vector3} p4 l2.end\r\n * @returns 交点集合\r\n */\r\nfunction ShortestLine3AndLine3(p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3, epsilon = 1e-6)\r\n{\r\n let p43 = p4.clone().sub(p3);\r\n if (p43.lengthSq() < epsilon)\r\n return;\r\n let p21 = p2.clone().sub(p1);\r\n if (p21.lengthSq() < epsilon)\r\n return;\r\n\r\n let p13 = p1.clone().sub(p3);\r\n\r\n let d1343 = p13.x * p43.x + p13.y * p43.y + p13.z * p43.z;\r\n let d4321 = p43.x * p21.x + p43.y * p21.y + p43.z * p21.z;\r\n let d1321 = p13.x * p21.x + p13.y * p21.y + p13.z * p21.z;\r\n let d4343 = p43.x * p43.x + p43.y * p43.y + p43.z * p43.z;\r\n let d2121 = p21.x * p21.x + p21.y * p21.y + p21.z * p21.z;\r\n\r\n let denom = d2121 * d4343 - d4321 * d4321;\r\n if (Math.abs(denom) < epsilon)\r\n return;\r\n let numer = d1343 * d4321 - d1321 * d4343;\r\n\r\n let mua = numer / denom;\r\n let mub = (d1343 + d4321 * (mua)) / d4343;\r\n\r\n let resultSegmentPoint1 = new Vector3();\r\n resultSegmentPoint1.x = p1.x + mua * p21.x;\r\n resultSegmentPoint1.y = p1.y + mua * p21.y;\r\n resultSegmentPoint1.z = p1.z + mua * p21.z;\r\n let resultSegmentPoint2 = new Vector3();\r\n resultSegmentPoint2.x = p3.x + mub * p43.x;\r\n resultSegmentPoint2.y = p3.y + mub * p43.y;\r\n resultSegmentPoint2.z = p3.z + mub * p43.z;\r\n\r\n return [resultSegmentPoint1, resultSegmentPoint2];\r\n}\r\n\r\n//直线和直线\r\nexport function IntersectLineAndLine(l1: Line, l2: Line, extType: IntersectOption, fuzz = 1e-4): IntersectResult[]\r\n{\r\n let [pt1, pt2, pt3, pt4] = [l1.StartPoint, l1.EndPoint, l2.StartPoint, l2.EndPoint];\r\n\r\n let ipts: Vector3[];\r\n if (equaln(pt1.z, 0, fuzz) && equaln(pt2.z, 0, fuzz) && equaln(pt3.z, 0, fuzz) && equaln(pt4.z, 0, fuzz))\r\n {\r\n ipts = IntersectLAndLFor2D2(pt1, pt2, pt3, pt4);\r\n ipts.sort(comparePoint(\"xy\"));\r\n arrayRemoveDuplicateBySort(ipts, (p1, p2) => equalv3(p1, p2, fuzz));\r\n }\r\n else\r\n {\r\n ipts = ShortestLine3AndLine3(pt1, pt2, pt3, pt4);\r\n if (!ipts) return [];\r\n if (ipts.length === 2)\r\n ipts.pop();\r\n }\r\n\r\n let ints: IntersectResult[] = [];\r\n for (let pt of ipts)\r\n {\r\n let { closestPt: p1, param: param1 } = l1.GetClosestAtPoint(pt, true);\r\n if (!equalv3(pt, p1, fuzz)) return [];\r\n if (!(extType & IntersectOption.ExtendThis))\r\n if (!(l1.ParamOnCurve(param1, 0) || equalv3(pt1, pt, fuzz) || equalv3(pt2, pt, fuzz)))\r\n return [];\r\n let { closestPt: p2, param: param2 } = l2.GetClosestAtPoint(pt, true);\r\n if (!equalv3(pt, p2, fuzz)) return [];\r\n if (!(extType & IntersectOption.ExtendArg))\r\n if (!(l2.ParamOnCurve(param2, 0) || equalv3(pt3, pt, fuzz) || equalv3(pt4, pt, fuzz)))\r\n return [];\r\n ints.push({ pt, thisParam: param1, argParam: param2 });\r\n }\r\n return ints;\r\n}\r\n\r\nexport function IntersectPolylineAndCurve(pl: Polyline, cu: Curve, extType: IntersectOption, tolerance = 1e-6): IntersectResult[]\r\n{\r\n let cus: Curve[] = pl.Explode();\r\n let cus2: Curve[];\r\n if (cu instanceof Polyline)\r\n cus2 = cu.Explode();\r\n else\r\n cus2 = [cu];\r\n\r\n let intRes: IntersectResult[] = [];\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu1 = cus[i];\r\n for (let j = 0; j < cus2.length; j++)\r\n {\r\n let cu2 = cus2[j];\r\n let ext = extType;\r\n\r\n let isStart = i === 0;\r\n let isEnd = i === cus.length - 1;\r\n\r\n let isStart2 = j === 0;\r\n let isEnd2 = j === cus2.length - 1;\r\n\r\n //当曲线闭合时,或者当前的子曲线不是起始和不是结束,那么不延伸曲线.\r\n if (pl.CloseMark || !(isStart || isEnd))\r\n ext = ext & ~IntersectOption.ExtendThis;\r\n if ((cu instanceof Polyline && cu.CloseMark) || !(isStart2 || isEnd2))\r\n ext = ext & ~IntersectOption.ExtendArg;\r\n\r\n let ptPars = cu1.IntersectWith2(cu2, ext, tolerance).filter(r1 => intRes.every(r2 => !equalv3(r1.pt, r2.pt)));\r\n\r\n //校验延伸\r\n if (IntersectOption.ExtendThis & ext)\r\n {\r\n //如果曲线是起始又是结束,那么不校验.\r\n if (isStart && isEnd)\r\n {\r\n }\r\n else if (isStart)\r\n {\r\n ptPars = ptPars.filter(res => res.thisParam <= 1);\r\n }\r\n else if (isEnd)\r\n {\r\n ptPars = ptPars.filter(res => res.thisParam >= 0);\r\n }\r\n }\r\n if (IntersectOption.ExtendArg & ext)\r\n {\r\n //如果曲线是起始又是结束,那么不校验.\r\n if (isStart2 && isEnd2)\r\n {\r\n }\r\n else if (isStart2)\r\n {\r\n ptPars = ptPars.filter(res => res.argParam + j <= cu2.EndParam);\r\n }\r\n else if (isEnd2)\r\n {\r\n ptPars = ptPars.filter(res => res.argParam + j >= 0);\r\n }\r\n }\r\n\r\n intRes.push(...ptPars.map(r =>\r\n {\r\n return {\r\n pt: r.pt,\r\n thisParam: i + r.thisParam,\r\n argParam: j + r.argParam,\r\n };\r\n }));\r\n }\r\n }\r\n return intRes;\r\n}\r\n\r\nexport function IntersectLineAndEllipseFor2D(l: Line, el: Ellipse)\r\n{\r\n if (!l.IsCoplaneTo(el)) return [];\r\n\r\n let mat = new Matrix4().makeRotationZ(-el.Rotation).multiply(el.OCSInv);\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let sp = l.StartPoint.applyMatrix4(mat);\r\n let ep = l.EndPoint.applyMatrix4(mat);\r\n let pts: Vector3[] = [];\r\n if (equaln(sp.x, ep.x))\r\n {\r\n let c = sp.x;\r\n let j = (b ** 2) * (1 - (c ** 2) / (a ** 2));\r\n if (equaln(j, 0))\r\n {\r\n pts = [new Vector3(sp.x, 0)];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let y1 = Math.sqrt(j);\r\n let y2 = -Math.sqrt(j);\r\n pts = [\r\n new Vector3(c, y1),\r\n new Vector3(c, y2)\r\n ];\r\n }\r\n }\r\n else\r\n {\r\n let k = (sp.y - ep.y) / (sp.x - ep.x);\r\n let c = sp.y - sp.x * k;\r\n let j = (2 * a * a * k * c) * (2 * a * a * k * c) - 4 * (b * b + a * a * k * k) * a * a * (c * c - b * b);\r\n if (equaln(j, 0))\r\n {\r\n let x1 = -2 * k * c * a * a / (2 * (b * b + a * a * k * k));\r\n let y1 = k * x1 + c;\r\n pts = [new Vector3(x1, y1)];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let x1 = (-2 * k * c * a * a + Math.sqrt(j)) / (2 * (b * b + a * a * k * k));\r\n let y1 = k * x1 + c;\r\n let x2 = (-2 * k * c * a * a - Math.sqrt(j)) / (2 * (b * b + a * a * k * k));\r\n let y2 = k * x2 + c;\r\n pts = [\r\n new Vector3(x1, y1),\r\n new Vector3(x2, y2)\r\n ];\r\n }\r\n }\r\n\r\n let matInv = new Matrix4().getInverse(mat);\r\n return pts.map(p =>\r\n {\r\n let pt = p.applyMatrix4(matInv);\r\n return {\r\n pt,\r\n thisParam: l.GetParamAtPoint(pt),\r\n argParam: el.GetParamAtPoint(pt)\r\n };\r\n });\r\n}\r\nexport function IntersectEllipseAndCircleOrArc(el: Ellipse, cir: Circle | Arc, type: IntersectOption)\r\n{\r\n if (!el.IsCoplaneTo(cir)) return [];\r\n\r\n let a = Math.max(el.RadX, el.RadY);\r\n let dist = el.Center.distanceTo(cir.Center);\r\n\r\n let disVail = dist > (a + cir.Radius);\r\n\r\n if (disVail)\r\n return [];\r\n\r\n if (equalv3(el.Center, cir.Center))\r\n {\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let r = cir.Radius;\r\n let j = ((a * b) ** 2 - (b * r) ** 2) / (a ** 2 - b ** 2);\r\n let pts: Vector3[] = [];\r\n if (equaln(j, 0) || equaln(j, r ** 2))\r\n {\r\n if (equaln(j, 0))\r\n pts = [\r\n new Vector3(a, 0),\r\n new Vector3(-a, 0)\r\n ];\r\n else\r\n pts = [\r\n new Vector3(0, r),\r\n new Vector3(0, -r)\r\n ];\r\n }\r\n else if (j < 0)\r\n return [];\r\n else\r\n {\r\n let y1 = Math.sqrt(j);\r\n let y2 = - Math.sqrt(j);\r\n let n = r ** 2 - j;\r\n let x1 = Math.sqrt(n);\r\n let x2 = - Math.sqrt(n);\r\n pts = [\r\n new Vector3(x1, y1),\r\n new Vector3(x1, y2),\r\n new Vector3(x2, y1),\r\n new Vector3(x2, y2),\r\n ];\r\n }\r\n let ro = new Matrix4().makeRotationZ(el.Rotation);\r\n let res = pts.map(p =>\r\n {\r\n let pt = p.applyMatrix4(ro).applyMatrix4(el.OCS);\r\n return {\r\n pt,\r\n thisParam: el.GetParamAtPoint(pt),\r\n argParam: cir.GetParamAtPoint(pt)\r\n };\r\n });\r\n return CheckPointOnCurve(res, el, cir, type);\r\n }\r\n else\r\n {\r\n let pts = el.Shape.getPoints(60);\r\n let lineData = pts.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n let pl = new Polyline(lineData);\r\n let cirClone = cir.Clone().ApplyMatrix(el.OCSInv);\r\n\r\n if (type === IntersectOption.ExtendBoth)\r\n type = IntersectOption.ExtendArg;\r\n else if (type !== IntersectOption.ExtendArg)\r\n type = IntersectOption.OnBothOperands;\r\n\r\n let intPts = IntersectPolylineAndCurve(pl, cirClone, type);\r\n intPts.forEach(r => r.pt.applyMatrix4(el.OCS));\r\n return intPts;\r\n }\r\n}\r\nexport function IntersectEllipse(el1: Ellipse, el2: Ellipse, type: IntersectOption)\r\n{\r\n if (!el1.IsCoplaneTo(el2)) return [];\r\n\r\n let isEqul = equalv3(el1.Center, el2.Center)\r\n && equaln(el1.RadX, el2.RadX)\r\n && equaln(el1.RadY, el2.RadY)\r\n && equalv3(el1.StartPoint, el2.StartPoint);\r\n\r\n if (isEqul)\r\n return [];\r\n\r\n let a1 = Math.max(el1.RadX, el1.RadY);\r\n let a2 = Math.max(el2.RadX, el2.RadY);\r\n\r\n let dist = el1.Center.distanceToSquared(el2.Center);\r\n if (dist > (a1 + a2) ** 2)\r\n {\r\n return [];\r\n }\r\n\r\n if (!el1.BoundingBox.intersectsBox(el2.BoundingBox))\r\n return [];\r\n\r\n let diffMat = el1.OCSInv.multiply(el2.OCS);\r\n let pts1 = el1.Shape.getPoints(60);\r\n let pts2 = el2.Shape.getPoints(60);\r\n\r\n let lineData1 = pts1.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n let lineData2 = pts2.map(p =>\r\n {\r\n return { pt: p, bul: 0 };\r\n });\r\n\r\n let pl1 = new Polyline(lineData1);\r\n let pl2 = new Polyline(lineData2).ApplyMatrix(diffMat);\r\n\r\n let intPts = pl1.IntersectWith2(pl2, 0);\r\n intPts.forEach(r => r.pt.applyMatrix4(el1.OCS));\r\n return intPts;\r\n}\r\n","import { BufferGeometry, EllipseCurve, Line as TLine, Material, Matrix3, Matrix4, Object3D, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getArcOrCirNearPts, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { clamp } from '../../Common/Utils';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { angle, AsVector3, equaln, MoveMatrix, polar } from '../../Geometry/GeUtils';\r\nimport { IntersectCircleAndArc, IntersectCircleAndCircle, IntersectEllipseAndCircleOrArc, IntersectLineAndCircle, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Shape2 } from '../Shape2';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Arc } from './Arc';\r\nimport { Curve } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\nlet circleGeometry: BufferGeometry;\r\nfunction GetCircleGeometry()\r\n{\r\n if (!circleGeometry)\r\n circleGeometry = BufferGeometryUtils.CreateFromPts(\r\n new EllipseCurve(0, 0, 1, 1, 0, 2 * Math.PI, false, 0).getPoints(360).map(AsVector3)\r\n );\r\n return circleGeometry;\r\n}\r\n\r\n@Factory\r\nexport class Circle extends Curve\r\n{\r\n constructor(center?: Vector3, radius: number = 1e-6)\r\n {\r\n super();\r\n center && this._Matrix.setPosition(center);\r\n this._Radius = radius;\r\n }\r\n private _Radius: number;\r\n\r\n get Shape()\r\n {\r\n let sp = new Shape2();\r\n sp.ellipse(0, 0, this._Radius, this._Radius, 0, 2 * Math.PI, false, 0);\r\n return sp;\r\n }\r\n\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(v);\r\n this.Update();\r\n }\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Radius = clamp(v, 1e-9, 1e19);\r\n this.Update();\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Center = this.Center.applyMatrix4(m);\r\n this.Radius = this.Radius * m.getMaxScaleOnAxis();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n return this;\r\n }\r\n\r\n //******************** Curve function start*****************//\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get StartParam(): number\r\n {\r\n return 0;\r\n }\r\n get EndPoint(): Vector3\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get EndParam(): number\r\n {\r\n return 1;\r\n }\r\n PtInCurve(pt: Vector3)\r\n {\r\n return pt.distanceToSquared(this.Center) < Math.pow(this.Radius, 2);\r\n }\r\n get Area()\r\n {\r\n return Math.PI * this._Radius ** 2;\r\n }\r\n get Area2()\r\n {\r\n return Math.PI * this._Radius ** 2;\r\n }\r\n get Length()\r\n {\r\n return Math.PI * 2 * this._Radius;\r\n }\r\n\r\n get IsClose(): boolean\r\n {\r\n return true;\r\n }\r\n\r\n //曲线为顺时针\r\n get IsClockWise(): boolean { return false; }\r\n\r\n GetPointAtParam(param: number)\r\n {\r\n return (polar(new Vector3(), param * 2 * Math.PI, this._Radius) as Vector3).applyMatrix4(this._Matrix);\r\n }\r\n\r\n GetPointAtDistance(distance: number)\r\n {\r\n let param = distance / (Math.PI * 2 * this._Radius);\r\n return this.GetPointAtParam(param);\r\n }\r\n\r\n GetDistAtParam(param: number)\r\n {\r\n return Math.PI * 2 * this._Radius * param;\r\n }\r\n\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n GetParamAtDist(d: number)\r\n {\r\n return d / (Math.PI * 2 * this._Radius);\r\n }\r\n\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params: number[];\r\n if (param instanceof Array)\r\n {\r\n params = param.filter(p => this.ParamOnCurve(p));\r\n params.sort((a1, a2) => a2 - a1);//从大到小\r\n arrayRemoveDuplicateBySort(params);\r\n if (params.length < 2) return [];\r\n }\r\n else //圆不能被单个参数切割\r\n return [];\r\n\r\n //补上最后一个到第一个的弧\r\n params.unshift(arrayLast(params));\r\n\r\n let anglelist = params.map(param => Math.PI * 2 * param);\r\n\r\n let curvelist = new Array();\r\n for (let i = 0; i < anglelist.length - 1; i++)\r\n {\r\n let sa = anglelist[i];\r\n let ea = anglelist[i + 1];\r\n if (!equaln(sa, ea, 1e-6))\r\n {\r\n let arc = new Arc(new Vector3(), this._Radius, ea, sa, false);\r\n arc.ColorIndex = this.ColorIndex;\r\n arc.ApplyMatrix(this.OCS);\r\n curvelist.push(arc);\r\n }\r\n }\r\n return curvelist;\r\n }\r\n\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnCurve(pt))\r\n return NaN;\r\n return angle(pt.clone().applyMatrix4(this.OCSInv)) / (Math.PI * 2);\r\n }\r\n\r\n PtOnCurve(pt: Vector3)\r\n {\r\n return equaln(pt.distanceToSquared(this.Center), this._Radius * this._Radius, 1e-5);\r\n }\r\n GetOffsetCurves(offsetDist: number): Curve[]\r\n {\r\n if ((offsetDist + this._Radius) > 0)\r\n {\r\n let circle = this.Clone();\r\n circle.Radius = this._Radius + offsetDist;\r\n return [circle];\r\n }\r\n return [];\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption)\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectCircleAndArc(this, curve, intType);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType)));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectCircleAndCircle(this, curve);\r\n }\r\n if (curve instanceof Ellipse)\r\n {\r\n return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType));\r\n }\r\n if (curve instanceof Polyline)\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType)));\r\n return [];\r\n }\r\n //******************** Curve function end*****************//\r\n\r\n get BoundingBox(): Box3Ext\r\n {\r\n return new Box3Ext().setFromPoints(this.GetGripPoints());\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n let cirGeo = GetCircleGeometry();\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let geometry = new LineGeometry().setPositions(cirGeo.attributes.position.array as number[]);\r\n obj.add(new Line2(geometry, ColorMaterial.PrintLineMatrial));\r\n }\r\n else\r\n {\r\n let line = new TLine(cirGeo, ColorMaterial.GetLineMaterial(this._Color));\r\n obj.add(line);\r\n }\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n obj.children[0].scale.set(this._Radius, this._Radius, this._Radius);\r\n obj.children[0].updateMatrix();\r\n }\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material: Material)\r\n {\r\n if (type === RenderType.WireframePrint)\r\n {\r\n //TODO:打印线需要其他颜色?\r\n }\r\n else\r\n {\r\n let m = obj.children[0] as TLine;\r\n m.material = material ? material : ColorMaterial.GetLineMaterial(this._Color);\r\n return obj;\r\n }\r\n\r\n }\r\n\r\n GetDragPointCount(drag: DragPointType): number\r\n {\r\n if (drag === DragPointType.Grip)\r\n return 5;\r\n else\r\n return 1;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let pts = [\r\n new Vector3(),\r\n new Vector3(0, this._Radius),\r\n new Vector3(0, -this._Radius),\r\n new Vector3(-this._Radius, 0),\r\n new Vector3(this._Radius, 0),\r\n ];\r\n\r\n let ocs = this.OCS;\r\n pts.forEach(p => p.applyMatrix4(ocs));\r\n return pts;\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.Nea:\r\n {\r\n return getArcOrCirNearPts(this, pickPoint, viewXform);\r\n }\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n let l = new Line(this.Center, lastPoint);\r\n return l.IntersectWith(this, IntersectOption.ExtendBoth);\r\n }\r\n case ObjectSnapMode.Tan:\r\n let pts = GetTanPtsOnArcOrCircle(this, lastPoint);\r\n if (pts)\r\n return pts;\r\n case ObjectSnapMode.End:\r\n {\r\n let pts = this.GetGripPoints();\r\n pts.shift();\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n\r\n let pts = this.GetGripPoints();\r\n if (indexList.length > 0)\r\n {\r\n let index = indexList[0];\r\n let p = pts[index];\r\n if (p)\r\n {\r\n if (index > 0)\r\n {\r\n p.add(vec);\r\n this.Radius = p.distanceTo(this.Center);\r\n }\r\n else\r\n {\r\n this.Center = this.Center.add(vec);\r\n }\r\n }\r\n }\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n let pts = [new Vector3()];\r\n let ocs = this.OCS;\r\n pts.forEach(p => p.applyMatrix4(ocs));\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n let mat = MoveMatrix(vec);\r\n this.ApplyMatrix(mat);\r\n }\r\n }\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n if (typeof pt === \"number\")\r\n pt = this.GetPointAtParam(pt);\r\n else\r\n pt = pt.clone();\r\n\r\n pt.applyMatrix4(this.OCSInv);\r\n\r\n let an = angle(pt) + Math.PI * 0.5;\r\n\r\n return polar(new Vector3(), an, 1).applyMatrix4(new Matrix4().extractRotation(this.OCS));\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(this.OCS);\r\n if (equaln(pt.distanceToSquared(this.Center), 0, 1e-10))\r\n return this.GetPointAtParam(0);\r\n let l = new Line(this.Center, pt);\r\n let pts = l.IntersectWith(this, IntersectOption.ExtendBoth);\r\n pts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(pt) - p2.distanceToSquared(pt);\r\n });\r\n return pts[0];\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Radius = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);\r\n file.Write(this._Radius);\r\n }\r\n //#endregion\r\n}\r\n","\r\n/**\r\n * 一个简单的计数器实现,本质是使用一个Map来保存元素的个数\r\n * \r\n * 例:\r\n * let count = new Count();\r\n * count.AddCount(\"Test\", 1);\r\n * count.GetCount(\"Test\");//现在 Test 的个数为1\r\n */\r\nexport class Count\r\n{\r\n private m_CountMap = new WeakMap();\r\n GetCount(obj: any): number\r\n {\r\n let count = this.m_CountMap.get(obj);\r\n if (!count)\r\n {\r\n this.m_CountMap.set(obj, 0);\r\n count = 0;\r\n }\r\n return count;\r\n }\r\n AddCount(obj: any, add: number)\r\n {\r\n this.m_CountMap.set(obj, this.GetCount(obj) + add);\r\n }\r\n}\r\n","import { Vector3, MathUtils } from \"three\";\r\nimport { YAxis, ZAxis, equaln } from \"./GeUtils\";\r\n\r\n/**\r\n * 轨道控制的数学类,观察向量和角度的互相转换\r\n * 当x当抬头或者低头到90度时,触发万向锁.\r\n */\r\nexport class Orbit\r\n{\r\n //抬头低头 正数抬头 负数低头\r\n private phi: number = 0;//Φ\r\n\r\n //身体旋转 0为正右边 逆时针旋转\r\n theta: number = 0;//θ\r\n\r\n get RoX()\r\n {\r\n return this.phi;\r\n }\r\n set RoX(v)\r\n {\r\n this.phi = MathUtils.clamp(v, Math.PI * -0.49, Math.PI * 0.49);\r\n }\r\n\r\n /**\r\n * 使用旋转角度 计算观察向量\r\n * @param [outDirection] 引用传入,如果传入,那么就不构造新的向量\r\n * @returns 返回观察向量\r\n */\r\n UpdateDirection(outDirection = new Vector3()): Vector3\r\n {\r\n outDirection.z = Math.sin(this.phi);\r\n //归一化专用.\r\n let d = Math.abs(Math.cos(this.phi));\r\n\r\n outDirection.x = Math.cos(this.theta) * d;\r\n outDirection.y = Math.sin(this.theta) * d;\r\n\r\n return outDirection;\r\n }\r\n\r\n /**\r\n * 使用观察向量,计算旋转角度\r\n * @param dir 这个向量会被修改成单位向量.\r\n */\r\n SetFromDirection(dir: Vector3): void\r\n {\r\n dir.normalize();\r\n this.phi = Math.asin(dir.z);\r\n if (equaln(dir.x, 0) && equaln(dir.y, 0))\r\n if (dir.z > 0)\r\n this.theta = Math.PI * -0.5;\r\n else\r\n this.theta = Math.PI * 0.5;\r\n else\r\n this.theta = Math.atan2(dir.y, dir.x);\r\n }\r\n\r\n /**\r\n * 参考任意轴坐标系算法.\r\n * http://help.autodesk.com/view/ACD/2017/CHS/?guid=GUID-E19E5B42-0CC7-4EBA-B29F-5E1D595149EE\r\n */\r\n static ComputUpDirection(n: Vector3, ay: Vector3 = new Vector3(), ax: Vector3 = new Vector3()): Vector3\r\n {\r\n n.normalize();\r\n if (Math.abs(n.x) < 0.015625 && Math.abs(n.y) < 0.015625)\r\n ax.crossVectors(YAxis, n);\r\n else\r\n ax.crossVectors(ZAxis, n);\r\n ay.crossVectors(n, ax);\r\n ax.normalize();\r\n ay.normalize();\r\n return ay;\r\n }\r\n}\r\n","import { Box3, Line3, Matrix3, Matrix4, Vec2, Vector2, Vector3 } from 'three';\r\nimport { Arc } from '../DatabaseServices/Entity/Arc';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Line } from '../DatabaseServices/Entity/Line';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { IsPointInBowArc } from '../DatabaseServices/PointInPolyline';\r\nimport { Count } from '../Geometry/Count';\r\nimport { CurveMap, Vertice } from '../Geometry/CurveMap';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, isParallelTo, XAxis, ZeroVec, isPerpendicularityTo, YAxis, isIntersect } from '../Geometry/GeUtils';\r\nimport { Vec3 } from '../Geometry/IVec3';\r\nimport { Orbit } from '../Geometry/Orbit';\r\nimport { PlaneExt } from '../Geometry/Plane';\r\nimport { IntersectOption, IntersectResult } from '../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../GraphicsSystem/OffsetPolyline';\r\nimport { arrayLast, changeArrayStartIndex, equalArray } from './ArrayExt';\r\nimport { Status } from './Status';\r\nimport { FixIndex, LINK_FUZZ } from './Utils';\r\n\r\n//3点获取圆心\r\nexport function getCircleCenter(pt1: Vector3, pt2: Vector3, pt3: Vector3)\r\n{\r\n if (!(pt1 && pt2 && pt3))\r\n return;\r\n let A1 = pt1.x - pt2.x;\r\n let B1 = pt1.y - pt2.y;\r\n let C1 = (Math.pow(pt1.x, 2) - Math.pow(pt2.x, 2) + Math.pow(pt1.y, 2) - Math.pow(pt2.y, 2)) / 2;\r\n let A2 = pt3.x - pt2.x;\r\n let B2 = pt3.y - pt2.y;\r\n let C2 = (Math.pow(pt3.x, 2) - Math.pow(pt2.x, 2) + Math.pow(pt3.y, 2) - Math.pow(pt2.y, 2)) / 2;\r\n //令temp = A1*B2 - A2*B1\r\n let temp = A1 * B2 - A2 * B1;\r\n let center = new Vector3();\r\n //判断三点是否共线\r\n if (temp === 0)\r\n {\r\n //共线则将第一个点pt1作为圆心\r\n center.x = pt1.x;\r\n center.y = pt1.y;\r\n }\r\n else\r\n {\r\n //不共线则求出圆心:\r\n center.x = (C1 * B2 - C2 * B1) / temp;\r\n center.y = (A1 * C2 - A2 * C1) / temp;\r\n }\r\n\r\n return center;\r\n}\r\n\r\n// 弦长+切线获取圆心角\r\nexport function getCirAngleByChordAndTangent(chord: Vector3, tangentLine: Vector3)\r\n{\r\n let dir = tangentLine.clone().cross(chord).normalize();\r\n\r\n let ctAngle = chord.angleTo(tangentLine);\r\n\r\n // 圆心角\r\n let cirAng = Math.PI - 2 * Math.abs(ctAngle - Math.PI / 2);\r\n\r\n if (ctAngle > Math.PI / 2)\r\n {\r\n cirAng = Math.PI * 2 - cirAng;\r\n }\r\n return cirAng *= dir.z;\r\n}\r\n//行列式\r\nexport function getDeterminantFor2V(v1: Vector2, v2: Vector2): number\r\n{\r\n return v1.x * v2.y - v1.y * v2.x;\r\n}\r\n\r\nexport function getDeterminantFor3V(v1: Vector3, v2: Vector3, v3: Vector3)\r\n{\r\n let mat = new Matrix3();\r\n mat.set(v1.x, v1.y, v1.z, v2.x, v2.y, v2.z, v3.x, v3.y, v3.z);\r\n return mat.determinant();\r\n}\r\n\r\n/**\r\n * 曲线根据连接来分组,每组都是一条首尾相连的曲线表.\r\n *\r\n * @export\r\n * @param {Curve[]} cus 传入的分组的曲线表\r\n * @returns {Array>} 返回如下\r\n * [\r\n * [c1,c2,c3...],//后面的曲线的起点总是等于上一个曲线的终点\r\n * [c1,c2,c3...],\r\n * ]\r\n */\r\nexport function curveLinkGroup(cus: Curve[]): Array>\r\n{\r\n //返回的曲线组\r\n let groupCus = new Array>();\r\n\r\n //将封闭的曲线先提取出来\r\n cus = cus.filter(c =>\r\n {\r\n let isClose = c.IsClose;\r\n if (isClose)\r\n groupCus.push([c]);\r\n return !isClose;\r\n });\r\n if (cus.length === 0) return groupCus;\r\n //曲线节点图\r\n let cuMap = new CurveMap();\r\n cus.forEach(c => cuMap.AddCurveToMap(c));\r\n\r\n //曲线站点表\r\n let stands = cuMap.Stands;\r\n //曲线使用计数\r\n let cuCount = new Count();\r\n\r\n /**\r\n * 从站点的路线中任意取一条,加入到曲线数组中.\r\n *\r\n * @param {Curve[]} cus 已经连接的曲线列表\r\n * @param {boolean} isEndSeach true:从终点搜索,false:从起点搜索\r\n * @returns {Stand} 如果站点中存在可以取得的曲线,返回下个站点,否则返回undefined\r\n */\r\n function linkCurve(stand: Vertice, cus: Curve[], isEndSeach: boolean): Vertice | undefined\r\n {\r\n for (let route of stand.routes)\r\n {\r\n let cu = route.curve;\r\n if (cuCount.GetCount(cu) === 0)\r\n {\r\n if (isEndSeach)\r\n {\r\n //保证曲线总是从起点连接到终点\r\n if (!equalv3(cu.StartPoint, stand.position))\r\n cu.Reverse();\r\n cus.push(cu);\r\n }\r\n else\r\n {\r\n //保证曲线总是从起点连接到终点\r\n if (!equalv3(cu.EndPoint, stand.position))\r\n cu.Reverse();\r\n cus.unshift(cu);\r\n }\r\n\r\n cuCount.AddCount(cu, 1);\r\n return route.to;\r\n }\r\n }\r\n }\r\n\r\n for (let stand of stands)\r\n {\r\n let startStand = stand;\r\n let cus: Curve[] = []; //形成合并轮廓的曲线组\r\n while (startStand)\r\n startStand = linkCurve(startStand, cus, true);\r\n\r\n if (cus.length > 0)\r\n {\r\n startStand = cuMap.GetOnlyVertice(cus[0].StartPoint);\r\n while (startStand)\r\n startStand = linkCurve(startStand, cus, false);\r\n }\r\n\r\n if (cus.length > 0)\r\n groupCus.push(cus);\r\n }\r\n\r\n return groupCus;\r\n}\r\n\r\nexport function equalCurve(cu1: Curve, cu2: Curve, tolerance = 1e-4)\r\n{\r\n if ((cu1 instanceof Polyline) && (cu2 instanceof Polyline))\r\n {\r\n if (cu1.IsClose !== cu2.IsClose || !isParallelTo(cu1.Normal, cu2.Normal))\r\n return false;\r\n\r\n let area1 = cu1.Area2;\r\n let area2 = cu2.Area2;\r\n\r\n if (!equaln(Math.abs(area1), Math.abs(area2), 0.1))\r\n return false;\r\n\r\n let ptsBuls1 = cu1.PtsBuls;\r\n let ptsBuls2 = cu2.PtsBuls;\r\n\r\n let pts1 = ptsBuls1.pts;\r\n let pts2 = ptsBuls2.pts;\r\n let buls1 = ptsBuls1.buls;\r\n let buls2 = ptsBuls2.buls;\r\n\r\n let isEqualArea = equaln(area1, area2, 0.1);\r\n if (!equalv3(cu1.Normal, cu2.Normal))\r\n {\r\n if (isEqualArea)\r\n {\r\n pts2.reverse();\r\n buls2.reverse();\r\n buls2.push(buls2.shift());\r\n }\r\n else\r\n buls2 = buls2.map(bul => -bul);\r\n }\r\n else if (!isEqualArea)\r\n {\r\n pts2.reverse();\r\n buls2.reverse();\r\n buls2 = buls2.map(bul => -bul);\r\n buls2.push(buls2.shift());\r\n }\r\n\r\n if (cu1.IsClose && equalv2(pts1[0], arrayLast(pts1), tolerance))\r\n {\r\n pts1.pop();\r\n buls1.pop();\r\n }\r\n if (cu2.IsClose && equalv2(pts2[0], arrayLast(pts2), tolerance))\r\n {\r\n pts2.pop();\r\n buls2.pop();\r\n }\r\n\r\n let cu1Sp = AsVector2(cu1.StartPoint.applyMatrix4(cu2.OCSInv));\r\n\r\n let index = pts2.findIndex(p => equalv2(cu1Sp, p, tolerance));\r\n changeArrayStartIndex(buls2, index);\r\n changeArrayStartIndex(pts2, index);\r\n\r\n return equalArray(buls1, buls2, equaln) &&\r\n equalArray(pts1, pts2, (p1: Vector2, p2: Vector2) =>\r\n equalv3(\r\n AsVector3(p1).applyMatrix4(cu1.OCS),\r\n AsVector3(p2).applyMatrix4(cu2.OCS),\r\n tolerance\r\n )\r\n );\r\n }\r\n else if (cu1 instanceof Circle && cu2 instanceof Circle)\r\n {\r\n return equalv3(cu1.Center, cu2.Center) && equaln(cu1.Radius, cu2.Radius, 1e-6);\r\n }\r\n else if (cu1 instanceof Arc && cu2 instanceof Arc)\r\n {\r\n if (!equalv3(cu1.StartPoint, cu2.EndPoint)) cu1.Reverse();\r\n return equalv3(cu1.Center, cu2.Center)\r\n && equaln(cu1.Radius, cu2.Radius, 1e-6)\r\n && equaln(cu1.StartAngle, cu2.StartAngle)\r\n && equaln(cu1.EndAngle, cu2.EndAngle);\r\n }\r\n else if (cu1 instanceof Ellipse && cu2 instanceof Ellipse)\r\n {\r\n return equalv3(cu1.Center, cu2.Center)\r\n && equaln(cu1.RadX, cu2.RadX)\r\n && equaln(cu1.RadY, cu2.RadY)\r\n && equalv3(cu1.StartPoint, cu2.StartPoint);\r\n }\r\n else if (cu1 instanceof Line && cu2 instanceof Line)\r\n {\r\n let ps1 = [cu1.StartPoint, cu1.EndPoint];\r\n let ps2 = [cu2.StartPoint, cu2.EndPoint];\r\n return ps1.every(p => ps2.some(p1 => equalv3(p1, p)));\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n* 计算点在曲线前进方向的方位,左边或者右边\r\n*\r\n* @param {Curve} cu\r\n* @param {Vector3} pt\r\n* @returns {boolean} 左边为-1,右边为1\r\n*/\r\nexport function GetPointAtCurveDir(cu: Curve, pt: Vector3): number\r\n{\r\n if (cu instanceof Circle)\r\n return cu.PtInCurve(pt) ? -1 : 1;\r\n else if (cu instanceof Polyline)\r\n {\r\n let u = new OffsetPolyline(cu, 1);\r\n u.InitSubCurves();\r\n return u.GetPointAtCurveDir(pt.clone().applyMatrix4(cu.OCSInv).setZ(0));\r\n }\r\n //最近点\r\n let cp = cu.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-6)) return 0;\r\n //最近点参数\r\n let cparam = cu.GetParamAtPoint(cp);\r\n let dri = cu.GetFistDeriv(cparam);\r\n let cross = dri.cross(pt.clone().sub(cp)).applyMatrix4(cu.OCSInv);\r\n return -Math.sign(cross.z);\r\n}\r\n\r\n/**\r\n * 点在多段线的某个索引的圆弧(弓形)内\r\n *\r\n * @param {Polyline} pl\r\n * @param {number} index\r\n * @param {Vector3} pt\r\n * @returns {number}\r\n */\r\nfunction PointInPolylineArc(pl: Polyline, index: number, pt: Vector3): number\r\n{\r\n let bul = pl.GetBuilgeAt(index);\r\n if (equaln(bul, 0, 1e-8)) return 0;\r\n\r\n let arc = pl.GetCurveAtIndex(index) as Arc;\r\n\r\n if (IsPointInBowArc(arc, pt, true))\r\n return Math.sign(bul);\r\n\r\n return 0;\r\n}\r\n\r\nexport function ConverCircleToPolyline(cir: Circle): Polyline\r\n{\r\n //该写法不支持三维坐标系\r\n // let pl = new Polyline();\r\n // let bul = Math.tan(Math.PI * 0.125);\r\n // for (let i = 0; i < 4; i++)\r\n // {\r\n // let p = cir.GetPointAtParam(i * 0.25);\r\n // pl.AddVertexAt(i, Vec3DTo2D(p));\r\n // pl.SetBulgeAt(i, bul);\r\n // }\r\n // pl.CloseMark = true;\r\n // return pl;\r\n\r\n let arcs = cir.GetSplitCurves([0, 0.5]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCS;\r\n pl.Join(arcs[0]);\r\n pl.Join(arcs[1]);\r\n return pl;\r\n}\r\n\r\nexport function GetTanPtsOnArcOrCircle(cu: Arc | Circle, lastPoint?: Vector3)\r\n{\r\n if (lastPoint)\r\n {\r\n //ref:wykobi\r\n let ocsInv = cu.OCSInv;\r\n let v = lastPoint.clone().applyMatrix4(ocsInv);\r\n\r\n let lengthSq = v.lengthSq();\r\n let radiusSq = cu.Radius ** 2;\r\n\r\n if (lengthSq >= radiusSq)\r\n {\r\n let ratio = 1 / lengthSq;\r\n let deltaDist = Math.sqrt(lengthSq - radiusSq);\r\n\r\n let pts = [\r\n new Vector3(\r\n cu.Radius * (cu.Radius * v.x - v.y * deltaDist) * ratio,\r\n cu.Radius * (cu.Radius * v.y + v.x * deltaDist) * ratio,\r\n ),\r\n new Vector3(\r\n cu.Radius * (cu.Radius * v.x + v.y * deltaDist) * ratio,\r\n cu.Radius * (cu.Radius * v.y - v.x * deltaDist) * ratio,\r\n ),\r\n ];\r\n for (let p of pts)\r\n p.applyMatrix4(cu.OCS);\r\n return pts;\r\n }\r\n }\r\n}\r\n\r\nexport function CircleInternalTangentLines(cir0: Circle, cir1: Circle): Line[]\r\n{\r\n let c0 = new Vector3();\r\n let c1 = cir1.Center.applyMatrix4(cir0.OCSInv);\r\n\r\n let dist = c0.distanceTo(c1);\r\n\r\n if (dist - (cir0.Radius + cir1.Radius) < 0)\r\n return [];\r\n else if (equaln(dist - (cir0.Radius + cir1.Radius), 0))\r\n return [];\r\n else\r\n {\r\n let m = cir0.Radius / cir1.Radius;\r\n let h0 = (m * dist) / (m + 1);\r\n let h1 = dist / (m + 1);\r\n\r\n let i = new Vector3(\r\n (h1 * c0.x + h0 * c1.x) / dist,\r\n (h1 * c0.y + h0 * c1.y) / dist\r\n ).applyMatrix4(cir0.OCS);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(cir0, i);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(cir1, i);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\nexport function CircleOuterTangentLines(circle0: Circle, circle1: Circle): Line[]\r\n{\r\n let c0 = circle0.Center;\r\n let c1 = circle1.Center;\r\n\r\n let dist = c0.distanceTo(c1);\r\n\r\n let rd = Math.abs(circle0.Radius - circle1.Radius);\r\n if (dist < rd)\r\n return [];\r\n else if (equaln(Math.abs(dist - rd), 0))\r\n return [];\r\n else if (equaln(circle0.Radius, circle1.Radius))\r\n {\r\n let cp = circle0.GetClosestPointTo(c1, true);\r\n let derv = circle0.GetFistDeriv(cp).multiplyScalar(circle0.Radius);\r\n let dervn = derv.clone().negate();\r\n\r\n let c0p0 = c0.clone().add(derv);\r\n let c0p1 = c0.clone().add(dervn);\r\n\r\n let c1p0 = c1.clone().add(derv);\r\n let c1p1 = c1.clone().add(dervn);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n else\r\n {\r\n let c0 = new Vector3();\r\n let c1 = circle1.Center.applyMatrix4(circle0.OCSInv);\r\n\r\n let p: Vector3;\r\n if (circle0.Radius > circle1.Radius)\r\n p = new Vector3(\r\n c1.x * circle0.Radius - c0.x * circle1.Radius,\r\n c1.y * circle0.Radius - c0.y * circle1.Radius\r\n );\r\n else\r\n p = new Vector3(\r\n c0.x * circle1.Radius - c1.x * circle0.Radius,\r\n c0.y * circle1.Radius - c1.y * circle0.Radius\r\n );\r\n\r\n let diff = Math.abs(circle0.Radius - circle1.Radius);\r\n\r\n p.x /= diff;\r\n p.y /= diff;\r\n\r\n p.applyMatrix4(circle0.OCS);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(circle0, p);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(circle1, p);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\nexport function getArcOrCirNearPts(cu: Circle | Arc | Ellipse, pickPoint: Vector3, viewXform: Matrix3)\r\n{\r\n let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3);\r\n\r\n let plane = new PlaneExt(cu.Normal, cu.Center);\r\n\r\n let pickLocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true);\r\n\r\n if (pickLocal)\r\n {\r\n let x = new Vector3().fromArray(viewXform.elements, 0).add(pickLocal);\r\n let y = new Vector3().fromArray(viewXform.elements, 3).add(pickLocal);\r\n\r\n x = plane.intersectLine(new Line3(x, x.clone().add(viewNormal)), new Vector3(), true);\r\n y = plane.intersectLine(new Line3(y, y.clone().add(viewNormal)), new Vector3(), true);\r\n\r\n let lx = new Line(pickLocal, x);\r\n let ly = new Line(pickLocal, y);\r\n\r\n let ins = cu.IntersectWith(lx, IntersectOption.ExtendBoth);\r\n ins.push(...cu.IntersectWith(ly, IntersectOption.ExtendBoth));\r\n return ins;\r\n }\r\n else\r\n {\r\n let ptLocal = plane.projectPoint(pickPoint, new Vector3());\r\n let lz = new Line(ptLocal, ptLocal.clone().add(viewNormal));\r\n return cu.IntersectWith(lz, IntersectOption.ExtendBoth);\r\n }\r\n}\r\n\r\nexport function getTanPtsOnEllipse(cu: Ellipse, lastPoint: Vector3)\r\n{\r\n return [];\r\n}\r\n\r\nexport interface IRectInfo\r\n{\r\n isRect: boolean;\r\n size?: Vector3;\r\n box?: Box3;\r\n OCS?: Matrix4;\r\n}\r\n\r\nexport function IsRect(cu: Curve): IRectInfo\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (!cu.IsClose) return { isRect: false };\r\n\r\n let pts = cu.GetStretchPoints();\r\n\r\n if (pts.length < 4) return { isRect: false };\r\n\r\n let xVec: Vector3;\r\n let p1 = pts[0];\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n xVec = pts[i].clone().sub(p1).normalize();\r\n if (!equalv3(xVec, ZeroVec))\r\n break;\r\n }\r\n\r\n if (!xVec) return { isRect: false };\r\n\r\n let zVec = cu.Normal;\r\n let yVec = zVec.clone().cross(xVec).normalize();\r\n\r\n let rectOCS = new Matrix4().makeBasis(xVec, yVec, zVec);\r\n let rectOCSInv = new Matrix4().getInverse(rectOCS);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(rectOCSInv);\r\n\r\n let box = new Box3().setFromPoints(pts);\r\n\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x * size.y, cu.Area, 0.1))\r\n {\r\n return {\r\n isRect: true,\r\n size,\r\n box,\r\n OCS: rectOCS,\r\n };\r\n }\r\n }\r\n return { isRect: false };\r\n}\r\n\r\n/**用4个矩形点构造矩形 */\r\nexport function getRectFrom4Pts(pts: Vector3[])\r\n{\r\n if (pts.length !== 4) return;\r\n let p = pts.shift();\r\n pts.sort((p1, p2) => p.distanceTo(p1) - p.distanceTo(p2));\r\n pts.splice(1, 0, p);\r\n let lineData = pts.map(p =>\r\n {\r\n return {\r\n pt: new Vector2(p.x, p.y),\r\n bul: 0\r\n };\r\n });\r\n let l = new Polyline(lineData);\r\n l.CloseMark = true;\r\n return l;\r\n}\r\n\r\nexport function MergeCurvelist(cus: Curve[])\r\n{\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c1 = cus[i];\r\n let nextI = FixIndex(i + 1, cus);\r\n let c2 = cus[nextI];\r\n\r\n\r\n let status = equaln(c2.Length, 0, LINK_FUZZ) ? Status.True : c1.Join(c2, false, LINK_FUZZ);\r\n if (status === Status.True)\r\n {\r\n cus.splice(nextI, 1);\r\n i--;\r\n }\r\n else if (status === Status.ConverToCircle)\r\n {\r\n cus.length = 0;\r\n let a = c1 as Arc;\r\n cus.push(new Circle(a.Center, a.Radius));\r\n break;\r\n }\r\n }\r\n return cus;\r\n}\r\n\r\nexport function SwapParam(res: IntersectResult[]): IntersectResult[]\r\n{\r\n for (let r of res)\r\n [r.thisParam, r.argParam] = [r.argParam, r.thisParam];\r\n return res;\r\n}\r\n\r\nexport function ComputerCurvesNormalOCS(curves: Curve[], allowAutoCalc: boolean = true): Matrix4 | undefined\r\n{\r\n if (!curves || curves.length === 0) return;\r\n\r\n //准备计算多段线的法向量\r\n let normal: Vector3;\r\n let firstV: Vector3;\r\n for (let c of curves)\r\n {\r\n if (c instanceof Arc)\r\n {\r\n normal = c.Normal;\r\n break;\r\n }\r\n else if (firstV)\r\n {\r\n let v = c.GetFistDeriv(0);\r\n v.cross(firstV);\r\n if (!equalv3(v, ZeroVec))\r\n {\r\n normal = v.normalize();\r\n break;\r\n }\r\n }\r\n else\r\n {\r\n let cus = c.Explode() as Curve[];\r\n let ocs = ComputerCurvesNormalOCS(cus, false);\r\n if (ocs)\r\n return ocs;\r\n let fv = c.GetFistDeriv(0);\r\n if (fv && !equalv3(fv, ZeroVec, 1e-5))\r\n firstV = fv;\r\n }\r\n }\r\n\r\n if (!normal && !allowAutoCalc) return;\r\n\r\n let x = new Vector3();\r\n let y = new Vector3();\r\n if (!normal)\r\n {\r\n if (!firstV)\r\n return curves[0].OCS;\r\n\r\n normal = firstV.normalize();\r\n Orbit.ComputUpDirection(normal, y, x);\r\n [x, y, normal] = [normal, x, y];\r\n }\r\n else\r\n {\r\n if (equalv3(normal, curves[0].Normal.negate()))\r\n normal.negate();\r\n Orbit.ComputUpDirection(normal, y, x);\r\n }\r\n return new Matrix4().makeBasis(x, y, normal).setPosition(curves[0].StartPoint);\r\n}\r\n\r\n\r\nexport function Pts2Polyline(pts: (Vec3 | Vec2)[], isClose: boolean): Polyline\r\n{\r\n let pl = new Polyline();\r\n for (let i = 0; i < pts.length; i += 2)\r\n {\r\n let p1 = AsVector3(pts[i]);\r\n let arc: Arc | Line;\r\n let p2: Vector3;\r\n let p3: Vector3;\r\n\r\n if (isClose)\r\n {\r\n p2 = AsVector3(pts[FixIndex(i + 1, pts.length)]);\r\n p3 = AsVector3(pts[FixIndex(i + 2, pts.length)]);\r\n }\r\n else\r\n {\r\n if (i >= pts.length - 2) break;\r\n p2 = AsVector3(pts[i + 1]);\r\n p3 = AsVector3(pts[i + 2]);\r\n }\r\n let v1 = p1.clone().sub(p2);\r\n let v2 = p2.clone().sub(p3);\r\n\r\n if (equaln(v1.angleTo(v2), 0))\r\n arc = new Line(p1, p3);\r\n else\r\n arc = new Arc().FromThreePoint(p1, p2, p3);\r\n pl.Join(arc);\r\n }\r\n return pl;\r\n}\r\n\r\n/**获取矩形信息 */\r\nexport function GetRectData(cu: Curve): { isRect: boolean, size?: Vector3, box?: Box3, OCS?: Matrix4; }\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (!cu.IsClose) return { isRect: false };\r\n\r\n let pts = cu.GetStretchPoints();\r\n if (cu.Area2 < 0)\r\n pts.reverse();\r\n\r\n if (equalv3(pts[0], arrayLast(pts)))\r\n pts.pop();\r\n\r\n if (pts.length < 4) return { isRect: false };\r\n\r\n let xVec: Vector3;\r\n let p1 = pts[0];\r\n\r\n let originIndex = 0;\r\n\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n if (pts[i].y < p1.y)\r\n {\r\n p1 = pts[i];\r\n originIndex = i;\r\n }\r\n else if (equaln(pts[i].y, p1.y))\r\n {\r\n if (pts[i].x < p1.x)\r\n {\r\n p1 = pts[i];\r\n originIndex = i;\r\n }\r\n }\r\n }\r\n\r\n let tempPts = pts.splice(0, originIndex);\r\n pts.push(...tempPts);\r\n\r\n p1 = pts[0];\r\n\r\n\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n let v = pts[i].clone().sub(p1);\r\n if (equalv3(v, ZeroVec))\r\n continue;\r\n if (!xVec)\r\n xVec = v;\r\n else\r\n {\r\n if (isParallelTo(v, xVec))\r\n xVec.copy(v);\r\n else\r\n break;\r\n }\r\n }\r\n\r\n let yVec: Vector3;\r\n\r\n for (let i = pts.length - 1; i > 0; i--)\r\n {\r\n let v = pts[i].clone().sub(p1);\r\n if (equalv3(v, ZeroVec))\r\n continue;\r\n if (!yVec)\r\n yVec = v;\r\n else\r\n {\r\n if (isParallelTo(v, yVec))\r\n yVec.copy(v);\r\n else\r\n break;\r\n }\r\n }\r\n\r\n if (!xVec || !yVec) return { isRect: false };\r\n\r\n //2向量必须垂直\r\n if (!isPerpendicularityTo(xVec.clone().normalize(), yVec.clone().normalize()))\r\n return { isRect: false };\r\n\r\n if (yVec.length() > xVec.length())\r\n [xVec, yVec] = [yVec.negate(), xVec];\r\n\r\n if (xVec.angleTo(XAxis) > Math.PI / 4)\r\n [xVec, yVec] = [yVec.negate(), xVec];\r\n\r\n\r\n let rectOCS = new Matrix4().makeBasis(xVec.normalize(), yVec.normalize(), xVec.clone().cross(yVec));\r\n let rectOCSInv = new Matrix4().getInverse(rectOCS);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(rectOCSInv);\r\n\r\n let box = new Box3().setFromPoints(pts);\r\n\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x * size.y, cu.Area, 0.1))\r\n {\r\n return {\r\n isRect: true,\r\n size,\r\n box,\r\n OCS: rectOCS,\r\n };\r\n }\r\n }\r\n return { isRect: false };\r\n}\r\n\r\nconst PolylineSpliteRectFuzz = 1e-3;\r\n/**封闭多段线 分割成矩形 */\r\nexport function PolylineSpliteRect(outline: Polyline): Polyline[]\r\n{\r\n if (!outline.IsClose || IsRect(outline).isRect)\r\n return [outline];\r\n\r\n let firstDerv = outline.GetFistDeriv(0).normalize();\r\n if (!isParallelTo(firstDerv, XAxis, PolylineSpliteRectFuzz) && !isParallelTo(firstDerv, YAxis, PolylineSpliteRectFuzz)) return [outline];\r\n\r\n let cus = outline.Explode();\r\n let yCus: Curve[] = [];\r\n\r\n for (let c of cus)\r\n {\r\n if (c instanceof Arc) return [outline];\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (isParallelTo(derv, YAxis, PolylineSpliteRectFuzz))\r\n yCus.push(c);\r\n else\r\n if (!isParallelTo(derv, XAxis, PolylineSpliteRectFuzz))\r\n {\r\n return [outline];\r\n }\r\n }\r\n\r\n yCus.sort((c1, c2) => c1.StartPoint.x - c2.StartPoint.x);\r\n\r\n\r\n let rects: Polyline[] = [];\r\n\r\n for (let i = 0; i < yCus.length - 1; i++)\r\n {\r\n let c1 = yCus[i];\r\n let c2 = yCus[i + 1];\r\n\r\n let x1 = c1.StartPoint.x;\r\n let x2 = c2.StartPoint.x;\r\n if (equaln(x1, x2))\r\n continue;\r\n\r\n let y1: number;\r\n let y2: number;\r\n\r\n let res = c1.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n\r\n let res2 = c2.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n let pars = [...res.map(r => Math.floor(r.argParam)), ...res2.map(r => Math.floor(r.argParam))];\r\n pars = [...new Set(pars)];\r\n pars.sort((a, b) => a - b);\r\n\r\n let ys: number[] = [];\r\n for (let par of pars)\r\n {\r\n let c = outline.GetCurveAtParam(par);\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, PolylineSpliteRectFuzz))\r\n {\r\n let x3 = c.StartPoint.x;\r\n let x4 = c.EndPoint.x;\r\n if (x3 > x4)\r\n [x3, x4] = [x4, x3];\r\n if (isIntersect(x1, x2, x3, x4, -PolylineSpliteRectFuzz))\r\n ys.push(c.StartPoint.y);\r\n }\r\n }\r\n\r\n if (ys.length < 2) return [outline];\r\n\r\n ys.sort((a, b) => a - b);\r\n\r\n y1 = ys[0];\r\n y2 = arrayLast(ys);\r\n\r\n rects.push(new Polyline().RectangleFrom2Pt(new Vector3(x1, y1), new Vector3(x2, y2)));\r\n }\r\n\r\n return rects;\r\n\r\n}\r\n","import { Box3, BufferGeometry, Line as TLine, Matrix3, Matrix4, Object3D, Shape, Vector2, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { getArcOrCirNearPts, getCircleCenter, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { matrixSetVector, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { angle, AsVector3, clampRad, equaln, equalv3, midPoint, MoveMatrix, polar } from '../../Geometry/GeUtils';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\n/**\r\n * 圆弧实体类\r\n * 与ACAD不同,这个类加入了时针变量,并且默认构造的圆弧为顺时针圆弧.\r\n *\r\n * 关于时针圆弧:\r\n * 起始圆弧到终止圆弧总是在0-2PI之间.(一个完整的圆).\r\n * 圆弧的绘制从起始圆弧绘制到终止圆弧. 按照时针绘制.\r\n * 参考计算圆弧的完整角度方法查看该计算方式.\r\n */\r\n@Factory\r\nexport class Arc extends Curve\r\n{\r\n constructor(center: Vector3 = new Vector3(), radius: number = 0.1, startAngle: number = 0.1, endAngle: number = 0, clockwise = true)\r\n {\r\n super();\r\n this._Matrix.setPosition(center);\r\n this._Radius = radius;\r\n this._StartAngle = clampRad(startAngle);\r\n this._EndAngle = clampRad(endAngle);\r\n this._Clockwise = clockwise;\r\n }\r\n private _Radius: number;\r\n private _StartAngle: number;\r\n private _EndAngle: number;\r\n /**\r\n * 曲线为顺时针\r\n */\r\n private _Clockwise = true;\r\n\r\n get Shape()\r\n {\r\n let sp = new Shape();\r\n sp.absarc(0, 0, this._Radius, this._StartAngle, this._EndAngle, this._Clockwise);\r\n return sp;\r\n }\r\n\r\n get Center()\r\n {\r\n return this.Position;\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.Position = v;\r\n }\r\n\r\n get Normal()\r\n {\r\n return new Vector3().setFromMatrixColumn(this._Matrix, 2);\r\n }\r\n set Normal(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n matrixSetVector(this._Matrix, 2, v);\r\n this.Update();\r\n }\r\n\r\n get Area(): number\r\n {\r\n return 0.5 * this.AllAngle * this.Radius * this.Radius;\r\n }\r\n //获得曲线的面积,逆时针为正,顺时针为负.\r\n get Area2(): number\r\n {\r\n let clockwise = this._Clockwise ? -1 : 1;\r\n return 0.5 * this.AllAngle * this.Radius * this.Radius * clockwise;\r\n }\r\n get IsClose(): boolean\r\n {\r\n return false;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n let pts = [this.StartPoint, this.EndPoint];\r\n\r\n //TODO:考虑三维圆弧.\r\n let addPts = [\r\n this.Center.add(new Vector3(this._Radius, 0)),\r\n this.Center.add(new Vector3(0, this._Radius)),\r\n this.Center.add(new Vector3(-this._Radius, 0)),\r\n this.Center.add(new Vector3(0, -this._Radius)),\r\n ];\r\n addPts.forEach(p =>\r\n {\r\n if (this.PtOnCurve(p))\r\n pts.push(p);\r\n });\r\n return new Box3().setFromPoints(pts);\r\n }\r\n\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Radius = v <= 0 ? 1e-19 : v;\r\n this.Update();\r\n }\r\n\r\n get IsClockWise()\r\n {\r\n return this._Clockwise;\r\n }\r\n set IsClockWise(v: boolean)\r\n {\r\n if (v !== this._Clockwise)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Clockwise = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get StartAngle()\r\n {\r\n return this._StartAngle;\r\n }\r\n set StartAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartAngle = v;\r\n this.Update();\r\n }\r\n\r\n get EndAngle()\r\n {\r\n return this._EndAngle;\r\n }\r\n set EndAngle(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndAngle = v;\r\n this.Update();\r\n }\r\n\r\n //******************** Curve function start*****************//\r\n get StartPoint()\r\n {\r\n return polar(new Vector3(), this._StartAngle, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n set StartPoint(v: Vector3)\r\n {\r\n let vTemp = v.clone().applyMatrix4(this.OCSInv);\r\n this.StartAngle = angle(vTemp);\r\n }\r\n get EndPoint()\r\n {\r\n return polar(new Vector3(), this._EndAngle, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n set EndPoint(v: Vector3)\r\n {\r\n let vTemp = v.clone().applyMatrix4(this.OCSInv);\r\n this.EndAngle = angle(vTemp);\r\n }\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return 1;\r\n }\r\n get Length()\r\n {\r\n return this.AllAngle * this._Radius;\r\n }\r\n\r\n GetParamAtPoint2(pt: Vector3): number\r\n {\r\n return this.GetParamAtAngle(this.GetAngleAtPoint(pt));\r\n }\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n let param = this.GetParamAtPoint2(p);\r\n return this.ParamOnCurve(param, fuzz);\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Center = this.Center.applyMatrix4(m);\r\n this.Radius = this.Radius * m.getMaxScaleOnAxis();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this._Clockwise = !this._Clockwise;\r\n this.StartPoint = sp;\r\n this.EndPoint = ep;\r\n return this;\r\n }\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.GetAngleAtParam(param);\r\n return polar(new Vector3(), an, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n GetPointAtDistance(distance: number)\r\n {\r\n let len = this.Length;\r\n if (len == 0) return;\r\n return this.GetPointAtParam(distance / len);\r\n }\r\n\r\n GetDistAtParam(param: number)\r\n {\r\n return Math.abs(param * this.Length);\r\n }\r\n\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n GetParamAtPoint(pt: Vector3)\r\n {\r\n if (this._Radius == 0 ||\r\n this.AllAngle == 0 ||\r\n !equaln(pt.distanceTo(this.Center), this._Radius, 1e-6))\r\n return NaN;\r\n\r\n return this.GetParamAtAngle(this.GetAngleAtPoint(pt));\r\n }\r\n\r\n /**\r\n * 利用角度计算该角度在圆弧中代表的参数.\r\n * 如果角度在圆弧内,那么返回0-1\r\n * 如果角度不在圆弧内,那么尝试返回离圆弧起始或者结束的较近的参数\r\n *\r\n * @param {number} an\r\n * @returns\r\n * @memberof Arc\r\n */\r\n GetParamAtAngle(an: number)\r\n {\r\n //如果以pt为终点,那么所有的角度为\r\n let ptAllAn = this.ComputeAnlge(an);\r\n let allAn = this.AllAngle;\r\n\r\n //减去圆弧角度,剩余角度的一半\r\n let surplusAngleHalf = Math.PI - allAn / 2;\r\n\r\n if (ptAllAn > allAn + surplusAngleHalf)//返回负数\r\n return ((ptAllAn - allAn) - (surplusAngleHalf * 2)) / allAn;\r\n else//返回正数\r\n return ptAllAn / allAn;\r\n }\r\n\r\n /**\r\n * 根据角度获得参数,不过在这里我们可以指定我们是要获取前面的参数还是后面的参数(正负)\r\n * @param an\r\n * @param [isStart] true:返回负数,false 返回正数\r\n * @returns\r\n */\r\n GetParamAtAngle2(an: number, isStart = true)\r\n {\r\n //如果以pt为终点,那么所有的角度为\r\n let ptAllAn = this.ComputeAnlge(an);\r\n let allAn = this.AllAngle;\r\n\r\n //减去圆弧角度,剩余角度的一半\r\n let surplusAngleHalf = Math.PI - allAn / 2;\r\n\r\n if (isStart)//返回负数\r\n return ((ptAllAn - allAn) - (surplusAngleHalf * 2)) / allAn;\r\n else//返回正数\r\n return ptAllAn / allAn;\r\n }\r\n\r\n GetAngleAtPoint(pt: Vector3)\r\n {\r\n let ptTmp = pt.clone().applyMatrix4(this.OCSInv);\r\n return angle(ptTmp);\r\n }\r\n\r\n GetAngleAtParam(param: number)\r\n {\r\n return clampRad(this._StartAngle + param * this.AllAngle * (this._Clockwise ? -1 : 1));\r\n }\r\n\r\n GetSplitCurves(param: number[] | number): Arc[]\r\n {\r\n let params = this.SplitParamSort(param);\r\n //角度列表\r\n let ans = params.map(p => this.GetAngleAtParam(p));\r\n //返回圆弧表\r\n let arcs: Arc[] = [];\r\n for (let i = 0; i < ans.length - 1; i++)\r\n {\r\n let arc = this.Clone() as Arc;\r\n arc.ColorIndex = this.ColorIndex;\r\n arc.StartAngle = ans[i];\r\n arc.EndAngle = ans[i + 1];\r\n arcs.push(arc);\r\n }\r\n return arcs;\r\n }\r\n GetOffsetCurves(offsetDist: number)\r\n {\r\n if (this._Clockwise) offsetDist *= -1;\r\n if ((offsetDist + this._Radius) > 0)\r\n {\r\n let arc = this.Clone() as Arc;\r\n arc.Radius = offsetDist + this._Radius;\r\n return [arc];\r\n }\r\n return [];\r\n }\r\n Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < 0)\r\n {\r\n this._StartAngle = this.GetAngleAtParam(newParam);\r\n }\r\n else if (newParam > 1)\r\n {\r\n this._EndAngle = this.GetAngleAtParam(newParam);\r\n }\r\n this.Update();\r\n }\r\n\r\n Join(cu: Curve): Status\r\n {\r\n if (cu instanceof Arc)\r\n {\r\n //非常小的圆弧直接结束\r\n if (cu.AllAngle < 5e-6) return Status.False;\r\n\r\n if (equalv3(cu.Center, this.Center) && equaln(cu._Radius, this._Radius))\r\n {\r\n this.WriteAllObjectRecord();\r\n let [sa, ea] = [cu.StartAngle, cu.EndAngle];\r\n if (cu._Clockwise != this._Clockwise)\r\n [sa, ea] = [ea, sa];\r\n\r\n let allAn = this.AllAngle;\r\n let saAllan = this.ComputeAnlge(sa);\r\n let eaAllan = this.ComputeAnlge(ea);\r\n\r\n if (equaln(sa, this._StartAngle)) //this起点对起点\r\n {\r\n if (eaAllan > allAn)\r\n this.EndAngle = ea;\r\n\r\n return Status.True;\r\n }\r\n else if (equaln(sa, this._EndAngle))//this终点对起点\r\n {\r\n if (eaAllan < allAn || equaln(ea, this._StartAngle))\r\n return Status.ConverToCircle;\r\n else\r\n this.EndAngle = ea;\r\n\r\n return Status.True;\r\n }\r\n else if (equaln(ea, this.StartAngle))//this起点对终点\r\n {\r\n if (saAllan < allAn)\r\n return Status.ConverToCircle;\r\n else\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n else if (equaln(ea, this._EndAngle))//this终点对终点\r\n {\r\n if (saAllan > allAn)\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n else if (this.ParamOnCurve(this.GetParamAtAngle(sa)))\r\n {\r\n if (eaAllan < saAllan)\r\n return Status.ConverToCircle;\r\n else if (eaAllan > allAn)\r\n this.EndAngle = ea;\r\n return Status.True;\r\n }\r\n else if (this.ParamOnCurve(this.GetParamAtAngle(ea)))\r\n {\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n\r\n //使用按负方向去计算它的参数\r\n let saParam: number;\r\n if (saAllan > allAn)\r\n saParam = (saAllan - Math.PI * 2) / allAn;\r\n else\r\n saParam = saAllan / allAn;\r\n\r\n let eaParam: number;\r\n if (eaAllan > saAllan && saAllan > allAn)\r\n eaParam = (eaAllan - Math.PI * 2) / allAn;\r\n else\r\n eaParam = eaAllan / allAn;\r\n\r\n let pMin = Math.max(0, saParam);\r\n let pMax = Math.min(1, eaParam);\r\n\r\n if (pMin <= pMax + 1e-5)\r\n {\r\n if (saParam < 0)\r\n this.StartAngle = sa;\r\n if (eaParam > 1)\r\n this.EndAngle = ea;\r\n return Status.True;\r\n }\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Clockwise = !this._Clockwise;\r\n [this._StartAngle, this._EndAngle] = [this._EndAngle, this._StartAngle];\r\n return this;\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4)\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectArcAndArc(this, curve, intType);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndArc(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return SwapParam(IntersectCircleAndArc(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Polyline)\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance));\r\n\r\n if (curve instanceof Ellipse)\r\n return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType));\r\n return [];\r\n }\r\n\r\n /**\r\n * 计算出圆弧所包含的角度\r\n *\r\n * @readonly\r\n * @type {number}\r\n * @memberof Arc\r\n */\r\n get AllAngle(): number\r\n {\r\n return this.ComputeAnlge(this._EndAngle);\r\n }\r\n\r\n get Bul(): number\r\n {\r\n if (equaln(this.AllAngle, Math.PI * 2))\r\n return 1;\r\n return Math.tan(this.AllAngle * 0.25) * (this.IsClockWise ? -1 : 1);\r\n }\r\n\r\n /**\r\n * 计算所包含的角度\r\n *\r\n * @private\r\n * @param {number} endAngle 结束的角度\r\n * @returns\r\n * @memberof Arc\r\n */\r\n ComputeAnlge(endAngle: number)\r\n {\r\n //顺时针\r\n if (this._Clockwise)\r\n {\r\n if (this._StartAngle > endAngle)\r\n return this.StartAngle - endAngle;\r\n else //越过0点绘制圆弧\r\n return (Math.PI * 2) - (endAngle - this._StartAngle);\r\n }\r\n else\r\n {\r\n if (endAngle > this._StartAngle)\r\n return endAngle - this._StartAngle;\r\n else\r\n return (Math.PI * 2) - (this._StartAngle - endAngle);\r\n }\r\n }\r\n\r\n /**\r\n * 解析两点和凸度所构成的圆弧\r\n *\r\n * @param {Vector2} p1\r\n * @param {Vector2} p2\r\n * @param {number} bul 凸度,在cad中,凸度为 <(四分之一圆心角)的正切值>\r\n */\r\n ParseFromBul(p1: Vector3 | Vector2, p2: Vector3 | Vector2, bul: number): Arc\r\n {\r\n if (p1 instanceof Vector2)\r\n p1 = AsVector3(p1);\r\n if (p2 instanceof Vector2)\r\n p2 = AsVector3(p2);\r\n\r\n let ocsInv = this.OCSInv;\r\n p1 = p1.clone().applyMatrix4(ocsInv);\r\n p2 = p2.clone().applyMatrix4(ocsInv);\r\n\r\n //弦向量\r\n let chordV = p2.clone().sub(p1);\r\n //弦角度\r\n let chordAn = angle(chordV);\r\n //弦长度/2\r\n let chordLengthHalf = chordV.length() / 2;\r\n\r\n let allAngle = Math.atan(bul) * 4;\r\n let HalfAngle = allAngle * 0.5;\r\n //半径\r\n this._Radius = chordLengthHalf / Math.sin(HalfAngle);\r\n\r\n //指向圆心的角度\r\n let toCenterAn = chordAn + Math.PI * 0.5;//弦角度转90\r\n\r\n //圆心\r\n let center = midPoint(p1, p2);\r\n polar(center, toCenterAn, this._Radius - (bul * chordLengthHalf));\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n\r\n this._Radius = Math.abs(this._Radius);\r\n\r\n this._StartAngle = angle(p1.clone().sub(center));\r\n this._EndAngle = angle(p2.clone().sub(center));\r\n\r\n this._Clockwise = bul < 0;\r\n\r\n return this;\r\n }\r\n FromThreePoint(pt1: Vector3, pt2: Vector3, pt3: Vector3)\r\n {\r\n if (!(pt1 && pt2 && pt3))\r\n return;\r\n\r\n let ocsInv = this.OCSInv;\r\n pt1 = pt1.clone().applyMatrix4(ocsInv).setZ(0);\r\n pt2 = pt2.clone().applyMatrix4(ocsInv).setZ(0);\r\n pt3 = pt3.clone().applyMatrix4(ocsInv).setZ(0);\r\n\r\n let center = getCircleCenter(pt1, pt2, pt3);\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n //用圆心和其中一个点求距离得到半径:\r\n this._Radius = center.distanceTo(pt1);\r\n //起始角度 端点角度\r\n this._StartAngle = angle(pt1.clone().sub(center));\r\n this._EndAngle = angle(pt3.clone().sub(center));\r\n //求出向量p1->p2,p1->p3\r\n let p1 = pt2.clone().sub(pt1);\r\n let p2 = pt3.clone().sub(pt1);\r\n\r\n this._Clockwise = p1.cross(p2).z < 0;\r\n return this;\r\n }\r\n\r\n /**\r\n * 重载: 初始化绘制实体.\r\n *\r\n * @param {RenderType} [renderType=RenderType.Wireframe]\r\n */\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let geo = BufferGeometryUtils.CreateFromPts(this.Shape.getPoints(60).map(AsVector3));\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n var geometry = new LineGeometry();\r\n geometry.setPositions(geo.attributes.position.array as number[]);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n //更新Geometry\r\n private UpdateGeometry(geo: BufferGeometry | LineGeometry)\r\n {\r\n let pts = this.Shape.getPoints(60).map(AsVector3);\r\n if (geo instanceof LineGeometry)\r\n geo.setPositions(pts.reduce((arr: number[], p) => { return [...arr, ...p.toArray()]; }, []));\r\n else\r\n BufferGeometryUtils.UpdatePts(geo, pts);\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n *\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n * @memberof Arc\r\n */\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let geo = obj[\"geometry\"] as BufferGeometry;\r\n this.UpdateGeometry(geo);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return [this.StartPoint, this.EndPoint];\r\n case ObjectSnapMode.Mid:\r\n return [this.GetPointAtParam(0.5)];\r\n case ObjectSnapMode.Nea:\r\n return getArcOrCirNearPts(this, pickPoint, viewXform)\r\n .filter(p => this.PtOnCurve(p));\r\n case ObjectSnapMode.Ext:\r\n return [this.GetClosestPointTo(pickPoint, true)];\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n let l = new Line(this.Center, lastPoint);\r\n return l.IntersectWith(this, IntersectOption.ExtendBoth).filter(p => this.PtOnCurve(p));\r\n }\r\n case ObjectSnapMode.Tan:\r\n let pts = GetTanPtsOnArcOrCircle(this, lastPoint);\r\n if (pts)\r\n return pts.filter(p => this.PtOnCurve(p));\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [\r\n this.StartPoint,\r\n this.GetPointAtParam(0.5),\r\n this.EndPoint,\r\n this.Center.clone(),\r\n ];\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n this.WriteAllObjectRecord();\r\n let ptsArr = this.GetGripPoints();\r\n let index = indexList[0];\r\n let p = ptsArr[index];\r\n if (p)\r\n {\r\n p.add(vec);\r\n if (index > 2)\r\n this.Center = this.Center.add(vec);\r\n else\r\n this.FromThreePoint(ptsArr[0], ptsArr[1], ptsArr[2]);\r\n this.Update();\r\n }\r\n }\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length === 0)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n if (indexList.length === 2)\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n else\r\n for (let index of indexList)\r\n {\r\n let pts = [this.StartPoint, this.EndPoint];\r\n let [sp, ep] = pts;\r\n\r\n let oldChordLengthHalf = sp.distanceTo(ep) * 0.5;\r\n\r\n let arcHeight = oldChordLengthHalf * this.Bul;\r\n\r\n pts[index].add(vec);\r\n\r\n let newChordLengthHalf = sp.distanceTo(ep) * 0.5;\r\n\r\n let newBul = arcHeight / newChordLengthHalf;\r\n\r\n //根据凸度构造新的弧\r\n this.ParseFromBul(sp, ep, newBul);\r\n this.Update();\r\n }\r\n }\r\n\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n GetFistDeriv(pt: number | Vector3)\r\n {\r\n let an: number;\r\n if (typeof pt === \"number\")\r\n an = this.GetAngleAtParam(pt);\r\n else\r\n an = angle(pt.clone().applyMatrix4(this.OCSInv));\r\n\r\n an += Math.PI * 0.5 * (this._Clockwise ? -1 : 1);\r\n\r\n let ocs = new Matrix4().extractRotation(this.OCS);\r\n return polar(new Vector3(), an, this._Radius).applyMatrix4(ocs);\r\n }\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n let l = new Line(this.Center, pt);\r\n let inPts: Vector3[] = this.IntersectWith(l, extend ? IntersectOption.ExtendBoth : IntersectOption.ExtendArg);\r\n if (inPts.length < 2)\r\n inPts.push(this.StartPoint, this.EndPoint);\r\n return inPts.reduce((p1, p2) => p1.distanceToSquared(pt) < p2.distanceToSquared(pt) ? p1 : p2);\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n if (ver === 1)\r\n {\r\n this.Center = new Vector3().fromArray(file.Read());\r\n this.Normal = new Vector3().fromArray(file.Read());\r\n }\r\n this._Radius = file.Read();\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n this._Clockwise = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n file.Write(this._Radius);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.Write(this._Clockwise);\r\n }\r\n //#endregion\r\n}\r\n","\r\ntype LogFunction = (message?: any, ...optionalParams: any[]) => void;\r\n\r\nexport const _LogInjectFunctions: LogFunction[] = [];\r\n\r\nexport function Log(message?: any, ...optionalParams: any[]): void\r\n{\r\n for (let f of _LogInjectFunctions)\r\n f(message, ...optionalParams);\r\n}\r\n\r\nexport const LogEnable = {\r\n Display: false\r\n};\r\n","\r\n\r\nlet instanceMap = new Map();\r\n\r\n/**\r\n * 构造单例类的静态类.\r\n * # Example:\r\n * class A extends Singleton(){};\r\n * //获得单例\r\n * let a = A.GetInstance();\r\n */\r\nexport class Singleton\r\n{\r\n protected constructor() { }\r\n\r\n //FIXME: https://github.com/Microsoft/TypeScript/issues/5863\r\n static GetInstance(): T\r\n {\r\n if (instanceMap.has(this))\r\n return instanceMap.get(this);\r\n //@ts-ignore\r\n let __instance__ = new this.prototype.constructor();\r\n instanceMap.set(this, __instance__);\r\n return __instance__;\r\n }\r\n}\r\n","import { Geometry, Matrix4, Vector3 } from \"three\";\r\n\r\nexport function ScaleUV(geo: Geometry, scale = 1e-3)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n uv.multiplyScalar(scale);\r\n }\r\n }\r\n }\r\n}\r\nexport function ScaleUV2(geo: Geometry, ocs: Matrix4, xScale = 1e-3, yScale = 1e-3, isInvert = false)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n let p = new Vector3(uv.x, uv.y).applyMatrix4(ocs);\r\n uv.x = p.x;\r\n uv.y = p.y;\r\n if (isInvert)\r\n {\r\n uv.x /= yScale;\r\n uv.y /= xScale;\r\n }\r\n else\r\n {\r\n uv.x /= xScale;\r\n uv.y /= yScale;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { Matrix3, Matrix4, Path, Shape as TShape, Vector3, Box3 } from 'three';\r\nimport { arrayRemoveIf } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Contour } from './Contour';\r\nimport { Circle } from './Entity/Circle';\r\nimport { Curve } from './Entity/Curve';\r\nimport { Polyline } from './Entity/Polyline';\r\nimport { equaln } from '../Geometry/GeUtils';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\n\r\nexport class Shape\r\n{\r\n private _Outline: Contour;\r\n private _Holes: Contour[] = [];\r\n private _Shape: TShape = new TShape();\r\n constructor(out?: Contour, hols?: Contour[])\r\n {\r\n this._Outline = out || new Contour();\r\n hols && this._Holes.push(...hols);\r\n }\r\n\r\n get Outline()\r\n {\r\n return this._Outline;\r\n }\r\n get Holes()\r\n {\r\n return this._Holes;\r\n }\r\n get Area()\r\n {\r\n let outlineArea = this._Outline.Area;\r\n let holeArea = this._Holes.map(l => l.Area).reduce((a1, a2) => a1 + a2, 0);\r\n return outlineArea - holeArea;\r\n }\r\n get BoundingBox()\r\n {\r\n return this._Outline.BoundingBox;\r\n }\r\n set Outline(cus: Contour)\r\n {\r\n this._Outline = cus;\r\n this.UpdateShape();\r\n }\r\n set Holes(cus: Contour[])\r\n {\r\n this._Holes = cus;\r\n this.UpdateShape();\r\n }\r\n get Shape()\r\n {\r\n this.UpdateShape();\r\n return this._Shape;\r\n }\r\n get Position()\r\n {\r\n return this._Outline.Curve.Position;\r\n }\r\n set Position(p: Vector3)\r\n {\r\n let vec = p.clone().sub(this._Outline.Curve.Position);\r\n this._Outline.Curve.Position = p;\r\n for (let h of this._Holes)\r\n h.Curve.Position = h.Curve.Position.add(vec);\r\n }\r\n Z0()\r\n {\r\n this._Outline.Curve.Z0();\r\n for (let h of this._Holes)\r\n h.Curve.Z0();\r\n return this;\r\n }\r\n\r\n MatrixPlanarizere()\r\n {\r\n this._Outline.Curve.MatrixPlanarizere();\r\n for (let h of this._Holes)\r\n h.Curve.MatrixPlanarizere();\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n this._Outline.Curve.ApplyMatrix(m);\r\n this._Holes.forEach(h => h.Curve.ApplyMatrix(m));\r\n return this;\r\n }\r\n ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n\r\n let cu = this.Outline.Curve;\r\n let cus = this._Holes.map(h => h.Curve);\r\n cus.unshift(cu);\r\n for (let c of cus)\r\n {\r\n c.ApplyMatrix(c.OCS);\r\n c.ApplyMatrix(m);\r\n c.ApplyMatrix(c.OCSInv);\r\n }\r\n\r\n return this;\r\n }\r\n Explode()\r\n {\r\n let cus: Curve[] = [];\r\n let contours: Contour[] = [this._Outline, ...this._Holes];\r\n for (let con of contours)\r\n {\r\n if (con.Curve instanceof Polyline)\r\n cus.push(...con.Curve.Explode());\r\n else\r\n cus.push(con.Curve.Clone());\r\n }\r\n return cus;\r\n }\r\n Clone()\r\n {\r\n let shape = new Shape();\r\n shape.Outline = this._Outline.Clone();\r\n shape.Holes = this.Holes.map(h => h.Clone());\r\n return shape;\r\n }\r\n SetColor(color: number)\r\n {\r\n this._Outline.Curve.ColorIndex = color;\r\n this._Holes.forEach(h => h.Curve.ColorIndex = color);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let cus: Curve[] = [this._Outline.Curve];\r\n for (let h of this._Holes)\r\n {\r\n cus.push(h.Curve);\r\n }\r\n let pts: Vector3[] = [];\r\n for (let c of cus)\r\n {\r\n pts.push(...c.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints()\r\n {\r\n let pts = this.Outline.Curve.GetGripPoints();\r\n for (let h of this._Holes)\r\n {\r\n pts.push(...h.Curve.GetGripPoints());\r\n }\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n let i = indexList[0];\r\n let outlineIndex = this._Outline.Curve.GetGripPoints().length;\r\n\r\n let cu = this._Outline.Curve;\r\n\r\n if (i >= outlineIndex)\r\n {\r\n for (let h of this._Holes)\r\n {\r\n let len = h.Curve.GetGripPoints().length;\r\n if (indexList[0] < outlineIndex + len)\r\n {\r\n indexList = [indexList[0] - outlineIndex];\r\n cu = h.Curve;\r\n break;\r\n }\r\n outlineIndex += len;\r\n }\r\n }\r\n cu.MoveGripPoints(indexList, vec);\r\n }\r\n GetStretchPoints()\r\n {\r\n let pts = this.Outline.Curve.GetStretchPoints();\r\n for (let h of this._Holes)\r\n {\r\n pts.push(...h.Curve.GetStretchPoints());\r\n }\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n let outlen = 0;\r\n for (let cu of [this._Outline.Curve, ...this._Holes.map(h => h.Curve)])\r\n {\r\n let count = cu.GetStretchPoints().length;\r\n let refIndex = outlen + count;\r\n let curIndexs = [];\r\n while (indexList.length)\r\n {\r\n if (indexList[0] < refIndex)\r\n curIndexs.push(indexList.shift() - outlen);\r\n else\r\n break;\r\n }\r\n cu.MoveStretchPoints(curIndexs, vec);\r\n\r\n if (indexList.length === 0)\r\n break;\r\n\r\n outlen += count;\r\n }\r\n }\r\n //交集 如果成功返回一个面域 失败返回0个\r\n IntersectionBoolOperation(targetShape: Shape): Shape[]\r\n {\r\n let resOutlines = this._Outline.IntersectionBoolOperation(targetShape._Outline);\r\n let cus = this.targetOutlineSubHoleOutline(resOutlines, Shape.mergeContours([...this._Holes, ...targetShape._Holes]));\r\n return Shape.pairHoleAndOutline(cus);\r\n }\r\n\r\n //并集,如果成功返回1个形状,不成功返回2个形状\r\n UnionBoolOperation(targetShape: Shape, checkIntersect = false): Shape[]\r\n {\r\n if (checkIntersect && !this.BoundingBox.intersectsBox(targetShape.BoundingBox, 1e-3)) return [this, targetShape];\r\n\r\n let { contours, holes } = this._Outline.UnionBoolOperation(targetShape._Outline);\r\n\r\n let shapes: Shape[] = [];\r\n\r\n //提取出所有的孔洞, 目标线段孔洞和原线段差,如果孔洞和目标相减后有被包围轮廓,应把这个单独提取出来作为形状\r\n let unionHoles: Contour[] = [];\r\n\r\n //合并运算时提取出运算后的孔洞和形状\r\n const pickUpHoleOrShape = (srcHoles: Contour[], tarHoles: Contour[], outline: Contour) =>\r\n {\r\n srcHoles.forEach(cu =>\r\n {\r\n let tmpContours = cu.SubstactBoolOperation(outline).sort((a, b) => b.Area - a.Area);\r\n let isAllContainered = tmpContours.length > 1 && tmpContours.slice(1).every((cu, index) => tmpContours[0].CuInOutline(cu.Curve));\r\n\r\n //洞是否被最大的洞包含,是,则把被包含的洞都提取出来加入形状数组\r\n if (isAllContainered)\r\n {\r\n shapes.push(...this.targetOutlinesSubHoles(tmpContours.slice(1).map(c => new Shape(c)), tarHoles.map(c => new Shape(c))));\r\n } else\r\n unionHoles.push(...tmpContours);\r\n });\r\n\r\n };\r\n pickUpHoleOrShape(targetShape._Holes, this._Holes, this._Outline);\r\n pickUpHoleOrShape(this._Holes, targetShape._Holes, targetShape._Outline);\r\n targetShape._Holes.forEach(cu =>\r\n {\r\n this._Holes.forEach(c =>\r\n {\r\n unionHoles.push(...c.IntersectionBoolOperation(cu));\r\n });\r\n });\r\n\r\n shapes.push(...this.targetOutlinesSubHoles(contours.map(c => new Shape(c, holes)), unionHoles.map(c => new Shape(c))));\r\n return shapes;\r\n }\r\n\r\n /**\r\n * 如果完全被减掉,就返回0个.其他的返回1个或者n个\r\n * @param targetShapes 已经是合并后的形状数组\r\n */\r\n SubstactBoolOperation(targetShapes: Shape[])\r\n {\r\n let originOutline = this.Outline;\r\n let targetOutlines = targetShapes.map(s => s.Outline);\r\n const { holes, outlines } = originOutline.GetSubtractListByMoreTargets(targetOutlines);\r\n holes.push(...this.Holes);\r\n\r\n let newShapes: Shape[] = [];\r\n\r\n if (outlines.length === 1 && equaln(outlines[0].Area, originOutline.Area))\r\n {\r\n newShapes = [new Shape(outlines[0], Shape.mergeContours(holes))];\r\n }\r\n else if (holes.length === 0)\r\n {\r\n newShapes = outlines.map(o => new Shape(o));\r\n }\r\n else\r\n {\r\n for (let outline of outlines)\r\n newShapes.push(...new Shape(outline).SubstactBoolOperation(holes.map(h => new Shape(h))));\r\n }\r\n\r\n let holeShape = this.Holes.map(h => new Shape(h));\r\n\r\n for (let target of targetShapes)\r\n {\r\n let tmpInterList: Contour[] = [];\r\n if (target.Holes.length === 0) continue;\r\n for (let hole of target.Holes)\r\n {\r\n let list = hole.IntersectionBoolOperation(originOutline);\r\n tmpInterList.push(...list);\r\n }\r\n\r\n for (let ot of tmpInterList)\r\n {\r\n let subShapes: Shape[] = [];\r\n subShapes.push(...holeShape);\r\n for (let t of targetShapes)\r\n {\r\n if (t !== target)\r\n subShapes.push(new Shape(t.Outline));\r\n }\r\n\r\n newShapes.push(...new Shape(ot).SubstactBoolOperation(subShapes));\r\n }\r\n\r\n }\r\n\r\n return newShapes;\r\n }\r\n Equal(targetShape: Shape)\r\n {\r\n if (this._Outline.Equal(targetShape._Outline))\r\n {\r\n return this._Holes.length === targetShape._Holes.length\r\n && this._Holes.every(h1 =>\r\n targetShape._Holes.some(h2 => h1.Equal(h2))\r\n );\r\n }\r\n return false;\r\n }\r\n private targetOutlinesSubHoles(targetShapes: Shape[], holeShapes: Shape[])\r\n {\r\n let resultShapes: Shape[] = [];\r\n for (let ts of targetShapes)\r\n {\r\n let res = ts.SubstactBoolOperation(holeShapes);\r\n resultShapes.push(...res);\r\n }\r\n return resultShapes;\r\n\r\n }\r\n /**\r\n * 目标轮廓减去洞\r\n *\r\n * @private\r\n * @param {Contour[]} tarContours 轮廓列表\r\n * @param {Contour[]} holes 洞列表\r\n * @returns {Contour[]} 新的轮廓列表\r\n * @memberof Shape\r\n */\r\n private targetOutlineSubHoleOutline(tarContours: Contour[], holes: Contour[]): Contour[]\r\n {\r\n if (!holes.length)\r\n return tarContours;\r\n\r\n let resultContours: Contour[] = [];\r\n\r\n for (let minuendContour of tarContours)\r\n {\r\n //需要被差集的形状列表\r\n let tmpContour: Contour[] = [minuendContour];\r\n for (let hole of holes)\r\n {\r\n //缓存差集生成的轮廓\r\n let tmps: Contour[] = [];\r\n tmpContour.forEach(r =>\r\n {\r\n let cus = r.SubstactBoolOperation(hole);\r\n tmps.push(...cus);\r\n });\r\n tmpContour = tmps;//使用新生成的进行下一轮计算\r\n }\r\n resultContours.push(...tmpContour);\r\n }\r\n\r\n return resultContours;\r\n }\r\n\r\n //整理轮廓数组,匹配洞和外轮廓\r\n static pairHoleAndOutline(contours: Contour[]): Shape[]\r\n {\r\n let shapes: Shape[] = [];\r\n contours.sort((a, b) => b.Area - a.Area);\r\n while (contours.length)\r\n {\r\n //洞列表\r\n let tmpHoles: Contour[] = [];\r\n let outline: Contour = contours.shift();\r\n\r\n //取出包含的洞\r\n arrayRemoveIf(contours, (con: Contour) =>\r\n {\r\n let bisIn = outline.CuInOutline(con.Curve);\r\n if (bisIn) tmpHoles.push(con);\r\n return bisIn;\r\n });\r\n let holes: Contour[] = Shape.removeBeContaineredHoles(tmpHoles);\r\n shapes.push(new Shape(outline, holes));\r\n }\r\n return shapes;\r\n }\r\n /**\r\n * 合并洞,本质是使用(并集算法)将可以并集的洞合并在一起,减少洞的数量.\r\n * canSidewipe 用于走刀,擦边的,包含的,是否合并\r\n */\r\n static mergeContours(holes: Contour[], canSidewipe = true): Contour[]\r\n {\r\n if (holes.length <= 1) return holes;\r\n let rets: Contour[] = [];//返回的合并轮廓\r\n let cache = new Map();\r\n\r\n while (holes.length > 0)\r\n {\r\n let c = holes.shift();//取第一个\r\n let b1 = cache.get(c);\r\n if (!b1)\r\n {\r\n b1 = c.BoundingBox;\r\n cache.set(c, b1);\r\n }\r\n\r\n while (true)\r\n {\r\n //剩余的 不相交的形状表 remaining\r\n let remHoles = holes.filter(ic =>\r\n {\r\n let b2 = cache.get(ic);\r\n if (!b2)\r\n {\r\n b2 = ic.BoundingBox;\r\n cache.set(ic, b2);\r\n }\r\n\r\n if (!IntersectBox2(b1, b2))\r\n return true;\r\n\r\n let unions = c.UnionBoolOperation(ic);\r\n\r\n if (unions.holes.length > 0)\r\n console.warn(\"未知情况\");\r\n\r\n if (unions.contours.length === 1)//并集成功\r\n {\r\n if (!canSidewipe)\r\n {\r\n if (equaln(c.Area + ic.Area, unions.contours[0].Area, 0.1))\r\n return true;\r\n if (equaln(unions.contours[0].Area, Math.max(c.Area, ic.Area), 0.1))\r\n return true;\r\n }\r\n c = unions.contours[0]; //更新c\r\n b1 = c.BoundingBox;\r\n cache.set(c, b1);\r\n }\r\n\r\n return unions.contours.length !== 1; //过滤出并集失败的形状\r\n });\r\n\r\n //如果c和剩余的轮廓都不相交,那么退出\r\n if (remHoles.length === holes.length)\r\n {\r\n rets.push(c); //c已经是一个独立的轮廓,不和任意轮廓相交(不能合并了)\r\n break;//退出循环.下一个\r\n }\r\n else\r\n holes = remHoles; //更新为剩下的轮廓列表\r\n }\r\n }\r\n\r\n return rets;\r\n }\r\n\r\n /**\r\n * 移除被包含的洞.(移除无效的洞,已经被更大的洞包含)\r\n *\r\n * @private\r\n * @param {Contour[]} tmpHoles 洞列表\r\n * @returns {Contour[]} 返回的洞列表都不会互相包含.\r\n * @memberof Shape\r\n */\r\n private static removeBeContaineredHoles(tmpHoles: Contour[]): Contour[]\r\n {\r\n let holes: Contour[] = [];\r\n if (tmpHoles.length <= 1) return tmpHoles;\r\n tmpHoles.sort((a, b) => b.Area - a.Area);\r\n while (tmpHoles.length)\r\n {\r\n let srcHole = tmpHoles.shift();\r\n holes.push(srcHole);\r\n\r\n //移除包含的洞\r\n arrayRemoveIf(tmpHoles, h => srcHole.CuInOutline(h.Curve));\r\n }\r\n return holes;\r\n }\r\n UpdateShape()\r\n {\r\n this._Shape = this.Outline.Shape;\r\n for (let h of this._Holes)\r\n {\r\n if (h.Curve instanceof Polyline)\r\n h.Curve.UpdateMatrixTo(this.Outline.Curve.OCS);\r\n\r\n if (h.Curve instanceof Circle)\r\n {\r\n let sp = new Path();\r\n let cen = h.Curve.Center.applyMatrix4(this.Outline.Curve.OCSInv);\r\n sp.ellipse(cen.x, cen.y, h.Curve.Radius, h.Curve.Radius, 0, 2 * Math.PI, false, 0);\r\n this._Shape.holes.push(sp);\r\n }\r\n else\r\n this._Shape.holes.push(h.Shape);\r\n }\r\n }\r\n //读写文件\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();//1\r\n this._Outline = Contour.CreateContour([file.ReadObject() as Curve]);\r\n\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n this._Holes.push(\r\n Contour.CreateContour([file.ReadObject() as Curve])\r\n );\r\n }\r\n\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.WriteObject(this._Outline.Curve);\r\n file.Write(this._Holes.length);\r\n this._Holes.forEach(h => file.WriteObject(h.Curve));\r\n }\r\n}\r\n","import { BoolOpeartionType } from '../GraphicsSystem/BoolOperateUtils';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Shape } from './Shape';\r\nimport { Matrix4 } from 'three';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\n\r\n\r\nexport class ShapeManager\r\n{\r\n private _ShapeList: Shape[] = [];\r\n get ShapeList()\r\n {\r\n return this._ShapeList.slice();\r\n }\r\n get ShapeCount()\r\n {\r\n return this._ShapeList.length;\r\n }\r\n get ShapeArea()\r\n {\r\n return this._ShapeList.map(s => s.Area).reduce((a1, a2) => a1 + a2, 0);\r\n }\r\n AppendShapeList(shapes: Shape | Shape[])\r\n {\r\n Array.isArray(shapes) ? this._ShapeList.push(...shapes) : this._ShapeList.push(shapes);\r\n return this;\r\n }\r\n Clear()\r\n {\r\n this._ShapeList.length = 0;\r\n }\r\n BoolOper(otherMg: ShapeManager, booltype: BoolOpeartionType)\r\n {\r\n switch (booltype)\r\n {\r\n case BoolOpeartionType.Intersection:\r\n return this.IntersectionBoolOperation(otherMg);\r\n case BoolOpeartionType.Union:\r\n return this.UnionBoolOperation(otherMg);\r\n case BoolOpeartionType.Subtract:\r\n return this.SubstactBoolOperation(otherMg);\r\n }\r\n }\r\n //交集 如果成功返回一个面域 失败返回0个\r\n IntersectionBoolOperation(target: ShapeManager)\r\n {\r\n let shapes: Shape[] = [];\r\n for (let srcShape of this._ShapeList)\r\n {\r\n for (let tarShape of target._ShapeList)\r\n {\r\n let tmpShapes = srcShape.IntersectionBoolOperation(tarShape);\r\n shapes.push(...tmpShapes);\r\n }\r\n }\r\n this.Clear();\r\n this._ShapeList = shapes;\r\n return this._ShapeList.length > 0;\r\n }\r\n //并集,如果有一个形状并集成功,就成功\r\n UnionBoolOperation(targetMg: ShapeManager)\r\n {\r\n let isSuccess = false;\r\n let srcShapes = this._ShapeList;\r\n let tarShapes = targetMg._ShapeList;\r\n\r\n let alones: Shape[] = [];//孤立的形状\r\n\r\n const boxCache = new WeakMap();\r\n\r\n for (let src of srcShapes)\r\n {\r\n let notUnions: Shape[] = [];//未被合并的形状列表 来自tarShapes\r\n let srcBox = src.BoundingBox;\r\n for (let tar of tarShapes)\r\n {\r\n let tarBox = boxCache.get(tar);\r\n if (!tarBox)\r\n {\r\n tarBox = tar.BoundingBox;\r\n boxCache.set(tar, tarBox);\r\n }\r\n if (!IntersectBox2(srcBox, tarBox))\r\n {\r\n notUnions.push(tar);\r\n continue;\r\n }\r\n let unions = src.UnionBoolOperation(tar);\r\n if (unions.length === 1)//并集成功\r\n {\r\n isSuccess = true;\r\n src = unions[0];//src设置为 合并完的形状\r\n }\r\n else//并集失败\r\n notUnions.push(tar); //设置为未计算\r\n }\r\n\r\n //如果发现src和任意一个形状并集成功,那么\r\n if (notUnions.length != tarShapes.length)\r\n {\r\n notUnions.push(src); //加入src 进行下一轮\r\n tarShapes = notUnions;\r\n }\r\n else\r\n alones.push(src);//它是孤独的一个形状\r\n }\r\n\r\n this._ShapeList = alones.concat(tarShapes);\r\n return isSuccess;\r\n }\r\n SubstactBoolOperation(target: ShapeManager)\r\n {\r\n let newShapes: Shape[] = [];\r\n for (let s of this._ShapeList)\r\n {\r\n let ss = s.SubstactBoolOperation(target.ShapeList);\r\n newShapes.push(...ss);\r\n }\r\n this._ShapeList = newShapes;\r\n return true;\r\n }\r\n\r\n /**\r\n * 与region.ApplyMatrix不同的是,这个是直接操作内部对象.\r\n * 通常用来计算布尔运算时需要真实的移动这个位置.\r\n * 并且将不会刷新显示\r\n *\r\n * @param {Matrix4} mat4\r\n * @memberof ShapeManager\r\n */\r\n ApplyMatrix(mat4: Matrix4)\r\n {\r\n for (let s of this._ShapeList)\r\n {\r\n s.Outline.Curve.ApplyMatrix(mat4);\r\n s.Holes.forEach(o => o.Curve.ApplyMatrix(mat4));\r\n }\r\n\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();//1\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let obj = new Shape();\r\n obj.ReadFile(file);\r\n this._ShapeList.push(obj);\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.ShapeList.length);\r\n for (let s of this.ShapeList)\r\n {\r\n s.WriteFile(file);\r\n }\r\n }\r\n}\r\n","import { Box3, BufferGeometry, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Vector2, Vector3 } from 'three';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils, BufferGeometryUtils as BufferGeometryUtils2 } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector3, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { ScaleUV } from '../../Geometry/UVUtils';\r\nimport { BoolOpeartionType } from '../../GraphicsSystem/BoolOperateUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { Shape } from '../Shape';\r\nimport { ShapeManager } from '../ShapeManager';\r\nimport { Curve } from './Curve';\r\nimport { Entity } from './Entity';\r\n\r\n@Factory\r\nexport class Region extends Entity\r\n{\r\n static CreateFromCurves(cus: Curve[]): Region | undefined\r\n {\r\n let shapes = Contour.GetAllContour(cus).map(out => new Shape(out));\r\n if (shapes.length > 0)\r\n {\r\n let reg = new Region();\r\n //MarkX:曲线同面域一起移动\r\n reg.ApplyMatrix(shapes[0].Outline.Curve.OCS);\r\n reg.ShapeManager.AppendShapeList(shapes);\r\n return reg;\r\n }\r\n }\r\n\r\n constructor(private _ShapeManager: ShapeManager = new ShapeManager())\r\n {\r\n super();\r\n }\r\n\r\n //如果需要修改获取到的属性,需要Clone后进行操作,否则会对原实体进行破坏\r\n get ShapeManager()\r\n {\r\n return this._ShapeManager;\r\n }\r\n get Area()\r\n {\r\n return this.ShapeManager.ShapeArea;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3();\r\n for (let s of this._ShapeManager.ShapeList)\r\n box.union(s.BoundingBox);\r\n return box;\r\n }\r\n Explode()\r\n {\r\n let shapeList = this._ShapeManager.ShapeList;\r\n if (shapeList.length <= 1)\r\n {\r\n return shapeList[0].Explode();\r\n }\r\n else\r\n {\r\n let regs: Region[] = [];\r\n shapeList.forEach(s =>\r\n {\r\n let reg = new Region().ApplyMatrix(this.OCS);\r\n reg.ShapeManager.AppendShapeList(s);\r\n regs.push(reg);\r\n });\r\n return regs;\r\n }\r\n }\r\n\r\n /**\r\n * 对于布尔操作,这个将会变换内部轮廓到对方坐标系.\r\n * 并且这个变换不会更新图形绘制.\r\n * @param {Matrix4} m\r\n * @memberof Region\r\n */\r\n ShapeApplyMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ShapeManager.ApplyMatrix(m);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let pts: Vector3[] = [];\r\n for (let s of this._ShapeManager.ShapeList)\r\n {\r\n pts.push(...s.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n let pts: Vector3[] = [];\r\n for (let s of this._ShapeManager.ShapeList)\r\n pts.push(...s.GetStretchPoints());\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let moveVLoc = moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv));\r\n this.ApplyMatrix(MoveMatrix(moveVLoc));\r\n }\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n //面域移动,组成面域的曲线也要移动 MarkX:曲线同面域一起移动\r\n this._ShapeManager.ShapeList.forEach(s => s.ApplyMatrix(m));\r\n return super.ApplyMatrix(m);\r\n }\r\n\r\n get Position()\r\n {\r\n return super.Position;\r\n }\r\n set Position(pt: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let moveX = pt.x - this._Matrix.elements[12];\r\n let moveY = pt.y - this._Matrix.elements[13];\r\n let moveZ = pt.z - this._Matrix.elements[14];\r\n this._Matrix.setPosition(pt);\r\n this._SpaceOCS.elements[12] += moveX;\r\n this._SpaceOCS.elements[13] += moveY;\r\n this._SpaceOCS.elements[14] += moveZ;\r\n\r\n let m = new Matrix4().setPosition(moveX, moveY, moveZ);\r\n for (let s of this.ShapeManager.ShapeList)\r\n s.ApplyMatrix(m);\r\n\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.ApplyScaleMatrix(m);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n\r\n //Z轴归0\r\n Z0()\r\n {\r\n super.Z0();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.Z0();\r\n\r\n return this;\r\n }\r\n MatrixPlanarizere()\r\n {\r\n super.MatrixPlanarizere();\r\n for (let s of this._ShapeManager.ShapeList)\r\n s.MatrixPlanarizere();\r\n return this;\r\n }\r\n\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n return this;\r\n }\r\n /**\r\n * 请注意:该计算会操作otherRegion的矩阵\r\n * @param {Region} otherRegion\r\n * @param {BoolOpeartionType} boolType\r\n */\r\n BooleanOper(otherRegion: Region, boolType: BoolOpeartionType): boolean\r\n {\r\n if (this.IsCoplaneTo(otherRegion))\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldOcs = this.OCS;\r\n\r\n //把形状曲线转移到二维屏幕计算后还原回来\r\n this.ShapeApplyMatrix(this.OCSInv);\r\n otherRegion.ShapeApplyMatrix(this.OCSInv);\r\n let isSuccess = this._ShapeManager.BoolOper(otherRegion._ShapeManager, boolType);\r\n this.ShapeApplyMatrix(oldOcs);\r\n this.Update();\r\n return isSuccess;\r\n }\r\n return false;\r\n }\r\n\r\n private _MeshGeometry: BufferGeometry;\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n this.UpdateGeometry();\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n this.UpdateGeometry();\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private UpdateGeometry()\r\n {\r\n let shapeList = this._ShapeManager.ShapeList;\r\n\r\n let edgePts: Vector3[] = [];\r\n let meshGeoms: BufferGeometry[] = [];\r\n\r\n const AddEdgePts = (pts: Vector2[], diffMat: Matrix4) =>\r\n {\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = AsVector3(pts[i]);\r\n p.applyMatrix4(diffMat);\r\n edgePts.push(p);\r\n if (i !== 0 && i !== pts.length - 1)\r\n edgePts.push(p);\r\n }\r\n };\r\n\r\n for (let i = 0; i < shapeList.length; i++)\r\n {\r\n let shape = shapeList[i];\r\n let geometry = new ShapeGeometry(shape.Shape, 60);//60 可以优化.\r\n let diffMat = this.OCSInv.clone().multiply(shape.Outline.Curve.OCSNoClone);\r\n geometry.applyMatrix4(diffMat);\r\n ScaleUV(geometry);\r\n meshGeoms.push(new BufferGeometry().fromGeometry(geometry));\r\n\r\n let shapeInfo = shape.Shape.extractPoints(60);\r\n\r\n let pts = shapeInfo.shape;\r\n AddEdgePts(pts, diffMat);\r\n\r\n let holePtss = shapeInfo.holes;\r\n for (let holePts of holePtss)\r\n AddEdgePts(holePts, diffMat);\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(edgePts);\r\n this._MeshGeometry = BufferGeometryUtils2.MergeBufferGeometries(meshGeoms);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n this._MeshGeometry.computeVertexNormals();\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(0));\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return new Object3D().add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n mesh,\r\n );\r\n }\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return obj.add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n mesh,\r\n );\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(0);\r\n }\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (type === RenderType.Wireframe || type === RenderType.Print)\r\n {\r\n let line = obj as LineSegments;\r\n line.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Conceptual)\r\n {\r\n for (let i = 0; i < obj.children.length; i++)\r\n {\r\n if (i % 2 === 0)\r\n {\r\n let l = obj.children[i] as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj.children[i] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n for (let m of obj.children)\r\n {\r\n let mesh = m as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._ShapeManager.Clear();\r\n this._ShapeManager.ReadFile(file);\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n this._ShapeManager.WriteFile(file);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { ConverCircleToPolyline } from \"../../Common/CurveUtils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\n\r\n/**\r\n * 把板件炸开成面域,0,1为正反面,其余的为边面(没有圆弧面)\r\n */\r\nexport function Board2Regions(br: Board): Region[]\r\n{\r\n let ocs = br.OCS;\r\n\r\n let cu = br.ContourCurve.Clone();\r\n\r\n if (cu instanceof Circle)\r\n cu = ConverCircleToPolyline(cu);\r\n\r\n let frontReg = Region.CreateFromCurves([cu.Clone()]);\r\n let regFrontOcs = ocs.clone();\r\n regFrontOcs.setPosition(br.Position.add(br.Normal.multiplyScalar(br.Thickness)));\r\n frontReg.ApplyMatrix(regFrontOcs);\r\n\r\n let backReg = Region.CreateFromCurves([cu.Flip()]);\r\n backReg.ApplyMatrix(ocs);\r\n\r\n let resultRegs = [frontReg, backReg];\r\n\r\n //edges\r\n let lines = cu.Explode().filter(c => c instanceof Line);\r\n\r\n\r\n for (let l of lines)\r\n {\r\n let rectPl = new Polyline().Rectangle(l.Length, br.Thickness);\r\n let reg = Region.CreateFromCurves([rectPl]);\r\n if (!reg) continue;\r\n\r\n let p = l.StartPoint.applyMatrix4(ocs);\r\n let x = l.GetFistDeriv(0).transformDirection(ocs);\r\n let y = br.Normal;\r\n let z = new Vector3().crossVectors(x, y);\r\n\r\n let mtx = new Matrix4().makeBasis(x, y, z).setPosition(p);\r\n reg.ApplyMatrix(mtx);\r\n resultRegs.push(reg);\r\n }\r\n\r\n return resultRegs;\r\n}\r\n","\r\n/**统一板件属性key的命名,修改值会导致无法 .xxx该属性 */\r\nexport enum EBoardKeyList\r\n{\r\n Height = \"height\",\r\n Width = \"width\",\r\n Thick = \"thickness\",\r\n RoomName = \"roomName\",\r\n CabinetName = \"cabinetName\",\r\n BrMat = \"boardName\", //板材\r\n Mat = \"material\", //材料\r\n Color = \"color\",\r\n Lines = \"lines\", //纹路\r\n ProcessGroup = \"ProcessGroup\",\r\n BigHole = \"bigHoleDir\",\r\n /**\r\n * 排钻类型,当没有定义每个边的排钻数据时,使用统一的排钻类型\r\n */\r\n DrillType = \"drillType\",\r\n ComposingFace = \"composingFace\",\r\n /**\r\n * 封边数组,定义每个边的封边信息\r\n */\r\n HighSealed = \"highSealed\",\r\n UpSealed = \"sealedUp\",\r\n DownSealed = \"sealedDown\",\r\n LeftSealed = \"sealedLeft\",\r\n RightSealed = \"sealedRight\",\r\n KnifeRad = \"knifeRadius\",\r\n SpliteHeight = \"spliteHeight\",\r\n SpliteWidth = \"spliteWidth\",\r\n SpliteThickness = \"spliteThickness\",\r\n}\r\n","import { BoardProcessOption } from \"../../UI/Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { CADFiler } from \"../../DatabaseServices/CADFiler\";\r\nimport { I2DModeling, I3DModeling, IPathItem } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Vector3 } from \"three\";\r\n\r\n/**序列化板件数据 */\r\nexport function serializeBoardData(file: CADFiler, processData: BoardProcessOption)\r\n{\r\n file.Write(processData[EBoardKeyList.RoomName]);\r\n file.Write(processData[EBoardKeyList.CabinetName]);\r\n file.Write(processData[EBoardKeyList.BrMat]);\r\n file.Write(processData[EBoardKeyList.Mat]);\r\n file.Write(processData[EBoardKeyList.Color]);\r\n file.Write(processData[EBoardKeyList.Lines]);\r\n file.Write(processData[EBoardKeyList.BigHole]);\r\n file.Write(processData[EBoardKeyList.DrillType]);\r\n file.Write(processData[EBoardKeyList.ComposingFace]);\r\n file.Write(processData[EBoardKeyList.HighSealed].length);\r\n for (let n of processData[EBoardKeyList.HighSealed])\r\n {\r\n file.Write(n.size);\r\n }\r\n file.Write(processData[EBoardKeyList.UpSealed]);\r\n file.Write(processData[EBoardKeyList.DownSealed]);\r\n file.Write(processData[EBoardKeyList.LeftSealed]);\r\n file.Write(processData[EBoardKeyList.RightSealed]);\r\n file.Write(processData.spliteHeight);\r\n file.Write(processData.spliteWidth);\r\n file.Write(processData.spliteThickness);\r\n\r\n file.Write(processData.highDrill.length);\r\n for (let n of processData.highDrill)\r\n file.Write(n);\r\n\r\n file.Write(processData.frontDrill);\r\n file.Write(processData.backDrill);\r\n file.Write(processData.remarks.length);\r\n for (let d of processData.remarks)\r\n {\r\n file.Write(d[0]);\r\n file.Write(d[1]);\r\n }\r\n}\r\n\r\n//反序列化板件数据\r\nexport function deserializationBoardData(file: CADFiler, processData: BoardProcessOption, ver: number)\r\n{\r\n processData[EBoardKeyList.RoomName] = file.Read();\r\n processData[EBoardKeyList.CabinetName] = file.Read();\r\n processData[EBoardKeyList.BrMat] = file.Read();\r\n processData[EBoardKeyList.Mat] = file.Read();\r\n processData[EBoardKeyList.Color] = file.Read();\r\n processData[EBoardKeyList.Lines] = file.Read();\r\n processData[EBoardKeyList.BigHole] = file.Read();\r\n processData[EBoardKeyList.DrillType] = file.Read();\r\n processData[EBoardKeyList.ComposingFace] = file.Read();\r\n\r\n let count = file.Read();\r\n processData[EBoardKeyList.HighSealed].length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let size = file.Read();\r\n if (ver < 4)\r\n {\r\n file.Read();\r\n }\r\n processData[EBoardKeyList.HighSealed].push({ size });\r\n }\r\n\r\n processData[EBoardKeyList.UpSealed] = file.Read();\r\n processData[EBoardKeyList.DownSealed] = file.Read();\r\n processData[EBoardKeyList.LeftSealed] = file.Read();\r\n processData[EBoardKeyList.RightSealed] = file.Read();\r\n processData.spliteHeight = file.Read();\r\n processData.spliteWidth = file.Read();\r\n processData.spliteThickness = file.Read();\r\n\r\n count = file.Read();\r\n processData.highDrill = file.ReadArray(count);\r\n\r\n processData.frontDrill = file.Read();\r\n processData.backDrill = file.Read();\r\n\r\n if (ver >= 7)\r\n {\r\n let count = file.Read();\r\n processData.remarks.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n processData.remarks.push(d);\r\n }\r\n }\r\n}\r\n\r\nexport function SerializeBoard2DModeingData(file: CADFiler, modelList: I2DModeling[])\r\n{\r\n file.Write(modelList.length);\r\n for (let data of modelList)\r\n {\r\n file.WriteObject(data.path);\r\n file.Write(data.dir);\r\n file.Write(data.items.length);\r\n for (let item of data.items)\r\n {\r\n file.Write(item.depth);\r\n file.Write(item.offset);\r\n file.Write(item.knife.id);\r\n file.Write(item.knife.radius);\r\n file.Write(item.knife.angle);\r\n file.Write(item.knife.name);\r\n }\r\n }\r\n}\r\nexport function SerializeBoard3DModeingData(file: CADFiler, modelList: I3DModeling[])\r\n{\r\n file.Write(modelList.length);\r\n for (let item of modelList)\r\n {\r\n file.Write(item.path.length);\r\n for (let d of item.path)\r\n {\r\n file.Write(d.pt.toArray());\r\n file.Write(d.bul);\r\n }\r\n file.Write(item.dir);\r\n file.Write(item.knife.id);\r\n file.Write(item.knife.radius);\r\n file.Write(item.knife.angle);\r\n file.Write(item.knife.name);\r\n }\r\n}\r\n\r\n//反序列化板件数据\r\nexport function DeserializationBoard2DModeingData(file: CADFiler, data: I2DModeling[], ver: number)\r\n{\r\n data.length = 0;\r\n const count = file.Read();\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let path = file.ReadObject() as Polyline;\r\n let dir = file.Read();\r\n let m: I2DModeling = {\r\n path,\r\n dir,\r\n items: []\r\n };\r\n const itemCount = file.Read();\r\n\r\n for (let j = 0; j < itemCount; j++)\r\n {\r\n let depth = file.Read();\r\n let offset = file.Read();\r\n let knifeId = file.Read();\r\n let knifeRad = file.Read();\r\n let knifeAngle = file.Read();\r\n let knifeName = file.Read();\r\n m.items.push({\r\n depth, offset, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName }\r\n });\r\n }\r\n data.push(m);\r\n }\r\n}\r\n//反序列化板件数据\r\nexport function DeserializationBoard3DModeingData(file: CADFiler, data: I3DModeling[], ver: number)\r\n{\r\n data.length = 0;\r\n const count = file.Read();\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let pathCount = file.Read();\r\n let path: IPathItem[] = [];\r\n for (let i = 0; i < pathCount; i++)\r\n {\r\n let pt = new Vector3().fromArray(file.Read());\r\n let bul = file.Read();\r\n path.push({ pt, bul });\r\n }\r\n let dir = file.Read();\r\n let knifeId = file.Read();\r\n let knifeRad = file.Read();\r\n let knifeAngle = file.Read();\r\n let knifeName = file.Read();\r\n data.push({\r\n path, dir, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName }\r\n });\r\n }\r\n}\r\n","import { ExtrudeBufferGeometry, UVGenerator, Vector2 } from \"three\";\r\n\r\nclass BoardUVGenerator implements UVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n\r\n return [\r\n new Vector2(a_x, a_y),\r\n new Vector2(b_x, b_y),\r\n new Vector2(c_x, c_y)\r\n ];\r\n }\r\n generateSideWallUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number, indexD: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var a_z = vertices[indexA * 3 + 2];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var b_z = vertices[indexB * 3 + 2];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n var c_z = vertices[indexC * 3 + 2];\r\n var d_x = vertices[indexD * 3];\r\n var d_y = vertices[indexD * 3 + 1];\r\n var d_z = vertices[indexD * 3 + 2];\r\n let pts: Vector2[];\r\n if (Math.abs(a_y - b_y) < 0.01)\r\n {\r\n pts = [\r\n new Vector2(a_z - 1, a_x),\r\n new Vector2(b_z - 1, b_x),\r\n new Vector2(c_z - 1, c_x),\r\n new Vector2(d_z - 1, d_x)\r\n ];\r\n\r\n }\r\n else\r\n {\r\n pts = [\r\n new Vector2(a_z - 1, a_y),\r\n new Vector2(b_z - 1, b_y),\r\n new Vector2(c_z - 1, c_y),\r\n new Vector2(d_z - 1, d_y)\r\n ];\r\n }\r\n return pts;\r\n }\r\n}\r\n\r\nclass BoardUVGenerator2 extends BoardUVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n var a_x = vertices[indexA * 3];\r\n var a_y = vertices[indexA * 3 + 1];\r\n var b_x = vertices[indexB * 3];\r\n var b_y = vertices[indexB * 3 + 1];\r\n var c_x = vertices[indexC * 3];\r\n var c_y = vertices[indexC * 3 + 1];\r\n\r\n return [\r\n new Vector2(a_y, a_x),\r\n new Vector2(b_y, b_x),\r\n new Vector2(c_y, c_x)\r\n ];\r\n }\r\n}\r\n\r\nexport let boardUVGenerator = new BoardUVGenerator();\r\nexport let boardUVGenerator2 = new BoardUVGenerator2();\r\n","import { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ObjectId } from \"../../DatabaseServices/ObjectId\";\r\n\r\nexport enum BoardType\r\n{\r\n Layer = 0, //层板\r\n Vertical = 1, //立板\r\n Behind = 2 //背板\r\n}\r\n\r\n/**\r\n *勿随意更改属性名,若更改,需更改对应UI模态框的属性和检验方法的key\r\n *\r\n */\r\nexport interface IBaseOption\r\n{\r\n version?: number;\r\n}\r\n\r\n//板件数据,配置信息+加工信息\r\nexport interface BoardData\r\n{\r\n boardConfig: BoardConfigOption;\r\n boardProcess: BoardProcessOption;\r\n}\r\n//排钻类型\r\nexport enum DrillType\r\n{\r\n Yes = \"排\",\r\n None = \"不排\",\r\n More = \"**多种**\",\r\n Invail = \"无效配置\",\r\n}\r\n//偏心轮类型\r\nexport enum FaceDirection\r\n{\r\n Front = 0,\r\n Back = 1,\r\n}\r\n\r\n//纹路类型\r\nexport enum LinesType\r\n{\r\n /** 正纹 */\r\n Positive = 0,\r\n /** 反纹 */\r\n Reverse = 1,\r\n /** 可翻转 */\r\n CanReversal = 2,\r\n}\r\n\r\n// 排版面\r\nexport enum ComposingType\r\n{\r\n Positive, Reverse, Arbitrary\r\n}\r\n/**\r\n *背板靠上还是靠下\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum BehindHeightPositon\r\n{\r\n ForTop = \"top\", //靠上\r\n ForBottom = \"bottom\",//靠下\r\n AllHeight = \"all\" //总高\r\n}\r\n\r\n/**\r\n *板件相对位置\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum BrRelativePos\r\n{\r\n Front = \"front\",\r\n Back = \"back\",\r\n Top = \"top\",\r\n Bottom = \"bottom\",\r\n Left = \"left\",\r\n Right = \"right\",\r\n Div = \"div\"\r\n}\r\n\r\nexport interface IHighSealedItem\r\n{\r\n size: number;\r\n}\r\n\r\nexport interface BoardProcessOption extends IBaseOption\r\n{\r\n [EBoardKeyList.RoomName]?: string;\r\n [EBoardKeyList.CabinetName]?: string;//柜名\r\n [EBoardKeyList.BrMat]?: string;//板材名\r\n [EBoardKeyList.Mat]?: string;//材料\r\n [EBoardKeyList.Color]?: string;\r\n [EBoardKeyList.Lines]?: LinesType;//纹路\r\n [EBoardKeyList.ProcessGroup]?: ObjectId[];//纹路\r\n [EBoardKeyList.BigHole]?: FaceDirection;//大孔面\r\n [EBoardKeyList.DrillType]?: string;//排钻类型\r\n [EBoardKeyList.ComposingFace]?: ComposingType;//排版面\r\n [EBoardKeyList.HighSealed]?: IHighSealedItem[];//封边数据\r\n [EBoardKeyList.UpSealed]?: string;//封边上下左右\r\n [EBoardKeyList.DownSealed]?: string;\r\n [EBoardKeyList.LeftSealed]?: string;\r\n [EBoardKeyList.RightSealed]?: string;\r\n [EBoardKeyList.SpliteHeight]?: string;//拆单高/宽/厚\r\n [EBoardKeyList.SpliteWidth]?: string;\r\n [EBoardKeyList.SpliteThickness]?: string;\r\n highDrill?: string[];\r\n frontDrill: boolean;\r\n backDrill: boolean;\r\n remarks: [string, string][];\r\n useBoardProcessOption?: boolean;\r\n}\r\n\r\n/**\r\n *板件参数\r\n */\r\nexport interface BoardConfigOption extends IBaseOption\r\n{\r\n type: BoardType;\r\n name: string;\r\n thickness?: number;\r\n height?: number;\r\n width?: number;\r\n}\r\nexport interface SideBoardOption extends BoardConfigOption\r\n{\r\n spaceSize?: number; //空间宽度\r\n leftShrink: number; //左侧板内缩\r\n rightShrink: number;\r\n}\r\n\r\n/**\r\n *背板参数\r\n *\r\n * @export\r\n * @interface BehindBoardOption\r\n * @extends {BoardConfigOption}\r\n */\r\nexport interface BehindBoardOption extends BoardConfigOption\r\n{\r\n //上下左右延伸\r\n leftExt: number;\r\n rightExt: number;\r\n topExt: number;\r\n bottomExt: number;\r\n //板件位置\r\n boardPosition: BehindHeightPositon;\r\n moveDist: number;\r\n\r\n spaceSize?: number;\r\n count?: number;\r\n //板件相对位置\r\n boardRelative?: BrRelativePos;\r\n calcHeight: string;//高度表达式\r\n calcSpaceSize: string;\r\n calcMoveDist: string;\r\n}\r\n\r\n/**\r\n *层板参数\r\n *\r\n * @export\r\n * @interface LayerBoardOption\r\n * @extends {BoardConfigOption}\r\n */\r\nexport interface LayerBoardOption extends BoardConfigOption\r\n{\r\n calcHeight: string;\r\n frontShrink: number;\r\n leftShrink: number;\r\n rightShrink: number;\r\n isTotalLength: boolean;\r\n isActive: boolean;\r\n spaceSize?: number;\r\n count?: number;\r\n boardRelative?: BrRelativePos;\r\n calcSpaceSize: string;\r\n calcFrontShrink: string;\r\n calcLeftShrink: string;\r\n calcRightShrink: string;\r\n}\r\n\r\n/**\r\n *层板钉参数\r\n *\r\n * @export\r\n * @interface LayerNailOption\r\n */\r\nexport interface LayerNailOption extends IBaseOption\r\n{\r\n isDraw: boolean; //是否绘制\r\n addCount: number;//增\r\n dist: number;\r\n isGroup: boolean;\r\n isInBack: boolean; //是否在背板绘制\r\n front: number;\r\n behind: number;\r\n count: number;\r\n rad: number;\r\n length: number;\r\n depth: number;\r\n}\r\n\r\n/**\r\n *立板参数\r\n */\r\nexport interface VerticalBoardOption extends BoardConfigOption\r\n{\r\n frontShrink: number; //前缩\r\n bottomShrink: number;//底缩\r\n isTotalLength: boolean; //是否取总高\r\n isTotalWidth: boolean;//是否取总宽\r\n count?: number;\r\n spaceSize?: number;\r\n boardRelative?: BrRelativePos;\r\n calcWidth: string; //板深表达式\r\n calcHeight: string;\r\n calcSpaceSize: string;\r\n calcFrontShrink: string;\r\n calcBottomShrink: string;\r\n}\r\nexport interface TBBoardOption extends BoardConfigOption\r\n{\r\n isDraw: boolean;\r\n frontDist: number; //前距\r\n behindDistance: number; //后距\r\n isWrapSide: boolean; //顶包侧\r\n useLFData: boolean;\r\n leftExt: number;\r\n rightExt: number;\r\n offset: number;//上留或者下留\r\n isDrawFooter?: boolean;\r\n footThickness?: number; //地脚厚\r\n footBehindShrink?: number;//内缩\r\n isDrawBackFooter?: boolean;\r\n footerOffset?: number;\r\n isDrawStrengthenStrip?: boolean;\r\n divCount?: number;\r\n}\r\nexport interface SingleBoardOption extends BoardConfigOption\r\n{\r\n rotateX: number;\r\n rotateY: number;\r\n rotateZ: number;\r\n\r\n}\r\nexport enum StripType\r\n{\r\n H = \"h\",\r\n V = \"v\",\r\n}\r\nexport interface ClosingStripOption extends BoardConfigOption\r\n{\r\n boardRelative: BrRelativePos;\r\n striptype: StripType;//收口条类型\r\n frontShrink: number; //前缩\r\n isDrawFuZhu: boolean; //是否绘制辅助条\r\n fzWidth: number;\r\n fzThickness: number;\r\n}\r\n\r\nexport interface IGrooveOption extends IBaseOption\r\n{\r\n grooveAddLength: string;//槽加长/宽/高\r\n grooveAddWidth: string;\r\n grooveAddDepth: string;\r\n knifeRadius?: string;\r\n}\r\n\r\nexport interface IShinkOption extends IBaseOption\r\n{\r\n left: number;\r\n right: number;\r\n front: number;\r\n back: number;\r\n isLREqual: boolean;\r\n isFBEqual: boolean;\r\n}\r\n\r\nexport type IUiOption = {\r\n [P in (keyof T)]: T[P] extends number ? string : T[P]\r\n};\r\n\r\nexport interface INailRule extends IBaseOption\r\n{\r\n startDist: number;\r\n endDist: number;\r\n count: number;\r\n}\r\n\r\nexport interface IHightDrillOption\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\nexport enum CurtailType\r\n{\r\n PerBr = \"0\",\r\n Total = \"1\",\r\n}\r\n\r\nexport interface IBoardBatchCurtailOption extends IBaseOption\r\n{\r\n type: CurtailType;\r\n front: number;\r\n back: number;\r\n left: number;\r\n right: number;\r\n moveBrs: boolean;\r\n}\r\n\r\nexport enum BoardOpenDir\r\n{\r\n Left = 1,\r\n Right = 2,\r\n Up = 3,\r\n Down = 4,\r\n None = 0,\r\n}\r\n\r\nexport type AnyObject = { [key: string]: any; };\r\n\r\n//见光面封边设置\r\nexport interface ISmoothEdgeOption extends IBaseOption\r\n{\r\n smoothEdge: number;//见光面\r\n edge: number;//非见光面\r\n scale: number;//见光比例\r\n filterArr: string[];//\r\n}\r\n\r\nexport interface IDrawBoardAutoCutOption\r\n{\r\n isAutoCut: boolean;//是否自动切割\r\n isRelevance: boolean;//是否关联切割\r\n}\r\n\r\nexport interface IKnifeProps\r\n{\r\n radius: number;\r\n angle: number;\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\n\r\n//将嵌入的实体绘制对象添加到当前的绘制对象(由于内嵌的实体可能被重复引用)\r\nexport function AddEntityDrawObject(obj: Object3D, embedEntity: Entity, renderType: RenderType = RenderType.Wireframe)\r\n{\r\n let embedObject = embedEntity.GetDrawObjectFromRenderType(renderType);\r\n if (embedObject.parent)\r\n obj.children.push(embedObject);//为了避免这个内嵌实体加入到不同的Object中(因为我们有PrintObject),这个写法能行,是因为我们会在其他地方更新它的矩阵\r\n else\r\n obj.add(embedObject);\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\n\r\nlet x = new Vector3();\r\nlet y = new Vector3();\r\nlet z = new Vector3();\r\nexport function IsMirror(mtx: Matrix4): boolean\r\n{\r\n mtx.extractBasis(x, y, z);\r\n // for a true orthogonal, non-mirrored base, u.cross(v) == w\r\n // If they have an opposite direction then we are mirroring\r\n const mirrorvalue = x.cross(y).dot(z);\r\n const ismirror = (mirrorvalue < 0);\r\n return ismirror;\r\n}\r\n","export const _CSGDEBUG = false;\r\n\r\n/** Epsilon used during determination of near zero distances.\r\n * @default\r\n */\r\nexport const EPS = 1e-5;\r\n\r\n// Tag factory: we can request a unique tag through CSG.getTag()\r\nexport let staticTag = 1;\r\nexport const getTag = () => staticTag++;\r\n","import { Vector3 } from \"three\";\r\n/** Class Vector3D\r\n * Represents a 3D vector with X, Y, Z coordinates.\r\n */\r\nexport class Vector3D extends Vector3\r\n{\r\n clone()\r\n {\r\n return new Vector3D(this.x, this.y, this.z) as this;\r\n }\r\n // find a vector that is somewhat perpendicular to this one\r\n randomNonParallelVector()\r\n {\r\n let x = Math.abs(this.x);\r\n let y = Math.abs(this.y);\r\n let z = Math.abs(this.z);\r\n\r\n if (x <= y && x <= z)\r\n return new Vector3D(1, 0, 0);\r\n else if (y <= x && y <= z)\r\n return new Vector3D(0, 1, 0);\r\n else\r\n return new Vector3D(0, 0, 1);\r\n }\r\n\r\n toString()\r\n {\r\n return (\r\n \"(\" +\r\n this.x.toFixed(5) +\r\n \", \" +\r\n this.y.toFixed(5) +\r\n \", \" +\r\n this.z.toFixed(5) +\r\n \")\"\r\n );\r\n }\r\n}\r\n","import { Vector3D } from \"./Vector3\";\r\nimport { Vector2 } from \"three\";\r\n\r\nexport class Vector2D extends Vector2\r\n{\r\n // extend to a 3D vector by adding a z coordinate:\r\n toVector3D(z: number)\r\n {\r\n return new Vector3D(this.x, this.y, z);\r\n }\r\n clone()\r\n {\r\n return new Vector2D(this.x, this.y) as this;\r\n }\r\n // returns the vector rotated by 90 degrees clockwise\r\n normal()\r\n {\r\n return new Vector2D(this.y, -this.x);\r\n }\r\n\r\n cross(a: Vector2)\r\n {\r\n return this.x * a.y - this.y * a.x;\r\n }\r\n}\r\n","import { getTag } from \"../constants\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Matrix4 } from \"three\";\r\n\r\n// # class Vertex\r\n// Represents a vertex of a polygon. Use your own vertex class instead of this\r\n// one to provide additional features like texture coordinates and vertex\r\n// colors. Custom vertex classes need to provide a `pos` property\r\n// `flipped()`, and `interpolate()` methods that behave analogous to the ones\r\n// FIXME: And a lot MORE (see plane.fromVector3Ds for ex) ! This is fragile code\r\n// defined by `Vertex`.\r\nexport class Vertex3D\r\n{\r\n tag: number;\r\n constructor(public pos: Vector3D, public uv = new Vector2D()) { }\r\n\r\n clone()\r\n {\r\n return new Vertex3D(this.pos.clone(), this.uv.clone());\r\n }\r\n\r\n // Return a vertex with all orientation-specific data (e.g. vertex normal) flipped. Called when the\r\n // orientation of a polygon is flipped.\r\n flipped()\r\n {\r\n return this;\r\n }\r\n\r\n getTag()\r\n {\r\n let result = this.tag;\r\n if (!result)\r\n {\r\n result = getTag();\r\n this.tag = result;\r\n }\r\n return result;\r\n }\r\n\r\n // Create a new vertex between this vertex and `other` by linearly\r\n // interpolating all properties using a parameter of `t`. Subclasses should\r\n // override this to interpolate additional properties.\r\n interpolate(other: Vertex3D, t: number)\r\n {\r\n let pos = this.pos.clone().lerp(other.pos, t);\r\n let uv = this.uv.clone().lerp(other.uv, t);\r\n return new Vertex3D(pos, uv);\r\n }\r\n\r\n // Affine transformation of vertex. Returns a new Vertex\r\n\r\n transform(matrix4x4: Matrix4)\r\n {\r\n const newpos = this.pos.clone().applyMatrix4(matrix4x4);\r\n return new Vertex3D(newpos, this.uv);\r\n }\r\n}\r\n","import { Matrix4 } from \"three\";\r\nimport { equaln, equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { getTag } from \"../constants\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\n\r\n// # class Plane\r\n// Represents a plane in 3D space.\r\nexport class Plane\r\n{\r\n normal: Vector3D;\r\n w: number;\r\n tag: number;\r\n constructor(normal: Vector3D, w: number)\r\n {\r\n this.normal = normal;\r\n this.w = w;\r\n }\r\n\r\n flipped()\r\n {\r\n return new Plane(this.normal.clone().negate(), -this.w);\r\n }\r\n\r\n getTag()\r\n {\r\n if (!this.tag)\r\n this.tag = getTag();\r\n return this.tag;\r\n }\r\n\r\n coplanarTo(plane: Plane)\r\n {\r\n return equalv3(this.normal, plane.normal, 1e-4) && equaln(this.w, plane.w, 1e-4);\r\n }\r\n\r\n transform(matrix4x4: Matrix4)\r\n {\r\n // get two vectors in the plane:\r\n let r = this.normal.randomNonParallelVector();\r\n let u = this.normal.clone().cross(r);\r\n let v = this.normal.clone().cross(u);\r\n // get 3 points in the plane:\r\n let point1 = this.normal.clone().multiplyScalar(this.w);\r\n let point2 = u.add(point1);\r\n let point3 = v.add(point1);\r\n // transform the points:\r\n point1.applyMatrix4(matrix4x4);\r\n point2.applyMatrix4(matrix4x4);\r\n point3.applyMatrix4(matrix4x4);\r\n // and create a new plane from the transformed points:\r\n let newplane = Plane.fromVector3Ds(point1, point2, point3);\r\n if (IsMirror(matrix4x4))\r\n {\r\n // the transform is mirroring\r\n // We should mirror the plane:\r\n newplane = newplane.flipped();\r\n }\r\n return newplane;\r\n }\r\n\r\n splitLineBetweenPoints(p1: Vertex3D, p2: Vertex3D): Vertex3D\r\n {\r\n let direction = p2.pos.clone().sub(p1.pos);\r\n let labda = (this.w - this.normal.dot(p1.pos)) / this.normal.dot(direction);\r\n if (isNaN(labda)) labda = 0;\r\n if (labda > 1) labda = 1;\r\n if (labda < 0) labda = 0;\r\n let pos = p1.pos.clone().add(direction.multiplyScalar(labda));\r\n let uv = p1.uv.clone().lerp(p2.uv, labda);\r\n return new Vertex3D(pos, uv);\r\n }\r\n\r\n static fromVector3Ds(a: Vector3D, b: Vector3D, c: Vector3D)\r\n {\r\n let n = b.clone()\r\n .sub(a)\r\n .cross(c.clone().sub(a))\r\n .normalize();\r\n return new Plane(n, n.dot(a));\r\n }\r\n}\r\n","import { _CSGDEBUG, EPS } from \"../constants\";\r\nimport { Plane } from \"./Plane\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { Matrix4 } from \"three\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\n\r\nexport enum Type\r\n{\r\n CoplanarFront = 0,\r\n CoplanarBack = 1,\r\n Front = 2,\r\n Back = 3,\r\n Spanning = 4,\r\n}\r\n\r\n\r\ninterface SplitPolygonData\r\n{\r\n type: Type;\r\n front: Polygon;\r\n back: Polygon;\r\n}\r\n\r\n/** Class Polygon\r\n * Represents a convex polygon. The vertices used to initialize a polygon must\r\n * be coplanar and form a convex loop. They do not have to be `Vertex`\r\n * instances but they must behave similarly (duck typing can be used for\r\n * customization).\r\n *
\r\n * Each convex polygon has a `shared` property, which is shared between all\r\n * polygons that are clones of each other or were split from the same polygon.\r\n * This can be used to define per-polygon properties (such as surface color).\r\n *
\r\n * The plane of the polygon is calculated from the vertex coordinates if not provided.\r\n * The plane can alternatively be passed as the third argument to avoid calculations.\r\n *\r\n *表示凸多边形。 用于初始化多边形的顶点必须共面并形成凸环。\r\n *多边形是彼此克隆或从同一多边形分割的多边形。\r\n *这可用于定义每个多边形属性(例如表面颜色)。\r\n */\r\nexport class Polygon\r\n{\r\n cachedBoundingSphere: [Vector3D, number];\r\n cachedBoundingBox: [Vector3D, Vector3D];\r\n constructor(public vertices: Vertex3D[], public plane?: Plane)\r\n {\r\n if (!plane)\r\n this.plane = Plane.fromVector3Ds(vertices[0].pos, vertices[1].pos, vertices[2].pos);\r\n\r\n if (_CSGDEBUG)\r\n if (!this.checkIfConvex()) throw new Error(\"Not convex!\");\r\n }\r\n\r\n /** Check whether the polygon is convex. (it should be, otherwise we will get unexpected results)*/\r\n checkIfConvex(): boolean\r\n {\r\n return Polygon.verticesConvex(this.vertices, this.plane.normal);\r\n }\r\n\r\n // returns an array with a Vector3D (center point) and a radius\r\n\r\n boundingSphere()\r\n {\r\n if (!this.cachedBoundingSphere)\r\n {\r\n let box = this.boundingBox();\r\n let middle = box[0].clone().add(box[1]).multiplyScalar(0.5);\r\n let radius3 = box[1].clone().sub(middle);\r\n let radius = radius3.length();\r\n this.cachedBoundingSphere = [middle, radius];\r\n }\r\n return this.cachedBoundingSphere;\r\n }\r\n\r\n // returns an array of two Vector3Ds (minimum coordinates and maximum coordinates)\r\n\r\n boundingBox(): Vector3D[]\r\n {\r\n if (!this.cachedBoundingBox)\r\n {\r\n let minpoint: Vector3D;\r\n let maxpoint: Vector3D;\r\n let vertices = this.vertices;\r\n let numvertices = vertices.length;\r\n if (numvertices === 0)\r\n minpoint = new Vector3D(0, 0, 0);\r\n else\r\n minpoint = vertices[0].pos.clone();\r\n maxpoint = minpoint.clone();\r\n for (let i = 1; i < numvertices; i++)\r\n {\r\n let point = vertices[i].pos;\r\n minpoint.min(point);\r\n maxpoint.max(point);\r\n }\r\n this.cachedBoundingBox = [minpoint, maxpoint];\r\n }\r\n return this.cachedBoundingBox;\r\n }\r\n\r\n flipped()\r\n {\r\n let newvertices = this.vertices.map(v => v.flipped());\r\n newvertices.reverse();\r\n let newplane = this.plane.flipped();\r\n return new Polygon(newvertices, newplane);\r\n }\r\n\r\n // Affine transformation of polygon. Returns a new Polygon\r\n transform(matrix4x4: Matrix4)\r\n {\r\n let newvertices = this.vertices.map(v => v.transform(matrix4x4));\r\n let newplane = this.plane.transform(matrix4x4);\r\n if (IsMirror(matrix4x4))\r\n {\r\n // need to reverse the vertex order\r\n // in order to preserve the inside/outside orientation:\r\n newvertices.reverse();\r\n }\r\n return new Polygon(newvertices, newplane);\r\n }\r\n\r\n splitByPlane(plane: Plane): SplitPolygonData\r\n {\r\n let result: SplitPolygonData = { type: null, front: null, back: null };\r\n // cache in local lets (speedup):\r\n let planeNormal = plane.normal;\r\n let vertices = this.vertices;\r\n let numVertices = vertices.length;\r\n if (this.plane.coplanarTo(plane))\r\n {\r\n result.type = Type.CoplanarFront;\r\n }\r\n else\r\n {\r\n let thisW = plane.w;\r\n let hasFront = false;\r\n let hasBack = false;\r\n let vertexIsBack: boolean[] = [];\r\n let MINEPS = -EPS;\r\n for (let i = 0; i < numVertices; i++)\r\n {\r\n let t = planeNormal.dot(vertices[i].pos) - thisW;\r\n let isBack = t < 0;\r\n vertexIsBack.push(isBack);\r\n if (t > EPS) hasFront = true;\r\n if (t < MINEPS) hasBack = true;\r\n }\r\n if (!hasFront && !hasBack)\r\n {\r\n // all points coplanar\r\n let t = planeNormal.dot(this.plane.normal);\r\n result.type = t >= 0 ? Type.CoplanarFront : Type.CoplanarBack;\r\n }\r\n else if (!hasBack)\r\n result.type = Type.Front;\r\n else if (!hasFront)\r\n result.type = Type.Back;\r\n else\r\n {\r\n result.type = Type.Spanning;\r\n let frontVertices: Vertex3D[] = [];\r\n let backVertices: Vertex3D[] = [];\r\n let isBack = vertexIsBack[0];\r\n for (\r\n let vertexIndex = 0;\r\n vertexIndex < numVertices;\r\n vertexIndex++\r\n )\r\n {\r\n let vertex = vertices[vertexIndex];\r\n let nextVertexindex = vertexIndex + 1;\r\n if (nextVertexindex >= numVertices) nextVertexindex = 0;\r\n let nextIsBack = vertexIsBack[nextVertexindex];\r\n if (isBack === nextIsBack)\r\n {\r\n // line segment is on one side of the plane:\r\n if (isBack)\r\n backVertices.push(vertex);\r\n else\r\n frontVertices.push(vertex);\r\n }\r\n else\r\n {\r\n let intersectionVertex = plane.splitLineBetweenPoints(vertex, vertices[nextVertexindex]);\r\n if (isBack)\r\n {\r\n backVertices.push(vertex);\r\n backVertices.push(intersectionVertex);\r\n frontVertices.push(intersectionVertex);\r\n }\r\n else\r\n {\r\n frontVertices.push(vertex);\r\n frontVertices.push(intersectionVertex);\r\n backVertices.push(intersectionVertex);\r\n }\r\n }\r\n isBack = nextIsBack;\r\n } // for vertexindex\r\n // remove duplicate vertices:\r\n let EPS_SQUARED = EPS * EPS;\r\n arrayRemoveDuplicateBySort(backVertices, (v1, v2) =>\r\n {\r\n return v1.pos.distanceToSquared(v2.pos) < EPS_SQUARED;\r\n });\r\n arrayRemoveDuplicateBySort(frontVertices, (v1, v2) =>\r\n {\r\n return v1.pos.distanceToSquared(v2.pos) < EPS_SQUARED;\r\n });\r\n if (frontVertices.length >= 3)\r\n result.front = new Polygon(frontVertices, this.plane);\r\n if (backVertices.length >= 3)\r\n result.back = new Polygon(backVertices, this.plane);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n static verticesConvex(vertices: Vertex3D[], planenormal: Vector3D)\r\n {\r\n let count = vertices.length;\r\n if (count < 3) return false;\r\n\r\n let prevPrevPos = vertices[count - 2].pos;\r\n let prevPos = vertices[count - 1].pos;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let pos = vertices[i].pos;\r\n if (!Polygon.isConvexPoint(prevPrevPos, prevPos, pos, planenormal))\r\n return false;\r\n\r\n prevPrevPos = prevPos;\r\n prevPos = pos;\r\n }\r\n return true;\r\n }\r\n\r\n // 计算3点是否凸角\r\n static isConvexPoint(prevpoint: Vector3D, point: Vector3D, nextpoint: Vector3D, normal: Vector3D)\r\n {\r\n let crossproduct = point.clone().sub(prevpoint).cross(nextpoint.clone().sub(point));\r\n let crossdotnormal = crossproduct.dot(normal);\r\n return crossdotnormal >= 0;\r\n }\r\n}\r\n","import { EPS, _CSGDEBUG } from \"./constants\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Polygon, Type } from \"./math/Polygon3\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\n\r\n// # class PolygonTreeNode\r\n// This class manages hierarchical splits of polygons\r\n// At the top is a root node which doesn hold a polygon, only child PolygonTreeNodes\r\n// Below that are zero or more 'top' nodes; each holds a polygon. The polygons can be in different planes\r\n// splitByPlane() splits a node by a plane. If the plane intersects the polygon, two new child nodes\r\n// are created holding the splitted polygon.\r\n// getPolygons() retrieves the polygon from the tree. If for PolygonTreeNode the polygon is split but\r\n// the two split parts (child nodes) are still intact, then the unsplit polygon is returned.\r\n// This ensures that we can safely split a polygon into many fragments. If the fragments are untouched,\r\n// getPolygons() will return the original unsplit polygon instead of the fragments.\r\n// remove() removes a polygon from the tree. Once a polygon is removed, the parent polygons are invalidated\r\n// since they are no longer intact.\r\n// constructor creates the root node:\r\n//此类管理多边形的层次分割\r\n//顶部是一个根节点,它不包含多边形,只有子PolygonTreeNodes\r\n//下面是零个或多个“顶部”节点; 每个都有一个多边形。 多边形可以位于不同的平面中\r\n// splitByPlane()按平面拆分节点。 如果平面与多边形相交,则会有两个新的子节点\r\n//创建持有分割多边形。\r\n// getPolygons()从树中检索多边形。 如果对于PolygonTreeNode,则多边形被拆分但是\r\n//两个分割部分(子节点)仍然完好无损,然后返回未分割的多边形。\r\n//这确保我们可以安全地将多边形拆分为多个片段。 如果碎片未受影响,\r\n// getPolygons()将返回原始的未分割多边形而不是片段。\r\n// remove()从树中删除多边形。 删除多边形后,父多边形将失效\r\n//因为它们不再完好无损\r\n//构造函数创建根节点:\r\nclass PolygonTreeNode\r\n{\r\n parent: PolygonTreeNode;\r\n children: PolygonTreeNode[] = [];\r\n polygon: Polygon;\r\n removed: boolean = false;\r\n constructor(polygon?: Polygon)\r\n {\r\n this.polygon = polygon;\r\n }\r\n\r\n // fill the tree with polygons. Should be called on the root node only; child nodes must\r\n // always be a derivate (split) of the parent node.\r\n addPolygons(polygons: Polygon[])\r\n {\r\n // new polygons can only be added to root node; children can only be splitted polygons\r\n if (!this.isRootNode())\r\n throw new Error(\"Assertion failed\");\r\n\r\n for (let polygon of polygons)\r\n this.addChild(polygon);\r\n }\r\n\r\n // remove a node\r\n // - the siblings become toplevel nodes\r\n // - the parent is removed recursively\r\n\r\n remove()\r\n {\r\n if (this.removed) return;\r\n\r\n this.removed = true;\r\n\r\n if (_CSGDEBUG)\r\n {\r\n if (this.isRootNode()) throw new Error(\"Assertion failed\"); // can't remove root node\r\n if (this.children.length) throw new Error(\"Assertion failed\"); // we shouldn't remove nodes with children\r\n }\r\n\r\n // remove ourselves from the parent's children list:\r\n let parentschildren = this.parent.children;\r\n let i = parentschildren.indexOf(this);\r\n if (i < 0) throw new Error(\"Assertion failed\");\r\n parentschildren.splice(i, 1);\r\n\r\n // invalidate the parent's polygon, and of all parents above it:\r\n this.parent.recursivelyInvalidatePolygon();\r\n }\r\n\r\n isRemoved()\r\n {\r\n return this.removed;\r\n }\r\n\r\n isRootNode()\r\n {\r\n return !this.parent;\r\n }\r\n\r\n // invert all polygons in the tree. Call on the root node\r\n\r\n invert()\r\n {\r\n if (!this.isRootNode()) throw new Error(\"Assertion failed\"); // can only call this on the root node\r\n this.invertSub();\r\n }\r\n\r\n getPolygon(): Polygon\r\n {\r\n if (!this.polygon) throw new Error(\"Assertion failed\"); // doesn't have a polygon, which means that it has been broken down\r\n return this.polygon;\r\n }\r\n\r\n getPolygons(outPolygons: Polygon[] = []): Polygon[]\r\n {\r\n let children: PolygonTreeNode[] = [this];\r\n let queue = [children];\r\n for (let i = 0; i < queue.length; ++i)\r\n {\r\n // queue size can change in loop, don't cache length\r\n children = queue[i];\r\n for (let node of children)\r\n {\r\n if (node.polygon)\r\n // the polygon hasn't been broken yet. We can ignore the children and return our polygon:\r\n outPolygons.push(node.polygon);\r\n else\r\n // our polygon has been split up and broken, so gather all subpolygons from the children\r\n queue.push(node.children);\r\n }\r\n }\r\n\r\n return outPolygons;\r\n }\r\n\r\n // split the node by a plane; add the resulting nodes to the frontnodes and backnodes array\r\n // If the plane doesn't intersect the polygon, the 'this' object is added to one of the arrays\r\n // If the plane does intersect the polygon, two new child nodes are created for the front and back fragments,\r\n // and added to both arrays.\r\n\r\n splitByPlane(\r\n plane: Plane,\r\n coplanarFrontNodes: PolygonTreeNode[],\r\n coplanarBackNodes: PolygonTreeNode[],\r\n frontNodes: PolygonTreeNode[],\r\n backNodes: PolygonTreeNode[]\r\n )\r\n {\r\n if (this.children.length)\r\n {\r\n let queue = [this.children];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n // queue.length can increase, do not cache\r\n let nodes = queue[i];\r\n for (let j = 0, l = nodes.length; j < l; j++)\r\n {\r\n // ok to cache length\r\n let node = nodes[j];\r\n if (node.children.length)\r\n queue.push(node.children);\r\n else\r\n {\r\n // no children. Split the polygon:\r\n node.splitByPlaneNotChildren(plane, coplanarFrontNodes, coplanarBackNodes, frontNodes, backNodes);\r\n }\r\n }\r\n }\r\n }\r\n else\r\n {\r\n this.splitByPlaneNotChildren(plane, coplanarFrontNodes, coplanarBackNodes, frontNodes, backNodes);\r\n }\r\n }\r\n\r\n // only to be called for nodes with no children\r\n // 仅用于没有子节点的节点\r\n private splitByPlaneNotChildren(\r\n plane: Plane,\r\n coplanarFrontNodes: PolygonTreeNode[],\r\n coplanarBackNodes: PolygonTreeNode[],\r\n frontNodes: PolygonTreeNode[],\r\n backNodes: PolygonTreeNode[]\r\n )\r\n {\r\n if (!this.polygon) return;\r\n\r\n let polygon = this.polygon;\r\n let bound = polygon.boundingSphere();\r\n let sphereradius = bound[1] + EPS; // FIXME Why add imprecision?\r\n let planenormal = plane.normal;\r\n let spherecenter = bound[0];\r\n let d = planenormal.dot(spherecenter) - plane.w;\r\n if (d > sphereradius)\r\n frontNodes.push(this);\r\n else if (d < -sphereradius)\r\n backNodes.push(this);\r\n else\r\n {\r\n let splitresult = polygon.splitByPlane(plane);\r\n switch (splitresult.type)\r\n {\r\n case Type.CoplanarFront:\r\n coplanarFrontNodes.push(this);\r\n break;\r\n\r\n case Type.CoplanarBack:\r\n coplanarBackNodes.push(this);\r\n break;\r\n\r\n case Type.Front:\r\n frontNodes.push(this);\r\n break;\r\n\r\n case Type.Back:\r\n backNodes.push(this);\r\n break;\r\n\r\n case Type.Spanning:\r\n if (splitresult.front)\r\n {\r\n let frontNode = this.addChild(splitresult.front);\r\n frontNodes.push(frontNode);\r\n }\r\n if (splitresult.back)\r\n {\r\n let backNode = this.addChild(splitresult.back);\r\n backNodes.push(backNode);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // add child to a node\r\n // this should be called whenever the polygon is split\r\n // a child should be created for every fragment of the split polygon\r\n // returns the newly created child\r\n addChild(polygon: Polygon): PolygonTreeNode\r\n {\r\n let newchild = new PolygonTreeNode(polygon);\r\n newchild.parent = this;\r\n this.children.push(newchild);\r\n return newchild;\r\n }\r\n\r\n invertSub()\r\n {\r\n let queue: PolygonTreeNode[][] = [[this]];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n let children = queue[i];\r\n for (let j = 0, l = children.length; j < l; j++)\r\n {\r\n let node = children[j];\r\n if (node.polygon)\r\n node.polygon = node.polygon.flipped();\r\n queue.push(node.children);\r\n }\r\n }\r\n }\r\n\r\n recursivelyInvalidatePolygon()\r\n {\r\n let node: PolygonTreeNode = this;\r\n while (node.polygon)\r\n {\r\n node.polygon = null;\r\n if (node.parent)\r\n node = node.parent;\r\n }\r\n }\r\n}\r\n\r\n// # class Tree\r\n// This is the root of a BSP tree\r\n// We are using this separate class for the root of the tree, to hold the PolygonTreeNode root\r\n// The actual tree is kept in this.rootnode\r\nexport class Tree\r\n{\r\n polygonTree = new PolygonTreeNode();\r\n rootNode = new Node(null);\r\n constructor(polygons: Polygon[])\r\n {\r\n this.addPolygons(polygons);\r\n }\r\n\r\n invert()\r\n {\r\n this.polygonTree.invert();\r\n this.rootNode.invert();\r\n }\r\n\r\n // Remove all polygons in this BSP tree that are inside the other BSP tree\r\n /**\r\n * this 减去 tree 删除此BSP树中位于其他BSP树内的所有多边形\r\n * @param tree 不会被修改\r\n * @param [alsoRemovecoplanarFront=false] 同时删除共面\r\n */\r\n clipTo(tree: Tree, alsoRemovecoplanarFront = false)\r\n {\r\n this.rootNode.clipTo(tree, alsoRemovecoplanarFront);\r\n }\r\n\r\n allPolygons()\r\n {\r\n return this.polygonTree.getPolygons();\r\n }\r\n\r\n addPolygons(polygons: Polygon[])\r\n {\r\n if (polygons.length > 1e4)\r\n return;\r\n let polygonTreeNodes = polygons.map((p) => this.polygonTree.addChild(p));\r\n this.rootNode.addPolygonTreeNodes(polygonTreeNodes);\r\n }\r\n}\r\n\r\n// # class Node\r\n// Holds a node in a BSP tree. A BSP tree is built from a collection of polygons\r\n// by picking a polygon to split along.\r\n// Polygons are not stored directly in the tree, but in PolygonTreeNodes, stored in\r\n// this.polygontreenodes. Those PolygonTreeNodes are children of the owning\r\n// Tree.polygonTree\r\n// This is not a leafy BSP tree since there is\r\n// no distinction between internal and leaf nodes.\r\nclass Node\r\n{\r\n plane: Plane;\r\n front: Node;\r\n back: Node;\r\n polygonTreeNodes: PolygonTreeNode[] = [];\r\n parent: Node;\r\n constructor(parent: Node)\r\n {\r\n this.parent = parent;\r\n }\r\n\r\n // Convert solid space to empty space and empty space to solid space.\r\n invert()\r\n {\r\n let queue: Node[] = [this];\r\n for (let i = 0; i < queue.length; i++)\r\n {\r\n let node = queue[i];\r\n if (node.plane) node.plane = node.plane.flipped();\r\n if (node.front) queue.push(node.front);\r\n if (node.back) queue.push(node.back);\r\n let temp = node.front;\r\n node.front = node.back;\r\n node.back = temp;\r\n }\r\n }\r\n\r\n // clip polygontreenodes to our plane\r\n // calls remove() for all clipped PolygonTreeNodes\r\n //将polygontreenodes剪辑到我们的飞机上\r\n //为所有剪切的PolygonTreeNodes调用remove()\r\n clipPolygons(polygonTreeNodes: PolygonTreeNode[], alsoRemoveCoplanarFront: boolean)\r\n {\r\n interface D\r\n {\r\n node: Node;\r\n polygonTreeNodes: PolygonTreeNode[];\r\n }\r\n\r\n let args: D = { node: this, polygonTreeNodes };\r\n let stack: D[] = [];\r\n\r\n do\r\n {\r\n let node = args.node;\r\n let polygonTreeNodes1 = args.polygonTreeNodes;\r\n\r\n // begin \"function\"\r\n if (node.plane)\r\n {\r\n let backnodes: PolygonTreeNode[] = [];\r\n let frontnodes: PolygonTreeNode[] = [];\r\n let coplanarfrontnodes = alsoRemoveCoplanarFront ? backnodes : frontnodes;\r\n let plane = node.plane;\r\n for (let node1 of polygonTreeNodes1)\r\n {\r\n if (!node1.isRemoved())\r\n node1.splitByPlane(plane, coplanarfrontnodes, backnodes, frontnodes, backnodes);\r\n }\r\n\r\n if (node.front && frontnodes.length > 0)\r\n stack.push({ node: node.front, polygonTreeNodes: frontnodes });\r\n\r\n let numbacknodes = backnodes.length;\r\n if (node.back && numbacknodes > 0)\r\n stack.push({ node: node.back, polygonTreeNodes: backnodes });\r\n else\r\n {\r\n // there's nothing behind this plane. Delete the nodes behind this plane:\r\n // 这架飞机背后什么也没有。 删除此平面后面的节点:\r\n for (let i = 0; i < numbacknodes; i++)\r\n backnodes[i].remove();\r\n }\r\n }\r\n args = stack.pop();\r\n }\r\n while (args);\r\n }\r\n\r\n // Remove all polygons in this BSP tree that are inside the other BSP tree\r\n // `tree`.\r\n clipTo(tree: Tree, alsoRemovecoplanarFront: boolean)\r\n {\r\n let node: Node = this;\r\n let stack: Node[] = [];\r\n do\r\n {\r\n if (node.polygonTreeNodes.length > 0)\r\n {\r\n tree.rootNode.clipPolygons(\r\n node.polygonTreeNodes,\r\n alsoRemovecoplanarFront\r\n );\r\n }\r\n if (node.front) stack.push(node.front);\r\n if (node.back) stack.push(node.back);\r\n node = stack.pop();\r\n }\r\n while (node);\r\n }\r\n\r\n addPolygonTreeNodes(polygonTreeNodes: PolygonTreeNode[])\r\n {\r\n interface D\r\n {\r\n node: Node;\r\n polygontreenodes: PolygonTreeNode[];\r\n }\r\n let args: D = { node: this, polygontreenodes: polygonTreeNodes };\r\n let stack: D[] = [];\r\n do\r\n {\r\n let node = args.node;\r\n polygonTreeNodes = args.polygontreenodes;\r\n\r\n if (polygonTreeNodes.length === 0)\r\n {\r\n args = stack.pop();\r\n continue;\r\n }\r\n if (!node.plane)\r\n {\r\n let bestplane = polygonTreeNodes[Math.floor(polygonTreeNodes.length / 2)].getPolygon().plane;\r\n node.plane = bestplane;\r\n }\r\n let frontNodes: PolygonTreeNode[] = [];\r\n let backNodes: PolygonTreeNode[] = [];\r\n\r\n for (let i = 0, n = polygonTreeNodes.length; i < n; ++i)\r\n {\r\n polygonTreeNodes[i].splitByPlane(\r\n node.plane,\r\n node.polygonTreeNodes,\r\n backNodes,\r\n frontNodes,\r\n backNodes\r\n );\r\n }\r\n\r\n if (frontNodes.length > 0)\r\n {\r\n if (!node.front) node.front = new Node(node);\r\n stack.push({ node: node.front, polygontreenodes: frontNodes });\r\n }\r\n if (backNodes.length > 0)\r\n {\r\n if (!node.back) node.back = new Node(node);\r\n stack.push({ node: node.back, polygontreenodes: backNodes });\r\n }\r\n\r\n args = stack.pop();\r\n }\r\n while (args);\r\n }\r\n\r\n getParentPlaneNormals(normals: Vector3D[], maxdepth: number)\r\n {\r\n if (maxdepth > 0)\r\n {\r\n if (this.parent)\r\n {\r\n normals.push(this.parent.plane.normal);\r\n this.parent.getParentPlaneNormals(normals, maxdepth - 1);\r\n }\r\n }\r\n }\r\n}\r\n","\r\n// //////////////////////////////\r\n// ## class fuzzyFactory\r\n// This class acts as a factory for objects. We can search for an object with approximately\r\n// the desired properties (say a rectangle with width 2 and height 1)\r\n// The lookupOrCreate() method looks for an existing object (for example it may find an existing rectangle\r\n// with width 2.0001 and height 0.999. If no object is found, the user supplied callback is\r\n// called, which should generate a new object. The new object is inserted into the database\r\n// so it can be found by future lookupOrCreate() calls.\r\n// Constructor:\r\n// numdimensions: the number of parameters for each object\r\n// for example for a 2D rectangle this would be 2\r\n// tolerance: The maximum difference for each parameter allowed to be considered a match\r\nexport class FuzzyFactory\r\n{\r\n lookuptable: {};\r\n multiplier: number;\r\n constructor(numdimensions: number, tolerance: number)\r\n {\r\n this.lookuptable = {};\r\n this.multiplier = 1.0 / tolerance;\r\n }\r\n\r\n // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */});\r\n // Performs a fuzzy lookup of the object with the specified elements.\r\n // If found, returns the existing object\r\n // If not found, calls the supplied callback function which should create a new object with\r\n // the specified properties. This object is inserted in the lookup database.\r\n lookupOrCreate(els: number[], object: T): T\r\n {\r\n let hash = \"\";\r\n let multiplier = this.multiplier;\r\n for (let el of els)\r\n {\r\n let valueQuantized = Math.round(el * multiplier);\r\n hash += valueQuantized + \"/\";\r\n }\r\n if (hash in this.lookuptable) return this.lookuptable[hash];\r\n else\r\n {\r\n let hashparts = els.map(el =>\r\n {\r\n let q0 = Math.floor(el * multiplier);\r\n let q1 = q0 + 1;\r\n return [\"\" + q0 + \"/\", \"\" + q1 + \"/\"];\r\n });\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n hash = \"\";\r\n hashparts.forEach(hashpart =>\r\n {\r\n hash += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this.lookuptable[hash] = object;\r\n }\r\n return object;\r\n }\r\n }\r\n}\r\n","import { FuzzyFactory } from \"./FuzzyFactory\";\r\nimport { EPS } from \"./constants\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\n\r\nexport class FuzzyCSGFactory\r\n{\r\n vertexfactory = new FuzzyFactory(3, EPS);\r\n planefactory = new FuzzyFactory(4, EPS);\r\n constructor() { }\r\n\r\n getVertex(sourcevertex: Vertex3D): Vertex3D\r\n {\r\n let elements = [sourcevertex.pos.x, sourcevertex.pos.y, sourcevertex.pos.z];\r\n let result = this.vertexfactory.lookupOrCreate(elements, sourcevertex);\r\n return result;\r\n }\r\n\r\n getPlane(sourceplane: Plane): Plane\r\n {\r\n let elements: number[] = [sourceplane.normal.x, sourceplane.normal.y, sourceplane.normal.z, sourceplane.w];\r\n let result = this.planefactory.lookupOrCreate(elements, sourceplane);\r\n return result;\r\n }\r\n\r\n getPolygon(sourcePolygon: Polygon, outputPolygon = sourcePolygon): Polygon\r\n {\r\n let newPlane = this.getPlane(sourcePolygon.plane);\r\n let newVertices = sourcePolygon.vertices.map(vertex => this.getVertex(vertex));\r\n // two vertices that were originally very close may now have become\r\n // truly identical (referring to the same Vertex object).\r\n // Remove duplicate vertices:\r\n let newVerticesDedup: Vertex3D[] = [];//新的顶点列表(已过滤重复)\r\n if (newVertices.length > 0)\r\n {\r\n let prevVertexTag = newVertices[newVertices.length - 1].getTag();\r\n for (let vertex of newVertices)\r\n {\r\n let vertextag = vertex.getTag();\r\n if (vertextag !== prevVertexTag)\r\n newVerticesDedup.push(vertex);\r\n prevVertexTag = vertextag;\r\n }\r\n }\r\n // If it's degenerate, remove all vertices:\r\n if (newVerticesDedup.length < 3)\r\n newVerticesDedup = [];\r\n\r\n outputPolygon.vertices = newVertices;\r\n outputPolygon.plane = newPlane;\r\n return outputPolygon;\r\n }\r\n}\r\n","import { FuzzyCSGFactory } from \"../FuzzyFactory3d\";\r\nimport { FuzzyCAGFactory } from \"../FuzzyFactory2d\";\r\nimport { CSG } from \"../CSG\";\r\nimport { CAG } from \"../CAG\";\r\nimport { EPS } from \"../constants\";\r\nimport { Polygon } from \"../math/Polygon3\";\r\n\r\n/**\r\n * Returns a cannoicalized version of the input csg : ie every very close\r\n * points get deduplicated\r\n * \r\n * 返回删除重复点的csg,重复点将被合并\r\n */\r\nexport function canonicalizeCSG(csg: CSG): CSG\r\n{\r\n const factory = new FuzzyCSGFactory();\r\n let result = CSGFromCSGFuzzyFactory(factory, csg);\r\n result.isCanonicalized = true;\r\n result.isRetesselated = csg.isRetesselated;\r\n return result;\r\n}\r\n\r\nexport function canonicalizeCAG(cag: CAG)\r\n{\r\n let factory = new FuzzyCAGFactory();\r\n let result = CAGFromCAGFuzzyFactory(factory, cag);\r\n result.isCanonicalized = true;\r\n return result;\r\n}\r\n\r\nexport function CSGFromCSGFuzzyFactory(factory: FuzzyCSGFactory, sourcecsg: CSG)\r\n{\r\n let newpolygons: Polygon[] = sourcecsg.polygons.filter(poly =>\r\n {\r\n return factory.getPolygon(poly).vertices.length >= 3;\r\n });\r\n return new CSG(newpolygons);\r\n}\r\n\r\nfunction CAGFromCAGFuzzyFactory(factory: FuzzyCAGFactory, sourcecag: CAG)\r\n{\r\n let newsides = sourcecag.sides\r\n .map(side => factory.getSide(side))\r\n // remove bad sides (mostly a user input issue)\r\n .filter((side) => side.length() > EPS);\r\n return new CAG(newsides);\r\n};\r\n","import { Vector3D } from \"../math/Vector3\";\r\nimport { CSG } from \"../CSG\";\r\n/**\r\n * Returns an array of Vector3D, providing minimum coordinates and maximum coordinates\r\n * of this solid.\r\n * @example\r\n * let bounds = A.getBounds()\r\n * let minX = bounds[0].x\r\n */\r\nexport function bounds(csg: CSG): Vector3D[]\r\n{\r\n if (!csg.cachedBoundingBox)\r\n {\r\n let minpoint: Vector3D;\r\n let maxpoint: Vector3D;\r\n let polygons = csg.polygons;\r\n let numpolygons = polygons.length;\r\n for (let i = 0; i < numpolygons; i++)\r\n {\r\n let polygon = polygons[i];\r\n let bounds = polygon.boundingBox();\r\n if (i === 0)\r\n {\r\n minpoint = bounds[0].clone();\r\n maxpoint = bounds[1].clone();\r\n }\r\n else\r\n {\r\n minpoint.min(bounds[0]);\r\n maxpoint.max(bounds[1]);\r\n }\r\n }\r\n // FIXME: not ideal, we are mutating the input, we need to move some of it out\r\n csg.cachedBoundingBox = [minpoint, maxpoint];\r\n }\r\n return csg.cachedBoundingBox;\r\n};\r\n","import { Vector2D } from \"./math/Vector2\";\r\n\r\nexport function fnNumberSort(a, b)\r\n{\r\n return a - b;\r\n}\r\n\r\nexport const solve2Linear = function (a: number, b: number, c: number, d: number, u: number, v: number)\r\n{\r\n let det = a * d - b * c;\r\n let invdet = 1.0 / det;\r\n let x = u * d - b * v;\r\n let y = -u * c + a * v;\r\n x *= invdet;\r\n y *= invdet;\r\n return [x, y];\r\n};\r\n\r\nexport function insertSorted(array: T[], element: T, comparefunc: (a: T, b: T) => number)\r\n{\r\n let leftbound = 0;\r\n let rightbound = array.length;\r\n while (rightbound > leftbound)\r\n {\r\n let testindex = Math.floor((leftbound + rightbound) / 2);\r\n let testelement = array[testindex];\r\n let compareresult = comparefunc(element, testelement);\r\n if (compareresult > 0)\r\n // element > testelement\r\n leftbound = testindex + 1;\r\n else\r\n rightbound = testindex;\r\n }\r\n array.splice(leftbound, 0, element);\r\n}\r\n\r\n// Get the x coordinate of a point with a certain y coordinate, interpolated between two\r\n// points (CSG.Vector2D).\r\n// Interpolation is robust even if the points have the same y coordinate\r\nexport function interpolateBetween2DPointsForY(point1: Vector2D, point2: Vector2D, y: number)\r\n{\r\n let f1 = y - point1.y;\r\n let f2 = point2.y - point1.y;\r\n if (f2 < 0)\r\n {\r\n f1 = -f1;\r\n f2 = -f2;\r\n }\r\n let t: number;\r\n if (f1 <= 0)\r\n t = 0.0;\r\n else if (f1 >= f2)\r\n t = 1.0;\r\n else if (f2 < 1e-10)\r\n // FIXME Should this be CSG.EPS?\r\n t = 0.5;\r\n else\r\n t = f1 / f2;\r\n let result = point1.x + t * (point2.x - point1.x);\r\n return result;\r\n}\r\n","import { Vector2D } from \"./Vector2\";\r\n\r\n/** class Line2D\r\n * Represents a directional line in 2D space\r\n * A line is parametrized by its normal vector (perpendicular to the line, rotated 90 degrees counter clockwise)\r\n * and w. The line passes through the point .times(w).\r\n * Equation: p is on line if normal.dot(p)==w\r\n */\r\nexport class Line2D\r\n{\r\n normal: Vector2D;\r\n w: number;\r\n constructor(normal: Vector2D, w: number)\r\n {\r\n this.normal = normal.clone();\r\n let l = this.normal.length();\r\n w *= l;\r\n this.normal.normalize();\r\n this.w = w;\r\n }\r\n\r\n direction()\r\n {\r\n return this.normal;\r\n }\r\n static fromPoints(p1: Vector2D, p2: Vector2D)\r\n {\r\n let direction = p2.clone().sub(p1);\r\n let normal = direction\r\n .normal()\r\n .negate()\r\n .normalize();\r\n let w = p1.dot(normal);\r\n return new Line2D(normal, w);\r\n }\r\n}\r\n","import { Plane } from \"./Plane\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vector3D } from \"./Vector3\";\r\n\r\n/** class OrthoNormalBasis\r\n * Reprojects points on a 3D plane onto a 2D plane\r\n * or from a 2D plane back onto the 3D plane\r\n */\r\n\r\nexport class OrthoNormalBasis\r\n{\r\n v: Vector3D;\r\n u: Vector3D;\r\n planeorigin: Vector3D;\r\n constructor(public plane: Plane, rightVector: Vector3D = plane.normal.randomNonParallelVector())\r\n {\r\n this.v = plane.normal.clone().cross(rightVector).normalize();\r\n this.u = this.v.clone().cross(plane.normal);\r\n this.plane = plane;\r\n this.planeorigin = plane.normal.clone().multiplyScalar(plane.w);\r\n }\r\n to2D(vec3: Vector3D)\r\n {\r\n return new Vector2D(vec3.dot(this.u), vec3.dot(this.v));\r\n }\r\n\r\n to3D(vec2: Vector2D)\r\n {\r\n return this.planeorigin.clone()\r\n .add(this.u.clone().multiplyScalar(vec2.x))\r\n .add(this.v.clone().multiplyScalar(vec2.y));\r\n }\r\n}\r\n","import { EPS } from \"../constants\";\r\nimport { fnNumberSort, insertSorted, interpolateBetween2DPointsForY } from \"../utils\";\r\nimport { Line2D } from \"./Line2\";\r\nimport { OrthoNormalBasis } from \"./OrthoNormalBasis\";\r\nimport { Polygon } from \"./Polygon3\";\r\nimport { Vector2D } from \"./Vector2\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\n\r\n//在这个文件中 Top 表示的是 y最小.\r\n// Bottom 表示的是 y最大\r\n\r\ninterface ActivePolygon\r\n{\r\n polygonindex: number;\r\n leftvertexindex: number;\r\n rightvertexindex: number;\r\n\r\n topleft: Vector2D;\r\n bottomleft: Vector2D;\r\n\r\n topright: Vector2D;\r\n bottomright: Vector2D;\r\n}\r\n\r\ninterface OutPolygon\r\n{\r\n topleft: Vector2D;\r\n topright: Vector2D;\r\n bottomleft: Vector2D;\r\n bottomright: Vector2D;\r\n leftline: Line2D;\r\n rightline: Line2D;\r\n outpolygon?: { leftpoints: Vector2D[]; rightpoints: Vector2D[]; };\r\n leftlinecontinues?: boolean;\r\n rightlinecontinues?: boolean;\r\n}\r\n\r\n//一组共面多边形的Retesselation函数。 请参阅此文件顶部的介绍。\r\nexport function reTesselateCoplanarPolygons(sourcePolygons: Polygon[], destpolygons: Polygon[] = []): void\r\n{\r\n let numPolygons = sourcePolygons.length;\r\n if (numPolygons < 2)\r\n {\r\n destpolygons.push(...sourcePolygons);\r\n return;\r\n }\r\n\r\n let plane = sourcePolygons[0].plane;\r\n let orthobasis = new OrthoNormalBasis(plane);\r\n\r\n // let xcoordinatebins = {}\r\n let yCoordinateBins: { [key: number]: number; } = {}; //整数map\r\n let yCoordinateBinningFactor = (1.0 / EPS) * 10;\r\n\r\n let polygonVertices2d: (Vector2D[])[] = []; // (Vector2[])[];\r\n let polygonTopVertexIndexes: number[] = []; // 每个多边形最顶层顶点的索引数组 minIndex\r\n let topY2PolygonIndexes: { [key: number]: number[]; } = {}; // Map\r\n let yCoordinateToPolygonIndexes: { [key: string]: { [key: number]: boolean; }; } = {}; // Map > Y坐标映射所有的多边形\r\n\r\n //将多边形转换为2d点表 polygonVertices2d\r\n //建立y对应的多边形Map yCoordinateToPolygonIndexes\r\n for (let polygonIndex = 0; polygonIndex < numPolygons; polygonIndex++)\r\n {\r\n let poly3d = sourcePolygons[polygonIndex];\r\n let numVertices = poly3d.vertices.length;\r\n\r\n if (numVertices === 0) continue;\r\n\r\n let vertices2d: Vector2D[] = []; //Vector2d[];\r\n let minIndex = -1;\r\n let miny: number, maxy: number;\r\n for (let i = 0; i < numVertices; i++)\r\n {\r\n let pos2d = orthobasis.to2D(poly3d.vertices[i].pos);\r\n // perform binning of y coordinates: If we have multiple vertices very\r\n // close to each other, give them the same y coordinate:\r\n let yCoordinatebin = Math.floor(pos2d.y * yCoordinateBinningFactor);\r\n let newy: number;\r\n if (yCoordinatebin in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin];\r\n else if (yCoordinatebin + 1 in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin + 1];\r\n else if (yCoordinatebin - 1 in yCoordinateBins)\r\n newy = yCoordinateBins[yCoordinatebin - 1];\r\n else\r\n {\r\n newy = pos2d.y;\r\n yCoordinateBins[yCoordinatebin] = pos2d.y;\r\n }\r\n pos2d = new Vector2D(pos2d.x, newy);\r\n vertices2d.push(pos2d);\r\n if (i === 0 || newy < miny)\r\n {\r\n miny = newy;\r\n minIndex = i;\r\n }\r\n if (i === 0 || newy > maxy) maxy = newy;\r\n\r\n if (!(newy in yCoordinateToPolygonIndexes))\r\n yCoordinateToPolygonIndexes[newy] = {};\r\n\r\n yCoordinateToPolygonIndexes[newy][polygonIndex] = true;\r\n }\r\n\r\n //退化多边形,所有顶点都具有相同的y坐标。 从现在开始忽略它:\r\n if (miny >= maxy) continue;\r\n\r\n if (!(miny in topY2PolygonIndexes)) topY2PolygonIndexes[miny] = [];\r\n\r\n topY2PolygonIndexes[miny].push(polygonIndex);\r\n\r\n // reverse the vertex order:\r\n vertices2d.reverse();\r\n minIndex = numVertices - minIndex - 1;\r\n polygonVertices2d.push(vertices2d);\r\n polygonTopVertexIndexes.push(minIndex);\r\n }\r\n\r\n //所有的y坐标,从小到大排序\r\n let yCoordinates: string[] = [];\r\n for (let ycoordinate in yCoordinateToPolygonIndexes)\r\n yCoordinates.push(ycoordinate);\r\n yCoordinates.sort(fnNumberSort);\r\n\r\n //迭代y坐标 从低到高\r\n\r\n // activepolygons :'active'的源多边形,即与y坐标相交\r\n // 多边形是从左往右排序的\r\n // activepolygons 中的每个元素都具有以下属性:\r\n // polygonindex 源多边形的索引(即sourcepolygons的索引 和polygonvertices2d数组)\r\n // leftvertexindex 左边 在当前y坐标处或刚好在当前y坐标之上\r\n // rightvertexindex 右边\r\n // topleft bottomleft 与当前y坐标交叉的多边形左侧的坐标\r\n // topright bottomright 与当前y坐标交叉的多边形右侧的坐标\r\n\r\n let activePolygons: ActivePolygon[] = [];\r\n let prevOutPolygonRow: OutPolygon[] = []; //上一个输出多边形行?\r\n for (let yindex = 0; yindex < yCoordinates.length; yindex++)\r\n {\r\n let yCoordinateStr = yCoordinates[yindex];\r\n let yCoordinate = Number(yCoordinateStr);\r\n\r\n // 用当前的y 更新 activePolygons\r\n // - 删除以y坐标结尾的所有多边形 删除polygon maxy = y 的多边形\r\n // - 更新 leftvertexindex 和 rightvertexindex (指向当前顶点索引)\r\n // 在多边形的左侧和右侧\r\n\r\n // 迭代在Y坐标处有一个角的所有多边形\r\n let polygonIndexeSwithCorner = yCoordinateToPolygonIndexes[yCoordinateStr];\r\n for (\r\n let activePolygonIndex = 0;\r\n activePolygonIndex < activePolygons.length;\r\n activePolygonIndex++\r\n )\r\n {\r\n let activepolygon = activePolygons[activePolygonIndex];\r\n let polygonindex = activepolygon.polygonindex;\r\n\r\n if (!polygonIndexeSwithCorner[polygonindex])//如果不在角内\r\n continue;\r\n\r\n //多边形在此y坐标处有一个角\r\n let vertices2d = polygonVertices2d[polygonindex];\r\n let numvertices = vertices2d.length;\r\n let newleftvertexindex = activepolygon.leftvertexindex;\r\n let newrightvertexindex = activepolygon.rightvertexindex;\r\n\r\n //看看我们是否需要增加 leftvertexindex 或减少 rightvertexindex :\r\n while (true)\r\n {\r\n let nextleftvertexindex = newleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n if (vertices2d[nextleftvertexindex].y !== yCoordinate) break;\r\n newleftvertexindex = nextleftvertexindex;\r\n }\r\n //减少 rightvertexindex\r\n let nextrightvertexindex = newrightvertexindex - 1;\r\n if (nextrightvertexindex < 0)\r\n nextrightvertexindex = numvertices - 1;\r\n if (vertices2d[nextrightvertexindex].y === yCoordinate)\r\n newrightvertexindex = nextrightvertexindex;\r\n\r\n if (\r\n newleftvertexindex !== activepolygon.leftvertexindex //有向上更新\r\n && newleftvertexindex === newrightvertexindex //指向同一个点\r\n )\r\n {\r\n\r\n // We have increased leftvertexindex or decreased rightvertexindex, and now they point to the same vertex\r\n // This means that this is the bottom point of the polygon. We'll remove it:\r\n //我们增加了leftvertexindex或减少了rightvertexindex,现在它们指向同一个顶点\r\n //这意味着这是多边形的底点。 我们将删除它:\r\n activePolygons.splice(activePolygonIndex, 1);\r\n --activePolygonIndex;\r\n } else\r\n {\r\n activepolygon.leftvertexindex = newleftvertexindex;\r\n activepolygon.rightvertexindex = newrightvertexindex;\r\n activepolygon.topleft = vertices2d[newleftvertexindex];\r\n activepolygon.topright = vertices2d[newrightvertexindex];\r\n let nextleftvertexindex = newleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n activepolygon.bottomleft = vertices2d[nextleftvertexindex];\r\n let nextrightvertexindex = newrightvertexindex - 1;\r\n if (nextrightvertexindex < 0) nextrightvertexindex = numvertices - 1;\r\n activepolygon.bottomright = vertices2d[nextrightvertexindex];\r\n }\r\n }\r\n\r\n let nextYCoordinate: number; // number y\r\n if (yindex >= yCoordinates.length - 1)\r\n {\r\n // last row, all polygons must be finished here:\r\n // 最后一行,所有多边形必须在这里完成:\r\n activePolygons = [];\r\n }\r\n else // yindex < ycoordinates.length-1\r\n {\r\n nextYCoordinate = Number(yCoordinates[yindex + 1]);\r\n let middleYCoordinate = 0.5 * (yCoordinate + nextYCoordinate);\r\n // update activepolygons by adding any polygons that start here:\r\n // 添加从这里开始的多边形 到 activePolygons\r\n let startingPolygonIndexes = topY2PolygonIndexes[yCoordinateStr];\r\n for (let polygonindex_key in startingPolygonIndexes)\r\n {\r\n let polygonindex = startingPolygonIndexes[polygonindex_key];\r\n let vertices2d = polygonVertices2d[polygonindex];\r\n let numvertices = vertices2d.length;\r\n let topVertexIndex = polygonTopVertexIndexes[polygonindex];\r\n // the top of the polygon may be a horizontal line. In that case topvertexindex can point to any point on this line.\r\n // Find the left and right topmost vertices which have the current y coordinate:\r\n // 顶部可以是一条直线,寻找最左边的点和最右边的点\r\n let topleftvertexindex = topVertexIndex;\r\n while (true)\r\n {\r\n let i = topleftvertexindex + 1;\r\n if (i >= numvertices) i = 0;\r\n if (vertices2d[i].y !== yCoordinate) break;\r\n if (i === topVertexIndex) break; // should not happen, but just to prevent endless loops\r\n topleftvertexindex = i;\r\n }\r\n let toprightvertexindex = topVertexIndex;\r\n while (true)\r\n {\r\n let i = toprightvertexindex - 1;\r\n if (i < 0) i = numvertices - 1;\r\n if (vertices2d[i].y !== yCoordinate) break;\r\n if (i === topleftvertexindex) break; // should not happen, but just to prevent endless loops\r\n toprightvertexindex = i;\r\n }\r\n\r\n let nextleftvertexindex = topleftvertexindex + 1;\r\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0;\r\n let nextrightvertexindex = toprightvertexindex - 1;\r\n if (nextrightvertexindex < 0) nextrightvertexindex = numvertices - 1;\r\n let newactivepolygon: ActivePolygon = {\r\n polygonindex: polygonindex,\r\n leftvertexindex: topleftvertexindex,\r\n rightvertexindex: toprightvertexindex,\r\n topleft: vertices2d[topleftvertexindex],\r\n topright: vertices2d[toprightvertexindex],\r\n bottomleft: vertices2d[nextleftvertexindex],\r\n bottomright: vertices2d[nextrightvertexindex]\r\n };\r\n\r\n //二分插入\r\n insertSorted(activePolygons, newactivepolygon, function (el1: ActivePolygon, el2: ActivePolygon)\r\n {\r\n let x1 = interpolateBetween2DPointsForY(\r\n el1.topleft,\r\n el1.bottomleft,\r\n middleYCoordinate\r\n );\r\n let x2 = interpolateBetween2DPointsForY(\r\n el2.topleft,\r\n el2.bottomleft,\r\n middleYCoordinate\r\n );\r\n if (x1 > x2) return 1;\r\n if (x1 < x2) return -1;\r\n return 0;\r\n });\r\n }\r\n }\r\n\r\n //#region\r\n // if( (yindex === ycoordinates.length-1) || (nextycoordinate - ycoordinate > EPS) )\r\n // if(true)\r\n // {\r\n\r\n let newOutPolygonRow: OutPolygon[] = []; //输出多边形\r\n\r\n // Build the output polygons for the next row in newOutPolygonRow:\r\n //现在 activepolygons 是最新的\r\n //为 newOutPolygonRow 中的下一行构建输出多边形:\r\n for (let activepolygonKey in activePolygons)\r\n {\r\n let activepolygon = activePolygons[activepolygonKey];\r\n\r\n let x = interpolateBetween2DPointsForY(\r\n activepolygon.topleft,\r\n activepolygon.bottomleft,\r\n yCoordinate\r\n );\r\n let topleft = new Vector2D(x, yCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topright,\r\n activepolygon.bottomright,\r\n yCoordinate\r\n );\r\n let topright = new Vector2D(x, yCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topleft,\r\n activepolygon.bottomleft,\r\n nextYCoordinate\r\n );\r\n let bottomleft = new Vector2D(x, nextYCoordinate);\r\n x = interpolateBetween2DPointsForY(\r\n activepolygon.topright,\r\n activepolygon.bottomright,\r\n nextYCoordinate\r\n );\r\n let bottomright = new Vector2D(x, nextYCoordinate);\r\n let outPolygon = {\r\n topleft: topleft,\r\n topright: topright,\r\n bottomleft: bottomleft,\r\n bottomright: bottomright,\r\n leftline: Line2D.fromPoints(topleft, bottomleft),\r\n rightline: Line2D.fromPoints(bottomright, topright)\r\n };\r\n\r\n if (newOutPolygonRow.length > 0)\r\n {\r\n let prevoutpolygon =\r\n newOutPolygonRow[newOutPolygonRow.length - 1];\r\n let d1 = outPolygon.topleft.distanceTo(prevoutpolygon.topright);\r\n let d2 = outPolygon.bottomleft.distanceTo(\r\n prevoutpolygon.bottomright\r\n );\r\n if (d1 < EPS && d2 < EPS)\r\n {\r\n // we can join this polygon with the one to the left:\r\n outPolygon.topleft = prevoutpolygon.topleft;\r\n outPolygon.leftline = prevoutpolygon.leftline;\r\n outPolygon.bottomleft = prevoutpolygon.bottomleft;\r\n newOutPolygonRow.splice(newOutPolygonRow.length - 1, 1);\r\n }\r\n }\r\n\r\n newOutPolygonRow.push(outPolygon);\r\n }\r\n\r\n if (yindex > 0)\r\n {\r\n // try to match the new polygons against the previous row:\r\n //尝试将新多边形与上一行匹配:\r\n let prevContinuedIndexes: { [key: number]: boolean; } = {};\r\n let matchedIndexes: { [key: number]: boolean; } = {};\r\n for (let i = 0; i < newOutPolygonRow.length; i++)\r\n {\r\n let thispolygon = newOutPolygonRow[i];\r\n for (let ii = 0; ii < prevOutPolygonRow.length; ii++)\r\n {\r\n if (!matchedIndexes[ii])\r\n {\r\n // not already processed?\r\n // We have a match if the sidelines are equal or if the top coordinates\r\n // are on the sidelines of the previous polygon\r\n let prevpolygon = prevOutPolygonRow[ii];\r\n if (prevpolygon.bottomleft.distanceTo(thispolygon.topleft) < EPS)\r\n {\r\n if (prevpolygon.bottomright.distanceTo(thispolygon.topright) < EPS)\r\n {\r\n // Yes, the top of this polygon matches the bottom of the previous:\r\n matchedIndexes[ii] = true;\r\n // Now check if the joined polygon would remain convex:\r\n let d1 = thispolygon.leftline.direction().x - prevpolygon.leftline.direction().x;\r\n let d2 = thispolygon.rightline.direction().x - prevpolygon.rightline.direction().x;\r\n let leftlinecontinues = Math.abs(d1) < EPS;\r\n let rightlinecontinues = Math.abs(d2) < EPS;\r\n let leftlineisconvex = leftlinecontinues || d1 >= 0;\r\n let rightlineisconvex = rightlinecontinues || d2 >= 0;\r\n if (leftlineisconvex && rightlineisconvex)\r\n {\r\n // yes, both sides have convex corners:\r\n // This polygon will continue the previous polygon\r\n thispolygon.outpolygon = prevpolygon.outpolygon;\r\n thispolygon.leftlinecontinues = leftlinecontinues;\r\n thispolygon.rightlinecontinues = rightlinecontinues;\r\n prevContinuedIndexes[ii] = true;\r\n }\r\n break;\r\n }\r\n }\r\n } // if(!prevcontinuedindexes[ii])\r\n } // for ii\r\n } // for i\r\n for (let ii = 0; ii < prevOutPolygonRow.length; ii++)\r\n {\r\n if (!prevContinuedIndexes[ii])\r\n {\r\n // polygon ends here\r\n // Finish the polygon with the last point(s):\r\n let prevpolygon = prevOutPolygonRow[ii];\r\n prevpolygon.outpolygon.rightpoints.push(prevpolygon.bottomright);\r\n if (prevpolygon.bottomright.distanceTo(prevpolygon.bottomleft) > EPS)\r\n {\r\n // polygon ends with a horizontal line:\r\n prevpolygon.outpolygon.leftpoints.push(prevpolygon.bottomleft);\r\n }\r\n // reverse the left half so we get a counterclockwise circle:\r\n prevpolygon.outpolygon.leftpoints.reverse();\r\n let points2d = prevpolygon.outpolygon.rightpoints.concat(prevpolygon.outpolygon.leftpoints);\r\n\r\n let vertices = points2d.map(v => new Vertex3D(orthobasis.to3D(v)));\r\n let polygon = new Polygon(vertices, plane);\r\n destpolygons.push(polygon);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < newOutPolygonRow.length; i++)\r\n {\r\n let thispolygon = newOutPolygonRow[i];\r\n if (!thispolygon.outpolygon)\r\n {\r\n // polygon starts here:\r\n thispolygon.outpolygon = {\r\n leftpoints: [],\r\n rightpoints: []\r\n };\r\n thispolygon.outpolygon.leftpoints.push(thispolygon.topleft);\r\n if (thispolygon.topleft.distanceTo(thispolygon.topright) > EPS)\r\n {\r\n // we have a horizontal line at the top:\r\n thispolygon.outpolygon.rightpoints.push(thispolygon.topright);\r\n }\r\n }\r\n else\r\n {\r\n // continuation of a previous row\r\n if (!thispolygon.leftlinecontinues)\r\n {\r\n thispolygon.outpolygon.leftpoints.push(thispolygon.topleft);\r\n }\r\n if (!thispolygon.rightlinecontinues)\r\n {\r\n thispolygon.outpolygon.rightpoints.push(thispolygon.topright);\r\n }\r\n }\r\n }\r\n\r\n prevOutPolygonRow = newOutPolygonRow;\r\n // }\r\n //#endregion\r\n } // for yindex\r\n}\r\n","import { CSG } from \"../CSG\";\r\nimport { FuzzyCSGFactory } from \"../FuzzyFactory3d\";\r\nimport { Polygon } from \"../math/Polygon3\";\r\nimport { reTesselateCoplanarPolygons } from \"../math/reTesselateCoplanarPolygons\";\r\n\r\nexport function reTesselate(csg: CSG): CSG\r\n{\r\n if (csg.isRetesselated) return csg;\r\n\r\n let polygonsPerPlane: { [key: number]: Polygon[]; } = {};\r\n let isCanonicalized = csg.isCanonicalized;\r\n let fuzzyfactory = new FuzzyCSGFactory();\r\n\r\n for (let polygon of csg.polygons)\r\n {\r\n let plane = polygon.plane;\r\n if (!isCanonicalized)\r\n {\r\n // in order to identify polygons having the same plane, we need to canonicalize the planes\r\n // We don't have to do a full canonizalization (including vertices), to save time only do the planes and the shared data:\r\n plane = fuzzyfactory.getPlane(plane);\r\n }\r\n let tag = plane.getTag();\r\n if (!(tag in polygonsPerPlane)) polygonsPerPlane[tag] = [polygon];\r\n else polygonsPerPlane[tag].push(polygon);\r\n }\r\n\r\n let destpolygons: Polygon[] = [];\r\n for (let planetag in polygonsPerPlane)\r\n {\r\n let sourcepolygons = polygonsPerPlane[planetag];\r\n reTesselateCoplanarPolygons(sourcepolygons, destpolygons);\r\n }\r\n let resultCSG = new CSG(destpolygons);\r\n resultCSG.isRetesselated = true;\r\n return resultCSG;\r\n};\r\n","import { Matrix4 } from \"three\";\r\nimport { IsMirror } from \"./math/IsMirrot\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\nimport { Tree } from \"./trees\";\r\nimport { canonicalizeCSG } from \"./utils/canonicalize\";\r\nimport { bounds } from \"./utils/csgMeasurements\";\r\nimport { reTesselate } from \"./utils/retesellate\";\r\n\r\n/** Class CSG\r\n * Holds a binary space partition tree representing a 3D solid. Two solids can\r\n * be combined using the `union()`, `subtract()`, and `intersect()` methods.\r\n * @constructor\r\n */\r\nexport class CSG\r\n{\r\n /** # 是否已精简重复点 */\r\n isCanonicalized: boolean = false;\r\n /** # 是否已合并轮廓 */\r\n isRetesselated: boolean = false;\r\n cachedBoundingBox: Vector3D[];\r\n constructor(public polygons: Polygon[] = [])\r\n {\r\n }\r\n /**\r\n * Return a new CSG solid representing the space in either this solid or\r\n * in the given solids. Neither this solid nor the given solids are modified.\r\n * @param {CSG[]} csg - list of CSG objects\r\n * @returns {CSG} new CSG object\r\n * @example\r\n * let C = A.union(B)\r\n * @example\r\n * +-------+ +-------+\r\n * | | | |\r\n * | A | | |\r\n * | +--+----+ = | +----+\r\n * +----+--+ | +----+ |\r\n * | B | | |\r\n * | | | |\r\n * +-------+ +-------+\r\n */\r\n union(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n {\r\n csgs = csg.slice(0);\r\n csgs.push(this);\r\n }\r\n else csgs = [this, csg];\r\n\r\n let i: number;\r\n // combine csg pairs in a way that forms a balanced binary tree pattern\r\n for (i = 1; i < csgs.length; i += 2)\r\n {\r\n csgs.push(csgs[i - 1].unionSub(csgs[i]));\r\n }\r\n return csgs[i - 1].reTesselated().canonicalized();\r\n }\r\n\r\n unionSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n if (!this.mayOverlap(csg))\r\n return this.unionForNonIntersecting(csg);\r\n\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.clipTo(b);\r\n\r\n // b.clipTo(a, true); // ERROR: this doesn't work\r\n b.clipTo(a);\r\n b.invert();\r\n b.clipTo(a);\r\n b.invert();\r\n\r\n let newpolygons = [...a.allPolygons(), ...b.allPolygons()];\r\n let resultCSG = new CSG(newpolygons);\r\n if (retesselate) resultCSG = resultCSG.reTesselated();\r\n if (canonicalize) resultCSG = resultCSG.canonicalized();\r\n return resultCSG;\r\n }\r\n\r\n // Like union, but when we know that the two solids are not intersecting\r\n // Do not use if you are not completely sure that the solids do not intersect!\r\n unionForNonIntersecting(csg: CSG): CSG\r\n {\r\n let newpolygons = [...this.polygons, ...csg.polygons];\r\n let result = new CSG(newpolygons);\r\n result.isCanonicalized = this.isCanonicalized && csg.isCanonicalized;\r\n result.isRetesselated = this.isRetesselated && csg.isRetesselated;\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid representing space in this solid but\r\n * not in the given solids. Neither this solid nor the given solids are modified.\r\n * @returns new CSG object\r\n * @example\r\n * let C = A.subtract(B)\r\n * @example\r\n * +-------+ +-------+\r\n * | | | |\r\n * | A | | |\r\n * | +--+----+ = | +--+\r\n * +----+--+ | +----+\r\n * | B |\r\n * | |\r\n * +-------+\r\n */\r\n subtract(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n csgs = csg;\r\n else\r\n csgs = [csg];\r\n let result: CSG = this;\r\n for (let i = 0; i < csgs.length; i++)\r\n {\r\n let islast = i === csgs.length - 1;\r\n result = result.subtractSub(csgs[i], islast, islast);\r\n }\r\n return result;\r\n }\r\n\r\n subtractSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.invert();\r\n a.clipTo(b);\r\n b.clipTo(a, true);\r\n a.addPolygons(b.allPolygons());\r\n a.invert();\r\n let result = new CSG(a.allPolygons());\r\n // if (retesselate) result = result.reTesselated();\r\n // if (canonicalize) result = result.canonicalized();\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid representing space in both this solid and\r\n * in the given solids. Neither this solid nor the given solids are modified.\r\n * let C = A.intersect(B)\r\n * @returns new CSG object\r\n * @example\r\n * +-------+\r\n * | |\r\n * | A |\r\n * | +--+----+ = +--+\r\n * +----+--+ | +--+\r\n * | B |\r\n * | |\r\n * +-------+\r\n */\r\n intersect(csg: CSG | CSG[]): CSG\r\n {\r\n let csgs: CSG[];\r\n if (csg instanceof Array)\r\n csgs = csg;\r\n else\r\n csgs = [csg];\r\n let result: CSG = this;\r\n for (let i = 0; i < csgs.length; i++)\r\n {\r\n let islast = i === csgs.length - 1;\r\n result = result.intersectSub(csgs[i], islast, islast);\r\n }\r\n return result;\r\n }\r\n\r\n intersectSub(csg: CSG, retesselate = false, canonicalize = false): CSG\r\n {\r\n let a = new Tree(this.polygons);\r\n let b = new Tree(csg.polygons);\r\n a.invert();\r\n b.clipTo(a);\r\n b.invert();\r\n a.clipTo(b);\r\n b.clipTo(a);\r\n a.addPolygons(b.allPolygons());\r\n a.invert();\r\n let result = new CSG(a.allPolygons());\r\n // if (retesselate) result = result.reTesselated();\r\n // if (canonicalize) result = result.canonicalized();\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid with solid and empty space switched.\r\n * This solid is not modified.\r\n */\r\n invert(): CSG\r\n {\r\n let flippedpolygons = this.polygons.map(p => p.flipped());\r\n return new CSG(flippedpolygons);\r\n }\r\n\r\n // Affine transformation of CSG object. Returns a new CSG object\r\n transform1(matrix4x4: Matrix4)\r\n {\r\n let newpolygons = this.polygons.map(p =>\r\n {\r\n return p.transform(matrix4x4);\r\n });\r\n let result = new CSG(newpolygons);\r\n result.isCanonicalized = this.isCanonicalized;\r\n result.isRetesselated = this.isRetesselated;\r\n return result;\r\n }\r\n\r\n /**\r\n * Return a new CSG solid that is transformed using the given Matrix.\r\n * Several matrix transformations can be combined before transforming this solid.\r\n * @param {CSG.Matrix4x4} matrix4x4 - matrix to be applied\r\n * @returns {CSG} new CSG object\r\n * @example\r\n * var m = new CSG.Matrix4x4()\r\n * m = m.multiply(CSG.Matrix4x4.rotationX(40))\r\n * m = m.multiply(CSG.Matrix4x4.translation([-.5, 0, 0]))\r\n * let B = A.transform(m)\r\n */\r\n transform(matrix4x4: Matrix4): this\r\n {\r\n let ismirror = IsMirror(matrix4x4);\r\n let transformedvertices = {};\r\n let transformedplanes = {};\r\n let newpolygons = this.polygons.map(p =>\r\n {\r\n let newplane: Plane;\r\n let plane = p.plane;\r\n let planetag = plane.getTag();\r\n if (planetag in transformedplanes)\r\n {\r\n newplane = transformedplanes[planetag];\r\n } else\r\n {\r\n newplane = plane.transform(matrix4x4);\r\n transformedplanes[planetag] = newplane;\r\n }\r\n let newvertices = p.vertices.map(v =>\r\n {\r\n let newvertex: Vertex3D;\r\n let vertextag = v.getTag();\r\n if (vertextag in transformedvertices)\r\n {\r\n newvertex = transformedvertices[vertextag];\r\n }\r\n else\r\n {\r\n newvertex = v.transform(matrix4x4);\r\n transformedvertices[vertextag] = newvertex;\r\n }\r\n return newvertex;\r\n });\r\n if (ismirror) newvertices.reverse();\r\n return new Polygon(newvertices, newplane);\r\n });\r\n let result = new CSG(newpolygons);\r\n result.isRetesselated = this.isRetesselated;\r\n result.isCanonicalized = this.isCanonicalized;\r\n return result as this;\r\n }\r\n canonicalized()\r\n {\r\n if (this.isCanonicalized) return this;\r\n return canonicalizeCSG(this);\r\n }\r\n reTesselated()\r\n {\r\n if (this.isRetesselated) return this;\r\n return reTesselate(this);\r\n }\r\n\r\n //如果两个实体有可能重叠,返回true\r\n mayOverlap(csg: CSG): boolean\r\n {\r\n if (this.polygons.length === 0 || csg.polygons.length === 0)\r\n return false;\r\n\r\n let mybounds = bounds(this);\r\n let otherbounds = bounds(csg);\r\n if (mybounds[1].x < otherbounds[0].x) return false;\r\n if (mybounds[0].x > otherbounds[1].x) return false;\r\n if (mybounds[1].y < otherbounds[0].y) return false;\r\n if (mybounds[0].y > otherbounds[1].y) return false;\r\n if (mybounds[1].z < otherbounds[0].z) return false;\r\n if (mybounds[0].z > otherbounds[1].z) return false;\r\n return true;\r\n }\r\n\r\n toTriangles(): Polygon[]\r\n {\r\n let polygons: Polygon[] = [];\r\n for (let poly of this.polygons)\r\n {\r\n let firstVertex = poly.vertices[0];\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n polygons.push(\r\n new Polygon(\r\n [\r\n firstVertex,\r\n poly.vertices[i + 1],\r\n poly.vertices[i + 2]\r\n ],\r\n poly.plane\r\n )\r\n );\r\n }\r\n }\r\n return polygons;\r\n }\r\n}\r\n","import { BufferGeometry, Face3, Geometry, Vector2, Vector3 } from \"three\";\r\nimport { equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { CSG } from \"./CSG\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Vector2D } from \"./math/Vector2\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\n\r\nexport function Geometry2CSG(geometry: Geometry | BufferGeometry): CSG\r\n{\r\n if (geometry instanceof BufferGeometry)\r\n geometry = new Geometry().fromBufferGeometry(geometry);\r\n\r\n let polygons: Polygon[] = [];\r\n for (let i = 0; i < geometry.faces.length; i++)\r\n {\r\n let face = geometry.faces[i];\r\n let faceVertexUvs = geometry.faceVertexUvs[0][i];\r\n let vertices: Vertex3D[] = [];\r\n\r\n if (face instanceof Face3)\r\n {\r\n let uv = faceVertexUvs ? faceVertexUvs[0].clone() : null;\r\n let vertex1 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.a]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex1);\r\n\r\n uv = faceVertexUvs ? faceVertexUvs[1].clone() : null;\r\n let vertex2 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.b]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex2);\r\n\r\n uv = faceVertexUvs ? faceVertexUvs[2].clone() : null;\r\n let vertex3 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.c]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex3);\r\n }\r\n\r\n let polygon = new Polygon(vertices);\r\n let normal = Vector3DToVector3(polygon.plane.normal);\r\n if (!isNaN(polygon.plane.w) && !equalv3(normal, new Vector3()))\r\n polygons.push(polygon);\r\n }\r\n\r\n return new CSG(polygons);\r\n}\r\n\r\nexport function CSG2Geometry(csg: CSG): Geometry\r\n{\r\n let geo = new Geometry;\r\n let uvs: Vector2[][] = geo.faceVertexUvs[0];\r\n\r\n for (let poly of csg.polygons)\r\n {\r\n let normal = Vector3DToVector3(poly.plane.normal);\r\n if (equalv3(normal, ZeroVec)) continue;\r\n for (let v of poly.vertices)\r\n {\r\n v.tag = geo.vertices.length;\r\n geo.vertices.push(Vector3DToVector3(v.pos));\r\n }\r\n\r\n let firstVertex = poly.vertices[0];\r\n\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n let [a, b, c] = [\r\n firstVertex.tag,\r\n poly.vertices[i + 1].tag,\r\n poly.vertices[i + 2].tag\r\n ];\r\n let f = new Face3(a, b, c, normal);\r\n\r\n geo.faces.push(f);\r\n uvs.push([\r\n Vector2DToVector2(firstVertex.uv),\r\n Vector2DToVector2(poly.vertices[i + 1].uv),\r\n Vector2DToVector2(poly.vertices[i + 2].uv)\r\n ]);\r\n }\r\n }\r\n return geo;\r\n}\r\n\r\nfunction Vector3ToVector3D(v: Vector3): Vector3D\r\n{\r\n return new Vector3D(v.x, v.y, v.z);\r\n}\r\n\r\nexport function Vector3DToVector3(v: Vector3D): Vector3\r\n{\r\n return new Vector3(v.x, v.y, v.z);\r\n}\r\nfunction Vector2DToVector2(v: Vector2D): Vector2\r\n{\r\n return new Vector2(v.x, v.y);\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ToFixed } from \"../Common/Utils\";\r\nimport { CSG } from \"../csg/core/CSG\";\r\nimport { Polygon } from \"../csg/core/math/Polygon3\";\r\nimport { Vec3 } from \"./IVec3\";\r\n\r\n/**\r\n * 解决 THREEBSP(CSG) 产生的结果没有办法得到分裂的个数.\r\n * 本类分析了THREEBSP的组合情况.\r\n * \r\n * Example:\r\n * \r\n * let topology = new BSPGroupParse(csg);\r\n * topology.parse();\r\n */\r\nexport class BSPGroupParse\r\n{\r\n constructor(bsp?: CSG, public fractionDigits = 1)\r\n {\r\n if (bsp)\r\n for (let poly of bsp.polygons)\r\n this.Add(poly);\r\n }\r\n Add(poly: Polygon)\r\n {\r\n let strs = poly.vertices.map(p => this.GenerateP(p.pos));\r\n let str0 = strs[0];\r\n let s0 = this.Get(str0);\r\n for (let i = 1; i < strs.length; i++)\r\n {\r\n let stri = strs[i];\r\n s0.add(stri);\r\n this.Get(stri).add(str0);\r\n }\r\n }\r\n\r\n /**\r\n * 返回组合点\r\n */\r\n Parse(): Vector3[][]\r\n {\r\n let set = new Set([...this.map.keys()]);\r\n let res: Vector3[][] = [];\r\n while (set.size > 0)\r\n {\r\n let fp = set[Symbol.iterator]().next().value;\r\n set.delete(fp);\r\n let cset = new Set();\r\n cset.add(fp);\r\n this.GetPts(fp, cset, set);\r\n let pts = [...cset].map(str =>\r\n {\r\n let v3 = this.vecMap.get(str);\r\n return new Vector3(v3.x, v3.y, v3.z);\r\n });\r\n res.push(pts);\r\n }\r\n return res;\r\n }\r\n private map = new Map>();\r\n private Get(vstr: string): Set\r\n {\r\n if (!this.map.has(vstr))\r\n {\r\n let s = new Set();\r\n this.map.set(vstr, s);\r\n return s;\r\n }\r\n return this.map.get(vstr);\r\n }\r\n private GetPts(p: string, cset: Set, oset: Set)\r\n {\r\n let strs = this.map.get(p);\r\n for (let str of strs)\r\n {\r\n if (!cset.has(str))\r\n {\r\n cset.add(str);\r\n oset.delete(str);\r\n this.GetPts(str, cset, oset);\r\n }\r\n }\r\n }\r\n private vecMap = new Map();\r\n private GenerateP(v: Vec3)\r\n {\r\n let str = [v.x, v.y, v.z].map(n => ToFixed(n, this.fractionDigits)).join(\",\");\r\n this.vecMap.set(str, v);\r\n return str;\r\n }\r\n}\r\n","import { BufferGeometry, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { equalv3 } from \"./GeUtils\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\n\r\nexport function GenerateExtrudeEdgeGeometry(contourPoints: Vector3[][], height: number): BufferGeometry\r\n{\r\n let pts: Vector3[] = [];\r\n for (let cs of contourPoints)\r\n pts.push(...GenerateExtrudeEdgeGeometryPoints(cs, height));\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return geo;\r\n}\r\n\r\nfunction GenerateExtrudeEdgeGeometryPoints(contourPoints: Vector3[], height: number): Vector3[]\r\n{\r\n if (contourPoints.length < 3) return [];\r\n if (equalv3(contourPoints[0], arrayLast(contourPoints)))\r\n contourPoints.pop();\r\n let pts: Vector3[] = [];\r\n let hpts = contourPoints.map(p => new Vector3(p.x, p.y, height));\r\n let count = contourPoints.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n pts.push(contourPoints[i], contourPoints[FixIndex(i + 1, count)], hpts[i], hpts[FixIndex(i + 1, count)], contourPoints[i], hpts[i]);\r\n }\r\n return pts;\r\n}\r\n\r\nexport function GenerateBoxEdgeGeometry(length: number, width: number, height: number): BufferGeometry\r\n{\r\n let pts = [new Vector3(), new Vector3(length), new Vector3(length, width), new Vector3(0, width)];\r\n return GenerateExtrudeEdgeGeometry([pts], height);\r\n}\r\n","import { arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { Status } from \"../../Common/Status\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\n\r\nexport function SimplifyPolyline(polyline: Polyline)\r\n{\r\n let curves = polyline.Explode();\r\n\r\n let oldCount = curves.length;\r\n curves = arrayRemoveDuplicateBySort(curves, (c1, c2) =>\r\n {\r\n return c1.Join(c2) !== Status.False;\r\n });\r\n\r\n if (oldCount === curves.length) return;\r\n\r\n polyline.Erase();\r\n\r\n if (curves.length === 1)\r\n return curves[0];\r\n else\r\n {\r\n let pl = new Polyline;\r\n for (let cu of curves)\r\n pl.Join(cu);\r\n return pl;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { equaln, isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { Vec3 } from \"../../Geometry/IVec3\";\r\nimport { IntersectOption } from \"../IntersectWith\";\r\n\r\n/**\r\n * V型刀走刀数据,第一刀直接扎进去,最后一刀提刀\r\n * @param polyline\r\n * @param feedingDepth 走刀深度\r\n * @param knifAngle 通常为60度.按弧度表示\r\n */\r\nexport function VKnifToolPath(polyline: Polyline, feedingDepth: number, knifAngle: number): { pt: Vec3, bul: number; }[]\r\n{\r\n let x = feedingDepth * Math.tan(knifAngle);\r\n let cus = polyline.Explode();\r\n arrayRemoveIf(cus, c => c.Length < 0.01);\r\n\r\n let offsetx = [x, -x];\r\n\r\n let ptsbul: { pt: Vec3, bul: number; }[] = [];\r\n\r\n let isClose = polyline.IsClose;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let nextIndex = FixIndex(i + 1, cus.length);\r\n let c1 = cus[i];\r\n let c2 = cus[nextIndex];\r\n\r\n let d = { pt: c1.StartPoint, bul: 0 };\r\n\r\n let curP = c1.EndPoint;\r\n\r\n if (c1 instanceof Arc)\r\n {\r\n d.bul = c1.Bul;\r\n c1 = new Line(curP.clone().sub(c1.GetFistDeriv(1).multiplyScalar(100)), curP);\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(c2.StartPoint, c2.StartPoint.add(c2.GetFistDeriv(0).multiplyScalar(100)));\r\n\r\n ptsbul.push(d);\r\n\r\n if (!isClose && i === cus.length - 1)//最后一条\r\n {\r\n ptsbul.push({ pt: c1.EndPoint, bul: 0 });\r\n break;\r\n }\r\n\r\n //圆弧与直线相切,此时不要提刀\r\n if (isParallelTo(c1.GetFistDeriv(0), c2.GetFistDeriv(0))) continue;\r\n\r\n //提刀\r\n for (let x of offsetx)\r\n {\r\n let co1 = c1.GetOffsetCurves(x)[0];\r\n let co2 = c2.GetOffsetCurves(x)[0];\r\n\r\n if (!co1 || !co2) continue;\r\n\r\n let ipts = co1.IntersectWith(co2, IntersectOption.ExtendBoth);\r\n\r\n if (ipts.length === 0) continue;\r\n\r\n if (co1.PtOnCurve(ipts[0])) continue;\r\n\r\n //抬刀路径\r\n ptsbul.push({ pt: curP, bul: 0 });\r\n ptsbul.push({ pt: ipts[0].setZ(feedingDepth), bul: 0 });\r\n }\r\n }\r\n\r\n if (isClose)\r\n {\r\n //第一刀\r\n ptsbul.unshift(ptsbul[ptsbul.length - 1]);//, ptsbul[ptsbul.length - 2]\r\n }\r\n return ptsbul;\r\n}\r\n\r\n\r\nexport function VData2Curve(data: { pt: Vec3, bul: number; }[])\r\n{\r\n let curves: Curve[] = [];\r\n for (let i = 0; i < data.length - 1; i++)\r\n {\r\n let p1 = new Vector3(data[i].pt.x, data[i].pt.y, data[i].pt.z);\r\n let p2 = new Vector3(data[i + 1].pt.x, data[i + 1].pt.y, data[i + 1].pt.z);\r\n if (equaln(data[i].bul, 0))\r\n {\r\n curves.push(new Line(p1, p2));\r\n }\r\n else\r\n {\r\n curves.push(new Arc().ParseFromBul(p1, p2, data[i].bul));\r\n }\r\n }\r\n return curves;\r\n}\r\n","export enum Intent\r\n{\r\n NONE = \"none\",\r\n PRIMARY = \"primary\",\r\n SUCCESS = \"success\",\r\n WARNING = \"warning\",\r\n DANGER = \"danger\",\r\n}\r\n\r\nexport interface IToasterOption\r\n{\r\n message: string | string[],\r\n timeout: number;\r\n intent: Intent;\r\n key?: string;\r\n}\r\n\r\n\r\ntype ToasterFunction = (option: IToasterOption) => void;\r\n\r\nexport const ToasterInjectFunctions: ToasterFunction[] = [];\r\n\r\nexport function Toaster(option: IToasterOption): void\r\n{\r\n for (let f of ToasterInjectFunctions)\r\n f(option);\r\n}\r\n","import { Factory } from '../CADFactory';\r\nimport { Entity } from '../Entity/Entity';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { CADFiler } from '../CADFiler';\r\n\r\n@Factory\r\nexport class Hole extends Entity\r\n{\r\n @AutoRecord FId: ObjectId;\r\n @AutoRecord MId: ObjectId;\r\n protected _Height: number;\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this._Height !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n if (ver <= 4)\r\n {\r\n //临时兼容旧图纸排钻,更新旧图纸后去掉兼容代码\r\n file['readIndex']--;\r\n }\r\n else\r\n {\r\n this._Height = file.Read();\r\n this.FId = file.ReadSoftObjectId();\r\n this.MId = file.ReadSoftObjectId();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(5);//ver\r\n file.Write(this._Height);\r\n file.WriteSoftObjectId(this.FId);\r\n file.WriteSoftObjectId(this.MId);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, CylinderBufferGeometry, Float32BufferAttribute, LineSegments, Matrix4, Mesh, Object3D, Shape as TShape, Vector3, Matrix3 } from \"three\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory, CADFactory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Hole } from \"./Hole\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Circle } from \"../Entity/Circle\";\r\n\r\nexport enum GangDrillType\r\n{\r\n /**偏心轮 */\r\n Pxl = 0,\r\n /**连接杆 */\r\n Ljg = 1,\r\n /**预埋件 */\r\n Ymj = 2,\r\n /**层板钉 */\r\n Nail = 3,\r\n /** 木销 */\r\n Wood = 4,\r\n /** 通孔 */\r\n TK = 5,\r\n WoodPXL = 6,\r\n}\r\n\r\nlet TempCircle1 = new Circle();\r\nlet TempCircle2 = new Circle();\r\n\r\n@Factory\r\nexport class CylinderHole extends Hole\r\n{\r\n private _Radius: number = 1;\r\n private type: GangDrillType = GangDrillType.Pxl;\r\n constructor()\r\n {\r\n super();\r\n this._Color = 1;\r\n }\r\n static CreateCylHole(radius: number, height: number, type: GangDrillType)\r\n {\r\n let drill = new CylinderHole();\r\n drill.Height = height;\r\n drill._Radius = radius;\r\n drill.type = type;\r\n return drill;\r\n }\r\n get Type()\r\n {\r\n return this.type;\r\n }\r\n set Type(t: GangDrillType)\r\n {\r\n if (this.type !== t)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.type = t;\r\n }\r\n }\r\n\r\n set Radius(r: number)\r\n {\r\n if (r !== this._Radius)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._MeshGeometry = null;\r\n this._EdgeGeometry = null;\r\n this._Radius = r;\r\n this.Update();\r\n }\r\n }\r\n get Height()\r\n {\r\n return super.Height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this._Height !== v)\r\n {\r\n this._MeshGeometry = null;\r\n this._EdgeGeometry = null;\r\n super.Height = v;\r\n }\r\n }\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3(new Vector3(-this._Radius, -this._Radius, 0), new Vector3(this._Radius, this._Radius, this._Height));\r\n return box.applyMatrix4(this.OCS);\r\n }\r\n private _MeshGeometry: CylinderBufferGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n this._MeshGeometry = FastDrillingMeshGeometry(this.Radius, this.Height);\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this._EdgeGeometry = FastDrillingEdgeGeometry(this._Radius, this.Height);\r\n return this._EdgeGeometry;\r\n }\r\n GetGripPoints()\r\n {\r\n let cir = new Circle(new Vector3(), this._Radius);\r\n let pts = cir.GetGripPoints();\r\n pts.push(...pts.map(p => p.clone().add(new Vector3(0, 0, this.Height))));\r\n return pts.map(p => p.applyMatrix4(this.OCS));\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n TempCircle1.Radius = this.Radius;\r\n TempCircle1.OCS = this._Matrix;\r\n TempCircle2.Radius = this.Radius;\r\n TempCircle2.OCS = this._Matrix;\r\n TempCircle2.Position = TempCircle2.Position.add(this.Normal.multiplyScalar(this.Height));\r\n\r\n for (let c of [TempCircle2, TempCircle1])\r\n {\r\n pts.push(...c.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n InitDrawObject(renderType: RenderType)\r\n {\r\n return this.GetObject3DByRenderType(renderType);\r\n }\r\n private GetObject3DByRenderType(renderType: RenderType)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n else\r\n return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n obj.add(this.GetObject3DByRenderType(type));\r\n }\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D)\r\n {\r\n if (type === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._Radius = file.Read();\r\n if (ver <= 4)\r\n {\r\n //临时兼容旧排钻\r\n this._Height = file.Read();\r\n this.type = file.Read();\r\n this.FId = file.ReadSoftObjectId();\r\n this.MId = file.ReadSoftObjectId();\r\n }\r\n else\r\n {\r\n this.type = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(5);//ver\r\n file.Write(this._Radius);\r\n file.Write(this.type);\r\n }\r\n}\r\n\r\nlet cache = new Map();\r\nlet ro = new Matrix4();\r\nro.makeRotationX(Math.PI / 2);\r\nexport function FastDrillingMeshGeometry(radius: number, height: number)\r\n{\r\n let key = `${radius},${height}`;\r\n if (cache.has(key))\r\n return cache.get(key);\r\n let geo = new CylinderBufferGeometry(radius, radius, height, 8, 1);\r\n geo.applyMatrix4(ro);\r\n geo.translate(0, 0, height / 2);\r\n cache.set(key, geo);\r\n return geo;\r\n}\r\n\r\nlet cache2 = new Map();\r\nexport function FastDrillingEdgeGeometry(radius: number, height: number): BufferGeometry\r\n{\r\n let key = `${radius},${height}`;\r\n if (cache2.has(key))\r\n return cache2.get(key);\r\n\r\n let sp = new TShape();\r\n sp.ellipse(0, 0, radius, radius, 0, 2 * Math.PI, false, 0);\r\n\r\n let pts = sp.getPoints(4);\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = pts[i];\r\n let np = pts[FixIndex(i + 1, pts.length)];\r\n coords.push(p.x, p.y, 0, np.x, np.y, 0);//bottom\r\n coords.push(p.x, p.y, height, np.x, np.y, height);//top\r\n coords.push(p.x, p.y, 0, p.x, p.y, height);//edge\r\n }\r\n\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n cache2.set(key, geo);\r\n return geo;\r\n}\r\n\r\nCADFactory.RegisterObjectAlias(CylinderHole, \"GangDrill\");\r\n","import { IBaseOption } from \"./BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\n\r\nexport enum EWineRackType\r\n{\r\n Oblique = 0,\r\n Upright = 1,\r\n}\r\n\r\nexport enum EWRackArrayType\r\n{\r\n ByWidth = 0,\r\n ByCount = 1,\r\n Fixed = 2, //固定\r\n}\r\n\r\n/**铺满方式 */\r\nexport enum EFullType\r\n{\r\n ByHeight = 0,\r\n ByWidth = 1,\r\n Symmetry = 2,\r\n}\r\n\r\n/**高度优先时靠左还是靠右 */\r\nexport enum EFullDir\r\n{\r\n Left = 0,\r\n Right = 1,\r\n}\r\n\r\nexport interface IWineRackOption extends IBaseOption\r\n{\r\n type: EWineRackType;\r\n arrayType: EWRackArrayType;\r\n fullType: EFullType;\r\n isFull: boolean;\r\n fullDir: EFullDir;\r\n isLock: boolean;\r\n heightCount: number;\r\n widthCount: number;\r\n isTotalDepth: boolean;\r\n depth: number; //格子深\r\n calcDepth: string;\r\n gripWidth: number; //格子宽度\r\n boardThick: number;\r\n grooveWidthAdd: number;\r\n leftEdge: number;\r\n rightEdge: number;\r\n topEdge: number;\r\n bottomEdge: number;\r\n frontCut: number;\r\n leftCut: number;\r\n rightCut: number;\r\n topCut: number;\r\n grooveLengthAdd: number;\r\n isDrawLy: boolean;\r\n isDrawVer: boolean;\r\n brThick2: number; //补板厚\r\n}\r\n\r\nexport interface IR2WROption\r\n{\r\n depth: number;\r\n addLen: number;\r\n knifeRadius: number;\r\n [EBoardKeyList.UpSealed]: number;\r\n [EBoardKeyList.DownSealed]: number;\r\n [EBoardKeyList.LeftSealed]: number;\r\n [EBoardKeyList.RightSealed]: number;\r\n}\r\n","import { LinesType, FaceDirection, ComposingType, IBaseOption } from \"./BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\n\r\nexport const DRILL_KEYS = [\"downDrill\", \"rightDrill\", \"upDrill\", \"leftDrill\"];\r\n\r\nexport interface IBoardFindOption extends IBaseOption\r\n{\r\n condition: IFindCondition;\r\n compareType: ICompareType;\r\n tolerance: ITolerance;\r\n layer: string;\r\n [EBoardKeyList.Height]: string;\r\n [EBoardKeyList.Width]: string;\r\n [EBoardKeyList.Thick]: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n brName: string; //板名\r\n [EBoardKeyList.BrMat]: string; //板材\r\n [EBoardKeyList.Mat]: string;\r\n [EBoardKeyList.Color]: string;\r\n [EBoardKeyList.Lines]: LinesType;\r\n [EBoardKeyList.BigHole]: FaceDirection;\r\n [EBoardKeyList.DrillType]: string;\r\n [EBoardKeyList.ComposingFace]: ComposingType;\r\n [EBoardKeyList.UpSealed]: string;\r\n [EBoardKeyList.DownSealed]: string;\r\n [EBoardKeyList.LeftSealed]: string;\r\n [EBoardKeyList.RightSealed]: string;\r\n highDrill: string[];\r\n upDownDrill: [boolean, boolean];\r\n isClose: boolean;\r\n remarks: [string, string][];\r\n isChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: string;\r\n}\r\nexport interface IFindCondition\r\n{\r\n layer: boolean;\r\n [EBoardKeyList.Height]: boolean;\r\n [EBoardKeyList.Width]: boolean;\r\n [EBoardKeyList.Thick]: boolean;\r\n useWood: boolean;\r\n useDrill: boolean;\r\n useNail: boolean;\r\n useDoor: boolean;\r\n useDim: boolean;\r\n useSpecial: boolean;\r\n useModeling: boolean;\r\n [EBoardKeyList.RoomName]: boolean;\r\n [EBoardKeyList.CabinetName]: boolean;\r\n brName: boolean;\r\n [EBoardKeyList.Mat]: boolean;\r\n [EBoardKeyList.Lines]: boolean;\r\n [EBoardKeyList.BigHole]: boolean;\r\n [EBoardKeyList.DrillType]: boolean;\r\n useKeyWord: boolean;\r\n [EBoardKeyList.ComposingFace]: boolean;\r\n [EBoardKeyList.UpSealed]: boolean;\r\n [EBoardKeyList.DownSealed]: boolean;\r\n [EBoardKeyList.LeftSealed]: boolean;\r\n [EBoardKeyList.RightSealed]: boolean;\r\n upDrill: boolean;\r\n downDrill: boolean;\r\n leftDrill: boolean;\r\n rightDrill: boolean;\r\n useZhengFanDrill: boolean;\r\n useChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: boolean;\r\n}\r\n\r\nexport interface ICompareType\r\n{\r\n [EBoardKeyList.Height]: ECompareType;\r\n [EBoardKeyList.Width]: ECompareType;\r\n [EBoardKeyList.Thick]: ECompareType;\r\n [EBoardKeyList.RoomName]: ECompareType;\r\n [EBoardKeyList.CabinetName]: ECompareType;\r\n brName: ECompareType;\r\n [EBoardKeyList.BrMat]: ECompareType;\r\n [EBoardKeyList.Mat]: ECompareType;\r\n [EBoardKeyList.Color]: ECompareType;\r\n [EBoardKeyList.Lines]: ECompareType;\r\n [EBoardKeyList.BigHole]: ECompareType;\r\n [EBoardKeyList.DrillType]: ECompareType;\r\n [EBoardKeyList.ComposingFace]: ECompareType;\r\n [EBoardKeyList.KnifeRad]: ECompareType;\r\n}\r\nexport interface ITolerance\r\n{\r\n [EBoardKeyList.Height]: string;\r\n [EBoardKeyList.Width]: string;\r\n [EBoardKeyList.Thick]: string;\r\n [EBoardKeyList.KnifeRad]: string;\r\n}\r\n\r\nexport enum EFindType\r\n{\r\n Find = 0,\r\n Modify = 1,\r\n FindMaxSize = 2,\r\n FindSplite = 3,\r\n GetOption = 4,\r\n RemoveModeling = 5,\r\n RemoveSpecialShape = 6,\r\n RemoveModelingAndSpecial = 7,\r\n ModifyHardware = 8,\r\n FindMinSize = 9,\r\n}\r\n\r\nexport enum ECompareType\r\n{\r\n Equal = \"=\",\r\n UnEqual = \"!=\",\r\n Greater = \">=\",\r\n Less = \"<=\"\r\n}\r\n","import { IBaseOption } from \"./BoardInterface\";\r\n\r\nexport enum ELatticeArrayType\r\n{\r\n ByWidth = 0,\r\n ByCount = 1,\r\n}\r\n\r\nexport interface ILatticeOption extends IBaseOption\r\n{\r\n arrayType: ELatticeArrayType;\r\n gripWidth: number;\r\n gripDepth: number;\r\n widthCount: number;\r\n depthCount: number;\r\n knifeRad: number,\r\n thickness: number,\r\n arcLen: number;\r\n downDist: number;\r\n space: number; //四周间隙\r\n grooveAddWidth: number; //齿加宽\r\n upSealed: number;\r\n downSealed: number;\r\n leftSealed: number;\r\n rightSealed: number;\r\n isAuto: boolean; //自动识别弧长\r\n isChange: boolean; //左右侧板跟随变化\r\n isOpenCut: boolean;\r\n upCut: number;\r\n downCut: number;\r\n}\r\n","import { INeedUpdateParams } from \"../Components/Template/TemplateComponent\";\r\nimport { IBaseOption } from \"./BoardInterface\";\r\n\r\nexport interface IDoorAndDrawerConfigOption extends IBaseOption\r\n{\r\n col: number;\r\n row: number;\r\n isAllSelect: boolean; //是否行列全选\r\n topOffset: number; //上留空\r\n bottomOffset: number; //下留空\r\n doorPosType: DoorPosType;\r\n offset: number; //内偏移\r\n topExt: number;\r\n bottomExt: number;\r\n leftExt: number;\r\n rightExt: number;\r\n topSpace: number; //间隙\r\n bottomSpace: number;\r\n leftSpace: number;\r\n rightSpace: number;\r\n midSpace: number;\r\n thickness: number; //立板厚度\r\n depth: number; //立板深度\r\n isAuto: boolean; //智能识别\r\n boardName: string; //柜名\r\n handleAngle: number; //拉手\r\n handleHorPos: HandleHorPos; //水平位置距离\r\n horSpacing: number;\r\n handleVePos: HandleVePos; // 垂直位置距离\r\n veSpacing: number;\r\n upOffsetExpr: string;\r\n downOffsetExpr: string;\r\n}\r\n\r\n/**\r\n * 门板数据接口\r\n */\r\nexport interface IDoorConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n doorThickness: number; //门板厚度\r\n topBrSeal: number; //层板封边\r\n bottomBrSeal: number;\r\n leftBrSeal: number;\r\n rightBrSeal: number;\r\n topDoorSeal: number; //门板封边\r\n bottomDoorSeal: number;\r\n leftDoorSeal: number;\r\n rightDoorSeal: number;\r\n hingeCount: number; //铰链\r\n hindeTopDist: number;\r\n hindeBottomDist: number;\r\n}\r\n\r\n/**\r\n * 抽屉数据接口\r\n */\r\nexport interface IDrawerConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n drawerTotalDepth: number; //抽屉总深\r\n trackDepth: number; //轨道深度\r\n isAutoSelectTrack: boolean;\r\n isLockTopOffset: boolean;\r\n isLockBottomOffset: boolean;\r\n}\r\n\r\n//门板位置类型\r\nexport enum DoorPosType\r\n{\r\n Out = 0, //外盖\r\n In = 1,\r\n}\r\n\r\nexport enum HandleHorPos\r\n{\r\n Left = 0,\r\n Right = 1,\r\n Mid = 2,\r\n}\r\nexport enum HandleVePos\r\n{\r\n Top = 0,\r\n Bottom = 1,\r\n Mid = 2,\r\n}\r\n//门板开门类型\r\nexport enum DoorOpenDir\r\n{\r\n Left = \"lf\",\r\n Right = \"rt\",\r\n Top = \"tp\",\r\n Bottom = \"bm\",\r\n None = \"none\",\r\n}\r\n\r\n//抽屉门板信息\r\nexport interface IDrawerInfo extends IBaseOption\r\n{\r\n row: number,\r\n col: number,\r\n divWidth: number, //预览UI尺寸\r\n divHeight: number,\r\n showWidth: string, //UI展示数据\r\n showHeight: string,\r\n width: number, //门板计算尺寸\r\n height: number,\r\n isLockWidth: boolean,\r\n isLockHeight: boolean,\r\n isSelect: boolean;\r\n tempInfo: ISelectTempInfo;\r\n marginRight?: number;\r\n}\r\n\r\nexport interface IDoorInfo extends IDrawerInfo\r\n{\r\n openDir: DoorOpenDir,\r\n\r\n isDrawLayer: boolean;\r\n isDrawVer: boolean;\r\n}\r\n\r\nexport interface IDrawerDoorTempInfo\r\n{\r\n name: string;\r\n id: string;\r\n logo?: string;\r\n props?: INeedUpdateParams[];\r\n title?: string;\r\n isHandle?: boolean;\r\n tagName?: string;\r\n isKuGan?: boolean;\r\n}\r\n\r\n/**选择的模板信息,temp-抽屉或门板,handletemp-拉手模板,其他是铰链模板 */\r\nexport interface ISelectTempInfo\r\n{\r\n temp: IDrawerDoorTempInfo;\r\n handleTemp: IDrawerDoorTempInfo;\r\n hingeTemp?: IDrawerDoorTempInfo;\r\n [key: string]: IDrawerDoorTempInfo;\r\n}\r\n\r\n/**抽屉一定要有的参数 */\r\nexport const DrawerTempParName = [\"ZYS\", \"YYS\", \"SYS\", \"XYS\"];\r\n/**禁止改的属性 */\r\nexport const DisableChangeParName = [\"L\", \"W\", \"H\", \"ZYS\", \"YYS\", \"SYS\", \"XYS\", \"ZG\", \"YG\", \"SG\", \"XG\"];\r\n\r\n/**门板需要的参数 */\r\nexport const DoorNeedParamNames = [\"L\", \"W\", \"H\", \"PX\", \"PY\", \"PZ\", \"RX\", \"RY\", \"RZ\", \"SG\", \"XG\", \"ZG\", \"YG\", \"XBH\", \"BH\"];\r\n","import { IBaseOption } from \"../../Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\n\r\nexport interface IHardwareOption extends IBaseOption\r\n{\r\n name: string;\r\n unit: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n costExpr: string;\r\n actualExpr: string;\r\n model: string;\r\n factory: string;\r\n brand: string;\r\n spec: string;\r\n comments: string;\r\n isHole: boolean;\r\n}\r\n\r\nexport interface ICylMetalsOption extends IHardwareOption\r\n{\r\n rad: number;\r\n height: number;\r\n count: string;\r\n}\r\n\r\nexport interface IExtMetalsOption extends IHardwareOption\r\n{\r\n thickness: number;\r\n knifeRad: number;\r\n addLen: number;\r\n isHole: boolean;\r\n count: string;\r\n}\r\n\r\nexport enum EMetalsType\r\n{\r\n Metals = \"五金\",\r\n Comp = \"组件\",\r\n}\r\n\r\nexport interface ICompHardwareOption extends IHardwareOption\r\n{\r\n type: EMetalsType;\r\n isSplite: boolean;\r\n isSplitePrice: boolean;\r\n color: string;\r\n [EBoardKeyList.Mat]: string;\r\n count: string;\r\n}\r\n\r\nexport interface IToplineOption extends IHardwareOption\r\n{\r\n addLen: string;\r\n}\r\n","import { LayerBoardOption, BrRelativePos, VerticalBoardOption, BehindBoardOption, BehindHeightPositon, TBBoardOption, LayerNailOption, SingleBoardOption, ClosingStripOption, StripType, LinesType, FaceDirection, ComposingType, IBoardBatchCurtailOption, CurtailType, BoardProcessOption, SideBoardOption, BoardType } from \"../UI/Store/BoardInterface\";\r\nimport { IWineRackOption, EWineRackType, EWRackArrayType, EFullType, EFullDir } from \"../UI/Store/WineRackInterface\";\r\nimport { IBoardFindOption, ECompareType } from \"../UI/Store/BoardFindInterface\";\r\nimport { ILatticeOption, ELatticeArrayType } from \"../UI/Store/LatticeInterface\";\r\nimport { HandleVePos, DoorPosType, HandleHorPos, IDrawerConfigOption, IDoorConfigOption } from \"../UI/Store/DoorInterface\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { ICylMetalsOption, IExtMetalsOption, ICompHardwareOption, EMetalsType, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { Curve2RecOption } from \"../Add-on/twoD2threeD/Modals/Curve2RecModal\";\r\nimport { IUpdateBoardInfosOption } from \"../UI/Components/Board/UpdateBoardInfointerface\";\r\nimport { IRec2BrOption, IRect2Br2Option } from \"../Add-on/twoD2threeD/R2bInterface\";\r\n\r\nexport const DefaultLayerBoardConfig: LayerBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"层板\",\r\n frontShrink: 0,\r\n leftShrink: 0,\r\n rightShrink: 0,\r\n calcHeight: \"W\",\r\n isTotalLength: true,\r\n boardRelative: BrRelativePos.Div,\r\n thickness: 18,\r\n count: 1,\r\n spaceSize: 300,\r\n isActive: false,\r\n calcSpaceSize: \"0\",\r\n calcFrontShrink: \"0\",\r\n calcLeftShrink: \"0\",\r\n calcRightShrink: \"0\",\r\n};\r\nObject.freeze(DefaultLayerBoardConfig);\r\n\r\nexport const DefaultVerticalBoardConfig: VerticalBoardOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"立板\",\r\n frontShrink: 0,\r\n bottomShrink: 0,\r\n calcWidth: \"W\",\r\n calcHeight: \"H\",\r\n isTotalLength: true,\r\n isTotalWidth: true,\r\n boardRelative: BrRelativePos.Div,\r\n thickness: 18,\r\n count: 1,\r\n spaceSize: 0,\r\n calcSpaceSize: \"0\",\r\n calcBottomShrink: \"0\",\r\n calcFrontShrink: \"0\",\r\n};\r\nObject.freeze(DefaultVerticalBoardConfig);\r\n\r\nexport const DefaultBehindBoardConfig: BehindBoardOption = {\r\n version: 2,\r\n type: BoardType.Behind,\r\n name: \"背板\",\r\n leftExt: 0,\r\n rightExt: 0,\r\n topExt: 0,\r\n bottomExt: 0,\r\n thickness: 18,\r\n boardPosition: BehindHeightPositon.AllHeight,\r\n calcHeight: \"H\",\r\n moveDist: 0,\r\n boardRelative: BrRelativePos.Back,\r\n spaceSize: 0,\r\n count: 1,\r\n calcSpaceSize: \"0\",\r\n calcMoveDist: \"0\",\r\n};\r\nObject.freeze(DefaultBehindBoardConfig);\r\n\r\nexport const DefaultWineRackConfig: IWineRackOption = {\r\n version: 1,\r\n type: EWineRackType.Oblique,\r\n arrayType: EWRackArrayType.ByWidth,\r\n fullType: EFullType.ByWidth,\r\n isFull: false,\r\n isLock: false,\r\n fullDir: EFullDir.Left,\r\n heightCount: 3.5,\r\n widthCount: 3.5,\r\n isTotalDepth: true,\r\n depth: 0,\r\n gripWidth: 100,\r\n calcDepth: \"W\",\r\n boardThick: 18,\r\n grooveWidthAdd: 0,\r\n leftEdge: 1,\r\n rightEdge: 1,\r\n topEdge: 1,\r\n bottomEdge: 1,\r\n frontCut: 0,\r\n leftCut: 0,\r\n rightCut: 0,\r\n topCut: 0,\r\n grooveLengthAdd: 3,\r\n isDrawLy: false,\r\n isDrawVer: false,\r\n brThick2: 18,\r\n};\r\nObject.freeze(DefaultWineRackConfig);\r\n\r\nexport const DefaultTopBoardOption: TBBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"顶板\",\r\n isDraw: true,\r\n thickness: 18,\r\n frontDist: 0,\r\n behindDistance: 0,\r\n isWrapSide: false,\r\n useLFData: true,\r\n leftExt: 0,\r\n rightExt: 0,\r\n offset: 0,\r\n};\r\nObject.freeze(DefaultTopBoardOption);\r\n\r\nexport const DefaultBottomBoardOption: TBBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"底板\",\r\n isDraw: true,\r\n thickness: 18,\r\n frontDist: 0,\r\n behindDistance: 0,\r\n isWrapSide: false,\r\n useLFData: true,\r\n leftExt: 0,\r\n rightExt: 0,\r\n offset: 80,\r\n footThickness: 18,\r\n isDrawFooter: true,\r\n footBehindShrink: 0,\r\n isDrawBackFooter: false,\r\n isDrawStrengthenStrip: false,\r\n footerOffset: 0,\r\n divCount: 1,\r\n};\r\nObject.freeze(DefaultBottomBoardOption);\r\n\r\nexport const DefaultSideBoardOption: SideBoardOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"\",\r\n height: 2000,\r\n width: 600,\r\n thickness: 18,\r\n spaceSize: 1200,\r\n leftShrink: 0,\r\n rightShrink: 0,\r\n};\r\nObject.freeze(DefaultSideBoardOption);\r\n\r\nexport const DefaultSingleBoardOption: SingleBoardOption = {\r\n version: 1,\r\n name: \"层板\",\r\n type: BoardType.Layer,\r\n height: 1200,\r\n width: 600,\r\n thickness: 18,\r\n rotateX: 0,\r\n rotateY: 0,\r\n rotateZ: 0\r\n};\r\nObject.freeze(DefaultSingleBoardOption);\r\n\r\nexport const DefaultClosingStripOption: ClosingStripOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"收口条\",\r\n striptype: StripType.H,\r\n boardRelative: BrRelativePos.Left,\r\n width: 54,\r\n thickness: 18,\r\n frontShrink: 0,\r\n isDrawFuZhu: true,\r\n fzWidth: 80,\r\n fzThickness: 18,\r\n};\r\nObject.freeze(DefaultClosingStripOption);\r\n\r\nexport const DefaultBoardFindOption: IBoardFindOption = {\r\n version: 5,\r\n condition: {\r\n layer: false,\r\n height: false,\r\n width: false,\r\n thickness: false,\r\n useWood: false,\r\n useDrill: false,\r\n useNail: false,\r\n useDoor: false,\r\n useDim: false,\r\n useSpecial: false,\r\n useModeling: false,\r\n roomName: false,\r\n cabinetName: false,\r\n brName: false,\r\n material: false,\r\n lines: false,\r\n bigHoleDir: false,\r\n drillType: false,\r\n useKeyWord: false,\r\n composingFace: false,\r\n sealedUp: false,\r\n sealedDown: false,\r\n sealedLeft: false,\r\n sealedRight: false,\r\n upDrill: false,\r\n downDrill: false,\r\n leftDrill: false,\r\n rightDrill: false,\r\n useZhengFanDrill: false,\r\n useChaidan: false,\r\n [EBoardKeyList.KnifeRad]: false,\r\n },\r\n compareType: {\r\n height: ECompareType.Equal,\r\n width: ECompareType.Equal,\r\n thickness: ECompareType.Equal,\r\n roomName: ECompareType.Equal,\r\n cabinetName: ECompareType.Equal,\r\n brName: ECompareType.Equal,\r\n [EBoardKeyList.Mat]: ECompareType.Equal,\r\n [EBoardKeyList.Color]: ECompareType.Equal,\r\n [EBoardKeyList.BrMat]: ECompareType.Equal,\r\n lines: ECompareType.Equal,\r\n bigHoleDir: ECompareType.Equal,\r\n drillType: ECompareType.Equal,\r\n composingFace: ECompareType.Equal,\r\n [EBoardKeyList.KnifeRad]: ECompareType.Equal,\r\n\r\n },\r\n tolerance: {\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n },\r\n layer: \"0\",\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n brName: \"\",\r\n [EBoardKeyList.BrMat]: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n drillType: \"\",\r\n composingFace: ComposingType.Positive,\r\n sealedUp: \"\",\r\n sealedDown: \"\",\r\n sealedLeft: \"\",\r\n sealedRight: \"\",\r\n highDrill: [],\r\n upDownDrill: [true, true],\r\n isClose: false,\r\n remarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n isChaidan: false,\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n};\r\nObject.freeze(DefaultBoardFindOption);\r\n\r\nexport const DefaultLatticOption: ILatticeOption = {\r\n version: 1,\r\n arrayType: ELatticeArrayType.ByWidth,\r\n gripWidth: 100,\r\n gripDepth: 100,\r\n widthCount: 3,\r\n depthCount: 4,\r\n knifeRad: 3,\r\n thickness: 18,\r\n arcLen: 50,\r\n downDist: 0,\r\n space: 0.2,\r\n grooveAddWidth: 0.2,\r\n upSealed: 1,\r\n downSealed: 1,\r\n leftSealed: 1,\r\n rightSealed: 1,\r\n isAuto: true,\r\n isChange: true,\r\n isOpenCut: false,\r\n upCut: 0,\r\n downCut: 4,\r\n};\r\nObject.freeze(DefaultLatticOption);\r\n\r\nexport const DefaultDoorOption: IDoorConfigOption = {\r\n version: 3,\r\n col: 2,\r\n row: 1,\r\n isAllSelect: true,\r\n topOffset: 0,\r\n bottomOffset: 0,\r\n doorPosType: DoorPosType.Out,\r\n offset: 0,\r\n topExt: 18,\r\n bottomExt: 18,\r\n leftExt: 18,\r\n rightExt: 18,\r\n topSpace: 2,\r\n bottomSpace: 2,\r\n leftSpace: 2,\r\n rightSpace: 2,\r\n midSpace: 2,\r\n thickness: 18,\r\n depth: 0,\r\n isAuto: true,\r\n boardName: \"\",\r\n doorThickness: 18,\r\n topBrSeal: 1,\r\n bottomBrSeal: 1,\r\n leftBrSeal: 1,\r\n rightBrSeal: 1,\r\n topDoorSeal: 1,\r\n bottomDoorSeal: 1,\r\n leftDoorSeal: 1,\r\n rightDoorSeal: 1,\r\n handleAngle: 0,\r\n handleHorPos: HandleHorPos.Right,\r\n horSpacing: 50,\r\n handleVePos: HandleVePos.Mid,\r\n veSpacing: 10,\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n downOffsetExpr: \"0\",\r\n upOffsetExpr: \"0\",\r\n};\r\nObject.freeze(DefaultDoorOption);\r\n\r\nexport const DefaultDrawerOption: IDrawerConfigOption = {\r\n version: 4,\r\n col: 1,\r\n row: 1,\r\n isAllSelect: true,\r\n topOffset: 0,\r\n bottomOffset: 0,\r\n doorPosType: DoorPosType.Out,\r\n offset: 0,\r\n topExt: 18,\r\n bottomExt: 18,\r\n leftExt: 18,\r\n rightExt: 18,\r\n topSpace: 2,\r\n bottomSpace: 2,\r\n leftSpace: 2,\r\n rightSpace: 2,\r\n midSpace: 2,\r\n thickness: 18,\r\n depth: 0,\r\n isAuto: true,\r\n boardName: \"\",\r\n handleAngle: 90,\r\n handleHorPos: HandleHorPos.Mid,\r\n horSpacing: 10,\r\n handleVePos: HandleVePos.Mid,\r\n veSpacing: 10,\r\n drawerTotalDepth: 0,\r\n trackDepth: 0,\r\n isAutoSelectTrack: true,\r\n isLockTopOffset: false,\r\n isLockBottomOffset: false,\r\n downOffsetExpr: \"0\",\r\n upOffsetExpr: \"0\",\r\n};\r\nObject.freeze(DefaultDrawerOption);\r\n\r\nexport const DefaultBoardBatchCurtailOption: IBoardBatchCurtailOption = {\r\n version: 1,\r\n type: CurtailType.Total,\r\n front: 0,\r\n back: 0,\r\n left: 0,\r\n right: 0,\r\n moveBrs: false,\r\n};\r\nObject.freeze(DefaultBoardBatchCurtailOption);\r\n\r\nexport const DefaultLatticeConfig: ILatticeOption = {\r\n arrayType: ELatticeArrayType.ByWidth,\r\n gripWidth: 100,\r\n gripDepth: 100,\r\n widthCount: 3,\r\n depthCount: 4,\r\n knifeRad: 3,\r\n thickness: 18,\r\n arcLen: 50,\r\n downDist: 0,\r\n space: 0.5,\r\n grooveAddWidth: 0,\r\n upSealed: 1,\r\n downSealed: 0,\r\n leftSealed: 0,\r\n rightSealed: 0,\r\n isAuto: true,\r\n isChange: true,\r\n isOpenCut: false,\r\n upCut: 0,\r\n downCut: 4,\r\n};\r\nObject.freeze(DefaultLatticeConfig);\r\n\r\nexport const DefaultNailOption: LayerNailOption = {\r\n version: 1,\r\n isDraw: true,\r\n addCount: 0,\r\n dist: 50,\r\n isGroup: false,\r\n isInBack: false,\r\n front: 50,\r\n behind: 50,\r\n count: 2,\r\n rad: 2.5,\r\n length: 34,\r\n depth: 11\r\n};\r\nObject.freeze(DefaultNailOption);\r\n\r\nexport const DefaultCylinederMetalsOption: ICylMetalsOption = {\r\n version: 2,\r\n rad: 50,\r\n height: 200,\r\n name: \"圆柱体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*R*R*3.14\",\r\n actualExpr: \"L*R*R*3.14*3\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n comments: \"\",\r\n isHole: true,\r\n};\r\nObject.freeze(DefaultCylinederMetalsOption);\r\nexport const DefaultExtruderMetalsOption: IExtMetalsOption = {\r\n version: 1,\r\n thickness: 100,\r\n knifeRad: 0,\r\n isHole: true,\r\n addLen: 0,\r\n name: \"拉伸实体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*W*H*100\",\r\n actualExpr: \"L*W*H*200\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n comments: \"\",\r\n};\r\nObject.freeze(DefaultExtruderMetalsOption);\r\nexport const DefaultCompositeMetalsOption: ICompHardwareOption = {\r\n version: 2,\r\n type: EMetalsType.Metals,\r\n isSplite: false,\r\n isSplitePrice: false,\r\n name: \"复合实体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*W*H*100\",\r\n actualExpr: \"L*W*H*300\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n color: \"\",\r\n material: \"\",\r\n comments: \"\",\r\n isHole: true,\r\n};\r\nObject.freeze(DefaultCompositeMetalsOption);\r\nexport const DefaultToplineMetalsOption: IToplineOption = {\r\n version: 3,\r\n name: \"顶线\",\r\n unit: \"毫米\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"\",\r\n actualExpr: \"\",\r\n model: \"\",\r\n factory: \"\",\r\n brand: \"\",\r\n spec: \"\",\r\n comments: \"\",\r\n addLen: \"0\",\r\n isHole: false,\r\n};\r\nObject.freeze(DefaultToplineMetalsOption);\r\n\r\nexport const DefaultBoardProcessOption: BoardProcessOption = {\r\n version: 3,\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n boardName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n drillType: \"\",\r\n composingFace: ComposingType.Arbitrary,\r\n highSealed: [],\r\n sealedUp: \"1\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n spliteHeight: \"\",\r\n spliteWidth: \"\",\r\n spliteThickness: \"\",\r\n highDrill: [],\r\n frontDrill: true,\r\n backDrill: true,\r\n remarks: [],\r\n useBoardProcessOption: true,\r\n};\r\nObject.freeze(DefaultBoardProcessOption);\r\n\r\nexport const DefaultCurve2RecOption: Curve2RecOption = {\r\n version: 1,\r\n isSaveMax: false,\r\n isSaveSmall: true,\r\n width: 90,\r\n isAnaly: true,\r\n gap: 3\r\n};\r\nObject.freeze(DefaultCurve2RecOption);\r\n\r\nexport const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {\r\n [EBoardKeyList.RoomName]: \"\",\r\n [EBoardKeyList.CabinetName]: \"\",\r\n [EBoardKeyList.Lines]: LinesType.Positive,\r\n [EBoardKeyList.BigHole]: FaceDirection.Front,\r\n [EBoardKeyList.DrillType]: \"\",\r\n [EBoardKeyList.ComposingFace]: ComposingType.Arbitrary,\r\n upDownDrill: [true, true],\r\n [EBoardKeyList.UpSealed]: \"1\",//封边上下左右\r\n [EBoardKeyList.DownSealed]: \"1\",\r\n [EBoardKeyList.LeftSealed]: \"1\",\r\n [EBoardKeyList.RightSealed]: \"1\",\r\n [EBoardKeyList.KnifeRad]: \"3\",\r\n remarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n [EBoardKeyList.BrMat]: \"\",\r\n [EBoardKeyList.Mat]: \"\",\r\n [EBoardKeyList.Color]: \"\",\r\n grooveAddDepth: \"0\",\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n highDrill: [],\r\n condition: {\r\n [EBoardKeyList.RoomName]: false,\r\n [EBoardKeyList.CabinetName]: false,\r\n [EBoardKeyList.Lines]: true,\r\n [EBoardKeyList.BigHole]: true,\r\n [EBoardKeyList.DrillType]: true,\r\n [EBoardKeyList.ComposingFace]: true,\r\n [EBoardKeyList.UpSealed]: true,\r\n [EBoardKeyList.DownSealed]: true,\r\n [EBoardKeyList.LeftSealed]: true,\r\n [EBoardKeyList.RightSealed]: true,\r\n useZhengFanDrill: true,\r\n remarks: true,\r\n [EBoardKeyList.KnifeRad]: true,\r\n [EBoardKeyList.Mat]: true,\r\n grooveAddDepth: true,\r\n grooveAddLength: true,\r\n grooveAddWidth: true,\r\n upDrill: true,\r\n downDrill: true,\r\n leftDrill: true,\r\n rightDrill: true,\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption = {\r\n count: 1,\r\n isHor: false,\r\n depth: 0,\r\n isDefault: true,\r\n leftDist: 0,\r\n rightDist: 0,\r\n};\r\nObject.freeze(DefaultKuGanOption);\r\n\r\nexport const DefaultR2bOption: IRec2BrOption = {\r\n version: 2,\r\n cabinetDeep: 400,\r\n cabinetBrThick: 18,\r\n cabinetCurtail: 0,\r\n backBrThick: 18,\r\n backBrBiggerThanHeight: 200,\r\n backBrBiggerThanWidth: 200,\r\n backBrFrontMove: 0,\r\n backBrLeftExtend: 0,\r\n backBrRightExtend: 0,\r\n backBrUpExtend: 0,\r\n backBrDownExtend: 0,\r\n verticalBrShrink: 0,\r\n layerBrShrink: 0,\r\n topBrShrink: 0,\r\n bottomBrShrink: 0,\r\n groundLineBrShrink: 0,\r\n farLeftVerticalBrName: \"左侧板\",\r\n farRightVerticalBrName: \"右侧板\",\r\n topMostLayerBrName: \"顶板\",\r\n bottomMostLayerBrName: \"底板\",\r\n bottomMostBackBrName: \"地脚线\",\r\n stripeBrName: \"收口条\",\r\n cabinetName: \"\",\r\n isfarLeftVerticalBrName: true,//最左侧立板名称\r\n isfarRightVerticalBrName: true,\r\n istopMostLayerBrName: true,\r\n isbottomMostLayerBrName: true,\r\n isbottomMostBackBrName: true,\r\n isstripeBrName: true,\r\n iscabinetName: false,//修改柜名\r\n isMultiBackBr: false,\r\n grooveOption: {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n },\r\n roomName: \"\",\r\n boardMatName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n drillType: \"\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n sealedUp: \"1\",\r\n backBrUseTemplate: false,\r\n backBrTemplate: null,\r\n remarks: Array.from({ length: 12 }, () => [\"\", \"\"]),\r\n maxThickness: 20,\r\n useBrName: true,\r\n configName: \"\",\r\n backBrName: \"背板\",\r\n behindIsRelative: false,\r\n footerThickness: 18,\r\n};\r\nObject.freeze(DefaultR2bOption);\r\nexport const DefaultR2b2Option: IRect2Br2Option = {\r\n version: 1,\r\n depthExpr: \"W\",\r\n drillType: \"\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n sealedUp: \"1\",\r\n remarks: Array.from({ length: 12 }, () => [\"\", \"\"]),\r\n maxThickness: 20,\r\n layerShrink: 0,\r\n vertialShrink: 0,\r\n};\r\nObject.freeze(DefaultR2b2Option);\r\n","export function equaln(v1: number, v2: number, fuzz = 1e-5)\r\n{\r\n return Math.abs(v1 - v2) <= fuzz;\r\n}\r\n\r\nexport function FixIndex(index: number, arr: Array | number)\r\n{\r\n let count = (arr instanceof Array) ? arr.length : arr;\r\n if (index < 0)\r\n return count + index;\r\n else if (index >= count)\r\n return index - count;\r\n else\r\n return index;\r\n}\r\n\r\n/**\r\n * @param compart 如果t2大于t1那么返回t2\r\n * @returns 索引\r\n */\r\nexport function Max(arr: T[], compart: (t1: T, t2: T) => boolean): number\r\n{\r\n let best: T = arr[0];\r\n let bestIndex = 0;\r\n for (let i = 1; i < arr.length; i++)\r\n {\r\n let t1 = arr[i];\r\n if (compart(best, t1))\r\n {\r\n best = t1;\r\n bestIndex = i;\r\n }\r\n }\r\n return bestIndex;\r\n}\r\n","import { Face3, Geometry, Line3, Matrix4, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector3, equalv3 } from \"./GeUtils\";\r\nimport { PlaneExt } from \"./Plane\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\n\r\n/**\r\n * 使用轮廓和扫描路径构建扫描几何体,实现衣柜中的顶线或者地脚线之类的实体.\r\n * 该几何体需要轮廓和路径的起始截面垂直,否则构造的实体将会错误.\r\n */\r\nexport class SweepGeometry extends Geometry\r\n{\r\n edgePts: number[] = [];\r\n constructor(contour: Polyline, path: Curve)\r\n {\r\n super();\r\n\r\n this.AddShape(contour, path);\r\n this.computeVertexNormals();\r\n this.computeFaceNormals();\r\n }\r\n\r\n AddShape(contour: Polyline, path: Curve)\r\n {\r\n //路径点表\r\n let pathPts2d = path.Shape.getPoints(8);\r\n let pathPts = pathPts2d.map(AsVector3);\r\n arrayRemoveDuplicateBySort(pathPts, equalv3);\r\n for (let p of pathPts)\r\n p.applyMatrix4(path.OCS);\r\n\r\n let shapePts2d = contour.Shape.getPoints(3);\r\n if (!ShapeUtils.isClockWise(shapePts2d)) shapePts2d.reverse();\r\n\r\n //轮廓点表\r\n let shapePts3d = shapePts2d.map(AsVector3);\r\n\r\n for (let p of shapePts3d)\r\n p.applyMatrix4(contour.OCS);\r\n\r\n let isClosePath = path.IsClose;\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[0], pathPts[pathPts.length - 2], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[0], undefined, pathPts[1]));\r\n //遍历所有的路径节点进行顶点投射\r\n for (let i = 1; i < pathPts.length; i++)\r\n {\r\n if (i === pathPts.length - 1)\r\n {\r\n if (isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, path.Normal, pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n private BuildSideFaces(shapePts2d: Vector2[], pathPts2d: Vector2[], pathPts: Vector3[], verts: Vector3[][])\r\n {\r\n let addCount = 0; //补充个数\r\n shapePts2d[0][\"_mask_\"] = true;\r\n for (let p of shapePts2d) if (p[\"_mask_\"]) addCount++;\r\n let sumCount = addCount + shapePts2d.length; //实际个数\r\n const f4 = (a: number, b: number, c: number, d: number, uvs: Vector2[]) =>\r\n {\r\n let f1 = new Face3(a, b, c);\r\n let f2 = new Face3(b, d, c);\r\n this.faces.push(f1, f2);\r\n this.faceVertexUvs[0].push([uvs[0].clone(), uvs[1].clone(), uvs[2].clone()], [uvs[1].clone(), uvs[3].clone(), uvs[2].clone()]);\r\n };\r\n let vs: number[] = [0]; //vs 对应 y轴\r\n for (let i = 1; i < shapePts2d.length; i++)\r\n vs.push((vs[i - 1] + shapePts2d[i].distanceTo(shapePts2d[i - 1]) * 1e-3));\r\n\r\n let lastStartX = 0;\r\n for (let pathIndex = 0; pathIndex < verts.length; pathIndex++)\r\n {\r\n let pts = verts[pathIndex];\r\n let pts2 = verts[FixIndex(pathIndex + 1, verts)];\r\n\r\n let startIndex = this.vertices.length;\r\n let pBase = pts[0];\r\n let p1 = pathPts[pathIndex];\r\n let p2 = pathPts[FixIndex(pathIndex + 1, pathPts.length)];\r\n let p1Dir = p2.clone().sub(p1).normalize();\r\n\r\n let tempStartX = 0;\r\n\r\n for (let contourIndex = 0; contourIndex < shapePts2d.length; contourIndex++)\r\n {\r\n let p1 = pts[contourIndex];\r\n let p2 = pts2[contourIndex];\r\n let p2d = shapePts2d[contourIndex];\r\n\r\n if (pathIndex !== verts.length - 1)\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.edgePts.push(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z);\r\n\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.vertices.push(p1); //补点\r\n\r\n if (pathIndex !== verts.length - 1)\r\n {\r\n let curIndex = this.vertices.length;\r\n let nextIndex = startIndex + FixIndex(curIndex - startIndex + 1, sumCount);\r\n let curIndex2 = curIndex + sumCount;\r\n let nextIndex2 = nextIndex + sumCount;\r\n\r\n let x1 = lastStartX + p1.clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n let x2 = lastStartX + pts[FixIndex(contourIndex + 1, shapePts2d)].clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n\r\n let x3 = lastStartX + p2.clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n let x4 = lastStartX + pts2[FixIndex(contourIndex + 1, shapePts2d)].clone().sub(pBase).dot(p1Dir) * 1e-3;\r\n\r\n if (contourIndex === 0)\r\n tempStartX = x3;\r\n\r\n let v1 = vs[contourIndex];\r\n let v2 = vs[FixIndex(contourIndex + 1, vs)];\r\n let uvs = [\r\n new Vector2(v1, x1),\r\n new Vector2(v2, x2),\r\n new Vector2(v1, x3),\r\n new Vector2(v2, x4),\r\n ];\r\n f4(curIndex, nextIndex, curIndex2, nextIndex2, uvs);\r\n }\r\n this.vertices.push(p1);\r\n }\r\n lastStartX = tempStartX;\r\n\r\n if (pathPts2d[FixIndex(pathIndex + 1, verts)][\"_mask_\"])\r\n {\r\n for (let contourIndex = 0; contourIndex < shapePts2d.length; contourIndex++)\r\n {\r\n let p1 = pts2[contourIndex];\r\n let p2d = shapePts2d[contourIndex];\r\n if (contourIndex === 0 || p2d[\"_mask_\"])\r\n this.vertices.push(p1); //补点\r\n this.vertices.push(p1);\r\n\r\n let p2 = pts2[FixIndex(contourIndex + 1, pts2)];\r\n this.edgePts.push(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private BuildLid(shapePts2d: Vector2[], verts: Vector3[][])\r\n {\r\n //轮廓三角网格索引\r\n let faces = ShapeUtils.triangulateShape(shapePts2d, []);\r\n for (let v of shapePts2d) v.multiplyScalar(1e-3);//作为uvs\r\n let lastIndex = this.vertices.length;\r\n this.vertices.push(...verts[0].map(p => p.clone()));\r\n this.vertices.push(...verts[verts.length - 1].map(p => p.clone()));\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n this.faces.push(new Face3(lastIndex + a, lastIndex + b, lastIndex + c));\r\n let uvs = faces[i].map(index => shapePts2d[index].clone());\r\n this.faceVertexUvs[0].push(uvs);\r\n this.faces.push(new Face3(lastIndex + verts[0].length + c, lastIndex + verts[0].length + b, lastIndex + verts[0].length + a));\r\n this.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n\r\n //构建线框\r\n for (let i = 0; i < shapePts2d.length; i++)\r\n {\r\n let nextIndex = FixIndex(i + 1, shapePts2d);\r\n\r\n let pts1 = verts[0];\r\n let p0 = pts1[i];\r\n let p1 = pts1[nextIndex];\r\n this.edgePts.push(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z);\r\n\r\n let pts2 = verts[verts.length - 1];\r\n p0 = pts2[i];\r\n p1 = pts2[nextIndex];\r\n this.edgePts.push(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 将轮廓变换到`路径上某个点`.\r\n *\r\n * @param {Vector3[]} contourPts 原始的轮廓点(在世界坐标系)\r\n * @param {Vector3} normal 路径法向量\r\n * @param {Vector3} curP 路径上当前点\r\n * @param {Vector3} [preP] 路径的前一个点\r\n * @param {Vector3} [nextP] 路径下一个点\r\n * @returns 变换后的轮廓点表\r\n */\r\nfunction ProjectionToPlane(contourPts: Vector3[], normal: Vector3, curP: Vector3, preP?: Vector3, nextP?: Vector3): Vector3[]\r\n{\r\n let pts: Vector3[];\r\n if (!preP && nextP)\r\n {\r\n let mat = ContourTransfromToPath(curP, normal, nextP.clone().sub(curP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n }\r\n else if (!nextP && preP)\r\n {\r\n let mat = ContourTransfromToPath(curP, normal, curP.clone().sub(preP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n }\r\n else if (nextP && preP)\r\n {\r\n let dir = curP.clone().sub(preP).normalize();\r\n let v2 = nextP.clone().sub(curP).normalize();\r\n //角平分线向量\r\n let v = dir.clone().sub(v2);\r\n //v1v2pm向量\r\n let nv1v2 = dir.clone().cross(v2);\r\n let norm = nv1v2.cross(v);\r\n\r\n //角平分线的平面\r\n let plane = new PlaneExt(norm, curP);\r\n\r\n let mat = ContourTransfromToPath(preP, normal, dir);\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mat));\r\n pts = pts.map(p => plane.intersectLine(new Line3(p, p.clone().add(dir)), new Vector3(), true));\r\n }\r\n return pts;\r\n}\r\n\r\n/**\r\n * 计算轮廓变换到`路径上某个点`的矩阵\r\n *\r\n * @param {Vector3} pt 路径上的点\r\n * @param {Vector3} norm 曲线法向量\r\n * @param {Vector3} dir 点前进的方向.\r\n * @returns {Matrix4}\r\n */\r\nfunction ContourTransfromToPath(pt: Vector3, norm: Vector3, dir: Vector3): Matrix4\r\n{\r\n let vy = norm;\r\n let vz = dir.normalize();\r\n let vx = vz.clone().cross(vy);\r\n\r\n let mat = new Matrix4();\r\n mat.makeBasis(vx, vy, vz);\r\n mat.setPosition(pt);\r\n return mat;\r\n}\r\n","import { BufferGeometry, CatmullRomCurve3, Line, MathUtils, Matrix3, Object3D, Shape, Vector3 } from 'three';\r\nimport { arrayLast } from '../Common/ArrayExt';\r\nimport { ColorMaterial } from '../Common/ColorPalette';\r\nimport { Pts2Polyline } from '../Common/CurveUtils';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils } from '../Geometry/BufferGeometryUtils';\r\nimport { equalv3 } from '../Geometry/GeUtils';\r\nimport { RenderType } from '../GraphicsSystem/RenderType';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Curve } from './Entity/Curve';\r\n\r\n@Factory\r\nexport class Spline extends Curve\r\n{\r\n private _PointList: Vector3[];\r\n private _ClosedMark: boolean = false;\r\n constructor(points?: Vector3[])\r\n {\r\n super();\r\n this._PointList = points || [];\r\n }\r\n\r\n get Shape()\r\n {\r\n return new Shape();\r\n }\r\n get Curve3()\r\n {\r\n return new CatmullRomCurve3(this.Points);\r\n }\r\n\r\n get Length()\r\n {\r\n return this.Curve3.getLength();\r\n }\r\n\r\n get Points()\r\n {\r\n return this._PointList;\r\n }\r\n set Points(v: Vector3[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._PointList = v.map(p => p.clone().applyMatrix4(this.OCSInv));\r\n this.Update();\r\n }\r\n //闭合标志\r\n get CloseMark(): boolean\r\n {\r\n return this._ClosedMark;\r\n }\r\n //曲线是否闭合\r\n get IsClose(): boolean\r\n {\r\n return this.CloseMark || (equalv3(this.StartPoint, this.EndPoint, 1e-4)) && this.EndParam > 1;\r\n }\r\n set CloseMark(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = v;\r\n this.Update();\r\n }\r\n get StartPoint()\r\n {\r\n return this._PointList[0];\r\n }\r\n get EndPoint()\r\n {\r\n return arrayLast(this._PointList);\r\n }\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return this._PointList.length - 1;\r\n }\r\n GetGripPoints()\r\n {\r\n return this._PointList.map(p => p.clone().applyMatrix4(this.OCS));\r\n }\r\n GetStretchPoints()\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n this._PointList[index].add(vec);\r\n }\r\n this.Update();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n {\r\n this._PointList[index].add(vec);\r\n }\r\n this.Update();\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let geometry = new BufferGeometry().setFromPoints(this.Curve3.getPoints(60));\r\n return new Line(geometry, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let spl = en as Line;\r\n if (this.CloseMark && !equalv3(this._PointList[0], arrayLast(this._PointList)))\r\n this._PointList.push(this._PointList[0].clone());\r\n let curve = this.Curve3;\r\n\r\n let pts = curve.getPoints(this.Points.length * 10);\r\n if (!BufferGeometryUtils.UpdatePts(spl.geometry as BufferGeometry, pts))\r\n {\r\n spl.geometry.dispose();\r\n spl.geometry = BufferGeometryUtils.CreateFromPts(pts);\r\n }\r\n }\r\n Convert2Polyline(count = 0)\r\n {\r\n let curve3 = this.Curve3;\r\n\r\n //修正个数\r\n if (!count) count = Math.floor(curve3.getLength() / 30);\r\n count = MathUtils.clamp(count, this._PointList.length * 5, this._PointList.length * 20);\r\n\r\n if ((count & 1) === 1)\r\n count++;\r\n\r\n let pts = curve3.getPoints(count);\r\n\r\n let isClose = this.IsClose;\r\n if (isClose) pts.pop();\r\n\r\n let pl = Pts2Polyline(pts, isClose);\r\n pl.CloseMark = isClose;\r\n pl.ApplyMatrix(this.OCS);\r\n return pl;\r\n\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n let count = file.Read();\r\n this._PointList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this._PointList.push(new Vector3().fromArray(file.Read()));\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.Write(this._PointList.length);\r\n this._PointList.forEach(p => file.Write(p.toArray()));\r\n }\r\n}\r\n","import { Vector3, Matrix4 } from 'three';\r\n\r\n// Quote from:\r\n// https://github.com/Mugen87/yume/blob/master/src/javascript/engine/etc/OBB.js\r\n// 即obb.js(本项目中已存在)\r\n\r\n// Reference material:\r\n//https://stackoverflow.com/questions/28499800/oriented-box-intersection-in-threejs\r\n//http://www.cnblogs.com/iamzhanglei/archive/2012/06/07/2539751.html\r\n//https://github.com/Mugen87/yume/blob/master/src/javascript/engine/etc/OBB.js\r\n\r\nexport class OBB\r\n{\r\n _EPSILON = 1e-3;\r\n\r\n public center: Vector3;\r\n\r\n constructor(public ocs: Matrix4, public halfSizes: Vector3)\r\n {\r\n this.center = halfSizes.clone().applyMatrix4(ocs);\r\n }\r\n\r\n intersectsOBB(obb: OBB, is2D?: boolean, ucsInv?: Matrix4): boolean\r\n {\r\n let newCenter: Vector3;\r\n let newObbCenter: Vector3;\r\n let cs: Matrix4;\r\n let obbcs: Matrix4;\r\n if (is2D)\r\n {\r\n let mtx1 = new Matrix4().multiplyMatrices(ucsInv, this.ocs);\r\n let mtx2 = new Matrix4().multiplyMatrices(ucsInv, obb.ocs);\r\n cs = mtx1;\r\n obbcs = mtx2;\r\n cs.elements[14] = 0;\r\n obbcs.elements[14] = 0;\r\n newCenter = this.halfSizes.clone().applyMatrix4(cs);\r\n newObbCenter = obb.halfSizes.clone().applyMatrix4(obbcs);\r\n }\r\n let xAxisA = new Vector3();\r\n let yAxisA = new Vector3();\r\n let zAxisA = new Vector3();\r\n\r\n let xAxisB = new Vector3();\r\n let yAxisB = new Vector3();\r\n let zAxisB = new Vector3();\r\n\r\n let translation = new Vector3();\r\n\r\n let vector = new Vector3();\r\n\r\n let axisA: Vector3[] = [];\r\n let axisB: Vector3[] = [];\r\n let rotationMatrix = [[], [], []];\r\n let rotationMatrixAbs = [[], [], []];\r\n\r\n let halfSizeA: number, halfSizeB: number;\r\n let t: number, i: number;\r\n\r\n // extract each axis\r\n (cs ?? this.ocs).extractBasis(xAxisA, yAxisA, zAxisA);\r\n (obbcs ?? obb.ocs).extractBasis(xAxisB, yAxisB, zAxisB);\r\n\r\n // push basis vectors into arrays, so you can access them via indices\r\n axisA.push(xAxisA, yAxisA, zAxisA);\r\n axisB.push(xAxisB, yAxisB, zAxisB);\r\n\r\n // get displacement vector\r\n vector.subVectors(newObbCenter ?? obb.center, newCenter ?? this.center);\r\n\r\n // express the translation vector in the coordinate frame of the current\r\n // OBB (this)\r\n for (i = 0; i < 3; i++)\r\n {\r\n translation.setComponent(i, vector.dot(axisA[i]));\r\n }\r\n\r\n // generate a rotation matrix that transforms from world space to the\r\n // OBB's coordinate space\r\n for (i = 0; i < 3; i++)\r\n {\r\n for (let j = 0; j < 3; j++)\r\n {\r\n rotationMatrix[i][j] = axisA[i].dot(axisB[j]);\r\n rotationMatrixAbs[i][j] = Math.abs(rotationMatrix[i][j]) + this._EPSILON;\r\n }\r\n }\r\n\r\n // test the three major axes of this OBB\r\n for (i = 0; i < 3; i++)\r\n {\r\n vector.set(rotationMatrixAbs[i][0], rotationMatrixAbs[i][1], rotationMatrixAbs[i][2]);\r\n\r\n halfSizeA = this.halfSizes.getComponent(i);\r\n halfSizeB = obb.halfSizes.dot(vector);\r\n\r\n if (Math.abs(translation.getComponent(i)) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n // test the three major axes of other OBB\r\n for (i = 0; i < 3; i++)\r\n {\r\n vector.set(rotationMatrixAbs[0][i], rotationMatrixAbs[1][i], rotationMatrixAbs[2][i]);\r\n\r\n halfSizeA = this.halfSizes.dot(vector);\r\n halfSizeB = obb.halfSizes.getComponent(i);\r\n\r\n vector.set(rotationMatrix[0][i], rotationMatrix[1][i], rotationMatrix[2][i]);\r\n t = translation.dot(vector);\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n }\r\n\r\n // test the 9 different cross-axes\r\n\r\n // A.x B.x\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][0] + this.halfSizes.z * rotationMatrixAbs[1][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[0][2] + obb.halfSizes.z * rotationMatrixAbs[0][1];\r\n\r\n t = translation.z * rotationMatrix[1][0] - translation.y * rotationMatrix[2][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.x < cross> B.y\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][1] + this.halfSizes.z * rotationMatrixAbs[1][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[0][2] + obb.halfSizes.z * rotationMatrixAbs[0][0];\r\n\r\n t = translation.z * rotationMatrix[1][1] - translation.y * rotationMatrix[2][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.x B.z\r\n halfSizeA = this.halfSizes.y * rotationMatrixAbs[2][2] + this.halfSizes.z * rotationMatrixAbs[1][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[0][1] + obb.halfSizes.y * rotationMatrixAbs[0][0];\r\n\r\n t = translation.z * rotationMatrix[1][2] - translation.y * rotationMatrix[2][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.x\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][0] + this.halfSizes.z * rotationMatrixAbs[0][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[1][2] + obb.halfSizes.z * rotationMatrixAbs[1][1];\r\n\r\n t = translation.x * rotationMatrix[2][0] - translation.z * rotationMatrix[0][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.y\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][1] + this.halfSizes.z * rotationMatrixAbs[0][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[1][2] + obb.halfSizes.z * rotationMatrixAbs[1][0];\r\n\r\n t = translation.x * rotationMatrix[2][1] - translation.z * rotationMatrix[0][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.y B.z\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[2][2] + this.halfSizes.z * rotationMatrixAbs[0][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[1][1] + obb.halfSizes.y * rotationMatrixAbs[1][0];\r\n\r\n t = translation.x * rotationMatrix[2][2] - translation.z * rotationMatrix[0][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.x\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][0] + this.halfSizes.y * rotationMatrixAbs[0][0];\r\n halfSizeB = obb.halfSizes.y * rotationMatrixAbs[2][2] + obb.halfSizes.z * rotationMatrixAbs[2][1];\r\n\r\n t = translation.y * rotationMatrix[0][0] - translation.x * rotationMatrix[1][0];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.y\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][1] + this.halfSizes.y * rotationMatrixAbs[0][1];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[2][2] + obb.halfSizes.z * rotationMatrixAbs[2][0];\r\n\r\n t = translation.y * rotationMatrix[0][1] - translation.x * rotationMatrix[1][1];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // A.z B.z\r\n halfSizeA = this.halfSizes.x * rotationMatrixAbs[1][2] + this.halfSizes.y * rotationMatrixAbs[0][2];\r\n halfSizeB = obb.halfSizes.x * rotationMatrixAbs[2][1] + obb.halfSizes.y * rotationMatrixAbs[2][0];\r\n\r\n t = translation.y * rotationMatrix[0][2] - translation.x * rotationMatrix[1][2];\r\n\r\n if (Math.abs(t) > halfSizeA + halfSizeB)\r\n {\r\n return false;\r\n }\r\n\r\n // no separating axis exists, so the two OBB don't intersect\r\n return true;\r\n }\r\n\r\n // setFromObject(obj: THREE.Mesh): OBB;\r\n // setFromAABB(aabb: THREE.Box3): OBB;\r\n\r\n // setFromSphere(sphere: THREE.Shape): OBB;\r\n\r\n // closestPoint(point: THREE.Vector3): THREE.Vector3\r\n // isPointContained(point: THREE.Vector3): boolean\r\n // isAABBContained(aabb: THREE.Box3): boolean\r\n // isLineContained(line: THREE.Line3): boolean\r\n // isTriangleContained(tarianlg: THREE.Triangle): boolean\r\n // intersectsAABB(box: THREE.Box3): boolean\r\n // intersectsSphere(sphere: THREE.Sphere): boolean\r\n // intersectsOBB(box: OBB): boolean;\r\n // intersectsPlane(plane: Plane): boolean\r\n // intersectsRay(ray: Ray): boolean\r\n // intersectRay(ray: Ray): Vector3\r\n // intersectSphere(sphere: Sphere): Vector3\r\n // size(optionalTarget: Vector3): Vector3\r\n\r\n // translate(offset: Vector3): OBB\r\n\r\n // copy(obb: OBB): OBB\r\n // clone(obb: OBB): OBB\r\n\r\n}\r\n","import { BoxBufferGeometry, BufferGeometry, Float32BufferAttribute, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, Line3, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { Log } from \"../../Common/Log\";\r\nimport { tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equalv3, isParallelTo, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { SweepGeometry } from '../../Geometry/SweepGeometry';\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from '../Entity/Polyline';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Spline } from \"../Spline\";\r\nimport { FixIndex } from './../../Common/Utils';\r\nimport { OBB } from './../../Geometry/OBB/obb';\r\nimport { PlaneExt } from './../../Geometry/Plane';\r\n\r\n@Factory\r\nexport class SweepSolid extends Entity\r\n{\r\n static UseRectFakerContour = false;\r\n\r\n private _Contour: Polyline;\r\n private _PathCurve: Curve;\r\n constructor(contour?: Polyline, pathCurve?: Curve)\r\n {\r\n super();\r\n this._Contour = contour;\r\n this._PathCurve = pathCurve;\r\n\r\n if (this._Contour && this._Contour.Id)\r\n this._Contour = this._Contour.Clone();\r\n\r\n if (this._Contour && this._PathCurve)\r\n {\r\n this.TransfromPathToWCS();\r\n this.OCS = this._PathCurve.OCS;\r\n this._SpaceOCS.copy(this._PathCurve.OCS);\r\n this._PathCurve.ApplyMatrix(this._PathCurve.OCSInv);\r\n }\r\n }\r\n\r\n Explode()\r\n {\r\n return [this._Contour.Clone(), this._PathCurve.Clone()];\r\n }\r\n\r\n get Contour()\r\n {\r\n return this._Contour;\r\n }\r\n get Path()\r\n {\r\n return this._PathCurve;\r\n }\r\n Reverse()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._PathCurve.Reverse();\r\n this.Update();\r\n }\r\n /**保持路径左下角在0点 */\r\n private PathTo0()\r\n {\r\n let min = this._PathCurve.BoundingBox.min;\r\n this._PathCurve.Position = this._PathCurve.Position.sub(min);\r\n this.OCS = this.OCS.multiply(MoveMatrix(min));\r\n }\r\n /**\r\n * 将轮廓变换到wcs空间,当用户选定某个与扫描线起点相切的轮廓时.\r\n */\r\n private TransfromPathToWCS()\r\n {\r\n if (equalv3(this._Contour.Normal, new Vector3(0, 0, 1)))\r\n return;\r\n\r\n let fDir = this._PathCurve.GetFistDeriv(0);\r\n if (isParallelTo(fDir, this._Contour.Normal))\r\n {\r\n //构建回家的矩阵\r\n let toWcsMat4Inv = new Matrix4();\r\n let zv = fDir.normalize();\r\n let yv = this._PathCurve.Normal;\r\n let xv = zv.clone().cross(yv);\r\n\r\n toWcsMat4Inv.makeBasis(xv, yv, zv);\r\n toWcsMat4Inv.setPosition(this._PathCurve.StartPoint);\r\n\r\n let toWcsMat4 = new Matrix4().getInverse(toWcsMat4Inv);\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n\r\n let z = this._Contour.StartPoint.z;\r\n if (IsPointInPolyLine(this._Contour, new Vector3(0, 0, z)))\r\n {\r\n let z = this._Contour.StartPoint.z;\r\n this._Contour.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -z)));\r\n return;\r\n }\r\n else\r\n this._Contour.ApplyMatrix(toWcsMat4Inv);\r\n }\r\n\r\n let lDir = this._PathCurve.GetFistDeriv(this._PathCurve.EndParam);\r\n if (isParallelTo(lDir, this._Contour.Normal))\r\n {\r\n //再次构建回家的矩阵\r\n let toWcsMat4Inv = new Matrix4();\r\n let zv = lDir.negate().normalize();\r\n let yv = this._PathCurve.Normal;\r\n let xv = zv.clone().cross(yv);\r\n\r\n toWcsMat4Inv.makeBasis(xv, yv, zv);\r\n toWcsMat4Inv.setPosition(this._PathCurve.EndPoint);\r\n\r\n let toWcsMat4 = new Matrix4().getInverse(toWcsMat4Inv);\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n\r\n let z = this._Contour.StartPoint.z;\r\n if (IsPointInPolyLine(this._Contour, new Vector3(0, 0, z)))\r\n {\r\n let z = this._Contour.StartPoint.z;\r\n this._Contour.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -z)));\r\n\r\n this._PathCurve.Reverse();\r\n return;\r\n }\r\n else\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n }\r\n Log(\"错误:提供的轮廓没有和路径垂直!\");\r\n }\r\n private _MeshGeometry: SweepGeometry;\r\n private _lineGeo: LineGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n try\r\n {\r\n let contour = this._Contour;\r\n if (SweepSolid.UseRectFakerContour && contour.EndParam > 10)\r\n {\r\n let box = contour.BoundingBox;\r\n contour = new Polyline().RectangleFrom2Pt(box.min, box.max);\r\n }\r\n\r\n this._MeshGeometry = new SweepGeometry(contour, this._PathCurve);\r\n this._EdgeGeometry = new BufferGeometry().setAttribute('position', new Float32BufferAttribute(this._MeshGeometry.edgePts, 3));\r\n this.getLineGeo(this._MeshGeometry.edgePts);\r\n this._MeshGeometry.edgePts = undefined;\r\n return this._MeshGeometry;\r\n }\r\n catch (error)\r\n {\r\n return new BoxBufferGeometry(1000, 1000, 1000);\r\n }\r\n }\r\n getLineGeo(pts: number[])\r\n {\r\n this._lineGeo = new LineGeometry();\r\n let lineSegments = new Float32Array(pts);\r\n var instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n this._lineGeo.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n this._lineGeo.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n }\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Edge)\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n return new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n else if (renderType === RenderType.Print)\r\n {\r\n let mat2 = ColorMaterial.GetPrintConceptualMaterial();\r\n let meshGeo = this.MeshGeometry;\r\n let mesh = new Mesh(meshGeo, mat2);\r\n let line = new Line2(this._lineGeo, ColorMaterial.PrintLineMatrial);\r\n return new Object3D().add(line, mesh);\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(this._PathCurve.DrawObject);\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, this.MeshMaterial),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Edge)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n Object3DRemoveAll(obj);\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n Object3DRemoveAll(obj);\r\n obj.add((this._PathCurve.DrawObject));\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n Object3DRemoveAll(obj);\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, this.MeshMaterial),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D)\r\n {\r\n if (type === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n else if (type === RenderType.Physical2)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n if (!this.MeshGeometry.boundingBox)\r\n this.MeshGeometry.computeBoundingBox();\r\n\r\n return this.MeshGeometry.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\r\n get OBB(): OBB\r\n {\r\n let box = this.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n return new OBB(MoveMatrix(box.min), size.multiplyScalar(0.5));\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetEndPoint();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this._PathCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n if (snapMode === ObjectSnapMode.Mid)\r\n return [...pts, ...this.GetMidPoints()];\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n let pts = this._PathCurve.GetGripPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n GetStretchPoints()\r\n {\r\n let pts = this._PathCurve.GetStretchPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n private UpdateEndMtx(dir: Vector3, pos: Vector3)\r\n {\r\n let y = this.Normal;\r\n let roMat = new Matrix4().extractRotation(this.OCS);\r\n let z = dir.applyMatrix4(roMat);\r\n let x = z.clone().cross(y);\r\n tempMatrix1.makeBasis(x, y, z);\r\n tempMatrix1.setPosition(pos.applyMatrix4(this.OCS));\r\n }\r\n private GetEndPoint()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n let cus: Curve[];\r\n if (this._PathCurve instanceof Polyline)\r\n cus = this._PathCurve.Explode() as Curve[];\r\n else\r\n cus = [this._PathCurve];\r\n\r\n let roMat = new Matrix4().extractRotation(this.OCS);\r\n\r\n const pts: Vector3[] = [];\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let l1 = cus[i];\r\n let l2: Curve;\r\n if (this._PathCurve.IsClose)\r\n {\r\n l2 = cus[FixIndex(i + 1, cus.length)];\r\n }\r\n else\r\n {\r\n l2 = cus[i + 1];\r\n if (i === 0)\r\n {\r\n this.UpdateEndMtx(l1.GetFistDeriv(0).normalize(), l1.StartPoint);\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n }\r\n\r\n let p = l1.EndPoint;\r\n let d1 = l1.GetFistDeriv(1).normalize();\r\n this.UpdateEndMtx(d1.clone(), p);\r\n\r\n if (l2)\r\n {\r\n let d2 = l2.GetFistDeriv(0).normalize().applyMatrix4(roMat);\r\n d1.applyMatrix4(roMat);\r\n d2.add(d1).normalize();\r\n if (isParallelTo(d1, d2))\r\n {\r\n if (l1 instanceof Line && l2 instanceof Line)\r\n {\r\n }\r\n else\r\n {\r\n let ps = conPts.map(p => p.clone().applyMatrix4(tempMatrix1));\r\n pts.push(...ps);\r\n }\r\n continue;\r\n }\r\n p.copy(l1.EndPoint);\r\n //角平分线的平面;\r\n let plane = new PlaneExt(d2, p.applyMatrix4(this.OCS));\r\n let ps = conPts.map(p => p.clone().applyMatrix4(tempMatrix1));\r\n pts.push(...ps.map(p => plane.intersectLine(new Line3(p.clone().sub(d1.clone().multiplyScalar(-100)), p.clone().add(d1)), new Vector3(), true)));\r\n }\r\n else\r\n {\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n }\r\n return pts;\r\n }\r\n private GetMidPoints()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n const pts: Vector3[] = [];\r\n\r\n for (let i = 0.5; i < this._PathCurve.EndParam; i++)\r\n {\r\n let p = this._PathCurve.GetPointAtParam(i);\r\n let d1 = this._PathCurve.GetFistDeriv(i).normalize();\r\n this.UpdateEndMtx(d1, p);\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n return pts;\r\n\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this.IfPathIsLineThenZ0Vector(vec);\r\n\r\n this._PathCurve.MoveGripPoints(indexList,\r\n vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n this.Update();\r\n }\r\n\r\n //如果路径是直线,我们在这里避免vec传递z轴信息\r\n private IfPathIsLineThenZ0Vector(vec: Vector3)\r\n {\r\n if (this._PathCurve instanceof Line)\r\n {\r\n let ocsinv = this._PathCurve.OCSInv.setPosition(0, 0, 0);\r\n vec.applyMatrix4(ocsinv).setZ(0);\r\n vec.applyMatrix4(this._PathCurve.OCSNoClone);\r\n }\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this.IfPathIsLineThenZ0Vector(vec);\r\n\r\n this._PathCurve.MoveStretchPoints(indexList,\r\n vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)));\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._Contour = file.ReadObject() as Polyline;\r\n this._PathCurve = file.ReadObject() as Curve;\r\n\r\n if (this._Contour instanceof Spline || this._PathCurve instanceof Spline)\r\n {\r\n this._isErase = true;\r\n Log(\"放样实体是样条线生成的,自动删除它!\");\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.WriteObject(this._Contour);\r\n file.WriteObject(this._PathCurve);\r\n }\r\n}\r\n","import { Matrix4 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { GetPointAtCurveDir } from \"../../Common/CurveUtils\";\r\nimport { DefaultToplineMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { equaln, isPerpendicularityTo, rotatePoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { IToplineOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { SweepSolid } from '../3DSolid/SweepSolid';\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\n\r\n@Factory\r\nexport class HardwareTopline extends SweepSolid\r\n{\r\n @AutoRecord HardwareOption: IToplineOption = { ...DefaultToplineMetalsOption };\r\n @AutoRecord DataList: [string, string][] = [];\r\n private _contourRotation = 0;\r\n get ContourRotation()\r\n {\r\n return this._contourRotation;\r\n }\r\n private _ContourWidth: number;\r\n private get Contours()\r\n {\r\n let c = this.Path;\r\n let conBox = this.Contour.BoundingBox;\r\n let cMin = conBox.min;\r\n let cMax = conBox.max;\r\n let y = ZAxis;\r\n let z = c.GetFistDeriv(0).normalize();\r\n let x = z.clone().cross(y);\r\n let mat = new Matrix4().makeBasis(x, y, z);\r\n mat.setPosition(c.StartPoint);\r\n [cMin, cMax].forEach(p => p.applyMatrix4(mat).setZ(0));\r\n\r\n let firstCurve: Curve;\r\n if (c instanceof Polyline)\r\n firstCurve = c.GetCurveAtParam(0);\r\n else\r\n firstCurve = c;\r\n\r\n let closePt = firstCurve.GetClosestPointTo(cMin, false);\r\n let offset = cMin.distanceTo(closePt);\r\n let dir = GetPointAtCurveDir(firstCurve, cMin);\r\n let cus = this.Path.GetOffsetCurves(offset * dir);\r\n let l1 = cus[0] ?? this.Path.Clone();\r\n\r\n closePt = firstCurve.GetClosestPointTo(cMax, false);\r\n let offset2 = cMax.distanceTo(closePt);\r\n dir = GetPointAtCurveDir(firstCurve, cMax);\r\n cus = this.Path.GetOffsetCurves(offset2 * dir);\r\n let l2 = cus[0] ?? this.Path.Clone();\r\n\r\n this._ContourWidth = offset + offset2;\r\n return [l1, l2];\r\n }\r\n /**\r\n *延伸取最大最小轮廓每段首尾到前面线段,取最长线段作为分段长\r\n *\r\n */\r\n get Segmentations()\r\n {\r\n const [l1, l2] = this.Contours;\r\n if (!(l1 instanceof Polyline))\r\n return [l1];\r\n\r\n let cus1 = l1.Explode() as Curve[];\r\n let cus2 = l2.Explode() as Curve[];\r\n\r\n [cus1, cus2] = cus1.length < cus2.length ? [cus2, cus1] : [cus1, cus2];\r\n\r\n let sgs: Curve[] = [];\r\n\r\n const AddSgs = (c1: Curve, c2: Curve) =>\r\n {\r\n sgs.push(c1.Length > c2.Length ? c1 : c2);\r\n };\r\n\r\n const ExtendCurve = (c: Curve, refC: Curve, isPre) =>\r\n {\r\n let pts = c.IntersectWith2(refC, IntersectOption.ExtendBoth).filter(r =>\r\n {\r\n if (isPre)\r\n return r.thisParam < 0;\r\n else\r\n return r.thisParam > 1;\r\n });\r\n if (isPre)\r\n {\r\n pts.sort((r1, r2) => r2.thisParam - r1.thisParam);\r\n if (pts.length > 0 && pts[0].thisParam < 0)\r\n c.Extend(pts[0].thisParam);\r\n }\r\n else\r\n {\r\n pts.sort((r1, r2) => r1.thisParam - r2.thisParam);\r\n if (pts.length > 0 && pts[0].thisParam > 1)\r\n c.Extend(pts[0].thisParam);\r\n }\r\n };\r\n const IsNoRelativeCurve = (c1: Curve, c2: Curve) =>\r\n {\r\n if ((c1 instanceof Line) !== (c2 instanceof Line))\r\n return true;\r\n\r\n let midPt = c1.GetPointAtParam(0.5);\r\n let closePt = c2.GetClosestPointTo(midPt, false);\r\n return !closePt || !equaln(midPt.distanceTo(closePt), this._ContourWidth, 1e-3);\r\n };\r\n\r\n const HasRelativeCurveAndChange = (target: Curve, cs: Curve[], isChange = false) =>\r\n {\r\n let index = cs.findIndex(c => !IsNoRelativeCurve(c, target));\r\n if (index !== -1)\r\n {\r\n if (isChange && l1.IsClose)\r\n cs.unshift(...cs.splice(index));\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n\r\n if (cus1.length !== cus2.length)\r\n arrayRemoveIf(cus2, c => !HasRelativeCurveAndChange(c, cus1));\r\n\r\n for (let i = 0; i < cus1.length; i++)\r\n {\r\n let c1 = cus1[i];\r\n let c2 = cus2[i];\r\n\r\n if (cus1.length !== cus2.length)\r\n {\r\n if (IsNoRelativeCurve(c1, c2))\r\n {\r\n sgs.push(c1);\r\n cus1.splice(i, 1);\r\n i--;\r\n continue;\r\n }\r\n }\r\n else\r\n {\r\n //第一段验证是否是关联段,不关联重置数组顺序\r\n if (i === 0)\r\n {\r\n if (IsNoRelativeCurve(c1, c2))\r\n {\r\n if (!HasRelativeCurveAndChange(c1, cus2, true))\r\n {\r\n console.error(\"错误\");\r\n return cus1;\r\n }\r\n i--;\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n let nextC1: Curve;\r\n\r\n if (l1.IsClose)\r\n {\r\n nextC1 = cus1[FixIndex(i + 1, cus1.length)];\r\n }\r\n else\r\n {\r\n if (i < cus1.length - 1)\r\n {\r\n nextC1 = cus1[i + 1];\r\n }\r\n }\r\n\r\n if (nextC1)\r\n {\r\n let derv = c1.GetFistDeriv(0).normalize();\r\n let derv2 = nextC1.GetFistDeriv(0).normalize();\r\n\r\n if (isPerpendicularityTo(derv, derv2) && isPerpendicularityTo(derv, c1.StartPoint.sub(c2.StartPoint).normalize()))\r\n {\r\n AddSgs(c1, c2);\r\n continue;\r\n }\r\n }\r\n\r\n let nextDerv1 = c1.GetFistDeriv(1).normalize();\r\n let nextDerv2 = c2.GetFistDeriv(1).normalize();\r\n let preDerv1 = c1.GetFistDeriv(0).normalize();\r\n let preDerv2 = c2.GetFistDeriv(0).normalize();\r\n [nextDerv1, nextDerv2, preDerv1, preDerv2].forEach(d => rotatePoint(d, Math.PI / 2));\r\n\r\n let preRefLine1 = new Line(c1.StartPoint, c1.StartPoint.add(preDerv1));\r\n let preRefLine2 = new Line(c2.StartPoint, c2.StartPoint.add(preDerv2));\r\n\r\n let nextRefLine1 = new Line(c1.EndPoint, c1.EndPoint.add(nextDerv1));\r\n let nextRefLine2 = new Line(c2.EndPoint, c2.EndPoint.add(nextDerv2));\r\n\r\n ExtendCurve(c1, nextRefLine2, false);\r\n ExtendCurve(c2, nextRefLine1, false);\r\n\r\n ExtendCurve(c1, preRefLine2, true);\r\n ExtendCurve(c2, preRefLine1, true);\r\n\r\n AddSgs(c1, c2);\r\n }\r\n\r\n return sgs;\r\n }\r\n get MaxLength()\r\n {\r\n return this.Segmentations.reduce((len, c) => len + c.Length, 0);\r\n }\r\n set ContourRotation(ro: number)\r\n {\r\n if (ro === this._contourRotation)\r\n return;\r\n let diffRo = ro - this._contourRotation;\r\n this._contourRotation = ro;\r\n let mat = new Matrix4().makeRotationZ(diffRo);\r\n this.Contour.ApplyMatrix(mat);\r\n this.Update();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n\r\n this._contourRotation = file.Read();\r\n\r\n this.HardwareOption.addLen = file.Read();\r\n this.HardwareOption.name = file.Read();\r\n this.HardwareOption.roomName = file.Read();\r\n this.HardwareOption.cabinetName = file.Read();\r\n this.HardwareOption.costExpr = file.Read();\r\n this.HardwareOption.actualExpr = file.Read();\r\n this.HardwareOption.model = file.Read();\r\n this.HardwareOption.factory = file.Read();\r\n this.HardwareOption.brand = file.Read();\r\n this.HardwareOption.spec = file.Read();\r\n this.HardwareOption.comments = file.Read();\r\n\r\n let count = file.Read();\r\n this.DataList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n this.DataList.push(d);\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n\r\n file.Write(this._contourRotation);\r\n\r\n file.Write(this.HardwareOption.addLen);\r\n file.Write(this.HardwareOption.name);\r\n file.Write(this.HardwareOption.roomName);\r\n file.Write(this.HardwareOption.cabinetName);\r\n file.Write(this.HardwareOption.costExpr);\r\n file.Write(this.HardwareOption.actualExpr);\r\n file.Write(this.HardwareOption.model);\r\n file.Write(this.HardwareOption.factory);\r\n file.Write(this.HardwareOption.brand);\r\n file.Write(this.HardwareOption.spec);\r\n file.Write(this.HardwareOption.comments);\r\n\r\n file.Write(this.DataList.length);\r\n for (let data of this.DataList)\r\n {\r\n file.Write(data[0]);\r\n file.Write(data[1]);\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ParseExpr, safeEval } from \"../../Common/eval\";\r\nimport { Intent, Toaster } from \"../../Common/Toaster\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Hole } from \"../../DatabaseServices/3DSolid/Hole\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { GroupRecord } from \"../../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\n\r\nexport interface ICountType\r\n{\r\n name?: string;\r\n count: number;\r\n entity?: T;\r\n count2?: number | string;\r\n unit?: string;\r\n length?: number;\r\n}\r\nexport type GetCountOption = { sealGruopKey: (block: Board) => string; };\r\nclass LookOverBoardInfosTool\r\n{\r\n private drillTypeMap: Map = new Map();\r\n private sealMap: Map = new Map();\r\n private boardMap = new Map();\r\n GetCount(brs: (Board | IHardwareType)[], options: GetCountOption = null)\r\n {\r\n let drillCount: ICountType[] = [];\r\n let sealCount: ICountType[] = [];\r\n let hardwareCount: ICountType[] = [];\r\n let areaCount: ICountType[] = [];\r\n\r\n this.drillTypeMap.clear();\r\n this.sealMap.clear();\r\n this.Update(brs, options);\r\n if (this.drillTypeMap.size > 0)\r\n for (let [k, v] of this.drillTypeMap)\r\n {\r\n if (v[0] instanceof Hole)\r\n if (k === \"木销\")\r\n drillCount.push({ name: k, count: v.length });\r\n else if (k === \"层板钉\")\r\n drillCount.push({ name: k, count: v.length });\r\n else\r\n drillCount.push({ name: k, count: v.length });\r\n else\r\n {\r\n this.ParseHardwareCount(k, v as IHardwareType[], hardwareCount);\r\n }\r\n }\r\n hardwareCount.sort((h1, h2) => h1.name.localeCompare(h2.name));\r\n //加入封边信息\r\n for (let [k, v] of this.sealMap)\r\n {\r\n sealCount.push({ name: k, count: v / 1000, unit: \"米\" });\r\n }\r\n\r\n for (let [k, bs] of this.boardMap)\r\n {\r\n areaCount.push({\r\n entity: bs[0],\r\n count: bs.length,\r\n count2: this.GetBoardsArea(bs)\r\n });\r\n }\r\n\r\n return { drillCount, hardwareCount, sealCount, areaCount };\r\n };\r\n private Update(ens: (Board | IHardwareType)[], options: GetCountOption = null)\r\n {\r\n //计算排钻个数\r\n const addDrillToMap = (spiteName: string, d: Hole | IHardwareType) =>\r\n {\r\n if (!this.drillTypeMap.has(spiteName))\r\n this.drillTypeMap.set(spiteName, [d]);\r\n else\r\n {\r\n let ds = this.drillTypeMap.get(spiteName);\r\n if (!ds.includes(d))\r\n ds.push(d);\r\n }\r\n };\r\n\r\n const brsProps: Board[] = [];\r\n const hardwares: IHardwareType[] = [];\r\n\r\n for (let e of ens)\r\n {\r\n if (e instanceof Board)\r\n brsProps.push(e);\r\n else\r\n hardwares.push(e);\r\n }\r\n for (let h of hardwares)\r\n {\r\n let { name, unit, factory, spec, model, brand } = h.HardwareOption;\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(h, spec)},${model},${brand}`, h);\r\n }\r\n\r\n this.UpdateBoardMap(brsProps);\r\n\r\n for (let b of brsProps)\r\n {\r\n let dlist = b.DrillList;\r\n if (equaln(b.ContourCurve.Area, 0))\r\n {\r\n Toaster({\r\n message: `${b.BoardProcessOption.roomName} ${b.BoardProcessOption.cabinetName} ${b.Name}轮廓有有问题,请检查`,\r\n timeout: 3000,\r\n intent: Intent.DANGER,\r\n });\r\n continue;\r\n }\r\n\r\n for (let [id, idList] of dlist)\r\n {\r\n for (let ids of idList)\r\n {\r\n findHole:\r\n for (let objId of ids)\r\n {\r\n let gd = objId.Object;\r\n if (!gd?.IsErase)\r\n {\r\n if (gd instanceof CylinderHole)\r\n switch (gd.Type)\r\n {\r\n case GangDrillType.Ljg:\r\n case GangDrillType.Pxl:\r\n case GangDrillType.Ymj:\r\n case GangDrillType.Ljg:\r\n case GangDrillType.TK:\r\n let spiteName = (gd.GroupId?.Object as GroupRecord)?.Name ?? \"未命名\";\r\n //读取拆单名\r\n addDrillToMap(spiteName, gd);\r\n break findHole;\r\n case GangDrillType.Wood:\r\n case GangDrillType.WoodPXL:\r\n addDrillToMap(\"木销\", gd);\r\n break findHole;\r\n }\r\n else\r\n {\r\n //TODO:统计自定义排钻\r\n if (gd instanceof ExtrudeHole)\r\n {\r\n if (gd?.GroupId?.Object)\r\n {\r\n let name = (gd.GroupId.Object as GroupRecord).Name;\r\n let ents = (gd.GroupId.Object as GroupRecord).Entitys;\r\n addDrillToMap(name, ents[0].Object as Hole);\r\n }\r\n else\r\n {\r\n Toaster({ message: `柜名:${b.BoardProcessOption.cabinetName} 板名:${b.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // 被复制的层板钉暂未加入LayerNails数组 等做好关联后解除注释\r\n if (b.LayerNails.length > 0)\r\n for (let objId of b.LayerNails)\r\n {\r\n if (!objId?.IsErase)\r\n addDrillToMap(\"层板钉\", objId.Object as CylinderHole);\r\n }\r\n\r\n //分析五金\r\n for (const mId of b.RelativeHardware)\r\n {\r\n let metal = mId?.Object as IHardwareType;\r\n if (metal && !metal.IsErase && metal.HardwareOption)\r\n {\r\n let { name, unit, factory, spec, model, brand } = metal.HardwareOption;\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(metal, spec)},${model},${brand}`, metal);\r\n }\r\n }\r\n\r\n //封边\r\n let sealData = Production.GetBoardSealingData(b);\r\n let color = b.BoardProcessOption[EBoardKeyList.Color];\r\n\r\n for (let data of sealData)\r\n {\r\n if (equaln(0, data.size)) continue;\r\n let k = `${data.size}-${FixedNotZero(b.Thickness, 2)}-${color}`;\r\n if (options)\r\n {\r\n k += options.sealGruopKey(b);\r\n }\r\n let len = this.sealMap.get(k);\r\n if (!len)\r\n this.sealMap.set(k, data.length);\r\n else\r\n this.sealMap.set(k, len += data.length);\r\n }\r\n }\r\n };\r\n ParseSpec(en: IHardwareType | Vector3, spec: string, len?: number)\r\n {\r\n let size = en instanceof Vector3 ? en : en.BoundingBoxInOCS.getSize(new Vector3);\r\n return ParseExpr(spec, { L: len ?? size.x, W: size.y, H: size.z }) || \"[ 无 ]\";\r\n }\r\n ParseHardwareCount(k: string, v: IHardwareType[], hardwareCount: ICountType[])\r\n {\r\n if (v.length > 0)\r\n {\r\n if (!(v[0] instanceof HardwareTopline))\r\n {\r\n let count2 = v.reduce((v: number, d: HardwareCompositeEntity) =>\r\n {\r\n let size = d.BoundingBoxInOCS.getSize(new Vector3);\r\n let c = safeEval(d.HardwareOption.count, { L: size.x, W: size.y, H: size.z }) ?? 0;\r\n return v + c;\r\n }, 0);\r\n hardwareCount.push({ name: k.split(\",\")[0], count: v.length, entity: v[0], count2: FixedNotZero(count2, 2) });\r\n }\r\n else\r\n {\r\n let map = new Map();\r\n let name = k.split(\",\")[0];\r\n let addLen = (v[0] as HardwareTopline).HardwareOption.addLen;\r\n for (let d of v)\r\n {\r\n let e = d as HardwareTopline;\r\n let cus = e.Segmentations;\r\n for (let cu of cus)\r\n {\r\n let len = parseFloat(FixedNotZero(cu.Length, 2));\r\n if (map.has(len))\r\n {\r\n map.set(len, map.get(len) + 1);\r\n }\r\n else\r\n {\r\n map.set(len, 1);\r\n }\r\n }\r\n }\r\n\r\n for (let [len, count] of map)\r\n {\r\n let count2 = parseFloat(FixedNotZero(len + parseFloat(addLen), 2));\r\n hardwareCount.push({ name, count, entity: v[0], count2, length: count2 });\r\n }\r\n }\r\n }\r\n }\r\n private UpdateBoardMap(brs: Board[])\r\n {\r\n this.boardMap.clear();\r\n for (let b of brs)\r\n {\r\n let thickness = this.GetBoardThickness(b);\r\n let brMat = b.BoardProcessOption[EBoardKeyList.BrMat];\r\n let mat = b.BoardProcessOption[EBoardKeyList.Mat];\r\n let color = b.BoardProcessOption[EBoardKeyList.Color];\r\n let key = `${thickness}-${brMat}-${mat}-${color}`;\r\n let list = this.boardMap.get(key);\r\n if (!list)\r\n {\r\n list = [];\r\n this.boardMap.set(key, list);\r\n }\r\n list.push(b);\r\n }\r\n }\r\n GetBoardThickness(br: Board)\r\n {\r\n let size = Production.GetSpiteSize(br);\r\n if (size)\r\n return FixedNotZero(size.spliteThickness, 2);\r\n else\r\n return FixedNotZero(br.Thickness, 2);\r\n }\r\n GetBoardsArea(brs: Board[])\r\n {\r\n return brs.reduce((area, b) =>\r\n {\r\n let size = Production.GetSpiteSize(b);\r\n let ar: number;\r\n if (size)\r\n ar = size.spliteHeight * size.spliteWidth / 1e6;\r\n else\r\n ar = b.Width * b.Height / 1e6;\r\n ar = parseFloat(ar.toFixed(3));\r\n return area + ar;\r\n }, 0).toFixed(2);\r\n }\r\n}\r\n\r\nexport const lookOverBoardInfosTool = new LookOverBoardInfosTool();\r\n","import { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { safeEval } from \"../Common/eval\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { FixIndex, LINK_FUZZ } from \"../Common/Utils\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { angle, equaln, equalv3, isParallelTo, SelectNearP, XAxis } from \"../Geometry/GeUtils\";\r\nimport { Production } from \"../Production/Product\";\r\nimport { IHighSealedItem } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectOption } from \"./IntersectWith\";\r\n\r\n/**\r\n *曲线列表分段\r\n * @l-arc-l,l-arc-arc-l,l-arc-l-arc-l....\r\n */\r\nexport function ParagraphCulist(cus: Curve[])\r\n{\r\n let newCulist: Curve[][] = [];\r\n let usedCu: WeakSet = new WeakSet();\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (cu: Curve, originCu: Curve, cuList: Curve[], isBack: boolean) =>\r\n {\r\n const cuIsLine = cu instanceof Line;\r\n const originCuIsLine = originCu instanceof Line;\r\n\r\n if (usedCu.has(cu))\r\n return false;\r\n\r\n if (originCuIsLine !== cuIsLine)\r\n {\r\n if (originCuIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(1)))\r\n return false;\r\n }\r\n }\r\n\r\n if (cuIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(1), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)))\r\n return false;\r\n }\r\n }\r\n }\r\n else if (cuIsLine)\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(cu.GetFistDeriv(0).normalize(), originCu.GetFistDeriv(0).normalize()))\r\n return false;\r\n let pts = [originCu.StartPoint, originCu.EndPoint];\r\n let pts2 = [cu.StartPoint, cu.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))\r\n return false;\r\n }\r\n if (isBack)\r\n cuList.push(cu);\r\n else\r\n cuList.unshift(cu);\r\n usedCu.add(cu);\r\n return true;\r\n };\r\n let caclCus = cus.slice().filter(c => !equaln(c.Length, 0));\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let originCu = caclCus.shift();\r\n if (usedCu.has(originCu))\r\n continue;\r\n\r\n let originCus = [originCu];\r\n usedCu.add(originCu);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], originCu, originCus, true))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === cus.length - 1)\r\n {\r\n originCu = originCus[0];\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], originCu, originCus, false))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n }\r\n newCulist.push(originCus);\r\n }\r\n cus.length = 0;\r\n //同组多条曲线连接为多段线\r\n for (let g of newCulist)\r\n {\r\n if (g.length === 1)\r\n cus.push(g[0]);\r\n else\r\n {\r\n let pl = new Polyline();\r\n for (let c of g)\r\n {\r\n pl.Join(c);\r\n }\r\n cus.push(pl);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n *计算封边\r\n */\r\nexport function CalcEdgeSealing(cus: Curve[])\r\n{\r\n if (cus.length <= 1)\r\n return;\r\n let oldLine: Curve;\r\n let firstLine = cus[0].Clone();\r\n let oldLen = cus.length;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let frontLine = cus[i];\r\n let laterIndex = FixIndex(i + 1, cus);\r\n let laterLine = cus[laterIndex];\r\n if (!frontLine || !laterLine || cus.length < 2)\r\n {\r\n return false;\r\n }\r\n\r\n let dist = frontLine.EndPoint.distanceToSquared(laterLine.StartPoint);\r\n if (dist < LINK_FUZZ ** 2)\r\n {\r\n if (frontLine instanceof Line && laterLine instanceof Line)\r\n {\r\n if (frontLine.PtOnCurve(laterLine.EndPoint))\r\n {\r\n cus.splice(laterIndex, 1);\r\n if (laterIndex === 0)\r\n firstLine = cus[0].Clone();\r\n i -= 2;\r\n }\r\n else if (laterLine.PtOnCurve(frontLine.StartPoint))\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n }\r\n }\r\n continue;\r\n }\r\n\r\n let refLine = oldLine ?? frontLine;\r\n let refLine2 = i === cus.length - 1 ? firstLine : laterLine;\r\n let iPts = refLine.IntersectWith(refLine2, IntersectOption.ExtendBoth);\r\n let tPts = iPts.filter(p =>\r\n refLine.PtOnCurve(p)\r\n && refLine2.PtOnCurve(p)\r\n );\r\n\r\n let iPt = SelectNearP(tPts.length > 0 ? tPts : iPts, refLine.EndPoint);\r\n if (!iPt)\r\n {\r\n //没交点,如果删过线,则尝试继续连接\r\n if (cus.length !== oldLen && cus.length > 2)\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n continue;\r\n }\r\n else\r\n return false;\r\n }\r\n let par = refLine.GetParamAtPoint(iPt);\r\n //前面线的点无效直接删除\r\n if (par < 1e-6)\r\n {\r\n cus.splice(i, 1);\r\n i -= 2;\r\n if (i < -1)\r\n i = -1;\r\n }\r\n else\r\n frontLine.EndPoint = iPt;\r\n oldLine = null;\r\n par = laterLine.GetParamAtPoint(iPt);\r\n\r\n //后面线点无效,如果是起始线,则删除,否则缓存原始线,继续尝试连接\r\n if (par > 1 - 1e-6)\r\n {\r\n if (laterIndex === 0)\r\n {\r\n cus.shift();\r\n firstLine = cus[0].Clone();\r\n i -= 2;\r\n continue;\r\n }\r\n else\r\n oldLine = laterLine.Clone();\r\n }\r\n\r\n laterLine.StartPoint = iPt;\r\n }\r\n return true;\r\n}\r\n\r\nexport function GetBoardHighSeal(br: Board, sealcus: Curve[])\r\n{\r\n let highSeals = br.BoardProcessOption.highSealed.slice().filter(d => d.size !== null && d.size !== undefined);\r\n let sealDown = parseFloat(br.BoardProcessOption[EBoardKeyList.DownSealed]);\r\n let sealUp = parseFloat(br.BoardProcessOption[EBoardKeyList.UpSealed]);\r\n let sealLeft = parseFloat(br.BoardProcessOption[EBoardKeyList.LeftSealed]);\r\n let sealRight = parseFloat(br.BoardProcessOption[EBoardKeyList.RightSealed]);\r\n\r\n //若未设置高级封边,把上下左右封边存入高级封边\r\n if (sealcus.length !== highSeals.length || !br.IsSpecialShape)\r\n {\r\n highSeals.length = 0;\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n for (let c of sealcus)\r\n {\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n highSeals.push({ size: sealDown });\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n highSeals.push({ size: sealRight });\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n highSeals.push({ size: sealUp });\r\n else\r\n highSeals.push({ size: sealLeft });\r\n }\r\n }\r\n\r\n return highSeals;\r\n}\r\n\r\n/**偏移前后曲线起点没改变 */\r\nexport function OffsetOutlineSpNotChange(oldcu: Curve, newCu: Curve)\r\n{\r\n if (!newCu)\r\n return false;\r\n let sDerv = oldcu.GetFistDeriv(0).normalize();\r\n let eDerv = oldcu.GetFistDeriv(oldcu.EndParam).normalize().negate();\r\n sDerv.add(eDerv).normalize();\r\n let mDerv = newCu.StartPoint.sub(oldcu.StartPoint).normalize();\r\n return oldcu.EndParam === newCu?.EndParam && isParallelTo(mDerv, sDerv);\r\n}\r\n\r\n/**\r\n * 获取板件封边轮廓线段数组\r\n * 消除共线的数据,不改变轮廓方向\r\n * isOffset-是否偏移轮廓用于查看\r\n * */\r\nexport function GetBoardSealingCurves(br: Board, isOffset = false): Curve[]\r\n{\r\n let cu: ExtureContourCurve = Production.GetSpliteOutlineBySpliteSize(br);\r\n if (cu)\r\n return cu.Explode();\r\n\r\n let cus: Curve[] = [];\r\n cu = Production.GetSpliteOutline(br, false);\r\n if (!cu)\r\n {\r\n Toaster({\r\n message: \"获取封边错误\",\r\n timeout: 3000,\r\n intent: Intent.DANGER\r\n });\r\n return [];\r\n }\r\n if (isOffset)\r\n {\r\n let dir = Math.sign(cu.Area2);\r\n let newCu = cu.GetOffsetCurves(-1 * dir)[0] as ExtureContourCurve;\r\n if (OffsetOutlineSpNotChange(cu, newCu))\r\n cu = newCu;\r\n }\r\n if (cu instanceof Circle)\r\n return [cu.Clone()];\r\n else\r\n {\r\n cus = cu.Explode() as Curve[];\r\n if (br.IsSpecialShape)\r\n ParagraphCulist(cus);\r\n return cus;\r\n }\r\n}\r\n\r\n/**\r\n * 获取板件轮廓\r\n * 结果轮廓拆单用,统一逆时针数据\r\n * hasSealing 轮廓是否包含封边\r\n * 用户计算拆单侧孔面id\r\n */\r\nexport function GetSealedBoardContour(br: Board, hasSealing: boolean): Polyline | Circle | undefined\r\n{\r\n if (equaln(br.ContourCurve.Area, 0))\r\n return;\r\n\r\n let offsetCus: Curve[] = [];\r\n let cus = GetBoardSealingCurves(br);\r\n let highSeals = GetBoardHighSeal(br, cus);\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n\r\n if (hasSealing)\r\n {\r\n for (let c of cus)\r\n {\r\n if (c instanceof Polyline)\r\n offsetCus.push(...c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n else\r\n {\r\n\r\n if (cus[0] instanceof Circle)\r\n dir = 1;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cs: Curve[];\r\n if (!highSeals[i].size)\r\n cs = [cus[i].Clone()];\r\n else\r\n cs = cus[i].GetOffsetCurves(-highSeals[i].size * dir);\r\n\r\n for (let c of cs)\r\n {\r\n if (c instanceof Polyline)\r\n offsetCus.push(...c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n }\r\n if (offsetCus.length === 1 && offsetCus[0] instanceof Circle)\r\n return offsetCus[0] as Circle;\r\n\r\n if (!CalcEdgeSealing(offsetCus)) return;\r\n let pl = Polyline.FastCombine(offsetCus, LINK_FUZZ);\r\n if (pl && dir < 0)\r\n pl.Reverse();\r\n return pl;\r\n}\r\n\r\n\r\nexport function ParagraphSealinglist(hightSeal: IHighSealedItem[], cus: Curve[])\r\n{\r\n if (hightSeal.length !== cus.length) return hightSeal;\r\n\r\n let usedCu: WeakSet = new WeakSet();\r\n let newHighSeal: IHighSealedItem[] = [];\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (cu: Curve, originCu: Curve, isBack: boolean) =>\r\n {\r\n const cuIsLine = cu instanceof Line;\r\n const originCuIsLine = originCu instanceof Line;\r\n\r\n if (usedCu.has(cu))\r\n return false;\r\n\r\n if (originCuIsLine !== cuIsLine)\r\n {\r\n if (originCuIsLine &&\r\n !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0))\r\n && !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(1))\r\n )\r\n {\r\n return false;\r\n }\r\n\r\n if (cuIsLine\r\n && !isParallelTo(originCu.GetFistDeriv(1), cu.GetFistDeriv(0))\r\n && !isParallelTo(originCu.GetFistDeriv(0), cu.GetFistDeriv(0)\r\n ))\r\n {\r\n return false;\r\n }\r\n }\r\n else if (cuIsLine)\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(cu.GetFistDeriv(0).normalize(), originCu.GetFistDeriv(0).normalize()))\r\n return false;\r\n let pts = [originCu.StartPoint, originCu.EndPoint];\r\n let pts2 = [cu.StartPoint, cu.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))\r\n return false;\r\n }\r\n if (isBack)\r\n hightSeal.shift();\r\n else\r\n hightSeal.pop();\r\n usedCu.add(cu);\r\n return true;\r\n };\r\n let caclCus = cus.slice();\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let originCu = caclCus.shift();\r\n if (usedCu.has(originCu))\r\n continue;\r\n let oldCu = originCu;\r\n let originSeal = hightSeal.shift();\r\n newHighSeal.push(originSeal);\r\n usedCu.add(originCu);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], originCu, true))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === cus.length - 1)\r\n {\r\n originCu = oldCu;\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], originCu, false))\r\n break;\r\n originCu = caclCus[i];\r\n }\r\n }\r\n }\r\n\r\n return newHighSeal;\r\n}\r\n\r\n/**处理常规板件封边数据和上下左右封边值 */\r\nexport function HandleRectBoardSealingData(br: Board, edges: IHighSealedItem[], cus?: Curve[])\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n if (!cus)\r\n cus = br.ContourCurve.Explode() as Curve[];\r\n\r\n let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight);\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth);\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness);\r\n\r\n if ((spliteHeight && spliteWidth && spliteThickness) || !br.IsSpecialShape && cus.length == 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = cus[i].GetFistDeriv(0);\r\n if (isParallelTo(derv, XAxis))\r\n {\r\n if (derv.x * dir > 0)\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = edges[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = edges[i].size.toString();\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = edges[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = edges[i].size.toString();\r\n }\r\n }\r\n\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { GetMirrorMat } from \"../../Common/Matrix4Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\r\nimport { equaln, equalv3, ZAxis } from \"../GeUtils\";\r\nimport { Face } from \"./Face\";\r\nimport { MergeCurvelist } from \"../../Common/CurveUtils\";\r\n\r\n\r\nexport const CanDrawHoleFuzz = 1e-2;\r\n\r\nexport enum BoardFaceType\r\n{\r\n Side = 0,\r\n NoSide = 1\r\n}\r\nexport class BoardGetFace\r\n{\r\n Faces: Face[] = [];\r\n constructor(public Board: Board)\r\n {\r\n this.ParseFaces();\r\n }\r\n ParseFaces()\r\n {\r\n //正反面\r\n this.GetTopAndBottomFace();\r\n //侧面\r\n this.GetSideFaces();\r\n }\r\n GetTopAndBottomFace(isEdgeFace = false)\r\n {\r\n let curve = this.Board.ContourCurve;\r\n let reg: Region;\r\n if (this.Board.IsSpecialShape)\r\n reg = Region.CreateFromCurves([curve]);\r\n\r\n let thickness = this.Board.Thickness;\r\n let ocs = this.Board.OCS;\r\n const opt = this.Board.BoardProcessOption;\r\n //正反面\r\n if (opt.frontDrill || isEdgeFace)\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n region: reg,\r\n isRect: this.Board.IsRect,\r\n localBoard: this.Board,\r\n matrix4: ocs.clone().multiply(\r\n new Matrix4().setPosition(new Vector3(0, 0, thickness))),\r\n length: this.Board.Width,\r\n width: this.Board.Height\r\n }));\r\n\r\n if (opt.backDrill || isEdgeFace)\r\n {\r\n let mat = GetMirrorMat(ZAxis).setPosition(new Vector3());\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n localBoard: this.Board,\r\n isRect: this.Board.IsRect,\r\n region: reg ? reg.Clone() : undefined,\r\n matrix4: new Matrix4().multiplyMatrices(ocs.clone(), mat),\r\n length: this.Board.Width,\r\n width: this.Board.Height\r\n }));\r\n }\r\n }\r\n GetSideFaces()\r\n {\r\n let con = this.Board.ContourCurve.Clone();\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const highDrill = this.Board.BoardProcessOption.highDrill.slice();\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let length = cu.Length;\r\n if ((highDrill.length > 0 && highDrill[i] === DrillType.None)\r\n || equaln(length, 0)\r\n || cu instanceof Arc)\r\n continue;\r\n let mtx = GetSideFaceMtx(cu, inverseZ);\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: this.Board,\r\n matrix4: new Matrix4().multiplyMatrices(this.Board.OCS.clone(), mtx),\r\n length,\r\n width: this.Board.Thickness,\r\n drillType: highDrill.length > 0 && highDrill[i]\r\n }));\r\n }\r\n }\r\n IntersectFace(br: BoardGetFace, bInsEqual: boolean = false): Face[]\r\n {\r\n let collisionFaces: Face[] = [];\r\n\r\n for (let f1 of this.Faces)\r\n {\r\n for (let f2 of br.Faces)\r\n {\r\n //都是正面,或者不允许侧面同侧面并且2板件类型不一样就跳过\r\n if (f1.type === f2.type\r\n && (f1.type === BoardFaceType.NoSide || !bInsEqual || br.Board.BoardType !== this.Board.BoardType)\r\n )\r\n continue;\r\n //不共面\r\n if (!MatrixIsCoplane2(f1.OCS, f2.OCS, CanDrawHoleFuzz))\r\n continue;\r\n collisionFaces.push(...f1.Intersect(f2));\r\n }\r\n }\r\n return collisionFaces;\r\n }\r\n static GetAllSidesFaces(br: Board, isMergeFace = false)\r\n {\r\n let faces: Face[] = [];\r\n let con = br.ContourCurve;\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n if (isMergeFace)\r\n MergeCurvelist(cus);\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let length = cu.Length;\r\n let mtx = GetSideFaceMtx(cu, inverseZ);\r\n faces.push(new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: br,\r\n matrix4: new Matrix4().multiplyMatrices(br.OCS.clone(), mtx),\r\n length,\r\n width: br.Thickness,\r\n }));\r\n }\r\n return faces;\r\n }\r\n}\r\n\r\n//坐标系共面且法线相反\r\nexport function MatrixIsCoplane2(matrixFrom: Matrix4, matrixTo: Matrix4, fuzz = 1e-5): boolean\r\n{\r\n let nor1 = new Vector3().setFromMatrixColumn(matrixFrom, 2);\r\n let nor2 = new Vector3().setFromMatrixColumn(matrixTo, 2);\r\n\r\n //法线共面\r\n if (!equalv3(nor1, nor2.negate(), fuzz))\r\n return false;\r\n\r\n //高共面\r\n let pt = new Vector3().setFromMatrixPosition(matrixTo);\r\n //变换到自身对象坐标系.\r\n pt.applyMatrix4(new Matrix4().getInverse(matrixFrom));\r\n\r\n return equaln(pt.z, 0, fuzz);\r\n}\r\nexport function GetSideFaceMtx(cu: Curve, inverseZ = false): Matrix4\r\n{\r\n let x = cu.GetFistDeriv(0).normalize();\r\n let y = ZAxis;\r\n let z = x.clone().cross(y);\r\n if (inverseZ) z.negate();\r\n\r\n let basePt: Vector3;\r\n if ((equaln(x.x, 0) && x.y > 0) || x.x < 0)\r\n {\r\n x.negate();\r\n basePt = cu.EndPoint;\r\n }\r\n else\r\n basePt = cu.StartPoint;\r\n //构建面矩阵\r\n return new Matrix4()\r\n .makeBasis(x, y, z)\r\n .setPosition(basePt);\r\n}\r\n","export const ReportFunctionList: ((msg: string) => void)[] = [];\r\n\r\nexport function SendReport(msg: string)\r\n{\r\n for (let f of ReportFunctionList)\r\n f(msg);\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\n\r\nexport const ShowObjectsFunctionList: ((ens: (Entity[]) | Object3D[]) => void)[] = [];\r\n\r\nexport function ShowSelectObjects(ens: (Entity[]) | Object3D[])\r\n{\r\n for (let f of ShowObjectsFunctionList)\r\n f(ens);\r\n}\r\n","\r\nexport function IsDev()\r\n{\r\n return window.location.hostname === \"localhost\";\r\n}\r\n\r\nexport function IsTest()\r\n{\r\n return window.location.hostname === \"localhost\" || window.location.hostname === \"t.cfcad.cn\";\r\n}\r\n","import { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { angle, equaln, isParallelTo, rotatePoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Hole } from \"../../DatabaseServices/3DSolid/Hole\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { userConfig } from \"../../Editor/UserConfig\";\r\n\r\nexport const SCALAR = 0.1;\r\n\r\nexport function CyHoleInBoard(cys: CylinderHole[], br: Board, ocs: Matrix4)\r\n{\r\n if (cys.length === 1 && cys[0].Type === GangDrillType.Ymj)\r\n return true;\r\n\r\n const outline = br.ContourCurve;\r\n let box = new Box3();\r\n let pxl: CylinderHole;\r\n let ljg: CylinderHole;\r\n let ymj: CylinderHole;\r\n let wood: CylinderHole;\r\n let woodPXL: CylinderHole;\r\n let pxl2: CylinderHole;\r\n for (let cy of cys)\r\n {\r\n box.union(cy.BoundingBox);\r\n if (cy.Type === GangDrillType.Pxl)\r\n {\r\n if (pxl)\r\n pxl2 = cy;\r\n else\r\n pxl = cy;\r\n }\r\n else if (cy.Type === GangDrillType.Ljg)\r\n ljg = cy;\r\n else if (cy.Type === GangDrillType.Wood)\r\n wood = cy;\r\n else if (cy.Type === GangDrillType.WoodPXL)\r\n woodPXL = cy;\r\n else\r\n ymj = cy;\r\n }\r\n box.applyMatrix4(ocs);\r\n\r\n let outlineBox = outline.BoundingBox;\r\n outlineBox.max.setZ(br.Thickness);\r\n\r\n if (!box.intersectsBox(outlineBox))\r\n return false;\r\n\r\n let nor = new Vector3();\r\n\r\n if (ljg)\r\n nor.copy(ljg.Normal);\r\n else if (ymj)\r\n nor.copy(ymj.Normal);\r\n else\r\n if (wood)\r\n nor.copy(wood.Normal);\r\n\r\n nor.applyMatrix4(ocs.clone().setPosition(new Vector3));\r\n\r\n if (isParallelTo(nor, ZAxis))\r\n {\r\n if (ymj)\r\n {\r\n let center = ymj.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, ymj.Radius - SCALAR);\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n }\r\n }\r\n else\r\n {\r\n if (pxl)\r\n {\r\n let plxs = [pxl];\r\n if (pxl2)\r\n plxs.push(pxl2);\r\n if (plxs.every(cy =>\r\n {\r\n let center = cy.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, pxl.Radius - SCALAR);\r\n if (userConfig.forceFilterPxl)\r\n return outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center);\r\n }))\r\n return false;\r\n }\r\n if (woodPXL)\r\n {\r\n let center = woodPXL.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, woodPXL.Radius - SCALAR);\r\n if (outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center))\r\n return false;\r\n }\r\n\r\n if (ljg)\r\n {\r\n let c1 = ljg.Position.applyMatrix4(ocs).setZ(0);\r\n let minPt = c1.clone().add(nor.clone().multiplyScalar(ljg.Height / 2));\r\n let c2 = c1.clone().add(nor.clone().multiplyScalar(ljg.Height - SCALAR));\r\n c1.add(nor.clone().multiplyScalar(SCALAR));\r\n\r\n rotatePoint(nor, Math.PI / 2);\r\n c1.add(nor.multiplyScalar(ljg.Radius));\r\n c2.add(nor.negate());\r\n\r\n let rect = new Polyline().RectangleFrom2Pt(c1, c2);\r\n\r\n let intPtsLen = outline.IntersectWith(rect, 0).length;\r\n if (intPtsLen > 2 || (intPtsLen === 0 && !outline.PtInCurve(minPt)))\r\n return false;\r\n }\r\n\r\n if (wood)\r\n {\r\n let c1 = wood.Position.applyMatrix4(ocs).setZ(0);\r\n let c2 = c1.clone().add(nor.clone().multiplyScalar(wood.Height));\r\n\r\n rotatePoint(nor, Math.PI / 2);\r\n let dir = nor.multiplyScalar(wood.Radius);\r\n let p1 = c1.clone().add(dir);\r\n let p2 = c2.clone().add(dir);\r\n let p3 = c1.clone().add(dir.negate());\r\n let p4 = c2.clone().add(dir);\r\n let l1 = new Line(p1, p2);\r\n let l2 = new Line(p3, p4);\r\n if (l1.IntersectWith(outline, 0).length !== 1 || l2.IntersectWith(outline, 0).length !== 1)\r\n return false;\r\n }\r\n\r\n }\r\n return true;\r\n}\r\n\r\nexport interface IRectHoleOption\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\n\r\nexport const TempRectHoleOption: IRectHoleOption = {\r\n up: \"\",\r\n down: \"\",\r\n left: \"\",\r\n right: \"\",\r\n};\r\n\r\n/**分析上下左右排钻 */\r\nexport function InitRectBoardHoleOption(br: Board, option: IRectHoleOption)\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n let hightDrill = br.BoardProcessOption.highDrill;\r\n let cus = br.ContourCurve.Explode() as Curve[];\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n option.down = hightDrill[i];\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n option.right = hightDrill[i];\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n option.up = hightDrill[i];\r\n else\r\n option.left = hightDrill[i];\r\n }\r\n}\r\nexport function ExtureHoleInBoard(holes: ExtrudeHole[], board: Board, ocs: Matrix4)\r\n{\r\n //TODO:自定义排钻判断\r\n return true;\r\n}\r\nexport function HoleInBoard(holes: Hole[], br: Board, ocs?: Matrix4)\r\n{\r\n if (holes.length === 0) return false;\r\n\r\n if (holes[0] instanceof CylinderHole)\r\n {\r\n return CyHoleInBoard(holes as CylinderHole[], br, ocs ?? br.OCSInv);\r\n }\r\n else\r\n {\r\n return ExtureHoleInBoard(holes as ExtrudeHole[], br, ocs ?? br.OCSInv);\r\n }\r\n}\r\n\r\n/**上下左右排钻写入板件 */\r\nexport function SetRectHighHole(br: Board, option: IRectHoleOption)\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n let highDrill = br.BoardProcessOption.highDrill;\r\n let cus = br.ContourCurve.Explode() as Curve[];\r\n highDrill.length = 0;\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n let derv = c.GetFistDeriv(0).multiplyScalar(dir);\r\n let an = angle(derv);\r\n if (equaln(an, 0) || (an < Math.PI / 4 + 1e-8 && an > Math.PI * 7 / 4))\r\n highDrill.push(option.down);\r\n else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8)\r\n highDrill.push(option.right);\r\n else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8)\r\n highDrill.push(option.up);\r\n else\r\n highDrill.push(option.left);\r\n }\r\n let types = new Set(highDrill);\r\n if (types.size === 1 && highDrill[0] !== DrillType.None)\r\n br.BoardProcessOption[EBoardKeyList.DrillType] = highDrill[0];\r\n else if (types.size > 1)\r\n br.BoardProcessOption[EBoardKeyList.DrillType] = DrillType.More;\r\n};\r\n","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { lookOverBoardInfosTool } from \"../Add-on/LookOverBoardInfos/LookOverBoardInfosTool\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\r\nimport { Vector2ApplyMatrix4 } from \"../Common/Matrix4Utils\";\r\nimport { FixedNotZero, LINK_FUZZ } from \"../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Hole } from \"../DatabaseServices/3DSolid/Hole\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board, IModeling, I2DModeingItem, IKnifeInfo } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { HardwareCompositeEntity } from \"../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { userConfig } from \"../Editor/UserConfig\";\r\nimport { Vec2 } from \"../Geometry/CheckIntersect\";\r\nimport { angleTo, AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, XAxis, equalv2, IsBetweenA2B, isIntersect2 } from \"../Geometry/GeUtils\";\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, GetSealedBoardContour as GetSealedBoardContour } from \"../GraphicsSystem/CalcEdgeSealing\";\r\nimport { FeedingToolPath, GetModelingFromCustomDrill } from \"../GraphicsSystem/ToolPath/FeedingToolPath\";\r\nimport { EMetalsType, IHardwareOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { BoardOpenDir, FaceDirection, IHighSealedItem } from \"../UI/Store/BoardInterface\";\r\nimport { Entity } from './../DatabaseServices/Entity/Entity';\r\nimport { ICompHardwareOption } from './../UI/Components/RightPanel/RightPanelInterface';\r\nimport { CanDrawHoleFuzz } from \"../Geometry/DrillParse/BoardGetFace\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { SendReport } from \"../Common/Report\";\r\nimport { ShowSelectObjects } from \"../Common/ShowSelectObjects\";\r\nimport { IsDev } from \"../Common/Deving\";\r\nimport { SCALAR } from \"../Add-on/DrawDrilling/HoleUtils\";\r\nimport { Shape } from \"../DatabaseServices/Shape\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\n\r\n\r\n/**轮廓数据 */\r\nexport interface IContourData\r\n{\r\n pts: Vec2[];\r\n buls: number[];\r\n}\r\nexport interface I3DContourData\r\n{\r\n pts: Vector3[];\r\n buls: number[];\r\n}\r\nexport type IHardwareType = HardwareTopline | HardwareCompositeEntity;\r\n\r\nexport interface ISealingData extends IHighSealedItem\r\n{\r\n length: number;\r\n type?: string;\r\n shop?: string;\r\n}\r\nexport interface IModelingData\r\n{\r\n feeding: IContourData[];\r\n thickness: number;\r\n dir: FaceDirection | number;\r\n knifeRadius: number;\r\n origin: IOriginModelingData;\r\n}\r\n\r\nexport enum DrillingFace\r\n{\r\n //正反面时,使用Front和Back\r\n Front = 0,\r\n Back = 1,\r\n}\r\n\r\nexport interface IDrillingOption\r\n{\r\n position: Vector3;\r\n radius: number;\r\n type: GangDrillType;\r\n depth: number;\r\n face: DrillingFace;\r\n endPt?: Vector3;\r\n angle?: number;\r\n}\r\n\r\nexport interface IBoardHoleInfo\r\n{\r\n frontBackHoles: IDrillingOption[];\r\n sideHoles: IDrillingOption[];\r\n}\r\n\r\ninterface IBoardProdInfo\r\n{\r\n id: number;\r\n name: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n [EBoardKeyList.Mat]: string;\r\n [EBoardKeyList.BrMat]: string;\r\n [EBoardKeyList.Color]: string;\r\n [EBoardKeyList.Lines]: number;\r\n [EBoardKeyList.DrillType]: string;\r\n spliteHeight: string;\r\n spliteThickness: string;\r\n spliteWidth: string;\r\n\r\n isRect: boolean;\r\n remarks: [string, string][];\r\n kaiLiaoWidth: number;\r\n kaiLiaoHeight: number;\r\n openDir: BoardOpenDir;\r\n}\r\n\r\nexport interface I2DModeling\r\n{\r\n path: IContourData;\r\n dir: FaceDirection;\r\n items: I2DModeingItem[];\r\n}\r\nexport interface I3DModeling\r\n{\r\n path: I3DContourData;\r\n dir: FaceDirection;\r\n knife: IKnifeInfo;\r\n}\r\n\r\n/**拆单数据 */\r\nexport interface ISpliteOrderData\r\n{\r\n info: IBoardProdInfo; //板件基本信息\r\n outline: IContourData; //拆单轮廓信息\r\n sealing: ISealingData[]; //封边信息\r\n modeling: IModelingData[]; //造型信息\r\n holes: IBoardHoleInfo; //孔信息\r\n sideModeling: IModelingData[]; //侧面造型信息\r\n offsetTanslation: Vector3;\r\n originOutlin: IContourData; //不扣封边拆单原始轮廓\r\n metalsData?: { metals: number, comp: number; }; //板件五金\r\n boardContour: IContourData; //板件轮廓\r\n modeling2D: I2DModeling[];\r\n modeling3D: I3DModeling[];\r\n}\r\n\r\nexport interface IBoardMetalsData\r\n{\r\n metals: ISpliteHardwareData[];\r\n comp: ISpliteHardwareData[];\r\n}\r\n\r\nexport interface ISpliteHardwareData\r\n{\r\n metalsOption: IHardwareOption;\r\n dataList: [string, string][];\r\n children: ISpliteHardwareData[];\r\n length?: number;\r\n size: Vector3;\r\n}\r\n\r\nexport interface IOriginModelingData\r\n{\r\n outline: IContourData,\r\n holes: IContourData[];\r\n thickness?: number;\r\n dir?: FaceDirection | number;\r\n knifeRadius?: number;\r\n addLen?: number;\r\n addWidth?: number;\r\n addDepth?: number;\r\n}\r\n\r\ninterface IChaiDanFeedingData extends IOriginModelingData\r\n{\r\n boardContour: IContourData;\r\n}\r\n\r\nexport namespace Production\r\n{\r\n /**获取板件拆单数据 */\r\n export function GetBoardSplitOrderData(br: Board): ISpliteOrderData | undefined\r\n {\r\n let sealedContour = GetSealedBoardContour(br, true);\r\n if (!sealedContour || equaln(sealedContour.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br], br.Name + \" 轮廓错误\");\r\n return undefined;\r\n }\r\n let outline = GetSealedBoardContour(br, false);\r\n\r\n if (!outline || equaln(outline.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \"扣除封边轮廓有误,请检查后重新拆单\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br], br.Name + \"扣除封边轮廓有误\");\r\n return;\r\n }\r\n\r\n let offsetTanslation = outline.BoundingBox.min;\r\n outline.Position = outline.Position.sub(offsetTanslation);\r\n let outlinePtsBul = ConverToPolylineAndSplitArc(outline);\r\n //外轮廓去掉最后的闭合点\r\n outlinePtsBul.pts.pop();\r\n outlinePtsBul.buls.pop();\r\n let size = outline.BoundingBox.getSize(new Vector3);\r\n\r\n //不扣除封边的轮廓信息\r\n let originOutlinePtsBul = ConverToPolylineAndSplitArc(sealedContour);\r\n originOutlinePtsBul.pts.pop();\r\n originOutlinePtsBul.buls.pop();\r\n\r\n let { modeling, sideModeling } = GetBoardModelingData(br, offsetTanslation);\r\n\r\n let boardContour: IContourData;\r\n if (GetSpiteSize(br))\r\n boardContour = ConverToPolylineAndSplitArc(br.ContourCurve);\r\n\r\n return {\r\n info: GetBoardInfo(br, size),\r\n originOutlin: originOutlinePtsBul,\r\n outline: outlinePtsBul,\r\n sealing: GetBoardSealingData(br),\r\n modeling,\r\n holes: GetBoardHolesData(br, offsetTanslation, sealedContour),\r\n sideModeling,\r\n offsetTanslation,\r\n metalsData: GetBoardMetals(br),\r\n boardContour,\r\n modeling2D: Get2DModeing(br, offsetTanslation),\r\n modeling3D: Get3DModeing(br, offsetTanslation),\r\n };\r\n }\r\n export function GetBoardInfo(br: Board, size: Vector3): IBoardProdInfo\r\n {\r\n let data = br.BoardProcessOption;\r\n\r\n let spliteSize = Production.GetSpiteSize(br);\r\n let isRect = !!spliteSize || !br.IsSpecialShape;\r\n\r\n return {\r\n id: br.Id.Index,\r\n name: br.Name,\r\n [EBoardKeyList.RoomName]: data[EBoardKeyList.RoomName],\r\n [EBoardKeyList.CabinetName]: data[EBoardKeyList.CabinetName],\r\n [EBoardKeyList.Mat]: data[EBoardKeyList.Mat],\r\n [EBoardKeyList.BrMat]: data[EBoardKeyList.BrMat],\r\n [EBoardKeyList.Color]: data[EBoardKeyList.Color],\r\n [EBoardKeyList.Lines]: data[EBoardKeyList.Lines],\r\n [EBoardKeyList.DrillType]: data[EBoardKeyList.DrillType],\r\n spliteHeight: spliteSize ? spliteSize.spliteHeight.toString() : \"\",\r\n spliteThickness: spliteSize ? spliteSize.spliteThickness.toString() : \"\",\r\n spliteWidth: spliteSize ? spliteSize.spliteWidth.toString() : \"\",\r\n isRect,\r\n remarks: data.remarks.slice(),\r\n kaiLiaoWidth: size.x,\r\n kaiLiaoHeight: size.y,\r\n openDir: br.OpenDir,\r\n };\r\n }\r\n\r\n /**\r\n * 转换成多段线并且将圆弧打断(大于1/4的话)\r\n */\r\n export function ConverToPolylineAndSplitArc(cu: Polyline | Circle, isOutline = true, isSplite = true): IContourData\r\n {\r\n let ptsBuls: { pts: Vector2[]; buls: number[]; };\r\n if (cu instanceof Circle)\r\n {\r\n let pl = ConverCircleToPolyline(cu);\r\n ptsBuls = pl.PtsBuls;\r\n }\r\n else\r\n {\r\n if (isOutline && cu.IsClose && cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n if (isSplite)\r\n ptsBuls = SplitePolylineAtArc(cu);\r\n else\r\n ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.OCS;\r\n if (!equaln(ocs.elements[0], 1)\r\n || !equaln(ocs.elements[9], 0)\r\n || !equaln(ocs.elements[10], 0)\r\n )\r\n {\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n {\r\n Vector2ApplyMatrix4(ocs, ptsBuls.pts[i]);\r\n ptsBuls.buls[i] *= cu.Normal.z;\r\n }\r\n }\r\n return ptsBuls;\r\n }\r\n\r\n export function ConverCircleToPolyline(cir: Circle): Polyline\r\n {\r\n let arcs = cir.GetSplitCurves([0, 0.25, 0.5, 0.75]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCS;\r\n for (let arc of arcs)\r\n pl.Join(arc);\r\n return pl;\r\n }\r\n\r\n const SPLITBUL = Math.tan(Math.PI / 8);\r\n function GetSpliteCount(allAngle: number)\r\n {\r\n return Math.ceil(Math.abs(allAngle) / Math.PI * 2);\r\n }\r\n\r\n /** 打断多段线超过1/4圆的圆弧*/\r\n export function SplitePolylineAtArc(cu: Polyline, isSplite = true): { pts: Vector2[], buls: number[]; }\r\n {\r\n let ptsBuls = cu.PtsBuls;\r\n let ocsInv = cu.OCSInv;\r\n\r\n let result: { pts: Vector2[], buls: number[]; } = { pts: [], buls: [] };\r\n\r\n if (ptsBuls.pts.length === 0)\r\n return result;\r\n\r\n for (let i = 0; i < ptsBuls.buls.length - 1; i++)\r\n {\r\n let bul = ptsBuls.buls[i];\r\n if (Math.abs(bul) > SPLITBUL + 1e-8 && isSplite)\r\n {\r\n let allAngle = Math.atan(bul) * 4;\r\n let splitCount = GetSpliteCount(allAngle);\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let paramDiv = 1 / splitCount;\r\n let newBul = Math.tan((allAngle / splitCount) / 4);\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let param = i * paramDiv;\r\n let p = arc.GetPointAtParam(param).applyMatrix4(ocsInv);\r\n let p2 = AsVector2(p);\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(p2, arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(p2);\r\n result.buls.push(newBul);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(ptsBuls.pts[i], arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(ptsBuls.pts[i]);\r\n result.buls.push(ptsBuls.buls[i]);\r\n }\r\n }\r\n }\r\n\r\n result.pts.push(arrayLast(ptsBuls.pts));\r\n result.buls.push(arrayLast(ptsBuls.buls));\r\n\r\n //测试是否存在无效的边(0长度边)\r\n // for (let i = 1; i < result.pts.length; i++)\r\n // {\r\n // if (equalv2(result.pts[i], result.pts[i - 1], 0.01))\r\n // alert(\"存在无效的边\");\r\n // }\r\n\r\n return result;\r\n }\r\n export function SplitetArc(arc: Arc, hasEnd = false): { pts: Vector3[], buls: number[]; }\r\n {\r\n let result: { pts: Vector3[], buls: number[]; } = { pts: [], buls: [] };\r\n let bul = arc.Bul;\r\n\r\n if (Math.abs(bul) > SPLITBUL + 1e-8)\r\n {\r\n let allAngle = Math.atan(bul) * 4;\r\n let splitCount = GetSpliteCount(allAngle);\r\n\r\n let paramDiv = 1 / splitCount;\r\n let newBul = Math.tan((allAngle / splitCount) / 4);\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let param = i * paramDiv;\r\n let p = arc.GetPointAtParam(param);\r\n\r\n result.pts.push(p);\r\n result.buls.push(newBul);\r\n }\r\n }\r\n else\r\n {\r\n result.pts.push(arc.StartPoint);\r\n result.buls.push(bul);\r\n }\r\n\r\n if (hasEnd)\r\n {\r\n result.pts.push(arc.EndPoint);\r\n result.buls.push(0);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * 获取封边数据\r\n * 封边数据未统一逆时针顺序,用于拆单\r\n * */\r\n export function GetBoardSealingData(br: Board): ISealingData[]\r\n {\r\n let sealCus = GetBoardSealingCurves(br);\r\n let highSeal = GetBoardHighSeal(br, sealCus);\r\n\r\n let sealData: ISealingData[] = [];\r\n\r\n for (let i = 0; i < sealCus.length; i++)\r\n {\r\n let sealCu = sealCus[i];\r\n let data = highSeal[i];\r\n let cus: Curve[] = [];\r\n if (sealCu instanceof Polyline)\r\n cus.push(...sealCu.Explode());\r\n else\r\n cus.push(sealCu);\r\n\r\n for (let cu of cus)\r\n {\r\n if (cu instanceof Line)\r\n {\r\n sealData.push(Object.assign({}, data, { length: cu.Length }));\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n let splitCount = GetSpliteCount(cu.AllAngle);\r\n let len = 2 * Math.PI * cu.Radius / 4;\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let arcLen = i !== splitCount - 1 ? len : cu.Length - (splitCount - 1) * len;\r\n if (!equaln(arcLen, 0))\r\n sealData.push(Object.assign({}, data, { length: arcLen }));\r\n }\r\n }\r\n else if (cu instanceof Circle)\r\n {\r\n let length = 2 * Math.PI * cu.Radius / 4;\r\n sealData.push(...Array.from({ length: 4 }, () =>\r\n {\r\n return { ...data, length };\r\n }));\r\n }\r\n }\r\n }\r\n if (br.ContourCurve instanceof Polyline && br.ContourCurve.Area2 < 0)\r\n sealData.reverse();\r\n return sealData;\r\n }\r\n\r\n export function GetMetalTotalEntitys(md: HardwareCompositeEntity, isHole = false, filter?: (e: Entity) => boolean)\r\n {\r\n let holes: Entity[] = [];\r\n if (isHole && !md.HardwareOption.isHole) return [];\r\n\r\n for (let e of md.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n if (!isHole || md.HardwareOption.isHole)\r\n holes.push(...GetMetalTotalEntitys(e, isHole, filter).map(h => h.ApplyMatrix(md.OCS)));\r\n }\r\n else\r\n {\r\n if (!filter || filter(e))\r\n {\r\n holes.push(e.Clone().ApplyMatrix(md.OCS));\r\n }\r\n }\r\n }\r\n return holes;\r\n }\r\n export function GetOriginBoardModelingData(br: Board)\r\n {\r\n const getModelings = (ms: IModeling[]): IOriginModelingData[] =>\r\n {\r\n let data: IOriginModelingData[] = [];\r\n\r\n for (let m of ms)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n\r\n data.push({\r\n outline: ConverToPolylineAndSplitArc(cu.Clone(), false, false),\r\n holes: m.shape.Holes.map(h => ConverToPolylineAndSplitArc(h.Curve.Clone(), false, false)),\r\n thickness: m.thickness + (m.addDepth ?? 0),\r\n dir: m.dir,\r\n knifeRadius: m.knifeRadius,\r\n });\r\n\r\n }\r\n return data;\r\n };\r\n\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n\r\n let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling]);\r\n\r\n let sideModeling = getModelings(allModeling.sideModeling);\r\n\r\n return { modeling, sideModeling };\r\n }\r\n export function GetBoardModelingData(br: Board, offsetTanslation: Vector3)\r\n {\r\n const tool = FeedingToolPath.GetInstance() as FeedingToolPath;\r\n const tMtx = MoveMatrix(offsetTanslation.clone().negate());\r\n const getModelings = (ms: IModeling[], isSide: boolean): IModelingData[] =>\r\n {\r\n let data: IModelingData[] = [];\r\n\r\n for (let m of ms)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n let paths = tool.GetModelFeedPath(br, m);\r\n if (!isSide)\r\n paths.forEach(path => path.ApplyMatrix(tMtx));\r\n\r\n let feeding = paths.map((c: ExtureContourCurve) => ConverToPolylineAndSplitArc(c, false));\r\n if (feeding.length > 0)\r\n data.push({\r\n feeding,\r\n thickness: m.thickness + (m.addDepth ?? 0),\r\n dir: m.dir,\r\n knifeRadius: m.knifeRadius,\r\n origin: {\r\n outline: ConverToPolylineAndSplitArc(cu.Clone(), false, false),\r\n holes: m.shape.Holes.map(h => ConverToPolylineAndSplitArc(h.Curve.Clone(), false, false)),\r\n addLen: m.addLen,\r\n addWidth: m.addWidth,\r\n addDepth: m.addDepth,\r\n }\r\n });\r\n else\r\n {\r\n Toaster({\r\n message: \"板件有造型或者自定义排钻无法加工,请运行造型检测命令确认\",\r\n timeout: 5000,\r\n intent: Intent.DANGER,\r\n key: \"造型加工错误\"\r\n });\r\n }\r\n }\r\n return data;\r\n };\r\n\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n\r\n let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling], false).filter(f => f.feeding.length > 0);\r\n\r\n let sideModeling = getModelings(allModeling.sideModeling, true).filter(f => f.feeding.length > 0);\r\n\r\n return { modeling, sideModeling };\r\n }\r\n\r\n /**获取板件的轮廓\r\n *有拆单尺寸返回矩形\r\n *用于拆单的轮廓统一逆时针 */\r\n export function GetSpliteOutline(br: Board, isSplite: boolean): ExtureContourCurve | undefined\r\n {\r\n let con: ExtureContourCurve = GetSpliteOutlineBySpliteSize(br);\r\n if (con)\r\n return con;\r\n\r\n con = br.ContourCurve;\r\n if (con instanceof Circle)\r\n {\r\n return con;\r\n }\r\n let cus = con.Explode();\r\n MergeCurvelist(cus);\r\n let pl = Polyline.FastCombine(cus, LINK_FUZZ);\r\n if (pl && isSplite && pl.Area2 < 0)\r\n pl.Reverse();\r\n return pl;\r\n }\r\n export function GetSpiteSize(br: Board)\r\n {\r\n let param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight, param);\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param);\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param);\r\n if (spliteHeight && spliteWidth && spliteThickness)\r\n return {\r\n spliteHeight, spliteWidth, spliteThickness\r\n };\r\n else\r\n return;\r\n }\r\n\r\n export function GetSpliteOutlineBySpliteSize(br: Board)\r\n {\r\n let size = GetSpiteSize(br);\r\n\r\n if (size)\r\n return new Polyline().RectangleFrom2Pt(new Vector3, new Vector3(size.spliteWidth, size.spliteHeight));\r\n return null;\r\n }\r\n\r\n /**孔信息,侧孔的z 均为 从上到下距离 */\r\n export function GetBoardHolesData(br: Board, offsetTanslation: Vector3, sealedContour: ExtureContourCurve): IBoardHoleInfo\r\n {\r\n let data: IBoardHoleInfo = {\r\n frontBackHoles: [],\r\n sideHoles: []\r\n };\r\n let brNormal = br.Normal;\r\n\r\n // 性能优化的解析板件网洞类\r\n // new ParseBoardHoleData(br, offsetTanslation, sealedContour);\r\n\r\n for (let [, driss] of br.DrillList)\r\n {\r\n for (let dris of driss)\r\n {\r\n for (let dId of dris)\r\n {\r\n if (!dId || dId.IsErase)\r\n continue;\r\n let d = dId.Object as CylinderHole;\r\n if (d instanceof ExtrudeHole)\r\n ParseExtrudeHoles(d, br, offsetTanslation, data, sealedContour);\r\n else\r\n ParseCylHoles(d, br, offsetTanslation, data, sealedContour);\r\n }\r\n }\r\n }\r\n\r\n if (br.RelativeHardware)\r\n {\r\n for (let dId of br.RelativeHardware)\r\n {\r\n if (dId.IsErase) continue;\r\n let d = dId.Object;\r\n let holes: Hole[] = [];\r\n if (d instanceof HardwareCompositeEntity)\r\n {\r\n holes.push(...GetMetalTotalEntitys(d, true, (e) => e instanceof Hole) as Hole[]);\r\n }\r\n for (let h of holes)\r\n {\r\n if (h instanceof ExtrudeHole)\r\n ParseExtrudeHoles(h, br, offsetTanslation, data, sealedContour, true);\r\n else\r\n ParseCylHoles(h as CylinderHole, br, offsetTanslation, data, sealedContour);\r\n }\r\n }\r\n }\r\n\r\n let modelings = br.BoardModeling;\r\n for (let nid of br.LayerNails)\r\n {\r\n if (!nid || !nid.Object || nid.IsErase)\r\n continue;\r\n let nail = nid.Object as CylinderHole;\r\n if (!isParallelTo(nail.Normal, brNormal)) continue;\r\n\r\n let sp = nail.Position.applyMatrix4(br.OCSInv);\r\n let nor = nail.Normal.multiplyScalar(nail.Height);\r\n let ep = nail.Position.add(nor).applyMatrix4(br.OCSInv);\r\n let [z0, z1] = sp.z < ep.z ? [sp.z, ep.z] : [ep.z, sp.z];\r\n\r\n if (\r\n Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6\r\n && br.ContourCurve.PtInCurve(sp.setZ(0))\r\n && modelings.every(m => !m.shape.Outline.Curve.PtInCurve(sp))\r\n )\r\n {\r\n let face = !equalv3(nail.Normal, brNormal, 1e-3) ? DrillingFace.Front : DrillingFace.Back;\r\n let depth = Math.min(z1, br.Thickness) - Math.max(z0, 0);\r\n\r\n data.frontBackHoles.push({\r\n type: nail.Type,\r\n position: sp.sub(offsetTanslation),\r\n radius: nail.Radius,\r\n depth,\r\n face,\r\n });\r\n }\r\n }\r\n\r\n for (let m of modelings)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n {\r\n let center = cu.Center.setZ(0).sub(offsetTanslation);\r\n data.frontBackHoles.push(\r\n {\r\n type: GangDrillType.Pxl,\r\n position: center,\r\n radius: cu.Radius,\r\n depth: m.thickness,\r\n face: m.dir as number\r\n }\r\n );\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n /**拆单那边需要把侧孔 z 坐标转换为从上到下 */\r\n function InvertPosition(pos: Vector3, thickness: number)\r\n {\r\n pos.z = thickness - pos.z;\r\n }\r\n function HoleInBoard(center: Vector3, radius: number, outline: ExtureContourCurve, isYMJ = false)\r\n {\r\n let cir = new Circle(center, radius - SCALAR);\r\n if (isYMJ)\r\n {\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n }\r\n else\r\n {\r\n if (userConfig.forceFilterPxl)\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0).length > 1 || outline.PtInCurve(center);\r\n }\r\n }\r\n /**分析常规排钻 */\r\n function ParseCylHoles(d: CylinderHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtureContourCurve)\r\n {\r\n let processData = br.BoardProcessOption;\r\n let brNormal = br.Normal;\r\n let roMat = new Matrix4().extractRotation(br.OCSInv);\r\n let position = d.Position.applyMatrix4(br.OCSInv);\r\n let holes = data.frontBackHoles;\r\n let face: number;\r\n let isPush = false;\r\n let endPt: Vector3;\r\n let depth = d.Height;\r\n let diffMat = br.OCSInv.multiply(d.OCS);\r\n let x = new Vector3().setFromMatrixColumn(diffMat, 0);\r\n let angle = angleTo(XAxis, x);\r\n\r\n let nor = d.Normal.applyMatrix4(roMat);\r\n let pos2 = position.clone().add(nor.multiplyScalar(depth));\r\n\r\n if (d.Type === GangDrillType.Pxl || d.Type === GangDrillType.WoodPXL)\r\n {\r\n if (isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, 1e-6)\r\n || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, 1e-6)\r\n || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz)\r\n || !HoleInBoard(position.clone().setZ(0), d.Radius, outline)) return;\r\n\r\n position.sub(offsetTanslation);\r\n face = processData[EBoardKeyList.BigHole];\r\n isPush = true;\r\n }\r\n }\r\n else if (d.Type === GangDrillType.Ljg || d.Type === GangDrillType.Wood)\r\n {\r\n if (!isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n let z = position.z;\r\n if (!IsBetweenA2B(z, -d.Radius, br.Thickness + d.Radius, 1e-6)) return;\r\n let line = new Line(position.clone().setZ(0), position.clone().setZ(0).add(d.Normal.multiplyScalar(d.Height).applyMatrix4(roMat)));\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt) return;\r\n position = pt.clone().setZ(z);\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (outline.PtInCurve(p))\r\n {\r\n endPt = p.setZ(z);\r\n break;\r\n }\r\n }\r\n if (!endPt)\r\n {\r\n console.warn(\"排钻位置有问题\");\r\n return;\r\n }\r\n holes = data.sideHoles;\r\n face = Math.floor(outline.GetParamAtPoint(pt));\r\n isPush = true;\r\n depth = position.distanceTo(endPt);\r\n angle = undefined;\r\n\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n }\r\n else if (d.Type === GangDrillType.Wood)\r\n {\r\n if (!outline.PtInCurve(position.clone().setZ(0))) return;\r\n face = position.z > 0 ? FaceDirection.Front : FaceDirection.Back;\r\n holes = data.frontBackHoles;\r\n if (position.z > 0)\r\n {\r\n let z1 = position.z - d.Height;\r\n if (z1 > 0 && z1 < br.Thickness)\r\n {\r\n depth = br.Thickness - z1;\r\n isPush = true;\r\n }\r\n }\r\n else\r\n {\r\n let z1 = position.z + d.Height;\r\n if (z1 > 0 && z1 < br.Thickness)\r\n {\r\n depth = z1;\r\n isPush = true;\r\n }\r\n }\r\n position.sub(offsetTanslation);\r\n }\r\n }\r\n else\r\n {\r\n if (isParallelTo(d.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -d.Radius, br.Width + d.Radius, CanDrawHoleFuzz)\r\n || !IsBetweenA2B(position.y, -d.Radius, br.Height + d.Radius, CanDrawHoleFuzz)\r\n || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz)\r\n || !HoleInBoard(position.clone().setZ(0), d.Radius, outline, true)) return;\r\n\r\n position.sub(offsetTanslation);\r\n holes = data.frontBackHoles;\r\n face = !equalv3(d.Normal, brNormal, 1e-3) ? 0 : 1;\r\n isPush = true;\r\n }\r\n }\r\n isPush && holes.push({\r\n type: d.Type,\r\n position,\r\n radius: d.Radius,\r\n depth,\r\n face,\r\n endPt,\r\n angle\r\n });\r\n }\r\n\r\n /**分析自定义圆柱排钻 */\r\n function ParseExtrudeHoles(d: ExtrudeHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtureContourCurve, isCheckGroove = false)\r\n {\r\n if (!d.isHole)\r\n return;\r\n\r\n let brNormal = br.Normal;\r\n let cir = d.ContourCurve;\r\n if (cir instanceof Circle)\r\n {\r\n let diffMtx = br.OCSInv.multiply(d.OCS);\r\n let nor = d.Normal;\r\n let sp = cir.Center.applyMatrix4(diffMtx);\r\n let ep = cir.Center.add(new Vector3(0, 0, d.Height)).applyMatrix4(diffMtx);\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n //#I2DPFO 在挖穿造型内的五金不加工\r\n const grooves = br.Grooves.filter(g => equaln(g.Thickness, br.Thickness));\r\n const groovesOutlines = isCheckGroove ? grooves.map(g => g.ContourCurve.Clone().ApplyMatrix(g.OCS).ApplyMatrix(br.OCSInv).Z0()) : [];\r\n\r\n if (isParallelTo(nor, brNormal, CanDrawHoleFuzz))\r\n {\r\n let z0 = Math.min(sp.z, ep.z);\r\n let z1 = Math.max(sp.z, ep.z);\r\n let p = sp.clone().setZ(0).sub(offsetTanslation);\r\n\r\n if (Math.max(z0, 0) < Math.min(z1, br.Thickness) - CanDrawHoleFuzz && outline.PtInCurve(p) && groovesOutlines.every(g => !g.PtInCurve(p)))\r\n {\r\n let depth = z0 < CanDrawHoleFuzz ? z1 : br.Thickness - z0;\r\n let angle = angleTo(XAxis, x);\r\n if (equaln(angle, Math.PI))\r\n angle = 0;\r\n if (depth > CanDrawHoleFuzz)\r\n data.frontBackHoles.push({\r\n type: d.isThrough ? GangDrillType.TK : GangDrillType.Ymj,\r\n position: z0 < CanDrawHoleFuzz ? p : p.setZ(br.Thickness),\r\n radius: cir.Radius,\r\n depth,\r\n face: z0 < CanDrawHoleFuzz ? DrillingFace.Back : DrillingFace.Front,\r\n angle: angle,\r\n });\r\n }\r\n }\r\n else\r\n {\r\n let oldZ = sp.z;\r\n let [minX, maxX] = sp.x < ep.x ? [sp.x, ep.x] : [ep.x, sp.x];\r\n let [minY, maxY] = sp.y < ep.y ? [sp.y, ep.y] : [ep.y, sp.y];\r\n\r\n\r\n if (sp.z > -cir.Radius\r\n && sp.z < br.Thickness + cir.Radius\r\n && Math.max(minX, 0) < Math.min(br.Width, maxX) + 1e-6\r\n && Math.max(minY, 0) < Math.min(br.Height, maxY) + 1e-6\r\n )\r\n {\r\n sp.setZ(0);\r\n ep.setZ(0);\r\n let line = new Line(sp, ep);\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt)\r\n {\r\n console.error(\"排钻嵌在板件内部\");\r\n return;\r\n }\r\n let position = pt.clone().setZ(oldZ);\r\n let endPt: Vector3;\r\n let face = Math.floor(outline.GetParamAtPoint(pt));\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (!equalv3(p.setZ(oldZ), position) && outline.PtInCurve(p))\r\n {\r\n endPt = p.setZ(oldZ);\r\n break;\r\n }\r\n }\r\n if (!endPt)\r\n return;\r\n let depth = position.distanceTo(endPt);\r\n\r\n if (equaln(depth, 0, CanDrawHoleFuzz))\r\n return;\r\n\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n\r\n data.sideHoles.push({\r\n type: GangDrillType.Ljg,\r\n endPt,\r\n position,\r\n radius: cir.Radius,\r\n depth,\r\n face,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n function GetBoardMetals(br: Board)\r\n {\r\n let mids = br.RelativeHardware;\r\n let metalsData = {\r\n metals: 0,\r\n comp: 0\r\n };\r\n for (let id of mids)\r\n {\r\n if (!id || id.IsErase) continue;\r\n\r\n let metals = id.Object as HardwareCompositeEntity;\r\n if (!metals.HardwareOption)\r\n continue;\r\n if (metals.HardwareOption.type === EMetalsType.Metals)\r\n {\r\n metalsData.metals++;\r\n }\r\n else\r\n {\r\n metalsData.comp++;\r\n }\r\n }\r\n return metalsData;\r\n }\r\n\r\n export function GetHardwareCompositeData(en: HardwareCompositeEntity): ISpliteHardwareData\r\n {\r\n let size = en.BoundingBoxInOCS.getSize(new Vector3);\r\n let data = { ...en.HardwareOption } as ICompHardwareOption;\r\n const actualVal = safeEval(data.actualExpr, { L: size.x, W: size.y, H: size.z });\r\n data.actualExpr = actualVal ? actualVal.toString() : data.actualExpr;\r\n data.spec = ParseExpr(data.spec, { L: size.x, W: size.y, H: size.z });\r\n data.count = (safeEval(data.count, { L: size.x, W: size.y, H: size.z }) || 0).toString();\r\n\r\n let metalData = {\r\n metalsOption: data,\r\n dataList: en.DataList,\r\n children: [],\r\n size: size\r\n };\r\n if (en instanceof HardwareCompositeEntity && (en.HardwareOption.isSplite || en.HardwareOption.isSplitePrice))\r\n {\r\n if (en.Entitys.every(e => !(e instanceof HardwareCompositeEntity || e instanceof HardwareTopline)))\r\n return metalData;\r\n for (let e of en.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n let d = GetHardwareCompositeData(e);\r\n metalData.children.push(d);\r\n }\r\n else if (e instanceof HardwareTopline)\r\n {\r\n metalData.children.push(...GetHardwareToplineData(e));\r\n }\r\n }\r\n }\r\n\r\n return metalData;\r\n }\r\n\r\n export function GetHardwareToplineData(en: HardwareTopline)\r\n {\r\n let data = { ...en.HardwareOption } as IToplineOption;\r\n let datas: ISpliteHardwareData[] = [];\r\n let map = new Map();\r\n let addLen = en.HardwareOption.addLen;\r\n let cus = en.Segmentations;\r\n let size = en.BoundingBoxInOCS.getSize(new Vector3);\r\n for (let cu of cus)\r\n {\r\n let len = parseFloat(FixedNotZero(cu.Length, 2));\r\n if (map.has(len))\r\n {\r\n map.set(len, map.get(len) + 1);\r\n }\r\n else\r\n {\r\n map.set(len, 1);\r\n }\r\n }\r\n for (let [len, count] of map)\r\n {\r\n let totalLength = parseFloat(FixedNotZero(len + parseFloat(addLen), 2));\r\n let width = parseFloat(FixedNotZero(size.y, 2));\r\n let height = parseFloat(FixedNotZero(size.z, 2));\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d = { ...en.HardwareOption };\r\n const actualVal = safeEval(data.actualExpr, { L: totalLength, W: width, H: height });\r\n d.actualExpr = actualVal ? actualVal.toString() : d.actualExpr;\r\n d.spec = ParseExpr(data.spec, { L: totalLength, W: width, H: height });\r\n datas.push({\r\n metalsOption: d,\r\n dataList: en.DataList,\r\n length: totalLength,\r\n children: [],\r\n size\r\n });\r\n }\r\n }\r\n return datas;\r\n }\r\n\r\n /**获取排钻数量 */\r\n export function GetTotalDrillCount(brs: (Board | IHardwareType)[])\r\n {\r\n return lookOverBoardInfosTool.GetCount(brs);\r\n }\r\n\r\n export function GetCabSize(brList: Board[]): Map\r\n {\r\n let brMap: Map = new Map();\r\n //根据柜名房名分类\r\n for (let b of brList)\r\n {\r\n let k = b.BoardProcessOption[EBoardKeyList.RoomName] + '-' + b.BoardProcessOption[EBoardKeyList.CabinetName];\r\n if (brMap.has(k))\r\n brMap.get(k).push(b);\r\n else\r\n brMap.set(k, [b]);\r\n }\r\n\r\n let sizeData: Map = new Map();\r\n\r\n for (let [k, brs] of brMap)\r\n {\r\n let ocsInv = brs[0].SpaceOCSInv;\r\n let box = new Box3();\r\n let size = new Vector3();\r\n for (let b of brs)\r\n {\r\n sizeData.set(b, size);\r\n box.union(b.GetBoundingBoxInMtx(ocsInv));\r\n }\r\n box.getSize(size);\r\n }\r\n return sizeData;\r\n }\r\n export function Data2Polyline(data: IContourData, isClose = true)\r\n {\r\n let pl = new Polyline(data.pts.map((p, i) => ({ pt: new Vector2(p.x, p.y), bul: data.buls[i] })));\r\n if (isClose)\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n export function Report(ens: Entity[], msg: string)\r\n {\r\n if (IsDev()) return;\r\n ShowSelectObjects(ens);\r\n SendReport(msg);\r\n\r\n }\r\n export function Get2DModeing(br: Board, offset: Vector3)\r\n {\r\n let res: I2DModeling[] = [];\r\n let tmtx = MoveMatrix(offset.clone().negate());\r\n for (let m of br.Modeling2D)\r\n {\r\n let path = m.path.Clone().ApplyMatrix(tmtx) as Polyline;\r\n res.push({\r\n path: ConverToPolylineAndSplitArc(path),\r\n dir: m.dir,\r\n items: m.items.map(item => ({ ...item }))\r\n });\r\n }\r\n return res;\r\n }\r\n export function Get3DModeing(br: Board, offset: Vector3)\r\n {\r\n let res: I3DModeling[] = [];\r\n for (let m of br.Modeling3D)\r\n {\r\n let d: I3DModeling = {\r\n path: { pts: [], buls: [] },\r\n knife: { ...m.knife },\r\n dir: m.dir\r\n };\r\n for (let i = 0; i < m.path.length - 1; i++)\r\n {\r\n let d1 = m.path[i];\r\n let d2 = m.path[i + 1];\r\n if (equaln(d1.bul, 0))\r\n {\r\n let p = d1.pt.clone();\r\n InvertPosition(p, br.Thickness);\r\n p.sub(offset);\r\n d.path.pts.push(p);\r\n d.path.buls.push(0);\r\n }\r\n else\r\n {\r\n let arc = new Arc().ParseFromBul(d1.pt.clone().sub(offset), d2.pt.clone().sub(offset), d1.bul);\r\n let r = SplitetArc(arc, false);\r\n r.pts.forEach(p => InvertPosition(p, br.Thickness));\r\n d.path.pts.push(...r.pts);\r\n d.path.buls.push(...r.buls);\r\n }\r\n if (i === m.path.length - 2)\r\n {\r\n let p = d2.pt.clone();\r\n InvertPosition(p, br.Thickness);\r\n p.sub(offset);\r\n d.path.pts.push(p);\r\n d.path.buls.push(0);\r\n }\r\n }\r\n res.push(d);\r\n }\r\n return res;\r\n }\r\n export function GetChaiDanFeedingPath(data: IChaiDanFeedingData)\r\n {\r\n const { thickness, boardContour, dir, addLen, addWidth, addDepth, knifeRadius } = data;\r\n let brContour = Data2Polyline(boardContour);\r\n const tool = FeedingToolPath.GetInstance() as FeedingToolPath;\r\n const outline = Contour.CreateContour(Data2Polyline(data.outline));\r\n const holes = data.holes.map(h => Contour.CreateContour(Data2Polyline(h)));\r\n let shape = new Shape(outline, holes);\r\n\r\n const paths = tool.GetModelFeedPath({ Thickness: thickness, ContourCurve: brContour }, {\r\n shape,\r\n thickness,\r\n dir, knifeRadius, addLen, addWidth, addDepth\r\n });\r\n\r\n return paths.map((c: ExtureContourCurve) => ConverToPolylineAndSplitArc(c, false));\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\n/**\r\n * 简化优化版本的曲线求交, 优化版本可以参考(算法导论33.2 确定任意一对线段是否相交 p599)\r\n */\r\nexport class CurveIntersection\r\n{\r\n //用来缓存的曲线包围盒\r\n protected boxMap: Map = new Map();\r\n\r\n /**\r\n * 交点数据集,key 为曲线 value 为和它相交的(曲线和交点的Map)\r\n */\r\n intersect: Map> = new Map();\r\n intersect2: Map = new Map();\r\n\r\n /**\r\n * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来\r\n * @memberof CurveIntersection\r\n */\r\n constructor(cus: Curve[], parseIntersectionParam = false, intType = IntersectOption.OnBothOperands, protected fuzz = 1e-6)\r\n {\r\n this.GenBox(cus);\r\n //按x排序\r\n this.SortCurve(cus);\r\n\r\n let count = cus.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let c1 = cus[i];\r\n let c1d = this.GetIntersect(c1);\r\n\r\n let c1b = this.boxMap.get(c1);\r\n for (let j = i + 1; j < count; j++)\r\n {\r\n let c2 = cus[j];\r\n\r\n //过滤掉不需要计算的曲线\r\n let c2b = this.boxMap.get(c2);\r\n\r\n if (c2b.min.x - c1b.max.x > fuzz)\r\n break;\r\n if (c2b.min.y - c1b.max.y > fuzz)\r\n continue;\r\n\r\n let ints = this.IntersectWith2(c1, c2, intType);\r\n if (ints.length > 0)\r\n {\r\n let pts = ints.map(i => i.pt);\r\n c1d.set(c2, pts);\r\n this.GetIntersect(c2).set(c1, pts);\r\n\r\n if (parseIntersectionParam)\r\n {\r\n this.AppendIntersectionParams(c1, ints.map(i => i.thisParam));\r\n this.AppendIntersectionParams(c2, ints.map(i => i.argParam));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected IntersectWith2(c1: Curve, c2: Curve, intType: IntersectOption)\r\n {\r\n return c1.IntersectWith2(c2, intType);\r\n }\r\n\r\n protected AppendIntersectionParams(curve: Curve, params: number[])\r\n {\r\n let arr = this.intersect2.get(curve);\r\n if (!arr)\r\n {\r\n arr = [];\r\n this.intersect2.set(curve, arr);\r\n }\r\n arr.push(...params);\r\n }\r\n\r\n protected GenBox(cus: Curve[])\r\n {\r\n for (let c of cus)\r\n this.boxMap.set(c, c.BoundingBox);\r\n }\r\n\r\n protected SortCurve(cus: Curve[])\r\n {\r\n cus.sort((c1, c2) =>\r\n {\r\n return this.boxMap.get(c1).min.x - this.boxMap.get(c2).min.x;\r\n });\r\n }\r\n\r\n GetIntersect(cu: Curve): Map\r\n {\r\n if (this.intersect.has(cu))\r\n return this.intersect.get(cu);\r\n\r\n let m = new Map();\r\n this.intersect.set(cu, m);\r\n return m;\r\n }\r\n}\r\n\r\nexport class CurveIntersection2 extends CurveIntersection\r\n{\r\n /**\r\n * Curve2Polyline使用这个时,为了避免多余的交点导致曲线切割过度,过滤掉无关的点\r\n */\r\n protected IntersectWith2(c1: Curve, c2: Curve, intType: IntersectOption)\r\n {\r\n let pts = c1.IntersectWith2(c2, intType);\r\n return pts.filter(p =>\r\n {\r\n let inC1 = c1.ParamOnCurve(p.thisParam) || c1.StartPoint.distanceTo(p.pt) < this.fuzz || c1.EndPoint.distanceTo(p.pt) < this.fuzz;\r\n if (!inC1) return false;\r\n let inC2 = c2.ParamOnCurve(p.argParam) || c2.StartPoint.distanceTo(p.pt) < this.fuzz || c2.EndPoint.distanceTo(p.pt) < this.fuzz;\r\n return inC2;\r\n });\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Polyline } from \"../api\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\nimport { CurveIntersection2 } from \"./CurveIntersection\";\r\nimport { RegionParse } from \"./RegionParse\";\r\n\r\n/**\r\n * 某些时候我们不能创建轮廓,此时我们使用类似c2r的方法来构建一个外部轮廓.\r\n */\r\nexport function CreateContour2(curves: Curve[], fuzz = 1e-4): Contour | undefined\r\n{\r\n for (let c of curves)\r\n if (c instanceof Circle)\r\n return Contour.CreateContour(c);\r\n\r\n let extendsMinDistSq = fuzz * fuzz;\r\n\r\n let intersect = new CurveIntersection2(curves, false, IntersectOption.ExtendBoth, fuzz);\r\n\r\n let curves2: Curve[] = [];\r\n\r\n //延伸+打断\r\n for (let [cu, pmap] of intersect.intersect)\r\n {\r\n let sp = cu.StartPoint;\r\n let ep = cu.EndPoint;\r\n\r\n let epExtend: Vector3;\r\n let epDist = Infinity;\r\n let spExtend: Vector3;\r\n let spDist = Infinity;\r\n\r\n let isClose = cu.IsClose;\r\n\r\n let ipts: Vector3[] = [];\r\n for (let [, pts] of pmap)\r\n {\r\n ipts.push(...pts);\r\n\r\n if (!isClose)\r\n for (let p of pts)\r\n {\r\n let d = p.distanceToSquared(ep);\r\n if (d < epDist)\r\n {\r\n epDist = d;\r\n epExtend = p;\r\n }\r\n d = p.distanceToSquared(sp);\r\n if (d < spDist)\r\n {\r\n spDist = d;\r\n spExtend = p;\r\n }\r\n }\r\n }\r\n\r\n if (!isClose)\r\n {\r\n //延伸\r\n if (epDist > 0 && epDist < extendsMinDistSq)\r\n {\r\n let param = cu.GetParamAtPoint(epExtend);\r\n if (param > cu.EndParam)\r\n cu.Extend(param);\r\n }\r\n if (spDist > 0 && spDist < extendsMinDistSq)\r\n {\r\n let param = cu.GetParamAtPoint(spExtend);\r\n if (param < 0)\r\n cu.Extend(param);\r\n }\r\n }\r\n\r\n //打断\r\n let curves: Curve[];\r\n if (ipts.length > 0)\r\n curves = cu.GetSplitCurvesByPts(ipts);\r\n else\r\n curves = [cu];\r\n\r\n let tempCus: Curve[] = [];\r\n for (let c of curves)\r\n {\r\n if (c instanceof Polyline)\r\n tempCus.push(...c.Explode());\r\n else\r\n tempCus.push(c);\r\n }\r\n\r\n curves2.push(...tempCus);\r\n }\r\n\r\n let parse = new RegionParse(curves2);\r\n\r\n for (let rs of parse.RegionsOutline)\r\n {\r\n let curves = rs.map(r => r.curve);\r\n return Contour.CreateContour(curves, false);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, Shape as TShape, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../Common/ArrayExt\";\r\nimport { curveLinkGroup } from \"../Common/CurveUtils\";\r\nimport { clamp, FixIndex } from \"../Common/Utils\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid, ExtureContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { IntersectOption, IntersectResult } from \"../GraphicsSystem/IntersectWith\";\r\nimport { LinesType } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectsBox } from \"./Box\";\r\nimport { CreateContour2 } from \"./CreateContour2\";\r\nimport { FastOffset } from \"./FastOffset\";\r\nimport { AsVector2, equaln, equalv2, equalv3, IdentityMtx4 } from \"./GeUtils\";\r\nimport { RegionParse } from \"./RegionParse\";\r\n\r\nexport enum DepthType\r\n{\r\n Front = 1,\r\n Back = 2,\r\n All = 3,\r\n}\r\n\r\nexport const ExtrudeBuildConfig = { bevel: false };\r\n\r\n/**\r\n * 槽的几何数据,包括槽的墙面和槽的盖子\r\n */\r\nexport class Groove\r\n{\r\n contourWall: ExtudeWall;//槽轮廓的墙\r\n holeWalls: ExtudeWall[] = [];//槽的网洞的墙\r\n private lid: CurveTapeShape;//槽的盖子\r\n constructor(contour: Contour,\r\n holes: Contour[],\r\n public depthType: DepthType,\r\n public depth: number,\r\n public allDepth: number,\r\n private box = contour.BoundingBox\r\n )\r\n {\r\n this.contourWall = new ExtudeWall(contour.Curve, depthType, depth, allDepth, DirectionType.Inner);\r\n for (let h of holes)\r\n this.holeWalls.push(new ExtudeWall(h.Curve, depthType, depth, allDepth, DirectionType.Outer));\r\n\r\n this.lid = new CurveTapeShape(contour, holes);\r\n }\r\n\r\n /**\r\n * @param groove this - groove\r\n * @param [eachOther=true] 相互裁剪\r\n */\r\n ClipTo(groove: Groove, eachOther = true)\r\n {\r\n //相同深度和面不用操作\r\n if (groove.depthType === this.depthType && groove.depth === this.depth) return;\r\n\r\n if (!IntersectsBox(this.box, groove.box)) return;\r\n\r\n this.ClipLid(groove);\r\n groove.ClipLid(this);\r\n\r\n //一正一反,不交集\r\n if (this.depthType + groove.depthType === 3 && this.depth + groove.depth < this.allDepth)\r\n return;\r\n\r\n this.contourWall.ClipTo(groove, true);\r\n for (let wall of this.holeWalls)\r\n wall.ClipTo(groove, true);\r\n\r\n if (eachOther)\r\n {\r\n groove.contourWall.ClipTo(this, false);\r\n for (let wall of groove.holeWalls)\r\n wall.ClipTo(this, false);\r\n }\r\n }\r\n\r\n private ClipLid(groove: Groove)\r\n {\r\n if (this.depthType === DepthType.All) return;\r\n if (groove.depthType === DepthType.All) return;\r\n\r\n if (this.depthType === groove.depthType)\r\n {\r\n if (groove.depth > this.depth)\r\n this.lid.ClipTo(groove.lid, true);\r\n else\r\n this.lid.SplitTo(groove.lid);\r\n }\r\n else\r\n {\r\n if (this.depth + groove.depth >= this.allDepth)\r\n this.lid.ClipTo(groove.lid, true);\r\n else\r\n this.lid.SplitTo(groove.lid);\r\n }\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild, rotateUv: boolean)\r\n {\r\n this.contourWall.Draw(verticesArray, uvArray, edgeBuild);\r\n for (let wall of this.holeWalls)\r\n wall.Draw(verticesArray, uvArray, edgeBuild);\r\n\r\n if (this.depthType === DepthType.All) return;\r\n\r\n let isFront = this.depthType === DepthType.Front;\r\n this.lid.Draw(verticesArray, uvArray, isFront, isFront ? this.allDepth - this.depth : this.depth, rotateUv, this.allDepth);\r\n }\r\n}\r\n\r\nfunction GetShape(cu: ExtureContourCurve): TShape\r\n{\r\n if (cu instanceof Circle)\r\n {\r\n let sp = new TShape();\r\n let cen = cu.Center;\r\n sp.ellipse(cen.x, cen.y, cu.Radius, cu.Radius, 0, 2 * Math.PI, false, 0);\r\n return sp;\r\n }\r\n else\r\n {\r\n if (cu.OCSNoClone !== IdentityMtx4)\r\n cu.UpdateMatrixTo(IdentityMtx4);\r\n return cu.Shape;\r\n }\r\n}\r\n\r\nfunction CreateTape(faceType: DepthType, startParam: number, endParam: number, depth: number, allDepth: number): Tape\r\n{\r\n if (faceType === DepthType.Front)\r\n return new Tape(startParam, endParam, allDepth - depth, allDepth);\r\n else\r\n return new Tape(startParam, endParam, 0, depth);\r\n}\r\n\r\n//朝向类型\r\nenum DirectionType\r\n{\r\n Outer = 0,//外墙\r\n Inner = 1 //内墙\r\n}\r\n\r\n//轮廓树节点,用于重新确认外墙和网洞的关系\r\nexport class ContourTreeNode\r\n{\r\n parent: ContourTreeNode;//当存在Parent时,表示它是一个洞\r\n constructor(public contour: Contour, public children: ContourTreeNode[] = []) { }\r\n\r\n SetParent(node: ContourTreeNode)\r\n {\r\n this.parent = node;\r\n node.children.push(this);\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean, allDepth: number)//, depth = 1\r\n {\r\n // TestDraw(this.contour.Curve, depth);\r\n let pts = this.contour.Curve.GetStretchPoints();\r\n\r\n let isFace: boolean;\r\n let ptsChoking: Vector3[];\r\n if (ExtrudeBuildConfig.bevel)\r\n {\r\n //进行内缩,使得可以正常倒角\r\n isFace = (z === 0 || z === 18);//是正反面\r\n if (isFace)\r\n {\r\n ptsChoking = FastOffset(pts, 1, true);\r\n [pts, ptsChoking] = [ptsChoking, pts];\r\n }\r\n }\r\n\r\n let vertices = [...pts];\r\n let holes = this.children.map(h =>\r\n {\r\n // TestDraw(h.contour.Curve, depth + 1);\r\n let pts = h.contour.Curve.GetStretchPoints();\r\n vertices.push(...pts);\r\n return pts;\r\n });\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, holes);\r\n\r\n for (let f of faces)\r\n {\r\n if (front)\r\n {\r\n AddVertice(vertices[f[0]]);\r\n AddVertice(vertices[f[1]]);\r\n AddVertice(vertices[f[2]]);\r\n }\r\n else\r\n {\r\n AddVertice(vertices[f[0]]);\r\n AddVertice(vertices[f[2]]);\r\n AddVertice(vertices[f[1]]);\r\n }\r\n }\r\n\r\n function AddVertice(v: Vector3, inz = z)\r\n {\r\n verticesArray.push(v.x, v.y, inz);\r\n if (rotateUv)\r\n uvArray.push(v.y * 1e-3, v.x * 1e-3);\r\n else\r\n uvArray.push(v.x * 1e-3, v.y * 1e-3);\r\n }\r\n\r\n for (let hole of this.children)\r\n {\r\n for (let h of hole.children)\r\n {\r\n h.Draw(verticesArray, uvArray, front, z, rotateUv, allDepth);//, depth + 2\r\n }\r\n }\r\n\r\n if (!ExtrudeBuildConfig.bevel || !isFace) return;//如果不倒角 就不执行下面的代码\r\n\r\n let z2 = front ? z - 1 : z + 1;\r\n\r\n //构建倒角边\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p1 = pts[i];\r\n let nextIndex = FixIndex(i + 1, pts);\r\n let p2 = pts[nextIndex];\r\n\r\n let p3 = ptsChoking[i];\r\n let p4 = ptsChoking[nextIndex];\r\n\r\n if (front)\r\n {\r\n AddVertice(p3, z2);\r\n AddVertice(p4, z2);\r\n AddVertice(p1);\r\n\r\n AddVertice(p1);\r\n AddVertice(p4, z2);\r\n AddVertice(p2);\r\n }\r\n else\r\n {\r\n AddVertice(p3, z2);\r\n AddVertice(p1);\r\n AddVertice(p4, z2);\r\n\r\n AddVertice(p1);\r\n AddVertice(p2);\r\n AddVertice(p4, z2);\r\n }\r\n }\r\n }\r\n\r\n static ParseContourTree(contourNodes: ContourTreeNode[]): void\r\n {\r\n contourNodes.sort((c1, c2) => c1.contour.Curve.Area - c2.contour.Curve.Area);\r\n for (let i = 0; i < contourNodes.length; i++)\r\n {\r\n const node1 = contourNodes[i];\r\n let p = node1.contour.Curve.StartPoint;\r\n for (let j = i + 1; j < contourNodes.length; j++)\r\n {\r\n const node2 = contourNodes[j];\r\n if (node2.contour.BoundingBox.intersectsBox(node1.contour.BoundingBox)\r\n && node2.contour.Curve.PtInCurve(p))\r\n {\r\n node1.SetParent(node2);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass EdgeGeometryBuild\r\n{\r\n lineVerticesArray: number[] = [];\r\n\r\n frontLines: Line[] = [];\r\n backLines: Line[] = [];\r\n constructor(public allDepth: number) { }\r\n AddLidLine(p1: Vector3, p2: Vector3, depth: number)\r\n {\r\n if (depth === 0)\r\n {\r\n p1 = p1.clone().setZ(0);\r\n p2 = p2.clone().setZ(0);\r\n let line = new Line(p1, p2);\r\n this.backLines.push(line);\r\n }\r\n else if (depth === this.allDepth)\r\n {\r\n p1 = p1.clone().setZ(0);\r\n p2 = p2.clone().setZ(0);\r\n let line = new Line(p1, p2);\r\n this.frontLines.push(line);\r\n }\r\n }\r\n\r\n BuildLid(verticesArray: number[], uvArray: number[], rotateUv: boolean)\r\n {\r\n let arr = [this.backLines, this.frontLines];\r\n\r\n for (let index = 0; index < 2; index++)\r\n {\r\n let lines = arr[index];\r\n let parse = new RegionParse(lines, 2);\r\n let contourNodes: ContourTreeNode[] = [];\r\n for (let routes of parse.RegionsOutline)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false) ?? CreateContour2(cs);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"未能构建盖子\");\r\n }\r\n\r\n ContourTreeNode.ParseContourTree(contourNodes);\r\n\r\n for (let j = contourNodes.length; j--;)\r\n {\r\n let node = contourNodes[j];\r\n if (node.parent) continue;\r\n\r\n node.Draw(verticesArray, uvArray, index === 1, this.allDepth * index, rotateUv, this.allDepth);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 胶带\r\n */\r\nclass Tape\r\n{\r\n constructor(\r\n public start: number,\r\n public end: number,\r\n\r\n public bottom: number,\r\n public top: number\r\n )\r\n {\r\n\r\n }\r\n\r\n //用于测试\r\n get Curve()\r\n {\r\n return new Polyline().RectangleFrom2Pt(new Vector3(this.start, this.bottom), new Vector3(this.end, this.top));\r\n }\r\n\r\n Clip(t: this): Tape[]\r\n {\r\n let yr = IntersectRange(this.bottom, this.top, t.bottom, t.top, 1e5);\r\n if (yr === undefined) return [this];\r\n\r\n let xr = IntersectRange(this.start, this.end, t.start, t.end, 1e5);\r\n if (xr === undefined) return [this];\r\n\r\n let rem = SubtractRange(this.start, this.end, t.start, t.end, 1e5).map(r =>\r\n {\r\n return new Tape(r[0], r[1], this.bottom, this.top);\r\n });\r\n\r\n let remR = SubtractRange(this.bottom, this.top, t.bottom, t.top, 1e5);\r\n for (let hr of remR)\r\n {\r\n rem.push(new Tape(xr[0], xr[1], hr[0], hr[1]));\r\n }\r\n return rem;\r\n }\r\n\r\n Split(xlst: number[]): Tape[]\r\n {\r\n let ret: Tape[] = [];\r\n let pre = this.start;\r\n for (let x of xlst)\r\n {\r\n if (x > pre)\r\n {\r\n if (x >= this.end) x = this.end;\r\n if (equaln(pre, x)) continue;\r\n ret.push(new Tape(pre, x, this.bottom, this.top));\r\n pre = x;\r\n if (x === this.end) break;\r\n }\r\n }\r\n return ret;\r\n }\r\n}\r\n\r\n/**\r\n * 二维形状,内部用曲线胶带表示(用来计算盖子差集算法)\r\n */\r\nexport class CurveTapeShape\r\n{\r\n children: CurveTapeShape[] = [];\r\n contour: CurveTape;\r\n holes: CurveTape[];\r\n constructor(contour: Contour, holes: Contour[])\r\n {\r\n this.contour = new CurveTape(contour, DirectionType.Outer);\r\n this.holes = holes.map(h => new CurveTape(h, DirectionType.Inner));\r\n }\r\n\r\n CloneNew()\r\n {\r\n let s = new CurveTapeShape(this.contour.contour, this.holes.map(h => h.contour));\r\n return s;\r\n }\r\n\r\n /**\r\n * 删除包含,同向\r\n */\r\n ClipTo(s: CurveTapeShape, append: boolean = false)\r\n {\r\n for (let c of [this.contour, ... this.holes])\r\n if (c.tapes.length > 0)\r\n c.ClipTo(s);\r\n\r\n if (append)\r\n {\r\n let sn = s.CloneNew();\r\n sn.ReverseClipTo(this);\r\n this.children.push(sn);\r\n }\r\n }\r\n\r\n //合理打断(以保证三维网格对齐(否则圆弧点将无法正确的对齐))\r\n SplitTo(s: CurveTapeShape)\r\n {\r\n for (let c of [this.contour, ...this.holes])\r\n {\r\n for (let c2 of [s.contour, ...s.holes])\r\n {\r\n let int = GetIntersection(c.contour.Curve, c2.contour.Curve);\r\n c.splitParams.push(...int.map(i => i.thisParam));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 只保留被包含部分\r\n */\r\n private ReverseClipTo(s: CurveTapeShape): this\r\n {\r\n for (let c of [this.contour, ... this.holes])\r\n if (c.tapes.length > 0)\r\n c.ReverseClipTo(s);\r\n\r\n return this;\r\n }\r\n\r\n ChildrenClip()\r\n {\r\n for (let i = 0; i < this.children.length; i++)\r\n {\r\n let s1 = this.children[i];\r\n for (let j = i + 1; j < this.children.length; j++)\r\n {\r\n let s2 = this.children[j];\r\n\r\n s1.ClipTo(s2, false);\r\n s2.ClipTo(s1, false);\r\n }\r\n }\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean, allDepth: number)\r\n {\r\n this.ChildrenClip();\r\n\r\n let polylines: Polyline[] = this.contour.Curves;\r\n\r\n for (let h of this.holes)\r\n polylines.push(...h.Curves);\r\n\r\n for (let s of this.children)\r\n {\r\n polylines.push(...s.contour.Curves);\r\n for (let h of s.holes)\r\n polylines.push(...h.Curves);\r\n }\r\n\r\n // TestDraw(polylines, z);\r\n let groups = curveLinkGroup(polylines);\r\n let contourNodes: ContourTreeNode[] = [];\r\n for (let cus of groups)\r\n {\r\n let c = Contour.CreateContour(cus, false);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"出错\");\r\n }\r\n\r\n ContourTreeNode.ParseContourTree(contourNodes);\r\n\r\n for (let j = contourNodes.length; j--;)\r\n {\r\n let node = contourNodes[j];\r\n // TestDraw(s.contour.Curve.Clone(), z);\r\n if (node.parent) continue;\r\n\r\n node.Draw(verticesArray, uvArray, front, z, rotateUv, allDepth);\r\n }\r\n }\r\n}\r\n\r\nconst SplitLength = 4;\r\nconst MinSplitCount = 12;\r\nconst MaxSplitCount = 360;\r\nfunction SplitCurveParams(cu: ExtureContourCurve): number[]\r\n{\r\n let xparams: number[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), MinSplitCount, MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n xparams.push(i / splitCount);\r\n }\r\n else\r\n //分段1\r\n for (let i = 0; i < cu.EndParam; i++)\r\n {\r\n xparams.push(i);\r\n if (cu.GetBuilgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), MinSplitCount, MaxSplitCount);\r\n if (splitCount === 0) continue;\r\n\r\n let a = Math.PI * 2 / splitCount;\r\n let params: number[] = [];\r\n for (let j = 0; j < splitCount; j++)\r\n {\r\n let param = arc.GetParamAtAngle(a * j);\r\n if (arc.ParamOnCurve(param))\r\n params.push(param);\r\n }\r\n arraySortByNumber(params);\r\n if (params.length === 0) continue;\r\n\r\n for (let p of params)\r\n {\r\n if (p > 1e-5 && p < 9.99999)\r\n xparams.push(p + i);\r\n }\r\n }\r\n }\r\n xparams.push(cu.EndParam);\r\n return xparams;\r\n}\r\n\r\n/**\r\n * 曲线胶带(一维)\r\n */\r\nclass CurveTape\r\n{\r\n tapes: Range[];\r\n splitParams: number[] = [];\r\n constructor(public contour: Contour, public wallType: DirectionType)\r\n {\r\n this.tapes = [[0, this.contour.Curve.EndParam]];\r\n }\r\n\r\n get Curves(): Polyline[]\r\n {\r\n let xparams: number[] = SplitCurveParams(this.contour.Curve);\r\n if (this.splitParams.length > 0)\r\n {\r\n xparams.push(...this.splitParams);\r\n arraySortByNumber(xparams);\r\n arrayRemoveDuplicateBySort(xparams, (p1, p2) => equaln(p1, p2));\r\n }\r\n\r\n let polylines: Polyline[] = [];\r\n\r\n function TD(p: Vector3): PolylineProps\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n }\r\n\r\n const addPolyline = (t: Range) =>\r\n {\r\n let pts = [TD(this.contour.Curve.GetPointAtParam(t[0]))];\r\n for (let x of xparams)\r\n {\r\n if (x <= t[0]) continue;\r\n if (x >= t[1]) break;\r\n\r\n pts.push(TD(this.contour.Curve.GetPointAtParam(x)));\r\n }\r\n pts.push(TD(this.contour.Curve.GetPointAtParam(t[1])));\r\n\r\n let pl = new Polyline(pts);\r\n polylines.push(pl);\r\n };\r\n\r\n for (let t of this.tapes)\r\n {\r\n if (t[0] > t[1])\r\n {\r\n addPolyline([0, t[1]]);\r\n addPolyline([t[0], this.contour.Curve.EndParam]);\r\n }\r\n else\r\n addPolyline(t);\r\n }\r\n return polylines;\r\n }\r\n\r\n /**\r\n * 分析与另一个形状的包含关系\r\n */\r\n Parse(s: CurveTapeShape): CurveParamRangeRelation\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.contour.Curve, s.contour.contour.Curve);\r\n if (this.wallType === DirectionType.Inner)\r\n [res1.syntropy, res1.reverse] = [res1.reverse, res1.syntropy];\r\n if (res1.container.length > 0)\r\n {\r\n for (let h of s.holes)\r\n {\r\n let [res2] = ParseCurveParamRangeRelation(this.contour.Curve, h.contour.Curve);\r\n if (this.wallType === DirectionType.Outer)\r\n [res2.syntropy, res2.reverse] = [res2.reverse, res2.syntropy];\r\n\r\n res1.syntropy.push(...res2.syntropy);\r\n res1.reverse.push(...res2.reverse);\r\n\r\n res1.container = SubtractRanges(res1.container, res2.container, this.contour.Curve.EndParam);\r\n res1.container = SubtractRanges(res1.container, res2.syntropy, this.contour.Curve.EndParam);\r\n res1.container = SubtractRanges(res1.container, res2.reverse, this.contour.Curve.EndParam);\r\n }\r\n }\r\n return res1;\r\n }\r\n\r\n /**\r\n * 删除包含,同向面\r\n */\r\n ClipTo(s: CurveTapeShape): this\r\n {\r\n let d = this.Parse(s);\r\n\r\n this.tapes = SubtractRanges(this.tapes, d.container, this.contour.Curve.EndParam);\r\n this.tapes = SubtractRanges(this.tapes, d.syntropy, this.contour.Curve.EndParam);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 保留被包含的部分\r\n */\r\n ReverseClipTo(s: CurveTapeShape): this\r\n {\r\n this.tapes = this.Parse(s).container;\r\n return this;\r\n }\r\n}\r\n\r\nclass ExtudeWall\r\n{\r\n //胶带(立面)\r\n private Tape: Tape[];\r\n constructor(public curve: ExtureContourCurve,\r\n public depthType: DepthType,\r\n public depth: number,\r\n public allDepth: number,\r\n public wallType: DirectionType\r\n )\r\n {\r\n //一整段\r\n this.Tape = [CreateTape(depthType, 0, this.curve.EndParam, depth, allDepth)];\r\n }\r\n\r\n /**\r\n * 减去在另一个groove内的部分\r\n * @param groove this - groove\r\n * @param [clipSyntropy=false] 删除同向的面\r\n */\r\n ClipTo(groove: Groove, clipSyntropy = false)\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.curve, groove.contourWall.curve);\r\n if (this.wallType !== groove.contourWall.wallType)\r\n [res1.syntropy, res1.reverse] = [res1.reverse, res1.syntropy];\r\n if (res1.container.length > 0)\r\n {\r\n for (let h of groove.holeWalls)\r\n {\r\n let [resh1] = ParseCurveParamRangeRelation(this.curve, h.curve);\r\n\r\n //翻转\r\n if (this.wallType !== h.wallType)\r\n [resh1.syntropy, resh1.reverse] = [resh1.reverse, resh1.syntropy];\r\n\r\n //删除在网洞内的\r\n let subParams: [number, number][];\r\n if (clipSyntropy)\r\n subParams = resh1.container;//删除共面,\r\n else\r\n subParams = [...resh1.container, ...resh1.syntropy];//保留共面部分\r\n\r\n for (let i of subParams)\r\n {\r\n let rems: [number, number][] = [];\r\n for (let r of res1.container)\r\n rems.push(...SubtractRange(r[0], r[1], i[0], i[1], this.curve.EndParam));\r\n res1.container = rems;\r\n }\r\n }\r\n }\r\n\r\n let params = [...res1.container, ...res1.reverse];\r\n if (clipSyntropy)\r\n params.push(...res1.syntropy);\r\n\r\n for (let c of params)\r\n this.ClipFromParam(c[0], c[1], groove.depthType, groove.depth);\r\n }\r\n\r\n ClipReverse(wall: this)\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.curve, wall.curve);\r\n for (let c of res1.syntropy)\r\n this.ClipFromParam(c[0], c[1], wall.depthType, wall.depth);\r\n }\r\n\r\n /**\r\n * 当起始参数大于终止参数时,裁剪的区域经过终点\r\n *\r\n * @param startParam 起始参数\r\n * @param endParam 终止参数\r\n * @param faceType 裁剪面朝向\r\n * @param depth 裁剪面的深度\r\n */\r\n ClipFromParam(startParam: number, endParam: number, faceType: DepthType, depth: number)\r\n {\r\n if (equaln(startParam, endParam)) return;\r\n if (startParam > endParam)\r\n {\r\n this.ClipFromParam(startParam, this.curve.EndParam, faceType, depth);\r\n this.ClipFromParam(0, endParam, faceType, depth);\r\n return this;\r\n }\r\n\r\n let subTape = CreateTape(faceType, startParam, endParam, depth, this.allDepth);\r\n let taps: Tape[] = [];\r\n for (let t of this.Tape)\r\n taps.push(...t.Clip(subTape));\r\n\r\n this.Tape = taps;\r\n return this;\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild)\r\n {\r\n let xparams = SplitCurveParams(this.curve);\r\n\r\n let isOuter = this.wallType === DirectionType.Outer;\r\n let allDepth = this.allDepth;\r\n\r\n function AddVertice(v: Vector3)\r\n {\r\n verticesArray.push(v.x);\r\n verticesArray.push(v.y);\r\n\r\n if (isOuter && ExtrudeBuildConfig.bevel)//如果倒角,则执行下面的代码\r\n {\r\n if (v.z === 0)\r\n verticesArray.push(1);\r\n else if (v.z === allDepth)\r\n verticesArray.push(allDepth - 1);\r\n else\r\n verticesArray.push(v.z);\r\n }\r\n else\r\n verticesArray.push(v.z);\r\n }\r\n\r\n let tapes: Tape[] = [];\r\n this.Tape.sort((t1, t2) => t1.start - t2.start);\r\n for (let tape of this.Tape)\r\n tapes.push(...tape.Split(xparams));\r\n for (let i = 0; i < tapes.length; i++)\r\n {\r\n let preIndex = FixIndex(i - 1, tapes);\r\n let nextIndex = FixIndex(i + 1, tapes);\r\n\r\n let tape = tapes[i];\r\n let preTape = tapes[preIndex];\r\n let nextTape = tapes[nextIndex];\r\n\r\n let p1 = this.curve.GetPointAtParam(tape.start).setZ(tape.bottom);\r\n let p2 = this.curve.GetPointAtParam(tape.end).setZ(tape.bottom);\r\n let vs = [p1, p2, p2.clone().setZ(tape.top), p1.clone().setZ(tape.top), p1];\r\n edgeBuild.AddLidLine(p1, p2, tape.bottom);\r\n edgeBuild.AddLidLine(p1, p2, tape.top);\r\n\r\n //#region 构造线框\r\n {\r\n let leftRanges: Range[];\r\n let rightRange: Range[];\r\n\r\n const IsInteger = (n: number) => equaln(n, Math.round(n), 1e-8);\r\n\r\n if (!IsInteger(tape.start) && equaln(tape.start, preTape.end))\r\n leftRanges = SubtractRange(tape.bottom, tape.top, preTape.bottom, preTape.top, this.allDepth);\r\n else\r\n leftRanges = [[tape.bottom, tape.top]];\r\n\r\n if (equaln(tape.end, nextTape.start))\r\n rightRange = SubtractRange(tape.bottom, tape.top, nextTape.bottom, nextTape.top, this.allDepth);\r\n else\r\n rightRange = [[tape.bottom, tape.top]];\r\n\r\n //上下两条线\r\n edgeBuild.lineVerticesArray.push(\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n\r\n p1.x, p1.y, tape.top,\r\n p2.x, p2.y, tape.top,\r\n );\r\n\r\n //左右线\r\n for (let range of leftRanges)\r\n {\r\n edgeBuild.lineVerticesArray.push(\r\n p1.x, p1.y, range[0],\r\n p1.x, p1.y, range[1]);\r\n }\r\n for (let range of rightRange)\r\n {\r\n edgeBuild.lineVerticesArray.push(\r\n p2.x, p2.y, range[0],\r\n p2.x, p2.y, range[1]);\r\n }\r\n }\r\n //#endregion\r\n\r\n //和X平行平行\r\n let isXPar = (vs[0].y + vs[1].y + vs[2].y) < 0.01;\r\n\r\n function AddUv(p: Vector3)\r\n {\r\n if (isXPar)\r\n uvArray.push((p.z - 1) * 1e-3, p.y * 1e-3);\r\n else\r\n uvArray.push((p.z - 1) * 1e-3, p.x * 1e-3);\r\n }\r\n if (this.wallType === DirectionType.Outer)\r\n {\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[1]);\r\n AddUv(vs[1]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n AddVertice(vs[3]);\r\n AddUv(vs[3]);\r\n }\r\n else\r\n {\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n AddVertice(vs[1]);\r\n AddUv(vs[1]);\r\n\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[3]);\r\n AddUv(vs[3]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 曲线参数范围关系(包含,分离,同向共线,反向共线)\r\n * 用来表示某一曲线在另一个曲线内的关系\r\n */\r\ninterface CurveParamRangeRelation\r\n{\r\n outer: Range[];//外部\r\n container: Range[];//被包含\r\n syntropy: Range[];//同向\r\n reverse: Range[];//反向\r\n}\r\n\r\nfunction CloneCurveRange(r: CurveParamRangeRelation): CurveParamRangeRelation\r\n{\r\n return {\r\n outer: r.outer.slice(),\r\n container: r.container.slice(),\r\n syntropy: r.syntropy.slice(),\r\n reverse: r.reverse.slice(),\r\n };\r\n}\r\n\r\ninterface CurveSegs\r\n{\r\n outer: Curve[];//外部\r\n container: Curve[];//被包含\r\n syntropy: Curve[];//同向\r\n reverse: Curve[];//反向\r\n}\r\n\r\nfunction binarySearch(ar: number[], el: number): number\r\n{\r\n let m = 0;\r\n let n = ar.length - 1;\r\n while (m <= n)\r\n {\r\n let k = (n + m) >> 1;\r\n let cmp = (el - ar[k]);\r\n if (cmp > 1e8)\r\n m = k + 1;\r\n else if (cmp < -1e8)\r\n n = k - 1;\r\n else\r\n return k;\r\n }\r\n return -m - 1;\r\n}\r\n\r\nfunction CurveSplit(cu: Curve, range: CurveParamRangeRelation): CurveSegs\r\n{\r\n let segs = { outer: [], container: [], syntropy: [], reverse: [] };\r\n\r\n let ranges: Range[] = [...range.outer, ...range.container, ...range.syntropy, ...range.reverse];\r\n\r\n ranges.sort((r1, r2) => r1[0] - r2[0]);\r\n\r\n let params: number[] = ranges.flat();\r\n arrayRemoveDuplicateBySort(params, (p1, p2) => equaln(p1, p2));\r\n let cus = cu.GetSplitCurves(params);\r\n\r\n for (let key in range)\r\n {\r\n for (let r of range[key])\r\n {\r\n let i = binarySearch(params, r[0]);\r\n segs[key].push(cus[i]);\r\n }\r\n }\r\n\r\n return segs;\r\n}\r\n\r\n/**\r\n * 分析两个曲线关系(包含,分离,同向共线,反向共线)(用参数范围表示)\r\n */\r\nfunction ParseCurveParamRangeRelation(cu1: ExtureContourCurve, cu2: ExtureContourCurve, reverseParse = false): [CurveParamRangeRelation, CurveParamRangeRelation]\r\n{\r\n let ins = GetIntersection(cu1, cu2);\r\n\r\n let c1Res: CurveParamRangeRelation = { container: [], syntropy: [], reverse: [], outer: [] };\r\n let c2Res: CurveParamRangeRelation = { container: [], syntropy: [], reverse: [], outer: [] };\r\n if (ins.length === 0)\r\n {\r\n if (cu1 instanceof Circle && cu2 instanceof Circle && equaln(cu1.Radius, cu2.Radius, 1e-4) && equalv2(cu1.Center, cu2.Center, 1e-4))\r\n {\r\n c1Res.syntropy.push([0, 1]);\r\n c2Res.syntropy.push([0, 1]);\r\n return [c1Res, c2Res];\r\n }\r\n\r\n if (cu2.PtInCurve(cu1.StartPoint))\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (cu1.PtInCurve(cu2.StartPoint))\r\n c2Res.container.push([0, cu2.EndParam]);\r\n else\r\n c2Res.outer.push([0, cu2.EndParam]);\r\n\r\n return [c1Res, c2Res];\r\n }\r\n\r\n type CurveSeg = {\r\n startParam: number;\r\n endParam: number;\r\n startPoint: Vector3;\r\n endPoint: Vector3;\r\n used?: boolean;\r\n };\r\n\r\n //解析出线段列表\r\n let c1Curves: CurveSeg[] = [];\r\n let c2Curves: CurveSeg[] = [];\r\n\r\n ins.sort((a1, a2) => a1.thisParam - a2.thisParam);\r\n //点重复->下方ins会sort,导致交点对应不上,导致错误\r\n arrayRemoveDuplicateBySort(ins, (i1, i2) => equalv3(i1.pt, i2.pt, 1e-4));\r\n if (ins.length > 1 && equalv3(ins[0].pt, ins[ins.length - 1].pt, 1e-4)) ins.pop();\r\n for (let i = 0; i < ins.length; i++)\r\n {\r\n let n1 = ins[i];\r\n let n2 = ins[FixIndex(i + 1, ins)];\r\n c1Curves.push({ startParam: n1.thisParam, endParam: n2.thisParam, startPoint: n1.pt, endPoint: n2.pt });\r\n }\r\n ins.sort((a1, a2) => a1.argParam - a2.argParam);\r\n for (let i = 0; i < ins.length; i++)\r\n {\r\n let n1 = ins[i];\r\n let n2 = ins[FixIndex(i + 1, ins)];\r\n c2Curves.push({ startParam: n1.argParam, endParam: n2.argParam, startPoint: n1.pt, endPoint: n2.pt });\r\n }\r\n\r\n //分析共边关系和包含关系\r\n for (let c of c1Curves)\r\n {\r\n let c1MidPoint = CenterPoint(cu1, c.startParam, c.endParam);\r\n for (let c2 of c2Curves)\r\n {\r\n if (c2.used)\r\n continue;\r\n\r\n let c2MidPoint = CenterPoint(cu2, c2.startParam, c2.endParam);\r\n if (!equalv3(c1MidPoint, c2MidPoint, 1e-4))\r\n continue;\r\n\r\n c.used = true;\r\n if (c.startPoint === c2.startPoint\r\n && c.endPoint === c2.endPoint)\r\n {\r\n c1Res.syntropy.push([c.startParam, c.endParam]);\r\n c2Res.syntropy.push([c2.startParam, c2.endParam]);\r\n c2.used = true;\r\n break;\r\n }\r\n else if (c.startPoint === c2.endPoint\r\n && c.endPoint === c2.startPoint)\r\n {\r\n c1Res.reverse.push([c.startParam, c.endParam]);\r\n c2Res.reverse.push([c2.startParam, c2.endParam]);\r\n c2.used = true;\r\n break;\r\n }\r\n else\r\n c.used = false;\r\n }\r\n\r\n if (!c.used)\r\n {\r\n if (cu2.PtInCurve(c1MidPoint))\r\n c1Res.container.push([c.startParam, c.endParam]);\r\n else\r\n c1Res.outer.push([c.startParam, c.endParam]);\r\n }\r\n }\r\n\r\n //只分析包含关系\r\n if (reverseParse)\r\n for (let c of c2Curves)\r\n {\r\n if (c.used) continue;\r\n let p = CenterPoint(cu2, c.startParam, c.endParam);\r\n if (cu1.PtInCurve(p))\r\n c2Res.container.push([c.startParam, c.endParam]);\r\n else\r\n c2Res.outer.push([c.startParam, c.endParam]);\r\n }\r\n return [c1Res, c2Res];\r\n}\r\n\r\nfunction CenterPoint(cu: ExtureContourCurve, start: number, end: number)\r\n{\r\n let lenStart = cu.GetDistAtParam(start);\r\n let lenEnd = cu.GetDistAtParam(end);\r\n if (end > start)\r\n return cu.GetPointAtDistance((lenEnd + lenStart) * 0.5);\r\n\r\n let lenAll = cu.Length;\r\n let lenDiv = ((lenAll - lenStart) + lenEnd) * 0.5;\r\n\r\n if (lenStart + lenDiv >= lenAll)\r\n return cu.GetPointAtDistance(lenStart + lenDiv - lenAll);\r\n else\r\n return cu.GetPointAtDistance(lenStart + lenDiv);\r\n}\r\n\r\n//求参数并集部分,交集部分,差集部分\r\n\r\n//求 ab 和 cd 的并集部分\r\nfunction UnionRange(a: number, b: number, c: number, d: number, end: number): [number, number][]\r\n{\r\n let b1 = b < a ? b + end : b;\r\n let d1 = d < c ? d + end : d;\r\n let a1 = a;\r\n let c1 = c;\r\n\r\n if (c < a)\r\n [a1, b1, c1, d1] = [c1, d1, a1, b1];\r\n\r\n if (c1 > b1)\r\n return [[a, b], [c, d]];\r\n\r\n let e = Math.max(b1, d1);\r\n if (e >= end)\r\n {\r\n e -= end;\r\n if (e > a1)\r\n return [[0, end]];\r\n }\r\n\r\n return [[a1, e]];\r\n}\r\n\r\n// //0-1\r\n// UnionRange(0.5, 0.3, 0.3, 0.5, 1);//?\r\n\r\n// //0-1\r\n// UnionRange(0.4, 0.3, 0.3, 0.5, 1);//?\r\n\r\n// //[ [ 0.8, 0.1 ], [ 0.3, 0.5 ] ]\r\n// UnionRange(0.8, 0.1, 0.3, 0.5, 1);//?\r\n\r\n// //[ 0.3, 0.10000000000000009 ] ] \r\n// UnionRange(0.8, 0.1, 0.3, 0.9, 1);//?\r\n\r\nfunction SubtractRange(a: number, b: number, c: number, d: number, end: number): Range[]\r\n{\r\n if (a < 0 || b < 0) return [];\r\n\r\n if (a > b)\r\n return [...SubtractRange(a, end, c, d, end), ...SubtractRange(0, b, c, d, end)];\r\n if (c > d)\r\n {\r\n let arr = SubtractRange(a, b, c, end, end);\r\n let rem: [number, number][] = [];\r\n for (let s of arr)\r\n rem.push(...SubtractRange(s[0], s[1], 0, d, end));\r\n return rem;\r\n }\r\n\r\n if (c >= b || d <= a)\r\n return [[a, b]];\r\n\r\n if (c <= a)// c1 a1 b1\r\n {\r\n if (d >= b) return [];\r\n return [[d, b]];\r\n }\r\n\r\n if (d < b)\r\n return [[a, c], [d, b]];\r\n return [[a, c]];\r\n}\r\n\r\nfunction SubtractRange2(r: Range, sr: Range, end: number): Range[]\r\n{\r\n return SubtractRange(r[0], r[1], sr[0], sr[1], end);\r\n}\r\n\r\ntype Range = [number, number];\r\nfunction SubtractRanges(ranges: Range[], subRanges: Range[], end: number): Range[]\r\n{\r\n let rets: Range[] = ranges;\r\n for (let sr of subRanges)\r\n {\r\n let temps: Range[] = [];\r\n for (let r of rets)\r\n temps.push(...SubtractRange2(r, sr, end));\r\n\r\n rets = temps;\r\n }\r\n return rets;\r\n}\r\n\r\nfunction IntersectRange(a: number, b: number, c: number, d: number, end: number): Range\r\n{\r\n let b1 = b < a ? b + end : b;\r\n let d1 = d < c ? d + end : d;\r\n let a1 = a;\r\n let c1 = c;\r\n\r\n if (c < a)\r\n [a1, b1, c1, d1] = [c1, d1, a1, b1];\r\n\r\n if (c1 > b1)\r\n return;\r\n\r\n return [c1, Math.min(b1, d1)];\r\n}\r\n\r\nconst alMatrix4 = new Matrix4;\r\n\r\nexport class ExtrudeGeometryBuilder\r\n{\r\n verticesArray: number[] = [];//用于构建三维网格\r\n uvArray: number[] = [];//uv\r\n\r\n edgeAndLidBuilder: EdgeGeometryBuild;\r\n\r\n constructor(private br: ExtrudeSolid)\r\n {\r\n this.GenerateMeshData(br);\r\n }\r\n\r\n protected GenerateMeshData(br: ExtrudeSolid)\r\n {\r\n this.edgeAndLidBuilder = new EdgeGeometryBuild(this.br.Thickness);\r\n let rotateUv = (br instanceof Board && br.BoardProcessOption.lines === LinesType.Reverse);\r\n //计算墙(创建轮廓取出,为了得到正确的轮廓曲线(逆时针之类的))\r\n let outerWall = new ExtudeWall(Contour.CreateContour(br.ContourCurve.Clone()).Curve, DepthType.All, br.Thickness, br.Thickness, DirectionType.Outer);\r\n let grooves = this.ParseGrooves();\r\n for (let i = 0; i < grooves.length; i++)\r\n {\r\n let s1 = grooves[i];\r\n outerWall.ClipTo(s1, false);\r\n s1.contourWall.ClipReverse(outerWall);\r\n for (let j = i + 1; j < grooves.length; j++)\r\n {\r\n let s2 = grooves[j];\r\n s1.ClipTo(s2, true);\r\n }\r\n\r\n s1.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder, rotateUv);\r\n }\r\n outerWall.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder);\r\n\r\n //这里构建盖子\r\n this.edgeAndLidBuilder.BuildLid(this.verticesArray, this.uvArray, rotateUv);\r\n\r\n intCache.clear();\r\n }\r\n\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n let geo = new BufferGeometry();\r\n geo.setAttribute('position', new Float32BufferAttribute(this.verticesArray, 3));\r\n geo.setAttribute('uv', new Float32BufferAttribute(this.uvArray, 2));\r\n geo.computeVertexNormals();\r\n return geo;\r\n }\r\n\r\n get EdgeGeometry(): BufferGeometry\r\n {\r\n let geo = new BufferGeometry();\r\n geo.setAttribute('position', new Float32BufferAttribute(this.edgeAndLidBuilder.lineVerticesArray, 3));\r\n return geo;\r\n }\r\n\r\n protected ParseGrooves()\r\n {\r\n let br = this.br;\r\n const brOcsInv = br.OCSInv;\r\n let grooves: Groove[] = [];\r\n for (let groove of br.Grooves)\r\n {\r\n //判断槽正反面\r\n let type: DepthType;\r\n if (equaln(groove.Thickness, br.Thickness))\r\n type = DepthType.All;\r\n else\r\n {\r\n if (equaln(groove.Position.applyMatrix4(brOcsInv).z, 0))\r\n type = DepthType.Back;\r\n else\r\n type = DepthType.Front;\r\n }\r\n alMatrix4.multiplyMatrices(brOcsInv, groove.OCSNoClone);\r\n //槽轮廓\r\n let grooveContourCurve = groove.ContourCurve.Clone();\r\n grooveContourCurve.ApplyMatrix(alMatrix4);\r\n grooveContourCurve.Z0();\r\n if (grooveContourCurve instanceof Polyline) grooveContourCurve.UpdateMatrixTo(IdentityMtx4);//不可能改变这个\r\n let grooveContour = Contour.CreateContour(grooveContourCurve);\r\n\r\n let grooveHoleContours: Contour[] = [];\r\n //孤岛\r\n for (let grooveChild of groove.Grooves)\r\n {\r\n let grooveChildContourCurve = grooveChild.ContourCurve.Clone();\r\n alMatrix4.multiplyMatrices(brOcsInv, grooveChild.OCSNoClone);\r\n grooveChildContourCurve.ApplyMatrix(alMatrix4).Z0();\r\n if (grooveChildContourCurve instanceof Polyline) grooveChildContourCurve.UpdateMatrixTo(IdentityMtx4);\r\n let grooveChildContour = Contour.CreateContour(grooveChildContourCurve);\r\n grooveHoleContours.push(grooveChildContour);\r\n }\r\n\r\n grooves.push(new Groove(grooveContour, grooveHoleContours, type, groove.Thickness, br.Thickness));\r\n }\r\n\r\n return grooves;\r\n }\r\n}\r\n\r\nlet intCache = new Map>();\r\nfunction GetIntersection(cu1: Curve, cu2: Curve): IntersectResult[]\r\n{\r\n let m = intCache.get(cu1);\r\n if (m)\r\n {\r\n let r = m.get(cu2);\r\n if (r) return r;\r\n }\r\n else\r\n m = new Map();\r\n\r\n intCache.set(cu1, m);\r\n let r = cu1.IntersectWith2(cu2, IntersectOption.OnBothOperands);\r\n\r\n let cu1EndParam = cu1.EndParam;\r\n let cu2EndParam = cu2.EndParam;\r\n for (let d of r)\r\n {\r\n d.thisParam = MathUtils.clamp(d.thisParam, 0, cu1EndParam);\r\n d.argParam = MathUtils.clamp(d.argParam, 0, cu2EndParam);\r\n }\r\n\r\n m.set(cu2, r);\r\n\r\n let r2: IntersectResult[] = r.map(r =>\r\n {\r\n return { thisParam: r.argParam, argParam: r.thisParam, pt: r.pt };\r\n });\r\n\r\n let m2 = intCache.get(cu2);\r\n if (!m2)\r\n {\r\n m2 = new Map();\r\n intCache.set(cu2, m2);\r\n }\r\n m2.set(cu1, r2);\r\n\r\n return r;\r\n}\r\n","import { BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Path, UVGenerator, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayClone, arrayLast, arrayRemoveIf, arrayRemoveOnce, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { equalCurve, PolylineSpliteRect } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { matrixSetVector, Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { CSG } from \"../../csg/core/CSG\";\r\nimport { Geometry2CSG } from \"../../csg/core/Geometry2CSG\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { boardUVGenerator } from \"../../Geometry/BoardUVGenerator\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { BSPGroupParse } from \"../../Geometry/BSPGroupParse\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/ExtrudeEdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, IdentityMtx4, isIntersect, isParallelTo, isPerpendicularityTo, MoveMatrix, XAxis, YAxis, ZAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { OBB } from \"../../Geometry/OBB/obb\";\r\nimport { ScaleUV, ScaleUV2 } from \"../../Geometry/UVUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { BlockTableRecord } from \"../BlockTableRecord\";\r\nimport { CADFactory, Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Contour } from \"../Contour\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\r\nimport { Shape } from \"../Shape\";\r\nimport { ShapeManager } from \"../ShapeManager\";\r\nimport { Spline } from \"../Spline\";\r\nimport { Board } from \"./Board\";\r\nimport { Circle } from \"./Circle\";\r\nimport { DragPointType } from \"./DragPointType\";\r\nimport { Ellipse } from \"./Ellipse\";\r\nimport { Entity } from \"./Entity\";\r\nimport { ExtrudeConfig } from \"./ExtrudeConfig\";\r\nimport { Line } from \"./Line\";\r\nimport { Polyline } from \"./Polyline\";\r\nimport { Region } from \"./Region\";\r\n\r\nexport type ExtureContourCurve = Polyline | Circle;\r\nexport type ExtureContour = Polyline | Circle | ExtrudeSolid | Region;\r\n\r\n@Factory\r\nexport class ExtrudeSolid extends Entity\r\n{\r\n /*\r\n ------------\r\n | |\r\n | |\r\n | | height\r\n | |\r\n | |\r\n ----width---\r\n */\r\n\r\n protected height: number = 1;//y\r\n protected width: number = 1;//x\r\n\r\n /**\r\n * 拉伸实体的厚度\r\n * 我们允许它是一个负数,但是这个时候这个实体已经是一个无效的拉伸实体了.\r\n * 允许负数,用来校验凹槽的合理性.\r\n */\r\n protected thickness: number = 1;\r\n\r\n protected isRect = true;\r\n\r\n IsKnife = false;\r\n\r\n RelevanceMeats: ObjectId[];\r\n RelevanceKnifs: ObjectId[];\r\n __OriginalId__: ObjectId;\r\n __OriginalEnt__: this;\r\n /**\r\n * 拉伸形状\r\n * 出于优化考虑,可能未初始化\r\n * 形状位于WCS 0点位置,不随OCS变化而变化\r\n */\r\n protected contourCurve: ExtureContourCurve;\r\n\r\n /**\r\n * 正面和反面的凹槽造型\r\n */\r\n protected grooves: ExtrudeSolid[] = [];\r\n\r\n protected knifeRadius: number = 3;\r\n protected groovesAddLength: number = 0;\r\n protected groovesAddWidth: number = 0;\r\n protected groovesAddDepth: number = 0;\r\n __TempIndexVersion__: { Index: number, Version: number; };\r\n constructor()\r\n {\r\n super();\r\n this.RelevanceKnifs = this.CreateProxyArray((v) =>\r\n {\r\n //可以更新自己,但是不建议,建议手动更新\r\n });\r\n this.RelevanceMeats = this.CreateProxyArray((v) =>\r\n {\r\n //可以更新肉,简单是不建议,建议手动更新\r\n });\r\n }\r\n\r\n get KnifeRadius()\r\n {\r\n return this.knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this.knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.knifeRadius = v;\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCS);\r\n }\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(), new Vector3(this.width, this.height, this.thickness));\r\n }\r\n\r\n get OBB(): OBB\r\n {\r\n return new OBB(this.OCS, new Vector3(this.width, this.height, this.thickness).multiplyScalar(0.5));\r\n }\r\n\r\n get GroovesAddLength()\r\n {\r\n return this.groovesAddLength;\r\n }\r\n\r\n set GroovesAddLength(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddLength))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddLength = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get GroovesAddWidth()\r\n {\r\n return this.groovesAddWidth;\r\n }\r\n\r\n set GroovesAddWidth(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddWidth))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddWidth = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get GroovesAddDepth()\r\n {\r\n return this.groovesAddDepth;\r\n }\r\n\r\n set GroovesAddDepth(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddDepth))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddDepth = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n\r\n Clone()\r\n {\r\n let en = super.Clone();\r\n return en;\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n //暂时关闭更新,避免内部实体还没有更新位置时,先更新了实体的Geometry,导致后续没有进行更新\r\n let updateBak = this.AutoUpdate;\r\n this.AutoUpdate = false;\r\n super.ApplyMatrix(m);\r\n for (let g of this.grooves)\r\n g.ApplyMatrix(m);\r\n\r\n //由于修改矩阵会导致矩阵错误\r\n this.csg = undefined;\r\n this.AutoUpdate = updateBak;\r\n if (!equaln(m.getMaxScaleOnAxis(), 1))\r\n this.Update(UpdateDraw.Geometry);\r\n else if (this.AutoUpdate)\r\n this.DeferUpdate();\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let cu = this.ContourCurve;\r\n cu.ApplyMatrix(this.OCS);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n return this;\r\n }\r\n get Position(): Vector3\r\n {\r\n return super.Position;\r\n }\r\n set Position(p: Vector3)\r\n {\r\n let v = p.clone().sub(this.Position);\r\n if (equalv3(v, ZeroVec)) return;\r\n super.Position = p;\r\n\r\n let m = MoveMatrix(v);\r\n for (let g of this.grooves)\r\n g.ApplyMatrix(m);\r\n\r\n //由于修改矩阵会导致bsp错误\r\n this.csg = undefined;\r\n }\r\n\r\n get Width()\r\n {\r\n return this.width;\r\n }\r\n get Height()\r\n {\r\n return this.height;\r\n }\r\n\r\n get Thickness()\r\n {\r\n return this.thickness;\r\n }\r\n set Thickness(thickness: number)\r\n {\r\n if (!equaln(thickness, this.thickness, 1e-3))\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (this.grooves.length > 0)\r\n {\r\n let inv = this.OCSInv;\r\n let v = this.Normal.multiplyScalar(thickness - this.thickness);\r\n let m = new Matrix4().setPosition(v);\r\n\r\n for (let g of this.grooves)\r\n {\r\n let p = g.Position.applyMatrix4(inv);\r\n\r\n if (equaln(g.thickness, this.thickness))\r\n g.Thickness = thickness;\r\n else if (!equaln(p.z, 0))\r\n g.ApplyMatrix(m);\r\n }\r\n }\r\n\r\n this.thickness = thickness;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n\r\n get Grooves()\r\n {\r\n return this.grooves;\r\n }\r\n\r\n /**\r\n * 返回未拷贝的轮廓曲线\r\n */\r\n get ContourCurve()\r\n {\r\n if (!this.contourCurve)\r\n this.GeneralRectContour();\r\n return this.contourCurve;\r\n }\r\n\r\n set ContourCurve(cu: ExtureContourCurve)\r\n {\r\n this.SetContourCurve(cu);\r\n }\r\n\r\n /**\r\n * 生成矩形轮廓(强制)\r\n */\r\n GeneralRectContour()\r\n {\r\n if (!this.contourCurve || !(this.contourCurve instanceof Polyline))\r\n this.contourCurve = new Polyline();\r\n\r\n this.contourCurve.Rectangle(this.width, this.height);\r\n this.contourCurve.OCS = IdentityMtx4;\r\n this.ContourCurve = this.contourCurve;\r\n }\r\n\r\n /**\r\n * 转换成矩形拉伸实体\r\n */\r\n ConverToRectSolid(width = this.width, height = this.height, thickness = this.thickness)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.height = height;\r\n this.width = width;\r\n this.thickness = thickness;\r\n\r\n this.isRect = true;\r\n\r\n this.GeneralRectContour();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 更新拉伸实体的轮廓\r\n * @param curve 曲线已经存在WCS坐标系\r\n */\r\n SetContourCurve(curve: ExtureContourCurve)\r\n {\r\n if (!curve.IsClose) return;\r\n\r\n let area = curve.Area;\r\n if (!area || equaln(area, 0)) return;\r\n\r\n if (curve instanceof Spline || curve instanceof Ellipse)\r\n curve = curve.Convert2Polyline();\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n curve.CloseMark = true;\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n\r\n //如果曲线被旋转了,那么修正它的旋转矩阵,避免纹路错误\r\n let ocs = curve.OCS;\r\n let isMirror = equaln(ocs.elements[10], -1, 1e-4);\r\n let isRotate = !equaln(ocs.elements[0], 1);\r\n if (isMirror || isRotate)// || ocs.elements[9] || ocs.elements[10]\r\n {\r\n for (let p of pts)\r\n {\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n if (isMirror)\r\n p.bul *= -1;\r\n }\r\n curve.OCS = IdentityMtx4;\r\n }\r\n }\r\n else\r\n {\r\n curve.OCS = new Matrix4().setPosition(curve.Position);\r\n }\r\n curve.ClearDraw();\r\n\r\n this.WriteAllObjectRecord();\r\n this.contourCurve = curve;\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 在不改变Normal和实体显示的情况下,修改X轴的指向\r\n * @param xAxis\r\n */\r\n SetXAxis(xAxis: Vector3): this\r\n {\r\n let m = this.OCSInv.setPosition(ZeroVec);\r\n let x = xAxis.applyMatrix4(m).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n m.copy(this._Matrix).setPosition(ZeroVec);\r\n x.applyMatrix4(m);\r\n let z = this.Normal;\r\n let y = z.cross(x);\r\n\r\n this._Matrix.elements[0] = x.x;\r\n this._Matrix.elements[1] = x.y;\r\n this._Matrix.elements[2] = x.z;\r\n\r\n this._Matrix.elements[4] = y.x;\r\n this._Matrix.elements[5] = y.y;\r\n this._Matrix.elements[6] = y.z;\r\n\r\n m.makeRotationZ(-a);\r\n this.contourCurve.ApplyMatrix(m);\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateMatrixTo(m.identity());\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 检验轮廓曲线,通常当轮廓曲线被修改时,都需要检验轮廓曲线,并更新实体大小和轮廓位置.\r\n * >计算轮廓大小\r\n * >判断是否矩形\r\n * >修正轮廓基点\r\n */\r\n CheckContourCurve()\r\n {\r\n let box = this.ContourCurve.BoundingBox;\r\n let size = box.getSize(new Vector3());\r\n this.width = size.x;\r\n this.height = size.y;\r\n if (equaln(size.x, 0) || equaln(size.y, 0))\r\n Log(`注意!!该板件尺寸为0!`);\r\n this.isRect = equaln(this.width * this.height, this.ContourCurve.Area, 0.1);\r\n\r\n //修正轮廓基点\r\n if (!equalv3(box.min, ZeroVec))\r\n {\r\n this.contourCurve.Position =\r\n this.contourCurve.Position.sub(box.min);\r\n\r\n let v = box.min.applyMatrix4(this.OCS.setPosition(ZeroVec));\r\n this._Matrix.setPosition(this.Position.add(v));\r\n }\r\n }\r\n get IsRect()\r\n {\r\n return this.isRect;\r\n }\r\n\r\n /**\r\n * 这个拉伸实体的面域形状\r\n */\r\n get Shape()\r\n {\r\n let contour = Contour.CreateContour(this.ContourCurve.Clone(), false);\r\n\r\n let holes: Contour[] = [];\r\n\r\n for (let g of this.grooves)\r\n {\r\n if (equaln(g.thickness, this.thickness))\r\n holes.push(Contour.CreateContour(g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCS)), false));\r\n }\r\n return new Shape(contour, holes);\r\n }\r\n\r\n /**\r\n * 实体合并(不会删除target)\r\n */\r\n Join(target: this): Status\r\n {\r\n let [n, tn] = [this.Normal, target.Normal];\r\n\r\n if (!isParallelTo(n, tn))\r\n return Status.False;\r\n\r\n let isEqualNorm = equalv3(n, tn);\r\n\r\n let targetZMin = target.Position.applyMatrix4(this.OCSInv).z;\r\n let targetZMax = targetZMin + target.Thickness * (isEqualNorm ? 1 : -1);\r\n [targetZMin, targetZMax] = arraySortByNumber([targetZMin, targetZMax]);\r\n\r\n const MergeRelevance = () =>\r\n {\r\n if (!this.Id || !target.Id) return;\r\n for (let kf of target.RelevanceKnifs)\r\n {\r\n let kfBr = kf.Object as ExtrudeSolid;\r\n if (!kfBr) continue;\r\n if (!kfBr.RelevanceMeats.includes(this.Id))\r\n kfBr.RelevanceMeats.push(this.Id);\r\n\r\n if (!this.RelevanceKnifs.includes(kf))\r\n this.RelevanceKnifs.push(kf);\r\n }\r\n for (let meat of target.RelevanceMeats)\r\n {\r\n let meatBr = meat.Object as ExtrudeSolid;\r\n if (!meatBr) continue;\r\n if (!meatBr.RelevanceKnifs.includes(this.Id))\r\n meatBr.RelevanceKnifs.push(this.Id);\r\n\r\n if (!this.RelevanceMeats.includes(meat))\r\n this.RelevanceMeats.push(meat);\r\n }\r\n };\r\n\r\n if (equaln(this.thickness, target.thickness)\r\n && equaln(0, targetZMin))\r\n {\r\n let matrixToLocal = this.OCSInv.multiply(target.OCS);\r\n\r\n let thisShape = this.Shape;\r\n let targetShape = target.Shape.ApplyMatrix(matrixToLocal).Z0();\r\n let unionShapes = thisShape.UnionBoolOperation(targetShape, true);\r\n if (unionShapes.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n // [ + ] 产生网洞.\r\n for (let hole of unionShapes[0].Holes)\r\n {\r\n let g = new ExtrudeSolid();\r\n g.thickness = this.thickness;\r\n g.ContourCurve = hole.Curve;\r\n g.ApplyMatrix(this.OCS);\r\n\r\n this.AppendGroove(g);\r\n }\r\n\r\n this.ContourCurve = unionShapes[0].Outline.Curve;\r\n\r\n this.grooves.push(...target.grooves.map(g => g.Clone()));\r\n MergeRelevance();\r\n this.GrooveCheckMerge();\r\n this.Update();\r\n\r\n return Status.True;\r\n }\r\n }\r\n else\r\n {\r\n if (!isIntersect(0, this.thickness, targetZMin, targetZMax, 1e-5))\r\n return Status.False;\r\n\r\n let matrixToLocal = this.OCSInv.multiply(target.OCS);\r\n\r\n let thisCurve = this.ContourCurve;\r\n let targetCurve = target.ContourCurve.Clone().ApplyMatrix(matrixToLocal);\r\n targetCurve.Position = targetCurve.Position.setZ(0);\r\n if (equalCurve(thisCurve, targetCurve))\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (targetZMin < 0)\r\n this.Position = this.Position.add(n.multiplyScalar(targetZMin));\r\n\r\n this.Thickness = Math.max(this.Thickness, targetZMax) - Math.min(0, targetZMin);\r\n\r\n this.grooves.push(...target.grooves.map(g => g.Clone()));\r\n\r\n MergeRelevance();\r\n\r\n this.GrooveCheckMerge();\r\n this.Update();\r\n\r\n return Status.True;\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n get Volume()\r\n {\r\n let sum = this.ContourCurve.Area * this.thickness;\r\n for (let g of this.grooves)\r\n sum -= g.Volume;\r\n return sum;\r\n }\r\n\r\n /**\r\n * 被切割\r\n * @param extrudes 切割刀\r\n * @param [output=undefined] 如果实体被分裂,那么输出分裂的其他实体(如果为空,则尝试入当前实体的容器中)\r\n * @param [checkIntersect=true] 检查相交,性能优化\r\n * @returns 切割是否成功\r\n */\r\n Subtract(extrudes: ExtrudeSolid[], output: ExtrudeSolid[] = undefined, checkIntersect = true): boolean\r\n {\r\n if (checkIntersect)\r\n {\r\n let box = this.BoundingBox;\r\n extrudes = extrudes.filter(e => box.intersectsBox(e.BoundingBox));\r\n }\r\n\r\n //清除原先的关联关系\r\n if (this.Id)\r\n {\r\n let ids = new Set();\r\n for (let e of extrudes)\r\n {\r\n if (!e.Id) continue;\r\n arrayRemoveOnce(e.RelevanceMeats, this.Id);\r\n ids.add(e.Id.Index);\r\n }\r\n arrayRemoveIf(this.RelevanceKnifs, id => ids.has(id.Index));\r\n }\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let br of extrudes)\r\n {\r\n let gs = this.ConverToLocalGroove(br);\r\n grooves.push(...gs);\r\n }\r\n\r\n let area1 = this.ContourCurve.Area;\r\n let sum1 = this.Volume;\r\n this.AppendGrooves(grooves, output);\r\n let sum2 = this.Volume;\r\n let area2 = this.ContourCurve.Area;\r\n if (!equaln(sum1, sum2) || !equaln(area1, area2))\r\n {\r\n if (!this.ReadFileIng && this instanceof Board)\r\n {\r\n if (this.Id)\r\n Log(`${this.Name}(${this.Id.Index})被切割成功!`);\r\n else if (this.__OriginalId__)\r\n Log(`${this.Name}(${this.__OriginalId__.Index})关联切割成功更新槽!`);\r\n }\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n RelevanceSubtract(knif: ExtrudeSolid, check = false)\r\n {\r\n if (!this.Id || !knif.Id) return;\r\n\r\n //判断是否已经存在\r\n if (check)\r\n {\r\n let index = this.RelevanceKnifs.findIndex(id => id.Index === knif.Id.Index);\r\n if (index !== -1) return;\r\n }\r\n\r\n this.RelevanceKnifs.push(knif.Id);\r\n knif.RelevanceMeats.push(this.Id);\r\n }\r\n\r\n /**\r\n * 当实体被分裂后,加入新图纸时,需要修复关联拉槽\r\n */\r\n RepairRelevance()\r\n {\r\n if (!this.Id)\r\n {\r\n console.error(\"不能修复未加入到图纸的板件!\");\r\n return;\r\n }\r\n\r\n for (let id of this.RelevanceKnifs)\r\n {\r\n if (id && !id.IsErase)\r\n {\r\n let br = id.Object as ExtrudeSolid;\r\n br.RelevanceMeats.push(this.Id);\r\n }\r\n }\r\n for (let id of this.RelevanceMeats)\r\n {\r\n if (id && !id.IsErase)\r\n {\r\n let br = id.Object as ExtrudeSolid;\r\n br.RelevanceKnifs.push(this.Id);\r\n }\r\n }\r\n }\r\n\r\n AppendGroove(groove: ExtrudeSolid)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.push(groove);\r\n }\r\n\r\n /** 添加槽进板件,并且自动分裂.\r\n * 通常槽已经校验过准确性,所以不在校验\r\n */\r\n AppendGrooves(grooves: ExtrudeSolid[], output: ExtrudeSolid[] = undefined)\r\n {\r\n if (grooves.length === 0) return;\r\n this.WriteAllObjectRecord();\r\n this.grooves.push(...grooves);\r\n this.GrooveCheckAllAutoSplit(output);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n\r\n contour.Position = contour.Position.add(this.Normal.multiplyScalar(this.thickness));\r\n pts.push(\r\n ...contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n let ps = this.contourCurve.GetStretchPoints();\r\n for (let p of ps)\r\n {\r\n let l = new Line(p, p.clone().setZ(this.thickness));\r\n l.ApplyMatrix(this.OCS);\r\n pts.push(\r\n ...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n }\r\n for (let g of this.grooves)\r\n pts.push(...g.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n //#region Stretch\r\n\r\n protected GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts: number[] = [this.ContourCurve.GetDragPointCount(dragType) * 2];\r\n for (let g of this.grooves)\r\n {\r\n let c = g.ContourCurve.GetDragPointCount(dragType) * 2;\r\n for (let g1 of g.grooves)\r\n c += g1.contourCurve.GetDragPointCount(dragType) * 2;\r\n\r\n counts.push(c);\r\n }\r\n return counts;\r\n }\r\n GetGripOrStretchPoints(dragType: DragPointType)\r\n {\r\n let isGrip = dragType === DragPointType.Grip;\r\n\r\n let pts = isGrip ? this.ContourCurve.GetGripPoints() : this.ContourCurve.GetStretchPoints();\r\n let v = new Vector3(0, 0, this.thickness);\r\n pts.push(...pts.map(p => p.clone().add(v)));\r\n pts.forEach(p => { p.applyMatrix4(this.OCS); });\r\n\r\n for (let g of this.grooves)\r\n {\r\n let gpts = g.GetGripOrStretchPoints(dragType);\r\n pts.push(...gpts);\r\n }\r\n return pts;\r\n }\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let counts = this.GetStrectchPointCountList(dragType);\r\n if (dragType === DragPointType.Stretch && indexList.length === arraySum(counts))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n arraySortByNumber(indexList);\r\n\r\n let updateBak = this.AutoUpdate;\r\n this.AutoUpdate = false;\r\n\r\n if (this.grooves.length === 0)\r\n {\r\n this.MoveGripOrStretchPointsOnly(indexList, vec, dragType);\r\n }\r\n else\r\n {\r\n let i = 0;\r\n let icount = indexList.length;\r\n let offset = 0;\r\n\r\n let grooveIndex = -1;\r\n for (let count of counts)\r\n {\r\n offset += count;\r\n let ilist = [];\r\n for (; i < icount; i++)\r\n {\r\n if (indexList[i] < offset)\r\n ilist.push(indexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n\r\n if (ilist.length > 0)\r\n {\r\n if (grooveIndex === -1)\r\n this.MoveGripOrStretchPointsOnly(ilist, vec, dragType);\r\n else\r\n this.grooves[grooveIndex].MoveGripOrStretchPoints(ilist, vec, dragType);\r\n }\r\n grooveIndex++;\r\n }\r\n }\r\n\r\n if (this.objectId)\r\n {\r\n this.CheckContourCurve();\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (splitEntitys.length > 0 && this.Owner)\r\n {\r\n let ms = this.Owner.Object as BlockTableRecord;\r\n for (let e of splitEntitys)\r\n ms.Append(e);\r\n }\r\n }\r\n this.AutoUpdate = updateBak;\r\n this.Update();\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n\r\n\r\n GetStretchPoints()\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n\r\n /**\r\n * 只对自身的轮廓和厚度进行拉伸,忽略子实体\r\n */\r\n MoveGripOrStretchPointsOnly(indexList: Array, vec: Vector3, dragType: DragPointType)\r\n {\r\n let stretchCount = this.ContourCurve.GetDragPointCount(dragType);\r\n\r\n if (dragType === DragPointType.Stretch)\r\n {\r\n //Move\r\n if (indexList.length === stretchCount * 2)\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n //判断是否拉伸厚度\r\n if (this.IsStretchThickness(indexList))\r\n {\r\n let isFront = indexList[0] < stretchCount;\r\n\r\n if (indexList.every(v => v < stretchCount === isFront))\r\n {\r\n //Change thickness\r\n let lvec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n if (isFront)\r\n {\r\n // if (lvec.z >= this.thickness) return;\r\n this.thickness -= lvec.z;\r\n //移动位置而不改变内部拉槽\r\n let v = this.Normal.multiplyScalar(lvec.z);\r\n this._Matrix.elements[12] += v.x;\r\n this._Matrix.elements[13] += v.y;\r\n this._Matrix.elements[14] += v.z;\r\n }\r\n else\r\n {\r\n // if (-lvec.z > this.thickness) return;\r\n this.thickness += lvec.z;\r\n }\r\n return;\r\n }\r\n }\r\n\r\n indexList = arrayClone(indexList);\r\n }\r\n\r\n //修正点的索引\r\n for (let i = 0; i < indexList.length; i++)\r\n {\r\n let index = indexList[i];\r\n if (index >= stretchCount)\r\n {\r\n index -= stretchCount;\r\n indexList[i] = index;\r\n }\r\n }\r\n\r\n indexList = [...new Set(indexList)];\r\n\r\n let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n\r\n if (dragType === DragPointType.Grip)\r\n {\r\n if (this.ContourCurve instanceof Polyline\r\n && indexList.length === 1\r\n && indexList[0] % 2 === 1)\r\n {\r\n let param = indexList[0] / 2;\r\n if (this.ContourCurve.GetBuilgeAt(Math.floor(param)) === 0)\r\n {\r\n let der = this.ContourCurve.GetFistDeriv(param).normalize();\r\n [der.x, der.y] = [der.y, -der.x];\r\n let d = localVec.dot(der);\r\n localVec.copy(der).multiplyScalar(d);\r\n }\r\n }\r\n this.ContourCurve.MoveGripPoints(indexList, localVec);\r\n }\r\n else\r\n this.ContourCurve.MoveStretchPoints(indexList, localVec);\r\n }\r\n\r\n IsStretchThickness(indexs: number[])\r\n {\r\n let count = this.ContourCurve.GetStretchPoints().length;\r\n if (indexs.length === count)\r\n {\r\n let isF = indexs[0] < count;\r\n return indexs.every(i => isF === (i < count));\r\n }\r\n return false;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region groove(凹槽(造型))操作\r\n\r\n /*\r\n\r\n 添加凹槽一般会经过以下几个步骤\r\n\r\n 1.凹槽转换成和本实体法线平行的凹槽实体\r\n ->调用第二步\r\n\r\n 2.校验凹槽的Z轴位置是否存在交集\r\n ->{不存在Z轴交集} 或 {交集异常(凹槽被本实体包含不见光)} 的凹槽被移除\r\n ->凹槽的Z轴位置和厚度被更新\r\n\r\n 3.凹槽合并\r\n\r\n 4.修正轮廓.\r\n ->{本实体}轮廓被修正(当实体被凹槽破坏形状时)\r\n -->修正成功后,凹槽被移除\r\n -->本实体可能分裂\r\n\r\n ->{凹槽}轮廓被修正({凹槽的轮廓}被约束在{实体轮廓}内部)\r\n -->凹槽可能分裂\r\n\r\n */\r\n\r\n\r\n /**\r\n * 当调用Draw时,可以生成bsp信息\r\n */\r\n private csg: CSG;\r\n get CSG()\r\n {\r\n if (this.csg)\r\n return this.csg;\r\n\r\n this.csg = Geometry2CSG(this.MeshGeometry);\r\n return this.csg;\r\n }\r\n\r\n /**\r\n * (步骤1.2.)\r\n * 将目标拉伸实体转换成在板件内部可用的凹槽实体\r\n * @param target 该对象可能被修改(内部不拷贝该实体)\r\n * @param useClone 转换后的实体是目标实体拷贝后修改的\r\n */\r\n ConverToLocalGroove(target: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n if (!this.OBB.intersectsOBB(target.OBB)) return [];\r\n\r\n let n1 = this.Normal;\r\n let n2 = target.Normal;\r\n if (isParallelTo(n1, n2))\r\n {\r\n target = target.Clone().ClearDraw();\r\n if (!equalv3(n1, n2, 1e-6))\r\n {\r\n let mtx = target._Matrix;\r\n matrixSetVector(mtx, 2, n1);\r\n let p = n1.setFromMatrixColumn(mtx, 3);\r\n p.add(n2.multiplyScalar(target.thickness));\r\n matrixSetVector(mtx, 3, p);\r\n }\r\n if (this.GrooveCheckPosition(target) !== Status.True)\r\n return [];\r\n\r\n return [target];\r\n }\r\n else\r\n {\r\n //当切割刀是矩形板,并且没有槽的时候,如果轴对齐,我们可以直接用aabb进行求交\r\n if (target.isRect && target.grooves.length === 0)\r\n {\r\n let diffMtx = target.OCS.premultiply(this.OCSInv);\r\n let box = target.BoundingBoxInOCS.applyMatrix4(diffMtx);\r\n let size = box.getSize(new Vector3);\r\n\r\n //轴对齐\r\n if (equaln(size.x * size.y * size.z, target.Width * target.Height * target.Thickness, 1))\r\n {\r\n let ibox = this.BoundingBoxInOCS.intersect(box);\r\n if (!(ibox.getSize(size).toArray().every(x => x > 1))) return [];\r\n\r\n //构造新槽(因为我们当前的槽加长是根据槽的长短边进行加长的,所以我们可以这么构建)\r\n let g2 = new ExtrudeSolid().ConverToRectSolid(size.x, size.y, size.z);\r\n g2.Position = ibox.min;\r\n g2.ApplyMatrix(this._Matrix);\r\n g2.groovesAddDepth = target.groovesAddDepth;\r\n g2.groovesAddLength = target.groovesAddLength;\r\n g2.groovesAddWidth = target.groovesAddWidth;\r\n g2.knifeRadius = target.knifeRadius;\r\n return [g2];\r\n }\r\n }\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n let project = ProjectBoard(target, this);\r\n if (!project)\r\n {\r\n let yv = n2;\r\n let zv = n1;\r\n let xv = yv.clone().cross(zv);\r\n yv.copy(zv).cross(xv);\r\n let m = new Matrix4().makeBasis(xv, yv, zv).copyPosition(this.OCS);\r\n let mi = new Matrix4().getInverse(m).multiply(this.OCS);\r\n\r\n let interBSP = this.CSG.intersect(target.CSG.transform1(this.OCSInv.multiply(target.OCS)));\r\n let topology = new BSPGroupParse(interBSP);\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let pts of topology.Parse())\r\n {\r\n for (let p of pts)\r\n p.applyMatrix4(mi);\r\n let box = new Box3Ext().setFromPoints(pts);\r\n if (!box.isSolid(0.1))\r\n continue;\r\n let size = box.getSize(new Vector3());\r\n\r\n let ext = new ExtrudeSolid();\r\n ext.groovesAddDepth = target.groovesAddDepth;\r\n ext.groovesAddLength = target.groovesAddLength;\r\n ext.groovesAddWidth = target.groovesAddWidth;\r\n ext.knifeRadius = target.knifeRadius;\r\n ext.ConverToRectSolid(size.x, size.y, size.z);\r\n ext.OCS = m.clone().setPosition(box.min.applyMatrix4(m));\r\n\r\n grooves.push(ext);\r\n }\r\n return grooves;\r\n }\r\n // project.ApplyMatrix(target.OCSInv);\r\n project.Z0();\r\n let c1 = Contour.CreateContour(project);\r\n let c2 = Contour.CreateContour(target.ContourCurve);\r\n //投影轮廓列表\r\n let contours = c1.IntersectionBoolOperation(c2);\r\n let outlines: ExtureContourCurve[] = [];\r\n for (let c of contours)\r\n {\r\n if (c.Curve instanceof Polyline)\r\n outlines.push(...PolylineSpliteRect(c.Curve));\r\n else\r\n outlines.push(c.Curve);\r\n }\r\n let xv = n1;\r\n let zv = n2;\r\n let yv = zv.clone().cross(xv);\r\n\r\n //把<投影轮廓>对齐到肉的侧面坐标系上\r\n let projection2SideMatrix4 = new Matrix4().makeBasis(xv, yv, zv);\r\n for (let c of outlines)\r\n {\r\n let g = target.Clone().ClearDraw();\r\n let gs = [g];\r\n g.ContourCurve = c;\r\n g.GrooveCheckAll(gs);\r\n\r\n for (let g1 of gs)\r\n {\r\n //按g1的位置设置\r\n projection2SideMatrix4.setPosition(g1.Position);\r\n\r\n //投影到肉的侧面坐标系,求槽在肉里面的长度(x)和厚度(z)\r\n let alm = new Matrix4().getInverse(projection2SideMatrix4).multiply(g1.OCS);\r\n g1.ContourCurve.ApplyMatrix(alm);//破坏它\r\n let box = g1.ContourCurve.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x, 0, 1e-2) || equaln(size.y, 0, 1e-2)) continue;\r\n\r\n //构造新槽\r\n let g2 = new ExtrudeSolid().ConverToRectSolid(size.y, g1.Thickness, size.x);\r\n g2.groovesAddDepth = target.groovesAddDepth;\r\n g2.groovesAddLength = target.groovesAddLength;\r\n g2.groovesAddWidth = target.groovesAddWidth;\r\n g2.knifeRadius = target.knifeRadius;\r\n g2.ApplyMatrix(OverturnMatrix);//翻转到和原先的投影曲线(肉侧面)一样的状态\r\n g2.ApplyMatrix(MoveMatrix(box.min));//和投影曲线重叠\r\n g2.ApplyMatrix(projection2SideMatrix4);//按照矩形还原回去\r\n\r\n grooves.push(g2);\r\n }\r\n }\r\n return grooves;\r\n }\r\n }\r\n\r\n /**\r\n * (步骤2)\r\n * 更新凹槽位置和厚度(校验凹槽的Z轴位置是否存在交集)\r\n */\r\n GrooveCheckPosition(target: ExtrudeSolid): Status\r\n {\r\n if (target.Width < 1e-2 || target.Height < 1e-2 || target.Thickness < 1e-2)\r\n return Status.False;\r\n\r\n let tp = target.Position.applyMatrix4(this.OCSInv);\r\n\r\n let minZ = tp.z;\r\n let maxZ = tp.z + target.thickness;\r\n if (minZ <= 1e-2)//背面\r\n {\r\n target.Thickness = Math.min(maxZ, this.thickness);\r\n if (!(equaln(minZ, 0)))\r\n target.ApplyMatrix(\r\n MoveMatrix(this.Normal.multiplyScalar(-minZ))\r\n );\r\n }\r\n else if (maxZ >= (this.thickness - 1e-3) && minZ > 0)//正面\r\n target.Thickness = this.thickness - minZ;\r\n else\r\n return Status.False;\r\n\r\n if (equaln(target.thickness, this.thickness, 1e-3))\r\n target.thickness = this.thickness;\r\n\r\n return target.thickness > 1e-3 ? Status.True : Status.False;\r\n }\r\n\r\n /**\r\n * (步骤3)\r\n * 计算凹槽合并\r\n */\r\n GrooveCheckMerge()\r\n {\r\n let gs: ExtrudeSolid[] = [];\r\n while (this.grooves.length > 0)\r\n {\r\n let g = this.grooves.pop();\r\n while (this.grooves.length > 0)\r\n {\r\n //剩余的 无法合并的板件\r\n let remGs = this.grooves.filter(gn =>\r\n {\r\n if (equaln(g.knifeRadius, gn.knifeRadius))\r\n return g.Join(gn) === Status.False;\r\n else\r\n return true;\r\n });\r\n if (remGs.length === this.grooves.length)\r\n break;\r\n this.grooves = remGs;\r\n }\r\n gs.push(g);\r\n }\r\n\r\n if (gs.length !== this.grooves.length)\r\n {\r\n this.grooves = gs;\r\n for (let g of this.grooves)\r\n g.CheckContourCurve();\r\n }\r\n }\r\n\r\n /**\r\n * (步骤4.1)\r\n * 计算凹槽轮廓(可能分裂)\r\n * @param target 不拷贝修改\r\n * @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个)\r\n */\r\n GrooveCheckContour(target: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n let matrixToTarget = target.OCSInv.multiply(this.OCS);\r\n matrixToTarget.elements[14] = 0;//z->0\r\n\r\n let thisShape = this.Shape.ApplyMatrix(matrixToTarget);\r\n let targetShape = new Shape(Contour.CreateContour([target.ContourCurve.Clone()], false));\r\n\r\n let inters = thisShape.IntersectionBoolOperation(targetShape);\r\n\r\n if (inters.length === 1)\r\n {\r\n target.ContourCurve = inters[0].Outline.Curve;\r\n let grooves = [target];\r\n target.GrooveCheckAll(grooves);\r\n return grooves;\r\n }\r\n else\r\n {\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let contour of inters)\r\n {\r\n let ext = target.Clone().ClearDraw();\r\n ext.ContourCurve = contour.Outline.Curve;\r\n ext.GrooveCheckAll(grooves);\r\n grooves.push(ext);\r\n }\r\n return grooves;\r\n }\r\n }\r\n /**\r\n * (步骤4.2)\r\n * 计算本实体被全身度的凹槽差集后正确的实体轮廓,和有可能的分裂实体\r\n * @param splitEntitys 分裂出来的实体\r\n * @returns [Status] Status : 消失不见\r\n */\r\n ContourCheckSubtract(splitEntitys: this[]): boolean\r\n {\r\n let shapeManager = new ShapeManager();\r\n shapeManager.AppendShapeList(\r\n new Shape(Contour.CreateContour(this.ContourCurve.Clone(), false))\r\n );\r\n let subtractShape = new ShapeManager();\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n arrayRemoveIf(this.grooves, groove =>\r\n {\r\n if (equaln(groove.thickness, this.thickness))\r\n {\r\n let grooveCurve = groove.ContourCurve.Clone();\r\n let matrixToLocal = this.OCSInv.multiply(groove.OCS);\r\n grooveCurve.ApplyMatrix(matrixToLocal);\r\n\r\n subtractShape.AppendShapeList(\r\n new Shape(Contour.CreateContour([grooveCurve], false))\r\n );\r\n\r\n grooves.push(groove);\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n shapeManager.SubstactBoolOperation(subtractShape);\r\n let shapes = shapeManager.ShapeList;\r\n\r\n //不做任何改变\r\n if (shapeManager.ShapeCount === 1 && shapes[0].Holes.length === grooves.length)\r\n {\r\n this.grooves.push(...grooves);\r\n return true;\r\n }\r\n\r\n //分裂\r\n for (let i = 1; i < shapeManager.ShapeCount; i++)\r\n {\r\n let ext = this.Clone();\r\n let shape = shapes[i];\r\n for (let hole of shape.Holes)\r\n {\r\n let groove = new ExtrudeSolid();\r\n groove.OCS = this.OCS;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n ext.grooves.push(groove);\r\n }\r\n ext.ContourCurve = shape.Outline.Curve;\r\n ext.GrooveCheckAll(splitEntitys);\r\n ext.Update();\r\n splitEntitys.push(ext);\r\n }\r\n\r\n if (shapes.length > 0)\r\n {\r\n let shape = shapes[0];\r\n for (let hole of shape.Holes)\r\n {\r\n let groove = new ExtrudeSolid();\r\n groove.OCS = this.OCS;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n this.grooves.push(groove);\r\n }\r\n\r\n if (!equaln(this.contourCurve.Area, shape.Outline.Area))\r\n this.ContourCurve = shape.Outline.Curve;\r\n\r\n return true;\r\n }\r\n else\r\n return false;\r\n }\r\n\r\n IsLazyGrooveCheck: boolean;\r\n IsNeedGrooveCheck: boolean;\r\n /**\r\n * 无法知道修改了轮廓是否为更新到内部凹槽.\r\n * 无法知道修改了内部凹槽之后是否会更新到轮廓.\r\n * 所以默认全部校验内部的凹槽\r\n */\r\n GrooveCheckAll(splitEntitys: this[])\r\n {\r\n if (ExtrudeConfig.DisableCheckGroove) return;\r\n\r\n if (this.IsLazyGrooveCheck)\r\n {\r\n this.IsNeedGrooveCheck = true;\r\n return;\r\n }\r\n this.IsNeedGrooveCheck = false;\r\n this.WriteAllObjectRecord();\r\n\r\n //校验Z轴位置\r\n arrayRemoveIf(this.grooves, g =>\r\n {\r\n return this.GrooveCheckPosition(g) === Status.False;\r\n });\r\n\r\n //清除全深洞的子槽\r\n for (let g of this.grooves)\r\n {\r\n if (equaln(g.thickness, this.thickness, 1e-3))\r\n {\r\n /*\r\n 此刻我们直接将它的子槽清空,虽然子槽可能将这个槽分裂成2个,\r\n 但是这样的情况只能在造型应用中才会产生\r\n */\r\n g.grooves.length = 0;\r\n }\r\n else\r\n arrayRemoveIf(g.grooves, subg => !equaln(g.thickness, subg.thickness, 1e-3));\r\n }\r\n\r\n //合并\r\n this.GrooveCheckMerge();\r\n //修改本实体轮廓\r\n if (this.grooves.some(g => equaln(g.thickness, this.thickness, 1e-3)))\r\n {\r\n if (!this.ContourCheckSubtract(splitEntitys))\r\n {\r\n this.Erase();\r\n return;\r\n }\r\n }\r\n\r\n //修正凹槽轮廓\r\n let splitGrooves: ExtrudeSolid[] = [];\r\n let thisArea = this.contourCurve.Area;\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let g = this.grooves[i];\r\n if (equaln(g.thickness, this.thickness, 1e-3))\r\n splitGrooves.push(g);\r\n else\r\n {\r\n let gs = this.GrooveCheckContour(g);\r\n if (gs.length === 1)\r\n {\r\n let gg = gs[0];\r\n if (gg.grooves.length === 0 && equaln(gg.contourCurve.Area, thisArea))\r\n {\r\n //判断正反面\r\n let p = gg.Position.applyMatrix4(this.OCSInv);\r\n if (equaln(p.z, 0))\r\n {\r\n this.thickness -= gg.thickness;\r\n let n = this.Normal;\r\n n.multiplyScalar(gg.thickness);\r\n this._Matrix.elements[12] += n.x;\r\n this._Matrix.elements[13] += n.y;\r\n this._Matrix.elements[14] += n.z;\r\n }\r\n else\r\n {\r\n this.thickness -= gg.thickness;\r\n }\r\n this.grooves.splice(i, 1);\r\n this.GrooveCheckAll(splitEntitys);\r\n return;\r\n }\r\n }\r\n splitGrooves.push(...gs);\r\n }\r\n }\r\n\r\n this.grooves = splitGrooves;\r\n\r\n this.Update();\r\n }\r\n\r\n /** 校验内部槽并且自动分裂 */\r\n GrooveCheckAllAutoSplit(output: ExtrudeSolid[] = undefined)\r\n {\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (output)\r\n output.push(...splitEntitys);\r\n else if (this._Owner)\r\n {\r\n let record = this._Owner.Object as BlockTableRecord;\r\n for (let e of splitEntitys)\r\n {\r\n record.Add(e);\r\n e.RepairRelevance();\r\n }\r\n this.HandleSpliteEntitys(splitEntitys);\r\n }\r\n }\r\n HandleSpliteEntitys(splitEntitys: this[]) { }\r\n LazyGrooveCheckAll()\r\n {\r\n if (this.IsNeedGrooveCheck)\r\n this.GrooveCheckAllAutoSplit();\r\n this.IsLazyGrooveCheck = false;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Draw\r\n GetPrintObject3D()\r\n {\r\n let geometry = new LineGeometry();\r\n let lineSegments = new Float32Array(this.EdgeGeometry.attributes.position.array);\r\n let instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n geometry.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n geometry.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n let line = new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetPrintConceptualMaterial());\r\n return [line, mesh];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(...FastWireframe(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new Object3D().add(...this.GetPrintObject3D());\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n get UCGenerator(): UVGenerator\r\n {\r\n return boardUVGenerator;\r\n }\r\n\r\n __CacheKnifVersion__: { [key: number]: number; };\r\n get NeedUpdateRelevanceGroove()\r\n {\r\n if (!this.__CacheKnifVersion__) return true;\r\n\r\n for (let k of this.RelevanceKnifs)\r\n {\r\n if (!k || !k.Object) continue;\r\n\r\n if (this.__CacheKnifVersion__[k.Index] !== ((k.Object)).__UpdateVersion__)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //缓存当前被关联切割后的体积,如果体积有变化,证明多了拉槽或者少了拉槽\r\n __CacheVolume__: number;\r\n //每当我们去计算关联拉槽的时候,总会有这个分裂的图形数组,如果我们需要,我们也可以复用它去拆单,或者去排钻\r\n __CacheSplitExtrudes: this[];\r\n\r\n /**\r\n * 计算关联拉槽,更新绘制对象(MeshGeometry和EdgeGeometry)\r\n */\r\n private CalcRelevanceGroove()\r\n {\r\n //避免Jig实体更新,导致性能暴跌.\r\n if (!this.Id) return;\r\n\r\n this.__CacheKnifVersion__ = {};\r\n\r\n let knifs: ExtrudeSolid[] = [];\r\n this.GetRelevanceKnifes(knifs);\r\n\r\n if (knifs.length > 0)\r\n {\r\n for (let k of knifs) //复合实体(五金)的子实体没有id\r\n this.__CacheKnifVersion__[k.Id?.Index ?? k.__TempIndexVersion__?.Index] = k.__TempIndexVersion__?.Version ?? k.__UpdateVersion__;\r\n\r\n let tempExtrude = this.Clone();\r\n tempExtrude.RelevanceKnifs.length = 0;//避免递归\r\n if (!this.ReadFileIng)\r\n tempExtrude.__OriginalId__ = this.Id;//在读取文件时不打印日志\r\n let output: ExtrudeSolid[] = [tempExtrude];\r\n let ok = tempExtrude.Subtract(knifs, output);\r\n this.__CacheSplitExtrudes = output as this[];\r\n if (ok)\r\n {\r\n this.__CacheVolume__ = tempExtrude.Volume;\r\n let meshs: BufferGeometry[] = [];\r\n let edges: BufferGeometry[] = [];\r\n let inv = this.OCSInv;\r\n let diff = new Matrix4;\r\n for (let e2 of output)\r\n {\r\n diff.multiplyMatrices(inv, e2._Matrix);\r\n meshs.push(e2.MeshGeometry.applyMatrix4(diff));\r\n edges.push(e2.EdgeGeometry.applyMatrix4(diff));\r\n this.__CacheVolume__ += e2.Volume;\r\n\r\n }\r\n if (output.length === 1)\r\n {\r\n this._MeshGeometry = tempExtrude.MeshGeometry;\r\n this._EdgeGeometry = tempExtrude.EdgeGeometry;\r\n }\r\n else\r\n {\r\n this._MeshGeometry = BufferGeometryUtils.MergeBufferGeometries(meshs);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n this._EdgeGeometry = BufferGeometryUtils.MergeBufferGeometries(edges);\r\n }\r\n\r\n //我们加入一些拓展信息,以便排钻能够使用(或者其他的,比如发送到效果图?,BBS)(布局视口会直接添加实体到场景,所以我们只在这里设置OriginEntity)\r\n for (let i = 0; i < this.__CacheSplitExtrudes.length; i++)\r\n {\r\n this.__CacheSplitExtrudes[i].objectId = new ObjectId(this.Id.Index * -100 - i);\r\n this.__CacheSplitExtrudes[i].__OriginalEnt__ = this;\r\n }\r\n }\r\n else\r\n {\r\n let id = this.Id ?? this.__OriginalId__;\r\n if (\r\n !this.ReadFileIng &&\r\n id &&\r\n this instanceof Board &&\r\n this.__CacheVolume__ !== undefined &&\r\n !equaln(this.__CacheVolume__, this.Volume)\r\n )\r\n Log(`${this.Name}(${id.Index})关联槽已逃离!`);\r\n this.__CacheVolume__ = undefined;\r\n\r\n this.__CacheSplitExtrudes = [this];\r\n }\r\n }\r\n else\r\n {\r\n if (\r\n !this.ReadFileIng &&\r\n this.Id &&\r\n this instanceof Board &&\r\n this.__CacheVolume__ !== undefined &&\r\n !equaln(this.__CacheVolume__, this.Volume)\r\n )\r\n Log(`${this.Name}(${this.Id.Index})关联槽已逃离或者被清除!`);\r\n\r\n this.__CacheSplitExtrudes = [this];\r\n this.__CacheVolume__ = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * 如果实体被切割,那么将返回分裂的实体数组,否则返回自身\r\n */\r\n get SplitExtrudes(): this[]\r\n {\r\n if (this.NeedUpdateRelevanceGroove)\r\n this.Update(UpdateDraw.Geometry);//我们先直接更新绘制\r\n if (this.NeedUpdateRelevanceGroove)//如果更新失败,那么我们更新这个槽(似乎也证明了我们没有绘制实体)\r\n this.CalcRelevanceGroove();//注意,这也将更新绘制的实体(EdgeGeo,MeshGeo)(如果拆单也用这个,可能会带来性能损耗)\r\n\r\n return this.__CacheSplitExtrudes;\r\n }\r\n\r\n protected GetRelevanceKnifes(knifs: ExtrudeSolid[])\r\n {\r\n for (let e of this.RelevanceKnifs)\r\n {\r\n if (!e.IsErase)\r\n knifs.push(e.Object as ExtrudeSolid);\r\n else if (this.__CacheKnifVersion__)\r\n this.__CacheKnifVersion__[e.Index] = (e?.Object)?.__UpdateVersion__;\r\n }\r\n }\r\n\r\n ClearRelevance(en?: ExtrudeSolid)\r\n {\r\n if (en)\r\n {\r\n let oldLen = this.RelevanceKnifs.length;\r\n arrayRemoveIf(this.RelevanceKnifs, id => !id?.Object || id.Index === en.Id.Index);\r\n if (this.RelevanceKnifs.length !== oldLen)\r\n arrayRemoveIf(en.RelevanceMeats, id => !id?.Object || id.Index === this.Id.Index);\r\n\r\n oldLen = this.RelevanceMeats.length;\r\n arrayRemoveIf(this.RelevanceMeats, id => !id?.Object || id.Index === en.Id.Index);\r\n if (oldLen !== this.RelevanceMeats.length)\r\n arrayRemoveIf(en.RelevanceKnifs, id => !id?.Object || id.Index === this.Id.Index);\r\n }\r\n else\r\n {\r\n for (let id of this.RelevanceKnifs)\r\n {\r\n let en = id.Object as ExtrudeSolid;\r\n if (en)\r\n arrayRemoveIf(en.RelevanceMeats, i => !i?.Object || i.Index === this.Id.Index);\r\n }\r\n\r\n for (let id of this.RelevanceMeats)\r\n {\r\n let en = id.Object as ExtrudeSolid;\r\n if (en)\r\n {\r\n arrayRemoveIf(en.RelevanceKnifs, i => !i?.Object || i.Index === this.Id.Index);\r\n en.Update();\r\n }\r\n }\r\n this.RelevanceMeats.length = 0;\r\n this.RelevanceKnifs.length = 0;\r\n }\r\n this.Update();\r\n }\r\n\r\n private _MeshGeometry: BufferGeometry;\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n if (this.thickness <= 0)\r\n return new BufferGeometry();\r\n\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n let grooves = this.Grooves;\r\n if (grooves.every(g => equaln(g.thickness, this.thickness)) || grooves.length === 0)\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n let holes: Contour[] = [];\r\n\r\n let ocsInv = this.OCSInv;\r\n let alMatrix4 = new Matrix4();\r\n for (let g of grooves)\r\n {\r\n alMatrix4.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let gContour = g.ContourCurve.Clone();\r\n gContour.ApplyMatrix(alMatrix4);\r\n holes.push(Contour.CreateContour(gContour));\r\n }\r\n\r\n let shape = new Shape(Contour.CreateContour(contour), holes);\r\n\r\n let extrudeSettings: ExtrudeGeometryOptions = {\r\n steps: 1,\r\n bevelEnabled: false,\r\n depth: this.Thickness,\r\n UVGenerator: this.UCGenerator,\r\n };\r\n let geo = new ExtrudeGeometry(shape.Shape, extrudeSettings);\r\n geo.applyMatrix4(contour.OCSNoClone);\r\n this.UpdateUV(geo, contour.OCSNoClone);\r\n let bgeo = new BufferGeometry().fromGeometry(geo);\r\n bgeo[\"IsMesh\"] = true;\r\n this._MeshGeometry = bgeo;\r\n return bgeo;\r\n }\r\n\r\n let builder = new ExtrudeGeometryBuilder(this);\r\n\r\n this._MeshGeometry = builder.MeshGeometry;\r\n this._EdgeGeometry = builder.EdgeGeometry;\r\n this.UpdateUV(null, null);\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: EdgesGeometry | BufferGeometry;\r\n protected get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n if (this.grooves.every(g => equaln(g.thickness, this.thickness)) || this.grooves.length === 0)\r\n {\r\n let pts = [this.ContourCurve.Shape.getPoints(6).map(AsVector3)];\r\n let ocsInv = this.OCSInv;\r\n let alMatrix4 = new Matrix4();\r\n for (let g of this.grooves)\r\n {\r\n alMatrix4.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let gContour = g.ContourCurve.Clone();\r\n gContour.ApplyMatrix(alMatrix4);\r\n\r\n if (gContour instanceof Polyline)\r\n gContour.UpdateMatrixTo(this.contourCurve.OCS);\r\n\r\n if (gContour instanceof Circle)\r\n {\r\n let sp = new Path();\r\n let cen = gContour.Center.applyMatrix4(this.contourCurve.OCSInv);\r\n sp.ellipse(cen.x, cen.y, gContour.Radius, gContour.Radius, 0, 2 * Math.PI, false, 0);\r\n pts.push(sp.getPoints(6).map(AsVector3));\r\n }\r\n else\r\n pts.push(gContour.Shape.getPoints(6).map(AsVector3));\r\n }\r\n let geo = GenerateExtrudeEdgeGeometry(pts, this.thickness).applyMatrix4(this.contourCurve.OCSNoClone);\r\n this._EdgeGeometry = geo;\r\n return geo;\r\n }\r\n\r\n if (this._MeshGeometry)\r\n {\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n UpdateUV(geo: Geometry, ocs: Matrix4, isRev = false)\r\n {\r\n let mat: PhysicalMaterialRecord;\r\n if (this.Material && this.Material.Object)\r\n mat = this.Material.Object as PhysicalMaterialRecord;\r\n else\r\n mat = this.Db?.DefaultMaterial;\r\n\r\n if (mat && mat.IsFull)\r\n {\r\n if (geo)\r\n ScaleUV2(geo, ocs, this.width, this.height, isRev);\r\n else\r\n this.UpdateBufferGeometryUvs(isRev);\r\n }\r\n else\r\n {\r\n if (geo)\r\n ScaleUV(geo);\r\n }\r\n }\r\n UpdateBufferGeometryUvs(isRev: boolean)\r\n {\r\n let uvs = this._MeshGeometry.attributes.uv;\r\n for (let i = 0; i < uvs.count; i++)\r\n {\r\n let x = uvs.getX(i) * 1e3;\r\n let y = uvs.getY(i) * 1e3;\r\n if (isRev)\r\n uvs.setXY(i, x / this.height, y / this.width);\r\n else\r\n uvs.setXY(i, x / this.width, y / this.height);\r\n }\r\n }\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n //如果是Jig实体,那么就算它有关联切割,我们也不更新实体(因为似乎没必要?)\r\n if (this.Id && this.RelevanceKnifs.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this.csg = undefined;\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry.dispose();\r\n this._EdgeGeometry = undefined;\r\n if (this._MeshGeometry)\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n obj.add(...FastWireframe(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return obj.add(\r\n ...this.GetPrintObject3D()\r\n );\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n\r\n return obj.add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n\r\n UpdateJigMaterial(color = 8)\r\n {\r\n\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n /**\r\n * 简化的文件读取和写入,只写入必要的数据,没有id,没有其他版本号\r\n */\r\n ReadFileLite(file: CADFiler)\r\n {\r\n this.ReadFileOnly(file);\r\n this._Matrix.fromArray(file.Read());\r\n }\r\n WriteFileLite(file: CADFiler)\r\n {\r\n this.WriteFileOnly(file);\r\n file.Write(this._Matrix.toArray());\r\n }\r\n\r\n private ReadFileOnly(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.height = Number(file.Read());\r\n this.width = Number(file.Read());\r\n this.thickness = Number(file.Read());\r\n this.isRect = file.Read();\r\n this.contourCurve = file.ReadObject() as ExtureContourCurve;\r\n\r\n let grooveCount = file.Read();\r\n this.grooves.length = 0;\r\n for (let i = 0; i < grooveCount; i++)\r\n {\r\n if (this.grooves[i] === undefined)\r\n this.grooves[i] = new ExtrudeSolid();\r\n\r\n this.grooves[i].ReadFileLite(file);\r\n }\r\n\r\n this.knifeRadius = file.Read();\r\n this.groovesAddLength = file.Read();\r\n if (ver > 1)\r\n {\r\n this.groovesAddWidth = file.Read();\r\n this.groovesAddDepth = file.Read();\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this.RelevanceMeats.length = 0;\r\n this.RelevanceKnifs.length = 0;\r\n\r\n let count = file.Read() as number;\r\n for (let index = 0; index < count; index++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this.RelevanceMeats.push(id);\r\n }\r\n\r\n count = file.Read() as number;\r\n for (let index = 0; index < count; index++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this.RelevanceKnifs.push(id);\r\n }\r\n }\r\n }\r\n private WriteFileOnly(file: CADFiler)\r\n {\r\n file.Write(3);\r\n file.Write(this.height);\r\n file.Write(this.width);\r\n file.Write(this.thickness);\r\n file.Write(this.isRect);\r\n file.WriteObject(this.ContourCurve);\r\n\r\n file.Write(this.grooves.length);\r\n for (let groove of this.grooves)\r\n groove.WriteFileLite(file);\r\n\r\n file.Write(this.knifeRadius);\r\n file.Write(this.groovesAddLength);\r\n file.Write(this.groovesAddWidth);\r\n file.Write(this.groovesAddDepth);\r\n\r\n //3\r\n file.Write(this.RelevanceMeats.length);\r\n for (let id of this.RelevanceMeats)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this.RelevanceKnifs.length);\r\n for (let id of this.RelevanceKnifs)\r\n file.WriteSoftObjectId(id);\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n this.ReadFileOnly(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n this.WriteFileOnly(file);\r\n }\r\n //#endregion\r\n}\r\n\r\nexport function FastMeshGeometry(width: number, height: number, thickness: number)\r\n{\r\n let geo = new BoxGeometry(width, height, thickness);\r\n geo.translate(width * 0.5, height * 0.5, thickness * 0.5);\r\n return geo;\r\n}\r\n\r\n\r\nCADFactory.RegisterObjectAlias(ExtrudeSolid, \"ExtureSolid\");\r\n\r\nfunction ProjectBoard(knifBoard: ExtrudeSolid, projectBoard: ExtrudeSolid)\r\n{\r\n let n1 = knifBoard.Normal;\r\n let n2 = projectBoard.Normal;\r\n if (!isPerpendicularityTo(n1, n2)) return;\r\n\r\n let p1 = projectBoard.Position;\r\n let p2 = n2.clone().multiplyScalar(projectBoard.Thickness).add(p1);\r\n\r\n let ocsInv = knifBoard.OCSInv;\r\n p1.applyMatrix4(ocsInv).setZ(0);\r\n p2.applyMatrix4(ocsInv).setZ(0);\r\n\r\n let dir = new Vector3().crossVectors(n1, n2).applyMatrix4(ocsInv.clone().setPosition(ZeroVec));\r\n\r\n let lineLength = projectBoard.Width + projectBoard.Height;//两边之和大于第三边\r\n let pts = [\r\n dir.clone().multiplyScalar(lineLength).add(p1),\r\n dir.clone().multiplyScalar(-lineLength).add(p1),\r\n dir.clone().multiplyScalar(-lineLength).add(p2),\r\n dir.clone().multiplyScalar(lineLength).add(p2),\r\n ];\r\n\r\n let pl = new Polyline(pts.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n }));\r\n pl.CloseMark = true;\r\n\r\n // pl.ApplyMatrix(knifBoard.OCS);\r\n return pl;\r\n}\r\n\r\n//用于翻转绘制出来的槽\r\nconst OverturnMatrix = new Matrix4().makeBasis(YAxis, ZAxis, XAxis);\r\n","import { Matrix3, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DragPointType } from \"./DragPointType\";\r\nimport { Entity } from \"./Entity\";\r\nimport { ExtrudeSolid } from \"./Extrude\";\r\n\r\n\r\n@Factory\r\nexport class CompositeEntity extends Entity\r\n{\r\n constructor()\r\n {\r\n super();\r\n }\r\n //如果你需要修改内部实体,则需要写入记录\r\n @AutoRecord Entitys: Entity[] = [];\r\n\r\n //#region 绘制\r\n // OnlyRenderType = true; //我们现在不需要这样,因为我们每个绘制类型的Object的子实体都有子实体的渲染类型(唯一的缺点可能是渲染速度变慢了?)\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n Explode()\r\n {\r\n return this.Entitys.map(e =>\r\n {\r\n let cloneE = e.Clone();\r\n cloneE.Material = e.Material;\r\n return cloneE.ApplyMatrix(this.OCS);\r\n });\r\n }\r\n Traverse(callback: (arg0: Entity) => void)\r\n {\r\n callback(this);\r\n for (let en of this.Entitys)\r\n {\r\n if (en instanceof CompositeEntity)\r\n en.Traverse(callback);\r\n else\r\n callback(en);\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3Ext();\r\n for (let e of this.Entitys)\r\n box.union(e.BoundingBox);\r\n return box.applyMatrix4(this.OCS);\r\n }\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n /**\r\n * 如果复合实体里面有圆,并且使用了拉伸夹点功能,在UpdateDrawObject时,会因为无法得到Jig对象而导致的错误.\r\n * 索性我们去掉Jig实体的功能.\r\n */\r\n if (renderType === RenderType.Jig) return;\r\n\r\n let object = new Object3D();\r\n this.UpdateDrawObject(renderType, object);\r\n return object;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n Object3DRemoveAll(obj);\r\n for (let e of this.Entitys)\r\n {\r\n e.IsEmbedEntity = true;\r\n\r\n // //内嵌实体在某些时候可能被清理,修复它\r\n // if (e.DrawObject.children.length === 0)\r\n // e.ClearDraw();\r\n let o = e.GetDrawObjectFromRenderType(renderType);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, e, renderType);\r\n }\r\n }\r\n }\r\n\r\n get ColorIndex(): number\r\n {\r\n return super.ColorIndex;\r\n }\r\n\r\n set ColorIndex(color: number)\r\n {\r\n if (color !== this._Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Color = color;\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n // if (e instanceof CompositeEntity) //有点奇怪\r\n // e._Color = color;\r\n // else\r\n e.ColorIndex = color;\r\n });\r\n }\r\n }\r\n get Material()\r\n {\r\n return super.Material;\r\n }\r\n set Material(id)\r\n {\r\n super.Material = id;\r\n for (let e of this.Entitys)\r\n e.Material = id;\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n this.UpdateDrawObject(renderType, obj);\r\n }\r\n\r\n RestoreJigMaterial()\r\n {\r\n //我们不做任何事情,避免更新材质引起的重绘,因为我们没有实现Jig材质,所以我们也不需要还原它\r\n }\r\n\r\n //#endregion\r\n\r\n //#region 交互操作\r\n\r\n /**\r\n *\r\n * @param snapMode 捕捉模式(单一)\r\n * @param pickPoint const\r\n * @param lastPoint const\r\n * @param viewXform const 最近点捕捉需要这个变量\r\n * @returns object snap points\r\n */\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n for (let e of this.Entitys)\r\n {\r\n pts.push(...e.Clone().ApplyMatrix(this.OCS).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n *\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\r\n * @memberof Entity\r\n */\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n\r\n private GetGripOrStretchPoints(type: DragPointType)\r\n {\r\n let pts: Vector3[] = [];\r\n for (let e of this.Entitys)\r\n pts.push(... (type === DragPointType.Grip ? e.GetGripPoints() : e.GetStretchPoints()));\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n\r\n private GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts: number[] = this.Entitys.map(e =>\r\n {\r\n return (dragType === DragPointType.Grip ? e.GetGripPoints() : e.GetStretchPoints()).length;\r\n });\r\n return counts;\r\n }\r\n\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let counts = this.GetStrectchPointCountList(dragType);\r\n if (dragType === DragPointType.Stretch && indexList.length === arraySum(counts))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n arraySortByNumber(indexList);\r\n let i = 0;\r\n let j = 0;\r\n let icount = indexList.length;\r\n let offset = 0;\r\n for (let count of counts)\r\n {\r\n offset += count;\r\n let ilist = [];\r\n for (; i < icount; i++)\r\n {\r\n if (indexList[i] < offset)\r\n ilist.push(indexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n\r\n let ent = this.Entitys[j];\r\n dragType === DragPointType.Grip ? ent.MoveGripPoints(ilist, vec) : ent.MoveStretchPoints(ilist, vec);\r\n if (ent instanceof ExtrudeSolid)//取消优化判断this.Objectid,因为这个实体可能被复合在另一个实体中,导致这个id是不存在的,所以我们无法判断它在拽拖.\r\n ent.CheckContourCurve();\r\n ent.Update();\r\n j++;\r\n }\r\n this.__UpdateVersion__++;\r\n\r\n //如何绘制对象是克隆的,那么我们将重绘它(避免无法更新)\r\n //我们也不大需要下面的判断,我们如果持续的更新它,其实并不会有多大的问题,因为我们总是从缓存里面拿绘制对象\r\n // if (this._drawObject && this._drawObject.children[0]?.userData.IsClone)\r\n this.Update();\r\n }\r\n CloneDrawObject(from: this)\r\n {\r\n for (let [type, obj] of from._CacheDrawObject)\r\n {\r\n let oldUserDaata = obj.userData;\r\n obj.userData = {};\r\n let newObj = obj.clone(true);\r\n obj.userData = oldUserDaata;\r\n obj.userData.IsClone = true;\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n newObj.userData.IsClone = true;\r\n\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n //#endregion\r\n\r\n //#region 文件序列化\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let v = file.Read();\r\n super._ReadFile(file);\r\n let count = file.Read();\r\n this.Entitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let ent = file.ReadObject() as Entity;\r\n if (ent)\r\n this.Entitys.push(ent);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.Entitys.length);\r\n for (let e of this.Entitys)\r\n file.WriteObject(e);\r\n }\r\n //#endregion\r\n}\r\n","import { CompositeEntity } from \"../Entity/CompositeEntity\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { ICompHardwareOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DefaultCompositeMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\n\r\n@Factory\r\nexport class HardwareCompositeEntity extends CompositeEntity\r\n{\r\n @AutoRecord HardwareOption: ICompHardwareOption = { ...DefaultCompositeMetalsOption };\r\n @AutoRecord DataList: [string, string][] = [];\r\n @AutoRecord RelevanceBoards: ObjectId[] = [];\r\n constructor()\r\n {\r\n super();\r\n }\r\n GetAllEntity(isHole: boolean = false, filter?: (e: Entity) => boolean)\r\n {\r\n let holes: Entity[] = [];\r\n for (let e of this.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n if (!isHole || e.HardwareOption.isHole)\r\n holes.push(...e.GetAllEntity(isHole, filter).map(h => h.ApplyMatrix(this.OCS)));\r\n }\r\n else\r\n {\r\n if (!filter || filter(e))\r\n {\r\n holes.push(e.Clone().ApplyMatrix(this.OCS));\r\n }\r\n }\r\n }\r\n return holes;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let v = file.Read();\r\n\r\n this.HardwareOption.type = file.Read();\r\n this.HardwareOption.isSplite = file.Read();\r\n this.HardwareOption.isSplitePrice = file.Read();\r\n this.HardwareOption.color = file.Read();\r\n this.HardwareOption.material = file.Read();\r\n this.HardwareOption.name = file.Read();\r\n this.HardwareOption.roomName = file.Read();\r\n this.HardwareOption.cabinetName = file.Read();\r\n this.HardwareOption.costExpr = file.Read();\r\n this.HardwareOption.actualExpr = file.Read();\r\n this.HardwareOption.model = file.Read();\r\n this.HardwareOption.factory = file.Read();\r\n this.HardwareOption.brand = file.Read();\r\n this.HardwareOption.spec = file.Read();\r\n this.HardwareOption.count = file.Read();\r\n this.HardwareOption.comments = file.Read();\r\n this.HardwareOption.unit = file.Read();\r\n\r\n let count = file.Read();\r\n this.DataList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\"\", \"\"];\r\n d[0] = file.Read();\r\n d[1] = file.Read();\r\n this.DataList.push(d);\r\n }\r\n\r\n if (v > 1)\r\n this.HardwareOption.isHole = file.Read();\r\n\r\n if (v >= 3)\r\n {\r\n let count = file.Read();\r\n this.RelevanceBoards.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n this.RelevanceBoards.push(file.ReadSoftObjectId());\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n\r\n file.Write(this.HardwareOption.type);\r\n file.Write(this.HardwareOption.isSplite);\r\n file.Write(this.HardwareOption.isSplitePrice);\r\n file.Write(this.HardwareOption.color);\r\n file.Write(this.HardwareOption.material);\r\n file.Write(this.HardwareOption.name);\r\n file.Write(this.HardwareOption.roomName);\r\n file.Write(this.HardwareOption.cabinetName);\r\n file.Write(this.HardwareOption.costExpr);\r\n file.Write(this.HardwareOption.actualExpr);\r\n file.Write(this.HardwareOption.model);\r\n file.Write(this.HardwareOption.factory);\r\n file.Write(this.HardwareOption.brand);\r\n file.Write(this.HardwareOption.spec);\r\n file.Write(this.HardwareOption.count);\r\n file.Write(this.HardwareOption.comments);\r\n file.Write(this.HardwareOption.unit);\r\n\r\n file.Write(this.DataList.length);\r\n for (let data of this.DataList)\r\n {\r\n file.Write(data[0]);\r\n file.Write(data[1]);\r\n }\r\n\r\n file.Write(this.HardwareOption.isHole);\r\n file.Write(this.RelevanceBoards.length);\r\n for (let id of this.RelevanceBoards)\r\n file.WriteSoftObjectId(id);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { LinesType } from \"../UI/Store/BoardInterface\";\r\n\r\nexport class PointShapeUtils\r\n{\r\n //方形点表\r\n static SquarePts(size: number)\r\n {\r\n return [\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n new Vector3(size, size),\r\n new Vector3(-size, size),\r\n new Vector3(-size, -size),\r\n ];\r\n }\r\n //方形外圈十字直线点表\r\n static OutsideLinePts(squareSize: number, lineLength: number)\r\n {\r\n return [\r\n //-X\r\n new Vector3(-squareSize, 0),\r\n new Vector3(-lineLength, 0),\r\n //X\r\n new Vector3(squareSize, 0),\r\n new Vector3(lineLength, 0),\r\n //Y\r\n new Vector3(0, squareSize),\r\n new Vector3(0, lineLength),\r\n\r\n //-Y\r\n new Vector3(0, -squareSize),\r\n new Vector3(0, -lineLength),\r\n ];\r\n }\r\n //十字直线点表\r\n static CrossLinePts(lineLength: number)\r\n {\r\n return [\r\n new Vector3(0, -lineLength),\r\n new Vector3(0, lineLength),\r\n\r\n new Vector3(lineLength, 0),\r\n new Vector3(-lineLength, 0),\r\n ];\r\n }\r\n static CrossLine3DPts(lineLength: number)\r\n {\r\n return [\r\n [new Vector3(lineLength, 0),\r\n new Vector3(-lineLength / 2, 0)],\r\n [new Vector3(0, -lineLength / 2),\r\n new Vector3(0, lineLength)],\r\n [new Vector3(0, 0, -lineLength / 2),\r\n new Vector3(0, 0, lineLength)],\r\n ];\r\n }\r\n\r\n static TrianglePts(size: number)\r\n {\r\n return [\r\n new Vector3(size, -size),\r\n new Vector3(0, size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n ];\r\n }\r\n\r\n static CirclePts(size: number)\r\n {\r\n let pts = [];\r\n let a = Math.PI * 2 / 8;\r\n for (let i = 0; i < 9; i++)\r\n pts.push(new Vector3(Math.sin(a * i) * size, Math.cos(a * i) * size));\r\n return pts;\r\n }\r\n\r\n static ObliqueCrossPts(size: number)\r\n {\r\n return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(-size, -size), new Vector3(size, size)];\r\n }\r\n static ObliqueCrossLinePts(size: number)\r\n {\r\n return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(), new Vector3(-size, -size), new Vector3(size, size)];\r\n }\r\n\r\n static SandClockPts(size: number)\r\n {\r\n return [\r\n new Vector3(size, size),\r\n new Vector3(-size, size),\r\n new Vector3(size, -size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, size),\r\n ];\r\n }\r\n\r\n static TangentPts(size: number)\r\n {\r\n let pts = [\r\n new Vector3(-size, size),\r\n new Vector3(size, size),\r\n new Vector3(size / 2, size),\r\n ];\r\n let a = Math.PI * 2 / 8;\r\n for (let i = 0; i < 9; i++)\r\n pts.push(new Vector3(Math.sin(a * i + Math.PI / 2) * size, Math.cos(a * i + Math.PI / 2) * size));\r\n return pts;\r\n }\r\n\r\n static PerPts(size: number)\r\n {\r\n return [\r\n new Vector3(-size, size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n new Vector3(0, -size),\r\n new Vector3(0, 0),\r\n new Vector3(-size, 0),\r\n ];\r\n }\r\n\r\n static LinesDirPts(len: number, width: number, lineType: LinesType)\r\n {\r\n if (lineType === LinesType.Reverse)\r\n {\r\n return [\r\n new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, width / 2),\r\n new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, -width / 2),\r\n new Vector3(-len / 2), new Vector3(len / 2),\r\n new Vector3(len / 2), new Vector3(len / 2 - width / 2, width / 2),\r\n new Vector3(len / 2), new Vector3(len / 2 - width / 2, -width / 2),\r\n ];\r\n }\r\n else if (lineType === LinesType.Positive)\r\n return [\r\n new Vector3(0, -len / 2), new Vector3(-width / 2, -len / 2 + width / 2),\r\n new Vector3(0, -len / 2), new Vector3(width / 2, -len / 2 + width / 2),\r\n new Vector3(0, -len / 2), new Vector3(0, len / 2),\r\n new Vector3(0, len / 2), new Vector3(-width / 2, len / 2 - width / 2),\r\n new Vector3(0, len / 2), new Vector3(width / 2, len / 2 - width / 2),\r\n\r\n ];\r\n else\r\n {\r\n let w1 = Math.min(len, width) / 5;\r\n\r\n return [\r\n new Vector3(0, len / 2), new Vector3(0, -len / 2),\r\n new Vector3(-width / 2), new Vector3(width / 2),\r\n\r\n new Vector3(-width / 2), new Vector3(-width / 2 + w1, w1),\r\n new Vector3(-width / 2), new Vector3(-width / 2 + w1, -w1),\r\n new Vector3(width / 2), new Vector3(width / 2 - w1, w1),\r\n new Vector3(width / 2), new Vector3(width / 2 - w1, -w1),\r\n\r\n new Vector3(0, len / 2), new Vector3(-w1, len / 2 - w1),\r\n new Vector3(0, len / 2), new Vector3(w1, len / 2 - w1),\r\n new Vector3(0, -len / 2), new Vector3(-w1, -len / 2 + w1),\r\n new Vector3(0, -len / 2), new Vector3(w1, -len / 2 + w1),\r\n ];\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector3, LineSegments, Object3D, Mesh, Geometry, Line as TLine, Matrix3, UVGenerator } from 'three';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { deserializationBoardData, serializeBoardData, SerializeBoard2DModeingData, DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, SerializeBoard3DModeingData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { arrayRemoveIf, arraySortByNumber, arraySum } from '../../Common/ArrayExt';\r\nimport { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { userConfig } from '../../Editor/UserConfig';\r\nimport { boardUVGenerator, boardUVGenerator2 } from '../../Geometry/BoardUVGenerator';\r\nimport { equaln, MoveMatrix, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { BoardOpenDir, BoardProcessOption, BoardType, ComposingType, FaceDirection, LinesType } from '../../UI/Store/BoardInterface';\r\nimport { ExtrudeHole } from '../3DSolid/ExtrudeHole';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { HardwareCompositeEntity } from '../Hardware/HardwareCompositeEntity';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { Shape } from '../Shape';\r\nimport { Circle } from './Circle';\r\nimport { Entity } from './Entity';\r\nimport { ExtrudeSolid, ExtureContourCurve } from './Extrude';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { CylinderHole } from '../3DSolid/CylinderHole';\r\nimport { BlockTableRecord } from '../BlockTableRecord';\r\nimport { InitRectBoardHoleOption, SetRectHighHole, TempRectHoleOption, CyHoleInBoard } from '../../Add-on/DrawDrilling/HoleUtils';\r\nimport { GetBoardHighSeal, GetBoardSealingCurves } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { Polyline } from './Polyline';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Arc } from './Arc';\r\nimport { VData2Curve, VKnifToolPath } from '../../GraphicsSystem/ToolPath/VKnifToolPath';\r\nimport { ZMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\n\r\n//转换板件类型成为空间类型. 0x 1y 2z\r\nexport function ConverBoardTypeToSpaceType(type: BoardType): number\r\n{\r\n switch (type)\r\n {\r\n case BoardType.Layer:\r\n return 2;\r\n case BoardType.Vertical:\r\n return 0;\r\n case BoardType.Behind:\r\n return 1;\r\n }\r\n}\r\n\r\nexport interface IModeling\r\n{\r\n shape: Shape;\r\n thickness: number;\r\n dir: FaceDirection;\r\n knifeRadius: number;\r\n addLen: number;\r\n addWidth?: number;\r\n addDepth?: number;\r\n}\r\n\r\nexport interface IKnifeInfo\r\n{\r\n angle: number;\r\n radius: number;\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface I2DModeingItem\r\n{\r\n depth: number;\r\n offset: number;\r\n knife: IKnifeInfo;\r\n}\r\n\r\nexport interface I2DModeling\r\n{\r\n path: Polyline;\r\n dir: FaceDirection;\r\n items: I2DModeingItem[];\r\n}\r\n\r\nexport interface IPathItem { pt: Vector3, bul: number; }\r\n\r\nexport interface I3DModeling\r\n{\r\n path: IPathItem[];\r\n dir: FaceDirection;\r\n knife: IKnifeInfo;\r\n}\r\n\r\n/**\r\n * 板件实体\r\n */\r\n@Factory\r\nexport class Board extends ExtrudeSolid\r\n{\r\n private _Rotation = {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n };\r\n private _BoardType: BoardType;\r\n private _Name = \"\";\r\n private _BoardProcessOption: BoardProcessOption;\r\n //板件排钻表,与之碰撞板件为key\r\n private _DrillList: Map = new Map();\r\n private _LayerNails: ObjectId[] = [];\r\n @AutoRecord RelativeHardware: ObjectId[] = [];\r\n @AutoRecord OpenDir: BoardOpenDir = BoardOpenDir.None;\r\n private _IsChaiDan: boolean = true;\r\n private _2DModelingList: I2DModeling[] = [];\r\n private _3DModelingList: I3DModeling[] = [];\r\n constructor()\r\n {\r\n super();\r\n this.InitBoardData();\r\n }\r\n\r\n /**\r\n * 创建一个代理数组,数组改变时被监听\r\n */\r\n private CreateArray(): T[]\r\n {\r\n return new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n this.WriteAllObjectRecord();\r\n return Reflect.set(target, key, value, receiver);\r\n }\r\n });\r\n }\r\n\r\n private InitBoardData()\r\n {\r\n let defaultData: BoardProcessOption =\r\n {\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n boardName: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n composingFace: ComposingType.Arbitrary,\r\n highSealed: this.CreateArray(),\r\n sealedUp: \"1\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n spliteHeight: \"\",\r\n spliteWidth: \"\",\r\n spliteThickness: \"\",\r\n highDrill: this.CreateArray(),\r\n frontDrill: true,\r\n backDrill: true,\r\n drillType: \"\",\r\n remarks: this.CreateArray(),\r\n };\r\n\r\n this._BoardProcessOption = new Proxy(defaultData, {\r\n get: function (target, key, receiver)\r\n {\r\n return Reflect.get(target, key, receiver);\r\n },\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (key === \"highDrill\" || key === EBoardKeyList.HighSealed)\r\n {\r\n let arr = this.CreateArray() as any[];\r\n arr.push(...value);\r\n target[key] = arr;\r\n if (key === EBoardKeyList.HighSealed)\r\n this.Update(UpdateDraw.Geometry);\r\n return true;\r\n }\r\n let result = Reflect.set(target, key, value, receiver);\r\n if (key === EBoardKeyList.Lines)\r\n this.Update(UpdateDraw.Geometry);\r\n return result;\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n //初始化板件 来自长宽高\r\n InitBoard(length: number, width: number, thickness: number, boardType: BoardType = BoardType.Layer)\r\n {\r\n this._BoardType = boardType;\r\n if (boardType === BoardType.Layer)\r\n {\r\n this.ColorIndex = 2;\r\n this._Name = \"层板\";\r\n }\r\n else if (boardType === BoardType.Vertical)\r\n {\r\n this.ColorIndex = 11;\r\n this._Name = \"立板\";\r\n }\r\n else\r\n {\r\n this.ColorIndex = 3;\r\n this._Name = \"背板\";\r\n }\r\n\r\n let types = [...userConfig.DrillConfigs.keys(), \"不排\"];\r\n let type = types.includes(this.BoardProcessOption.drillType) ? this.BoardProcessOption.drillType : types[0];\r\n this._BoardProcessOption.drillType = type;\r\n this._BoardProcessOption.highDrill = Array(4).fill(type);\r\n\r\n this.ConverToRectSolid(width, length, thickness);\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n static CreateBoard(length: number, width: number, thickness: number, boardType: BoardType = BoardType.Layer)\r\n {\r\n let board = new Board();\r\n board.InitBoard(length, width, thickness, boardType);\r\n board.ApplyMatrix(board.RotateMat);\r\n board._SpaceOCS.identity();\r\n return board;\r\n }\r\n get DrillList()\r\n {\r\n return this._DrillList;\r\n }\r\n\r\n get LayerNails()\r\n {\r\n return this._LayerNails;\r\n }\r\n\r\n AppendNails(ids: ObjectId[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LayerNails.push(...ids);\r\n }\r\n ClearLayerNails()\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let nail of this._LayerNails)\r\n {\r\n if (nail.Object && !nail.IsErase)\r\n nail.Object.Erase();\r\n }\r\n this._LayerNails.length = 0;\r\n }\r\n\r\n /**\r\n * 你可以安心的修改它,这样会直接影响到板件,因为板件对这个对象添加了代理.\r\n */\r\n get BoardProcessOption()\r\n {\r\n return this._BoardProcessOption;\r\n }\r\n\r\n set BoardProcessOption(obj: BoardProcessOption)\r\n {\r\n Object.assign(this._BoardProcessOption, obj, { [EBoardKeyList.HighSealed]: obj[EBoardKeyList.HighSealed].slice() });\r\n }\r\n get NeedUpdateRelevanceGroove()\r\n {\r\n if (super.NeedUpdateRelevanceGroove)\r\n return true;\r\n\r\n for (let k of this.RelativeHardware)\r\n {\r\n if (!k || !k.Object) continue;\r\n if (this.__CacheKnifVersion__[k.Index] !== ((k.Object)).__UpdateVersion__)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n protected GetRelevanceKnifes(knifs: ExtrudeSolid[])\r\n {\r\n super.GetRelevanceKnifes(knifs);\r\n for (let e of this.RelativeHardware)\r\n {\r\n if (e.IsErase) continue;\r\n let hardware = e.Object;\r\n if (hardware instanceof HardwareCompositeEntity)\r\n {\r\n if (hardware.HardwareOption.isHole)\r\n {\r\n let holes = hardware.GetAllEntity(true, e => e instanceof ExtrudeHole || e instanceof ExtrudeSolid) as (ExtrudeHole | ExtrudeSolid)[];\r\n\r\n for (let i = 0; i < holes.length; i++)\r\n {\r\n let h = holes[i];\r\n let g = h instanceof ExtrudeHole ? h.Convert2ExtrudeSolid() : h;\r\n g.__TempIndexVersion__ = { Index: hardware.Id.Index, Version: hardware.__UpdateVersion__ };\r\n knifs.push(g);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n ClearRelevance(en?: ExtrudeSolid)\r\n {\r\n for (let id of this.RelativeHardware)\r\n {\r\n let e = id.Object;\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n arrayRemoveIf(e.RelevanceBoards, i => !i || i.Index === this.Id.Index);\r\n }\r\n }\r\n this.RelativeHardware.length = 0;\r\n super.ClearRelevance(en);\r\n }\r\n\r\n get SplitBoards()\r\n {\r\n let brs = this.SplitExtrudes;\r\n //拆单或者bbs的时候会重新加入最新的原板件的排钻和层板钉数据\r\n for (let br of brs)\r\n {\r\n if (br.__OriginalEnt__)\r\n {\r\n br._DrillList = new Map(this._DrillList.entries());\r\n br._LayerNails = [...this._LayerNails];\r\n br.ProcessingGroupList = [...this.ProcessingGroupList];\r\n br._BoardProcessOption = { ...this._BoardProcessOption };\r\n //如果是矩形板,关联切割后的板件,用上下左右封边重新填充高级封边,避免近乎矩形的板件封边看上去不对 #I2AQ9R\r\n if (this.isRect)\r\n br._BoardProcessOption.highSealed.length = 0;\r\n }\r\n }\r\n return brs;\r\n }\r\n\r\n get BoardModeling()\r\n {\r\n let models: IModeling[] = [];\r\n for (let g of this.grooves)\r\n {\r\n let cu = g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCS));\r\n\r\n let outline = Contour.CreateContour(cu, false);\r\n let holes: Contour[] = [];\r\n for (let subG of g.Grooves)\r\n {\r\n let holeCu = subG.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(subG.OCS));\r\n holes.push(Contour.CreateContour(holeCu, false));\r\n }\r\n\r\n let s = new Shape(outline, holes);\r\n\r\n models.push({\r\n shape: s,\r\n thickness: g.Thickness,\r\n dir: equaln(g.Position.applyMatrix4(this.OCSInv).z, 0) && g.Thickness < this.thickness - 1e-6 ? FaceDirection.Back : FaceDirection.Front,\r\n knifeRadius: g.KnifeRadius,\r\n addLen: g.GroovesAddLength,\r\n addWidth: g.GroovesAddWidth,\r\n addDepth: g.GroovesAddDepth,\r\n });\r\n }\r\n return models;\r\n }\r\n set BoardModeling(models: IModeling[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.length = 0;\r\n\r\n for (let model of models)\r\n {\r\n let g = new ExtrudeSolid();\r\n g.OCS = this.OCS;\r\n g.ContourCurve = model.shape.Outline.Curve;\r\n g.Thickness = model.thickness;\r\n g.GroovesAddLength = model.addLen;\r\n g.KnifeRadius = model.knifeRadius;\r\n\r\n for (let hole of model.shape.Holes)\r\n {\r\n let subG = new ExtrudeSolid();\r\n subG.OCS = this.OCS;\r\n subG.ContourCurve = hole.Curve;\r\n subG.Thickness = model.thickness;\r\n\r\n g.AppendGroove(subG);\r\n }\r\n\r\n if (model.dir === FaceDirection.Front)\r\n g.ApplyMatrix(MoveMatrix(new Vector3(0, 0, this.thickness - g.Thickness)));\r\n\r\n this.grooves.push(g);\r\n }\r\n this.Update();\r\n }\r\n get Modeling2D()\r\n {\r\n return [...this._2DModelingList];\r\n }\r\n set Modeling2D(ms: I2DModeling[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._2DModelingList = ms;\r\n this.OffsetPathCache.clear();\r\n this._2D3DPathObject = null;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n get Modeling3D()\r\n {\r\n return [...this._3DModelingList];\r\n }\r\n set Modeling3D(ms: I3DModeling[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._2D3DPathObject = null;\r\n this._3DModelingList = ms;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n ClearModeling2DList()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._2DModelingList.length = 0;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n ClearModeling3DList()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._3DModelingList.length = 0;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n get IsChaiDan()\r\n {\r\n return this._IsChaiDan;\r\n }\r\n set IsChaiDan(v: boolean)\r\n {\r\n if (this._IsChaiDan !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._IsChaiDan = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n ClearBoardModeling()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.length = 0;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n /**\r\n * 注意传入的排钻列表,避免指针被引用\r\n */\r\n AppendDrillList(k: ObjectId, drs: ObjectId[][])\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldDrs = this._DrillList.get(k);\r\n if (oldDrs)\r\n oldDrs.push(...drs);//同类型板件时,会触发这里.\r\n else\r\n this._DrillList.set(k, drs);\r\n }\r\n ClearDrillList(k: ObjectId)\r\n {\r\n let drids = this._DrillList.get(k);\r\n if (drids)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let drillents of drids)\r\n {\r\n for (let objId of drillents)\r\n {\r\n if (!objId.IsErase)\r\n objId.Object.Erase();\r\n }\r\n }\r\n this._DrillList.delete(k);\r\n\r\n if (k && k.Object)\r\n {\r\n //必须在这里删除\r\n let br = k.Object as Board;\r\n br.ClearDrillList(this.Id);\r\n }\r\n }\r\n }\r\n\r\n ClearAllDrillList()\r\n {\r\n for (const [id] of this._DrillList)\r\n {\r\n this.ClearDrillList(id);\r\n }\r\n }\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n\r\n if (!isErase) return;\r\n\r\n //记录数据,避免下面记录的时候,排钻已经被删除,导致排钻数据被优化掉.\r\n this.WriteAllObjectRecord();\r\n\r\n for (const [, driss] of this._DrillList)\r\n {\r\n for (let dris of driss)\r\n for (let d of dris)\r\n if (d && d.Object)\r\n d.Object.Erase();\r\n }\r\n this.ClearLayerNails();\r\n }\r\n get RotateMat()\r\n {\r\n let roMat = new Matrix4();\r\n\r\n switch (this._BoardType)\r\n {\r\n case BoardType.Layer:\r\n roMat.makeBasis(\r\n new Vector3(0, 1, 0),\r\n new Vector3(-1, 0, 0),\r\n new Vector3(0, 0, 1)\r\n );\r\n break;\r\n case BoardType.Vertical:\r\n roMat.makeBasis(\r\n new Vector3(0, 1, 0),\r\n new Vector3(0, 0, 1),\r\n new Vector3(1, 0, 0)\r\n );\r\n break;\r\n case BoardType.Behind:\r\n roMat.makeBasis(\r\n new Vector3(1, 0, 0),\r\n new Vector3(0, 0, 1),\r\n new Vector3(0, -1, 0)\r\n );\r\n }\r\n return roMat;\r\n }\r\n get Height()\r\n {\r\n return this.height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this.ContourCurve instanceof Circle)\r\n return;\r\n\r\n if (!equaln(v, this.height, 1e-2))\r\n {\r\n this.WriteAllObjectRecord();\r\n let refHeight = this.height / 2;\r\n let dist = v - this.height;\r\n\r\n let contour = Contour.CreateContour(this.ContourCurve, false);\r\n let isSuccess = contour.UnEqualProportionScale(refHeight, dist, \"y\");\r\n\r\n if (isSuccess)\r\n {\r\n this.height = v;\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n }\r\n }\r\n get Width()\r\n {\r\n return this.width;\r\n }\r\n set Width(v: number)\r\n {\r\n if (this.ContourCurve instanceof Circle)\r\n return;\r\n\r\n if (!equaln(v, this.width, 1e-2))\r\n {\r\n this.WriteAllObjectRecord();\r\n let refDist = this.width / 2;\r\n let dist = v - this.width;\r\n let contour = Contour.CreateContour(this.ContourCurve, false);\r\n let isSuccess = contour.UnEqualProportionScale(refDist, dist, \"x\");\r\n if (isSuccess)\r\n {\r\n this.width = v;\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n }\r\n }\r\n get BoardType(): BoardType\r\n {\r\n return this._BoardType;\r\n }\r\n set BoardType(type: BoardType)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (type !== this._BoardType)\r\n {\r\n let spaceCS = this._SpaceOCS.clone();\r\n this._BoardType = type;\r\n this.ApplyMatrix(this.OCSInv);\r\n\r\n this.ApplyMatrix(this.RotateMat);\r\n\r\n this._SpaceOCS.identity();\r\n\r\n this.ApplyMatrix(spaceCS);\r\n\r\n this.Update();\r\n }\r\n }\r\n\r\n //设置板件类型并且不做任何的事情\r\n SetBoardType(type: BoardType)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._BoardType = type;\r\n }\r\n\r\n //最左下角的点\r\n get MinPoint(): Vector3\r\n {\r\n switch (this._BoardType)\r\n {\r\n case BoardType.Layer:\r\n return new Vector3(0, this.height).applyMatrix4(this.OCS);\r\n case BoardType.Vertical:\r\n return this.Position;\r\n case BoardType.Behind:\r\n return new Vector3(0, 0, this.thickness).applyMatrix4(this.OCS);\r\n }\r\n }\r\n get MaxPoint(): Vector3\r\n {\r\n let pt = new Vector3(this.width, this.height, -this.thickness);\r\n pt.applyMatrix4(this.OCS);\r\n return pt;\r\n }\r\n\r\n get IsRect()\r\n {\r\n return this.isRect;\r\n }\r\n\r\n get IsSpecialShape()\r\n {\r\n return !this.isRect;\r\n }\r\n\r\n get HasGroove()\r\n {\r\n return this.grooves.length > 0;\r\n }\r\n\r\n get Name()\r\n {\r\n return this._Name;\r\n }\r\n set Name(n: string)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Name = n;\r\n }\r\n\r\n /**\r\n * 板件的轮廓,在板件坐标系中的表现方式.\r\n */\r\n get ContourCurve()\r\n {\r\n return super.ContourCurve;\r\n }\r\n set ContourCurve(cu: ExtureContourCurve)\r\n {\r\n //标识是否被初始化\r\n TempRectHoleOption.up = \"\";\r\n\r\n if (!this.contourCurve || cu.EndParam !== this.contourCurve.EndParam || !this.BoardProcessOption.drillType)\r\n {\r\n let drillTypes = [...userConfig.DrillConfigs.keys(), \"不排\"];\r\n let defaultType = this._BoardProcessOption.drillType;\r\n if (!defaultType || !drillTypes.includes(defaultType))\r\n {\r\n defaultType = drillTypes[0];\r\n this._BoardProcessOption.drillType = defaultType;\r\n }\r\n this._BoardProcessOption.highDrill = Array(cu.EndParam).fill(defaultType);\r\n }\r\n else\r\n {\r\n if (this.isRect)\r\n InitRectBoardHoleOption(this, TempRectHoleOption);\r\n }\r\n super.ContourCurve = cu;\r\n\r\n if (this.isRect && TempRectHoleOption.up)\r\n SetRectHighHole(this, TempRectHoleOption);\r\n }\r\n\r\n Explode()\r\n {\r\n return Board2Regions(this);\r\n // return this.m_Shape.Explode().map(cu => cu.ApplyMatrix(this.OCS));\r\n }\r\n RotateBoard(rox: number, roy: number, roz: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this._Rotation.x = rox;\r\n this._Rotation.y = roy;\r\n this._Rotation.z = roz;\r\n\r\n let spcocs = this.SpaceOCS;\r\n let roMatX = new Matrix4().makeRotationX(rox);\r\n let roMatY = new Matrix4().makeRotationY(roy);\r\n let roMatZ = new Matrix4().makeRotationZ(roz);\r\n\r\n this.ApplyMatrix(this.OCSInv)\r\n .ApplyMatrix(this.RotateMat)\r\n .ApplyMatrix(roMatX)\r\n .ApplyMatrix(roMatY)\r\n .ApplyMatrix(roMatZ)\r\n .ApplyMatrix(spcocs);\r\n\r\n this._SpaceOCS.copy(spcocs);\r\n this.Update();\r\n }\r\n get Rotation()\r\n {\r\n return this._Rotation;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n\r\n get UCGenerator(): UVGenerator\r\n {\r\n if (this.BoardProcessOption.lines === LinesType.Positive)\r\n return boardUVGenerator;\r\n else\r\n return boardUVGenerator2;\r\n }\r\n\r\n UpdateUV(geo: Geometry, ocs: Matrix4, isRev = false)\r\n {\r\n super.UpdateUV(geo, ocs, this.BoardProcessOption.lines === LinesType.Reverse);\r\n }\r\n\r\n //从一个实体拷贝数据,实体类型必须相同.\r\n CopyFrom(obj: Board)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let drillBak = this._DrillList;\r\n this._DrillList = new Map();\r\n let layerNailsBak = this._LayerNails;\r\n this._LayerNails = [];\r\n\r\n super.CopyFrom(obj);\r\n\r\n this._DrillList = drillBak;\r\n this._LayerNails = layerNailsBak;\r\n }\r\n\r\n Clone(): this\r\n {\r\n let br = super.Clone();\r\n br._DrillList.clear();\r\n br._LayerNails.length = 0;\r\n br.RelativeHardware.length = 0;\r\n return br;\r\n }\r\n Join(target: this)\r\n {\r\n let res = super.Join(target);\r\n if (res && target.RelativeHardware)\r\n {\r\n for (let hw of target.RelativeHardware)\r\n {\r\n if (!this.RelativeHardware.includes(hw))\r\n this.RelativeHardware.push(hw);\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n private GetLinesDir()\r\n {\r\n let l: LineSegments;\r\n let len: number;\r\n let width: number;\r\n\r\n switch (this.BoardProcessOption.lines)\r\n {\r\n case LinesType.Positive:\r\n len = this.height / 3;\r\n width = Math.min(this.width, this.height) / 8;\r\n break;\r\n case LinesType.Reverse:\r\n len = this.width / 2;\r\n width = Math.min(this.width, this.height) / 8;\r\n break;\r\n case LinesType.CanReversal:\r\n len = this.height / 3;\r\n width = this.width / 2;\r\n default:\r\n break;\r\n }\r\n\r\n l = new LineSegments(\r\n BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesDirPts(len, width, this.BoardProcessOption.lines)),\r\n ColorMaterial.GetLineMaterial(8)\r\n );\r\n let l1 = l.clone();\r\n l1.material = ColorMaterial.GetLineMaterial(7);\r\n l.position.set(this.width / 2, this.height / 2, 0);\r\n l1.position.set(this.width / 2, this.height / 2, this.thickness);\r\n\r\n l.updateMatrix();\r\n l1.updateMatrix();\r\n\r\n return [l, l1];\r\n }\r\n private _2D3DPathObject: Object3D;\r\n private Get2DAnd3DPaths(obj: Object3D)\r\n {\r\n if (this._2D3DPathObject)\r\n return this._2D3DPathObject;\r\n\r\n this._2D3DPathObject = new Object3D();\r\n let group2 = new Object3D();\r\n for (let vm of this._2DModelingList)\r\n {\r\n let path = vm.path;\r\n for (let item of vm.items)\r\n {\r\n let tempPath = this.GetOffsetPath(path, item);\r\n if (tempPath)\r\n {\r\n let curves = VData2Curve(VKnifToolPath(tempPath, item.depth, item.knife.angle / 2));\r\n let o = new Object3D();\r\n for (let c of curves)\r\n {\r\n c.ColorIndex = tempPath.ColorIndex;\r\n o.add(c.GetDrawObjectFromRenderType(RenderType.Wireframe));\r\n }\r\n if (vm.dir === FaceDirection.Back)\r\n o.applyMatrix4(ZMirrorMatrix);\r\n else\r\n o.position.setZ(this.thickness);\r\n o.updateMatrix();\r\n group2.add(o);\r\n }\r\n }\r\n }\r\n let group = new Object3D();\r\n let tempIndex = 1;\r\n let tempMap = new Map();\r\n for (let vm of this._3DModelingList)\r\n {\r\n let key = `${vm.dir}-${vm.knife.id}`;\r\n let color = tempMap.get(key);\r\n if (!color)\r\n {\r\n color = tempIndex;\r\n tempIndex++;\r\n tempMap.set(key, color);\r\n }\r\n\r\n for (let i = 0; i < vm.path.length - 1; i++)\r\n {\r\n let d1 = vm.path[i];\r\n let d2 = vm.path[i + 1];\r\n if (equaln(d1.bul, 0))\r\n {\r\n let geo = BufferGeometryUtils.CreateFromPts([d1.pt, d2.pt]);\r\n group.add(new TLine(geo, ColorMaterial.GetLineMaterial(color)));\r\n }\r\n else\r\n {\r\n let arc = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul);\r\n arc.ColorIndex = color;\r\n group.add(arc.GetDrawObjectFromRenderType(RenderType.Wireframe));\r\n }\r\n }\r\n }\r\n\r\n this._2D3DPathObject.add(group);\r\n this._2D3DPathObject.add(group2);\r\n\r\n return this._2D3DPathObject;\r\n }\r\n HandleSpliteEntitys(splitEntitys: this[])\r\n {\r\n let nails: ObjectId[] = [];\r\n for (let nail of this.LayerNails)\r\n {\r\n if (nail?.Object && !nail.IsErase)\r\n nails.push(nail);\r\n }\r\n let record = this._Owner.Object as BlockTableRecord;\r\n for (let en of splitEntitys)\r\n {\r\n let ocsInv = en.OCSInv;\r\n let nids: ObjectId[] = [];\r\n let needAddNailEnts: Board[] = [];\r\n nails = nails.filter(id =>\r\n {\r\n let n = id.Object as CylinderHole;\r\n let position = n.Position.applyMatrix4(ocsInv).setZ(0);\r\n if (en.contourCurve.PtInCurve(position))\r\n {\r\n let n1 = n.Clone();\r\n n1.MId = n.MId;\r\n n1.FId = n.FId;\r\n\r\n if (n.MId === this.Id)\r\n {\r\n n1.MId = en.Id;\r\n needAddNailEnts.push(n1.FId.Object as Board);\r\n }\r\n\r\n if (n.FId === this.Id)\r\n {\r\n n1.FId = en.Id;\r\n needAddNailEnts.push(n1.MId.Object as Board);\r\n }\r\n\r\n n.Erase();\r\n record.Add(n1);\r\n nids.push(n1.Id);\r\n\r\n return false;\r\n }\r\n return true;\r\n });\r\n en.AppendNails(nids);\r\n needAddNailEnts.forEach(e => e.AppendNails(nids));\r\n\r\n if (!userConfig.openDrillingReactor)\r\n {\r\n for (let [bid, idss] of this._DrillList)\r\n {\r\n if (!bid) continue;\r\n let board = bid.Object as Board;\r\n for (let ids of idss)\r\n {\r\n if (!ids[0]?.Object || ids[0].IsErase) continue;\r\n let holes = ids.map(i => i.Object) as CylinderHole[];\r\n if (holes[0] instanceof CylinderHole)\r\n {\r\n let isInBoard = CyHoleInBoard(holes, en, en.OCSInv);\r\n if (isInBoard)\r\n {\r\n let cloneHoles = holes.map(h => h.Clone());\r\n\r\n for (let h of cloneHoles)\r\n {\r\n if (h.FId === this.Id)\r\n {\r\n h.FId = en.Id;\r\n }\r\n if (h.MId === this.Id)\r\n {\r\n h.MId = en.Id;\r\n }\r\n record.Add(h);\r\n }\r\n for (let h of holes)\r\n h.Erase();\r\n en.AppendDrillList(bid, [cloneHoles.map(c => c.Id)]);\r\n board.AppendDrillList(en.Id, [cloneHoles.map(c => c.Id)]);\r\n }\r\n }\r\n else\r\n {\r\n //TODO:处理自定义排钻\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n InitDrawObject(renderType = RenderType.Wireframe)\r\n {\r\n let obj: Object3D;\r\n if (renderType === RenderType.Edge)\r\n {\r\n obj = new Object3D();\r\n obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(8)));\r\n this.CheckSealing(obj);\r\n }\r\n else\r\n {\r\n obj = super.InitDrawObject(renderType);\r\n }\r\n this.HandleBoardMaterial(renderType, obj);\r\n return obj;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let o = super.UpdateDrawObject(renderType, obj);\r\n if (renderType === RenderType.Edge)\r\n {\r\n obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(8)));\r\n this.CheckSealing(obj);\r\n }\r\n this.HandleBoardMaterial(renderType, obj);\r\n\r\n return o;\r\n }\r\n OffsetPathCache = new Map();\r\n private GetOffsetPath(path: Polyline, item: I2DModeingItem): Polyline\r\n {\r\n if (item.offset === 0)\r\n {\r\n return path;\r\n }\r\n else\r\n {\r\n let cache = this.OffsetPathCache.get(path);\r\n if (!cache)\r\n {\r\n cache = {};\r\n this.OffsetPathCache.set(path, cache);\r\n }\r\n let tempPath = cache[item.offset.toString()];\r\n if (!tempPath)\r\n {\r\n tempPath = path.GetOffsetCurves(item.offset)[0];\r\n cache[item.offset.toString()] = tempPath;\r\n }\r\n return tempPath;\r\n }\r\n }\r\n private HandleBoardMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (!this.IsChaiDan)\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2)\r\n {\r\n obj.children.length = 1;\r\n (obj.children[0] as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n else if (renderType !== RenderType.Wireframe)\r\n {\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n }\r\n if ((renderType === RenderType.Wireframe || renderType === RenderType.Conceptual) && userConfig.showLines && this.IsChaiDan)\r\n obj.add(...this.GetLinesDir());\r\n\r\n\r\n if (this.Id)\r\n {\r\n let o = this.Get2DAnd3DPaths(obj);\r\n if (o.parent)\r\n obj.children.push(o);\r\n else\r\n obj.add(o);\r\n }\r\n\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n super.UpdateDrawObjectMaterial(renderType, obj);\r\n if (!this.IsChaiDan)\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2)\r\n {\r\n (obj.children[0] as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n else if (renderType !== RenderType.Wireframe)\r\n {\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;\r\n }\r\n }\r\n }\r\n CheckSealing(obj: Object3D)\r\n {\r\n let sealingInfo = new Map(userConfig.sealingColorMap.filter(d => d[0] && d[1]) as [string, string][]);\r\n if (sealingInfo.size === 0) return;\r\n let cus = GetBoardSealingCurves(this);\r\n let highSeals = GetBoardHighSeal(this, cus);\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let size = highSeals[i].size.toString();\r\n let color = sealingInfo.get(size);\r\n if (color)\r\n {\r\n cus[i].Position = cus[i].Position.add(new Vector3(0, 0, this.thickness / 2));\r\n let l = cus[i].GetDrawObjectFromRenderType(RenderType.Wireframe) as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(parseFloat(color));\r\n obj.add(l);\r\n }\r\n }\r\n }\r\n GetStretchPoints()\r\n {\r\n let pts = this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n for (let m of this._2DModelingList)\r\n {\r\n pts.push(...m.path.GetStretchPoints().map(p => p.add(new Vector3(0, 0, m.dir === FaceDirection.Front ? this.thickness : 0)).applyMatrix4(this.OCS)));\r\n }\r\n return pts;\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n let exCount = arraySum(this.GetStrectchPointCountList(DragPointType.Stretch));\r\n let originIndexList: number[] = [];\r\n let mIndexList: number[] = [];\r\n for (let i of indexList)\r\n {\r\n if (i < exCount)\r\n originIndexList.push(i);\r\n else\r\n mIndexList.push(i - exCount);\r\n }\r\n let oldOcs = this.OCS;\r\n super.MoveStretchPoints(originIndexList, vec);\r\n\r\n if (!this.Id) return;\r\n\r\n arraySortByNumber(mIndexList);\r\n let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n let offset = 0;\r\n let icount = mIndexList.length;\r\n let i = 0;\r\n for (let m of this._2DModelingList)\r\n {\r\n let count = m.path.GetDragPointCount(DragPointType.Stretch);\r\n offset += count;\r\n\r\n let iList: number[] = [];\r\n\r\n for (; i < icount; i++)\r\n {\r\n if (mIndexList[i] < offset)\r\n iList.push(mIndexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n if (iList.length > 0)\r\n {\r\n m.path.MoveStretchPoints(iList, localVec);\r\n }\r\n m.path.ApplyMatrix(oldOcs).ApplyMatrix(this.OCSInv);\r\n }\r\n\r\n this.OffsetPathCache.clear();\r\n this._2D3DPathObject = null;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts = super.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n if (snapMode === ObjectSnapMode.End)\r\n {\r\n for (let vm of this._2DModelingList)\r\n {\r\n if (!this.OffsetPathCache.has(vm.path)) continue;\r\n for (let item of vm.items)\r\n {\r\n if (item.offset === 0) continue;\r\n\r\n let paths = this.OffsetPathCache.get(vm.path);\r\n let polyline = paths[item.offset.toString()];\r\n let ps = polyline.GetStretchPoints();\r\n\r\n for (let p of ps)\r\n {\r\n if (vm.dir === FaceDirection.Front)\r\n p.add(new Vector3(0, 0, this.thickness));\r\n p.applyMatrix4(this.OCS);\r\n }\r\n pts.push(...ps);\r\n }\r\n }\r\n }\r\n return pts;\r\n }\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n if (this.RelativeHardware.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n if (ver < 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n this._BoardType = file.Read();\r\n this._Name = file.Read();\r\n //兼容旧版本\r\n if (ver > 2)\r\n {\r\n deserializationBoardData(file, this._BoardProcessOption, ver);\r\n }\r\n else\r\n {\r\n let opt = file.Read();\r\n this._BoardProcessOption = Object.assign(this._BoardProcessOption,\r\n typeof opt === \"string\" ? JSON.parse(opt) : opt);\r\n }\r\n\r\n //读取排钻列表\r\n this._DrillList.clear();\r\n let size = file.Read();\r\n\r\n //没有与任何板件关联的排钻\r\n let noRelevancyDrillings: ObjectId[][] = [];\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let drIdList: ObjectId[][] = [];\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let drIDs: ObjectId[] = [];\r\n let count1 = file.Read();\r\n for (let j = 0; j < count1; j++)\r\n {\r\n let fileId = file.ReadObjectId();\r\n fileId && drIDs.push(fileId);\r\n }\r\n if (drIDs.length > 0)\r\n drIdList.push(drIDs);\r\n }\r\n\r\n if (drIdList.length === 0)\r\n continue;\r\n\r\n if (!id)\r\n noRelevancyDrillings.push(...drIdList);\r\n else\r\n this._DrillList.set(id, drIdList);\r\n }\r\n\r\n if (noRelevancyDrillings.length > 0)\r\n this._DrillList.set(undefined, noRelevancyDrillings);\r\n\r\n if (ver > 1)\r\n {\r\n this._LayerNails.length = 0;\r\n let nailsCount = file.Read();\r\n for (let i = 0; i < nailsCount; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this._LayerNails.push(objId);\r\n }\r\n }\r\n if (ver > 4)\r\n this._Rotation = { x: file.Read(), y: file.Read(), z: file.Read() };\r\n if (ver >= 7)\r\n {\r\n let count = file.Read();\r\n this.RelativeHardware.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this.RelativeHardware.push(objId);\r\n }\r\n }\r\n if (ver >= 8)\r\n this.OpenDir = file.Read();\r\n\r\n if (ver >= 9)\r\n this._IsChaiDan = file.Read();\r\n\r\n if (ver >= 10)\r\n {\r\n DeserializationBoard2DModeingData(file, this._2DModelingList, ver);\r\n DeserializationBoard3DModeingData(file, this._3DModelingList, ver);\r\n }\r\n\r\n this.OffsetPathCache.clear();\r\n this._2D3DPathObject = null;\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(10);\r\n // file.Write(this._SpaceOCS.toArray()); ver < 6\r\n file.Write(this._BoardType);\r\n file.Write(this._Name);\r\n serializeBoardData(file, this._BoardProcessOption);\r\n\r\n file.Write(this._DrillList.size);\r\n for (let [id, idList] of this._DrillList)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(idList.length);\r\n for (let ids of idList)\r\n {\r\n file.Write(ids.length);\r\n for (let id of ids)\r\n file.WriteObjectId(id);\r\n }\r\n }\r\n file.Write(this._LayerNails.length);\r\n for (let nail of this._LayerNails)\r\n {\r\n file.WriteObjectId(nail);\r\n }\r\n file.Write(this._Rotation.x);\r\n file.Write(this._Rotation.y);\r\n file.Write(this._Rotation.z);\r\n\r\n file.Write(this.RelativeHardware.length);\r\n for (let id of this.RelativeHardware)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(this.OpenDir);\r\n file.Write(this._IsChaiDan);\r\n\r\n SerializeBoard2DModeingData(file, this._2DModelingList);\r\n SerializeBoard3DModeingData(file, this._3DModelingList);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Object3D, Shape as TShape, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Shape } from \"../DatabaseServices/Shape\";\r\nimport { FaceDirection } from \"../UI/Store/BoardInterface\";\r\nimport { MoveMatrix } from \"./GeUtils\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\n\r\n//FIXME: #IWBPB 性能缺陷和BUG. 等待废弃或者改进\r\nexport function CreateWireframe(en3D: Board | ExtrudeSolid)\r\n{\r\n let mat = ColorMaterial.GetLineMaterial(1);\r\n let lines: Object3D[] = [];\r\n\r\n let upShape = new Shape(Contour.CreateContour(en3D.ContourCurve));\r\n let downShape = new Shape(Contour.CreateContour(en3D.ContourCurve));\r\n\r\n if (en3D instanceof Board)\r\n {\r\n for (let m of en3D.BoardModeling)\r\n {\r\n let geo = new BufferGeometry().setFromPoints(m.shape.Shape.getPoints(10));\r\n let ocs = m.shape.Outline.Curve.OCS;\r\n let cloneShape = m.shape.Clone();\r\n cloneShape.Outline.Curve.Position = cloneShape.Outline.Curve.Position.setZ(0);\r\n\r\n let isCut = false;\r\n appendLines(m.shape.Outline.Curve, en3D.Thickness, lines, mat);\r\n\r\n if (m.thickness < en3D.Thickness)\r\n {\r\n appendLines(m.shape.Outline.Curve, m.thickness, lines, mat);\r\n //正面\r\n if (m.dir === FaceDirection.Front)\r\n {\r\n let ss = upShape.SubstactBoolOperation([cloneShape]);\r\n if (ss.length > 0 && ss[0].Holes.length === 0)\r\n {\r\n upShape = ss[0];\r\n isCut = true;\r\n }\r\n }\r\n else\r\n {\r\n let ss = downShape.SubstactBoolOperation([cloneShape]);\r\n if (ss.length > 0 && ss[0].Holes.length === 0)\r\n {\r\n downShape = ss[0];\r\n isCut = true;\r\n }\r\n }\r\n }\r\n if (!isCut || m.dir === FaceDirection.Back)\r\n {\r\n let geoClone = geo.clone();\r\n geoClone.applyMatrix4(MoveMatrix(new Vector3(0, 0, m.thickness))).applyMatrix4(ocs);\r\n lines.push(new Line(geoClone, mat));\r\n }\r\n\r\n if (!isCut || m.dir === FaceDirection.Front)\r\n {\r\n lines.push(new Line(geo.applyMatrix4(ocs), mat));\r\n }\r\n }\r\n }\r\n\r\n let downGeo = new BufferGeometry().setFromPoints(downShape.Shape.getPoints(10))\r\n .applyMatrix4(en3D.ContourCurve.OCS);\r\n let upGeo = new BufferGeometry().setFromPoints(upShape.Shape.getPoints(10))\r\n .applyMatrix4(MoveMatrix(new Vector3(0, 0, en3D.Thickness)))\r\n .applyMatrix4(en3D.ContourCurve.OCS);\r\n\r\n lines.push(\r\n new Line(downGeo, mat),\r\n new Line(upGeo, mat));\r\n\r\n appendLines(en3D.ContourCurve, en3D.Thickness, lines, mat);\r\n\r\n return lines;\r\n}\r\n\r\nfunction appendLines(cu: Curve, thick: number, lines: Object3D[], mat: LineBasicMaterial)\r\n{\r\n let pts = cu.GetStretchPoints();\r\n for (let p of pts)\r\n {\r\n let geo = new Geometry().setFromPoints([p, p.clone().add(new Vector3(0, 0, thick))]);\r\n lines.push(new Line(geo, mat));\r\n }\r\n}\r\n\r\nexport function FastWireframe(br: ExtrudeSolid, color = 0)\r\n{\r\n color = color || br.ColorIndex;\r\n let material = ColorMaterial.GetLineMaterial(color);\r\n\r\n let thickness = br.Thickness;\r\n\r\n let cu = br.ContourCurve;\r\n let pts = cu.Shape.getPoints(6);\r\n\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n let edgeCoords: number[] = [];\r\n\r\n for (let p of pts)\r\n {\r\n coords.push(p.x, p.y, 0);\r\n if (p[\"_mask_\"])\r\n edgeCoords.push(p.x, p.y, 0, p.x, p.y, thickness);\r\n }\r\n for (let p of pts)\r\n coords.push(p.x, p.y, thickness);\r\n\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(edgeCoords, 3));\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n\r\n let line = new Line(geo, material);\r\n line.applyMatrix4(cu.OCS);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCS);\r\n\r\n let result = [line, edge];\r\n\r\n let ocsInv = br.OCSInv;\r\n for (let g of br.Grooves)\r\n {\r\n let m = ocsInv.clone().multiply(g.OCS);\r\n let lines = FastWireframe(g, color);\r\n for (let l of lines)\r\n {\r\n l.applyMatrix4(m);\r\n result.push(l);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\nexport function FastWireframe2(dr: ExtrudeHole, color = 0)\r\n{\r\n color = color || dr.ColorIndex;\r\n let material = ColorMaterial.GetLineMaterial(color);\r\n\r\n let height = dr.Height;\r\n\r\n let cu = dr.ContourCurve;\r\n let pts = cu.Shape.getPoints(6);\r\n\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n let edgeCoords: number[] = [];\r\n\r\n for (let p of pts)\r\n {\r\n coords.push(p.x, p.y, 0);\r\n if (p[\"_mask_\"])\r\n edgeCoords.push(p.x, p.y, 0, p.x, p.y, height);\r\n }\r\n for (let p of pts)\r\n coords.push(p.x, p.y, height);\r\n\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(edgeCoords, 3));\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n\r\n let line = new Line(geo, material);\r\n line.applyMatrix4(cu.OCS);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCS);\r\n\r\n let result = [line, edge];\r\n\r\n return result;\r\n}\r\n","import { BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayClone, arrayLast, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { FastWireframe2 } from \"../../Geometry/CreateWireframe\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/ExtrudeEdgeGeometry\";\r\nimport { AsVector3, equaln, equalv2, equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Contour } from \"../Contour\";\r\nimport { DragPointType } from \"../Entity/DragPointType\";\r\nimport { ExtrudeSolid, ExtureContourCurve } from \"../Entity/Extrude\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { Shape } from \"../Shape\";\r\nimport { OBB } from './../../Geometry/OBB/obb';\r\nimport { Hole } from \"./Hole\";\r\n\r\n@Factory\r\nexport class ExtrudeHole extends Hole\r\n{\r\n private _contourCurve: ExtureContourCurve = new Polyline();\r\n private _EdgeGeometry: BufferGeometry;\r\n protected _knifeRadius: number = 3;\r\n @AutoRecord isHole = true;\r\n @AutoRecord isThrough = false;\r\n get KnifeRadius()\r\n {\r\n return this._knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this._knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._knifeRadius = v;\r\n }\r\n }\r\n Explode()\r\n {\r\n return [this.ContourCurve.Clone().ApplyMatrix(this.OCS)];\r\n }\r\n get ContourCurve()\r\n {\r\n return this._contourCurve;\r\n }\r\n\r\n set ContourCurve(curve: ExtureContourCurve)\r\n {\r\n if (!curve.IsClose) return;\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n curve.CloseMark = true;\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n\r\n //如果曲线被旋转了,那么修正它的旋转矩阵,避免纹路错误\r\n let ocs = curve.OCS;\r\n if (!equaln(ocs.elements[0], 1))// || ocs.elements[9] || ocs.elements[10]\r\n {\r\n for (let p of pts)\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n curve.OCS = new Matrix4();\r\n }\r\n curve.ClearDraw();\r\n }\r\n\r\n this.WriteAllObjectRecord();\r\n this._contourCurve = curve;\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n CheckContourCurve()\r\n {\r\n let box = this._contourCurve.BoundingBox;\r\n\r\n //修正轮廓基点\r\n if (!equalv3(box.min, ZeroVec))\r\n {\r\n this._contourCurve.Position =\r\n this._contourCurve.Position.sub(box.min);\r\n\r\n let v = box.min.applyMatrix4(this.OCS.setPosition(ZeroVec));\r\n this._Matrix.setPosition(this.Position.add(v));\r\n }\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let cu = this.ContourCurve;\r\n cu.ApplyMatrix(this.OCS);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n this.Update();\r\n return this;\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n\r\n contour.Position = contour.Position.add(this.Normal.multiplyScalar(this.Height));\r\n pts.push(\r\n ...contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n if (snapMode === ObjectSnapMode.Mid)\r\n pts.push(...contour.GetStretchPoints().map(p => p.add(this.Normal.multiplyScalar(-this.Height / 2))));\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n get Shape()\r\n {\r\n let contour = Contour.CreateContour(this.ContourCurve.Clone(), false);\r\n\r\n return new Shape(contour);\r\n }\r\n get BoundingBoxInOCS()\r\n {\r\n let box = new Box3Ext().copy(this.ContourCurve.BoundingBox);\r\n box.max.add(new Vector3(0, 0, this.Height));\r\n return box;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = this.ContourCurve.BoundingBox;\r\n box.max.add(new Vector3(0, 0, this.Height));\r\n box.applyMatrix4(this.OCS);\r\n return box;\r\n }\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let pts = [this.ContourCurve.Shape.getPoints(6).map(AsVector3)];\r\n this._EdgeGeometry = GenerateExtrudeEdgeGeometry(pts, this.Height).applyMatrix4(this._contourCurve.OCSNoClone);\r\n return this._EdgeGeometry;\r\n }\r\n private _MeshGeometry: BufferGeometry | Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n this._MeshGeometry = this.GeneralMeshGeometry();\r\n return this._MeshGeometry;\r\n }\r\n private GeneralMeshGeometry()\r\n {\r\n let extrudeSettings: ExtrudeGeometryOptions = {\r\n curveSegments: 12,\r\n steps: 1,\r\n bevelEnabled: false,\r\n depth: this.Height,\r\n };\r\n let geo = new ExtrudeGeometry(this.ContourCurve.Shape, extrudeSettings);\r\n geo.applyMatrix4(this._contourCurve.OCS);\r\n return geo;\r\n }\r\n GetGripOrStretchPoints(dragType: DragPointType)\r\n {\r\n let isGrip = dragType === DragPointType.Grip;\r\n\r\n let pts = isGrip ? this.ContourCurve.GetGripPoints() : this.ContourCurve.GetStretchPoints();\r\n let v = new Vector3(0, 0, this.Height);\r\n pts.push(...pts.map(p => p.clone().add(v)));\r\n pts.forEach(p => { p.applyMatrix4(this.OCS); });\r\n\r\n return pts;\r\n }\r\n private GetStrectchPointCountList(dragType: DragPointType): number\r\n {\r\n return this.ContourCurve.GetDragPointCount(dragType) * 2;\r\n }\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (dragType === DragPointType.Stretch && indexList.length === this.GetStrectchPointCountList(dragType))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n arraySortByNumber(indexList);\r\n this.MoveGripOrStretchPointsOnly(indexList, vec, dragType);\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n IsStretchHeight(indexs: number[])\r\n {\r\n let count = this.ContourCurve.GetStretchPoints().length;\r\n if (indexs.length === count)\r\n {\r\n let isF = indexs[0] < count;\r\n return indexs.every(i => isF === (i < count));\r\n }\r\n return false;\r\n }\r\n MoveGripOrStretchPointsOnly(indexList: Array, vec: Vector3, dragType: DragPointType)\r\n {\r\n let stretchCount = this.ContourCurve.GetDragPointCount(dragType);\r\n\r\n if (dragType === DragPointType.Stretch)\r\n {\r\n //Move\r\n if (indexList.length === stretchCount * 2)\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n //判断是否拉伸厚度\r\n if (this.IsStretchHeight(indexList))\r\n {\r\n let isFront = indexList[0] < stretchCount;\r\n\r\n if (indexList.every(v => v < stretchCount === isFront))\r\n {\r\n //Change thickness\r\n let lvec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n if (isFront)\r\n {\r\n this.Height -= lvec.z;\r\n //移动位置而不改变内部拉槽\r\n let v = this.Normal.multiplyScalar(lvec.z);\r\n this._Matrix.elements[12] += v.x;\r\n this._Matrix.elements[13] += v.y;\r\n this._Matrix.elements[14] += v.z;\r\n }\r\n else\r\n {\r\n this.Height += lvec.z;\r\n }\r\n return;\r\n }\r\n }\r\n\r\n indexList = arrayClone(indexList);\r\n }\r\n\r\n //修正点的索引\r\n for (let i = 0; i < indexList.length; i++)\r\n {\r\n let index = indexList[i];\r\n if (index >= stretchCount)\r\n {\r\n index -= stretchCount;\r\n indexList[i] = index;\r\n }\r\n }\r\n\r\n indexList = [...new Set(indexList)];\r\n\r\n let localVec = vec.clone().applyMatrix4(this.OCSInv.setPosition(ZeroVec));\r\n\r\n if (dragType === DragPointType.Grip)\r\n {\r\n if (this.ContourCurve instanceof Polyline\r\n && indexList.length === 1\r\n && indexList[0] % 2 === 1)\r\n {\r\n let param = indexList[0] / 2;\r\n if (this.ContourCurve.GetBuilgeAt(Math.floor(param)) === 0)\r\n {\r\n let der = this.ContourCurve.GetFistDeriv(param).normalize();\r\n [der.x, der.y] = [der.y, -der.x];\r\n let d = localVec.dot(der);\r\n localVec.copy(der).multiplyScalar(d);\r\n }\r\n }\r\n this.ContourCurve.MoveGripPoints(indexList, localVec);\r\n }\r\n else\r\n this.ContourCurve.MoveStretchPoints(indexList, localVec);\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Grip);\r\n }\r\n GetStretchPoints()\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Grip);\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.MoveGripOrStretchPoints(indexList, vec, DragPointType.Stretch);\r\n }\r\n Convert2ExtrudeSolid()\r\n {\r\n let g = new ExtrudeSolid();\r\n g.KnifeRadius = this.KnifeRadius;\r\n g.SetContourCurve(this.ContourCurve);\r\n g.Thickness = this.Height;\r\n g.ApplyMatrix(this.OCS);\r\n return g;\r\n }\r\n GetPrintObject3D()\r\n {\r\n let geometry = new LineGeometry();\r\n let lineSegments = new Float32Array(this.EdgeGeometry.attributes.position.array);\r\n let instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n geometry.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n geometry.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n let line = new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetPrintConceptualMaterial());\r\n return [line, mesh];\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Edge)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical || renderType === RenderType.Physical2)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(...FastWireframe2(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new Object3D().add(...this.GetPrintObject3D());\r\n }\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n\r\n if (renderType !== RenderType.Wireframe)\r\n Object3DRemoveAll(obj);\r\n\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n this.MeshGeometry;\r\n\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Edge)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n obj.add(...this.GetPrintObject3D());\r\n }\r\n else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical || renderType === RenderType.Physical2)\r\n {\r\n obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Jig)\r\n obj.add(...FastWireframe2(this));\r\n\r\n return obj;\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Edge)\r\n {\r\n let l = obj as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType !== RenderType.Jig && renderType !== RenderType.Print)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n get OBB(): OBB\r\n {\r\n let size = this.ContourCurve.BoundingBox.getSize(new Vector3).setZ(this.Height);\r\n return new OBB(this.OCS, size.multiplyScalar(0.5));\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n this._contourCurve = file.ReadObject() as ExtureContourCurve;\r\n this._knifeRadius = file.Read();\r\n if (ver > 1)\r\n {\r\n this.isHole = file.Read();\r\n }\r\n if (ver > 2)\r\n this.isThrough = file.Read();\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.WriteObject(this._contourCurve);\r\n file.Write(this._knifeRadius);\r\n file.Write(this.isHole);\r\n file.Write(this.isThrough);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, curveLinkGroup, equalCurve, IRectInfo, IsRect } from \"../../Common/CurveUtils\";\r\nimport { matrixAlignCoordSys } from \"../../Common/Matrix4Utils\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { AsVector2, AsVector3, comparePoint, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\n\r\n/**\r\n * 优化走刀路径,连接偏移后的曲线数组\r\n * @param offsetCus 偏移后的曲线组\r\n * @param originShape 原始走刀形状\r\n * @param rad 刀半径\r\n * @returns tool path\r\n */\r\nexport function OptimizeToolPath(offsetCus: Curve[], originShape: Shape, rad: number): Curve[]\r\n{\r\n // 去掉最外轮廓\r\n let outline = offsetCus.shift();\r\n\r\n let plList: Polyline[] = [];\r\n let noCloseCus: Curve[] = [];\r\n for (let cu of offsetCus)\r\n {\r\n if (!cu.IsClose)\r\n {\r\n noCloseCus.push(cu);\r\n continue;\r\n }\r\n if (cu instanceof Polyline)\r\n {\r\n //轮廓朝下的逆时针轮廓需要翻转\r\n //如果走刀不止一条,第一刀为顺时针,其余为逆时针\r\n if (cu.IsClose)\r\n {\r\n if (offsetCus.length === 1)\r\n {\r\n if (cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n }\r\n else\r\n if ((cu.Normal.z * cu.Area2 < 0) === (cu !== offsetCus[0]))\r\n cu.Reverse();\r\n }\r\n plList.push(cu);\r\n }\r\n else if (cu instanceof Circle)\r\n {\r\n let c = ConverCircleToPolyline(cu);\r\n if (offsetCus.length > 1 && cu === offsetCus[0])\r\n c.Reverse();\r\n c.ColorIndex = cu.ColorIndex;\r\n plList.push(c);\r\n }\r\n else\r\n console.warn(\"错误形状\");\r\n }\r\n\r\n if (noCloseCus.length > 0)\r\n {\r\n let culist: Curve[] = [];\r\n noCloseCus.forEach(c =>\r\n {\r\n if (c instanceof Polyline)\r\n culist.push(...c.Explode() as Curve[]);\r\n else\r\n culist.push(c);\r\n });\r\n //移除相等的曲线避免重复走刀\r\n RempveEqualCurves(culist);\r\n let groups = curveLinkGroup(culist);\r\n for (let g of groups)\r\n {\r\n let pl = Polyline.Combine(g);;\r\n pl.ColorIndex = noCloseCus[0].ColorIndex;\r\n plList.push(pl);\r\n }\r\n }\r\n let dir = GetCurveToInDir(outline);\r\n let cantIntCur: Curve[] = [outline];\r\n cantIntCur.push(...GetOffsetCurves(outline, rad * dir));\r\n if (originShape.Holes.length > 0)\r\n {\r\n for (let h of originShape.Holes)\r\n {\r\n let dir = Math.sign(h.Curve.Area2);\r\n if (h.Curve instanceof Circle)\r\n dir = 1;\r\n cantIntCur.push(h.Curve, ...GetOffsetCurves(h.Curve, rad * dir));\r\n }\r\n }\r\n\r\n //曲线统一起点\r\n ChangePlListStartPt(plList);\r\n //对多段线进行排序,按最起始点远近排序\r\n SortPlByStartPt(plList);\r\n\r\n let result: Curve[] = [];\r\n let firstPl = plList[0];\r\n firstPl.CloseMark = false;\r\n\r\n for (let i = 1; i < plList.length; i++)\r\n {\r\n let ePt = firstPl.EndPoint;\r\n let isDisVail: boolean;\r\n if (plList[i].TempData?.isOut && !equalv3(ePt, plList[i].StartPoint))\r\n isDisVail = true;\r\n else\r\n {\r\n let refLine = new Line(ePt, plList[i].StartPoint);\r\n isDisVail = cantIntCur.some(c => c.IntersectWith(refLine, 0).length > 1);\r\n }\r\n\r\n if (isDisVail)\r\n {\r\n result.push(firstPl);\r\n firstPl = plList[i];\r\n firstPl.CloseMark = false;\r\n }\r\n else\r\n {\r\n let alMat = matrixAlignCoordSys(plList[i].OCS, firstPl.OCS);\r\n let cuPtsBul = plList[i].PtsBuls;\r\n\r\n for (let i = 0; i < cuPtsBul.pts.length; i++)\r\n {\r\n //坐标系对齐\r\n let p = cuPtsBul.pts[i];\r\n p.copy(AsVector2(AsVector3(p).applyMatrix4(alMat)));\r\n firstPl.LineData.push({ pt: p, bul: cuPtsBul.buls[i] });\r\n }\r\n }\r\n }\r\n result.push(firstPl);\r\n return result;\r\n}\r\n\r\n/**\r\n* 设定走刀路径起始点\r\n* 为了统一刀路起点,最外轮廓左左点为起始点,其余轮廓以最接近最外轮廓起始点的点左起始点\r\n* @param plList\r\n*/\r\nfunction ChangePlListStartPt(plList: Polyline[])\r\n{\r\n let firstPl = plList[0];\r\n if (firstPl.IsClose)\r\n {\r\n let minP = undefined;\r\n let compare = comparePoint(\"xy\");\r\n for (let p of firstPl.GetStretchPoints())\r\n {\r\n if (!minP)\r\n minP = p;\r\n else\r\n if (compare(minP, p) === 1)\r\n minP = p;\r\n }\r\n let par = firstPl.GetParamAtPoint(minP);\r\n firstPl.ResetStartPoint(par);\r\n }\r\n\r\n let firstSpt = firstPl.StartPoint;\r\n\r\n for (let i = 1; i < plList.length; i++)\r\n {\r\n let pl = plList[i];\r\n\r\n if (pl.IsClose)\r\n {\r\n let pts = pl.GetStretchPoints().sort((p1, p2) =>\r\n {\r\n let dist1 = p1.distanceToSquared(firstSpt);\r\n let dist2 = p2.distanceToSquared(firstSpt);\r\n\r\n return dist1 - dist2;\r\n });\r\n let par = pl.GetParamAtPoint(pts[0]);\r\n pl.ResetStartPoint(par);\r\n }\r\n else\r\n {\r\n let sPt = pl.StartPoint;\r\n let ePt = pl.EndPoint;\r\n let dist1 = sPt.distanceToSquared(firstSpt);\r\n let dist2 = ePt.distanceToSquared(firstSpt);\r\n if (dist1 > dist2)\r\n pl.Reverse();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 排序多段线数组,按照起点之间的距离\r\n */\r\nfunction SortPlByStartPt(pls: Polyline[]): Polyline[]\r\n{\r\n if (pls.length <= 1) return pls;\r\n\r\n let result = [pls[0]];\r\n let usedPl = new WeakSet([pls[0]]);\r\n\r\n let p = pls[0].StartPoint;\r\n while (true)\r\n {\r\n if (pls.length === result.length)\r\n break;\r\n\r\n let vaildPl: Polyline;\r\n let minDist: number = Infinity;\r\n for (let pl of pls)\r\n {\r\n if (usedPl.has(pl))\r\n continue;\r\n let dist = pl.StartPoint.distanceToSquared(p);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n vaildPl = pl;\r\n }\r\n }\r\n p = vaildPl.StartPoint;\r\n result.push(vaildPl);\r\n usedPl.add(vaildPl);\r\n }\r\n pls.length = 0;\r\n pls.push(...result);\r\n}\r\n\r\nfunction RempveEqualCurves(cus: Curve[])\r\n{\r\n let needRemoveCurve: Set = new Set();\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu1 = cus[i];\r\n if (needRemoveCurve.has(cu1)) continue;\r\n for (let j = i + 1; j < cus.length; j++)\r\n {\r\n let cu2 = cus[j];\r\n if (needRemoveCurve.has(cu2)) continue;\r\n if (equalCurve(cu1, cu2))\r\n {\r\n needRemoveCurve.add(cu2);\r\n }\r\n }\r\n }\r\n arrayRemoveIf(cus, (c) => needRemoveCurve.has(c));\r\n}\r\n\r\n/**获取内偏移的轮廓 */\r\nexport function GetOffsetCurves(cu: Curve, dist: number, rectInfo?: IRectInfo): Curve[]\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n if (rectInfo?.isRect)\r\n {\r\n let r = RectOffset(cu, rectInfo, Math.abs(dist));\r\n return r ? [r] : [];\r\n }\r\n return cu.GetFeedingToolPath(dist).filter(c => !equaln(c.Length, 0, 1e-5));\r\n }\r\n else\r\n return cu.GetOffsetCurves(dist);\r\n}\r\n\r\n/** 获得曲线内偏移方向*/\r\nexport function GetCurveToInDir(cu: Curve): number\r\n{\r\n return cu.IsClockWise ? 1 : -1;\r\n}\r\n\r\n/**矩形偏移,正为内偏移 */\r\nexport function RectOffset(rect: Polyline, res: IRectInfo, dist: number)\r\n{\r\n if (!res.isRect || equaln(dist, 0)) return;\r\n\r\n let box = res.box;\r\n let size = res.size;\r\n let min = box.min.clone();\r\n let max = box.max.clone();\r\n\r\n if (dist > Math.min(size.x, size.y) / 2 + 1e-2) return;\r\n\r\n if (equaln(size.x / 2, dist, 1e-5))\r\n {\r\n let x = (box.min.x + box.max.x) * 0.5;\r\n let sPt = new Vector3(x, box.min.y + dist);\r\n let ePt = new Vector3(x, box.max.y - dist);\r\n return new Polyline([{ pt: AsVector2(sPt), bul: 0 }, { pt: AsVector2(ePt), bul: 0 }]).ApplyMatrix(res.OCS);\r\n }\r\n else if (equaln(size.y / 2, dist, 1e-5))\r\n {\r\n let y = (box.min.y + box.max.y) * 0.5;\r\n let sPt = new Vector3(box.min.x + dist, y);\r\n let ePt = new Vector3(box.max.x - dist, y);\r\n return new Polyline([{ pt: AsVector2(sPt), bul: 0 }, { pt: AsVector2(ePt), bul: 0 }]).ApplyMatrix(res.OCS);\r\n }\r\n else\r\n {\r\n min.add(new Vector3(dist, dist));\r\n max.add(new Vector3(-dist, -dist));\r\n return new Polyline().RectangleFrom2Pt(min, max).ApplyMatrix(res.OCS);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, equalCurve, IsRect, MergeCurvelist } from \"../../Common/CurveUtils\";\r\nimport { LogEnable } from \"../../Common/Log\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board, IModeling } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { ExtureContourCurve } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { ShapeManager } from \"../../DatabaseServices/ShapeManager\";\r\nimport { userConfig } from \"../../Editor/UserConfig\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { Route } from \"../../Geometry/CurveMap\";\r\nimport { GetSideFaceMtx } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { AsVector2, equaln, isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../../Geometry/RegionParse\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { FaceDirection } from \"../../UI/Store/BoardInterface\";\r\nimport { BoolOpeartionType, isTargetCurInOrOnSourceCur } from \"../BoolOperateUtils\";\r\nimport { GetSealedBoardContour } from \"../CalcEdgeSealing\";\r\nimport { GetCurveToInDir, GetOffsetCurves, OptimizeToolPath } from \"./OptimizeToolPath\";\r\n\r\n/**\r\n *计算走刀工具类\r\n */\r\nexport class FeedingToolPath extends Singleton\r\n{\r\n /**\r\n * 处理形状,内偏移\r\n * @param shape 造型Shape\r\n * @param knifRadius 刀半径/偏移距离\r\n * @param [isOut=true] 是否是最外轮廓,如果是,洞需要外偏移一个刀半径,多段线偏移保留不闭合轮廓\r\n */\r\n private HandleShape(shape: Shape, knifRadius: number, isOut = true): Curve[]\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (isOut)\r\n outline = outline.Clone();\r\n\r\n\r\n let dir = GetCurveToInDir(outline);\r\n\r\n let offsetCus: Curve[] = [outline];\r\n //获得形状外孔轮廓\r\n let holes: Contour[] = [];\r\n /**用于判断孤岛是否与外轮廓相交 */\r\n let holeOffsetCus: Curve[] = [];\r\n\r\n for (let h of shape.Holes)\r\n {\r\n if (!isOut)\r\n holes.push(h.Clone());\r\n else\r\n {\r\n let dir = -GetCurveToInDir(h.Curve);\r\n let cus: Curve[];\r\n if (h.Curve instanceof Circle)\r\n cus = h.Curve.GetOffsetCurves(knifRadius * dir);\r\n else\r\n cus = h.Curve.GetFeedingToolPath(knifRadius * dir);\r\n\r\n holeOffsetCus.push(...h.Curve.GetOffsetCurves(knifRadius * dir).filter(c => c.IsClose));\r\n\r\n holes.push(...this.GetContours(cus as Polyline[], offsetCus));\r\n }\r\n }\r\n\r\n let offsetDist = 0;\r\n\r\n let rectInfo = IsRect(outline);\r\n\r\n while (true)\r\n {\r\n if ((!isOut || offsetDist >= knifRadius) && rectInfo.isRect)\r\n offsetDist += knifRadius * 2;\r\n else\r\n offsetDist += knifRadius;\r\n\r\n let retCus: Curve[] = [];\r\n\r\n let tempOffsetCus = GetOffsetCurves(outline, offsetDist * dir, rectInfo);\r\n retCus.push(...tempOffsetCus);\r\n\r\n //最后一次内偏移如果是矩形,需在偏移一个刀半径避免没切到中心\r\n if (retCus.length === 0 && rectInfo.isRect && offsetDist > knifRadius)\r\n {\r\n offsetDist -= knifRadius;\r\n retCus.push(...GetOffsetCurves(outline, offsetDist * dir, rectInfo));\r\n }\r\n\r\n if (retCus.length === 0) break;\r\n //是否和孤岛相交\r\n let isInt = false;\r\n for (let c of retCus)\r\n {\r\n if (holes.length > 0)\r\n {\r\n isInt = holes.some(h => h.Curve.IntersectWith(c, 0).length > 0 || h.CuInOutline(c));\r\n if (isInt) break;\r\n }\r\n if (isOut && offsetDist === knifRadius)\r\n c.TempData = { isOut: true };\r\n offsetCus.push(c);\r\n }\r\n if (isInt)\r\n {\r\n //洞形状管理器\r\n let holesMg = new ShapeManager();\r\n if (isOut)\r\n holes = Shape.mergeContours(holes, false); //#I1MUQD 正好擦边的孔不合并\r\n holesMg.AppendShapeList(holes.map(h => new Shape(h)));\r\n let shapeMg = new ShapeManager();\r\n let cons = this.GetContours(retCus as Polyline[], offsetCus);\r\n shapeMg.AppendShapeList(cons.map(c => new Shape(c)));\r\n shapeMg.BoolOper(holesMg, BoolOpeartionType.Subtract);\r\n for (let s of shapeMg.ShapeList)\r\n {\r\n if (isOut && tempOffsetCus.length > 1)\r\n s.Outline.Curve.TempData = { isOut: true };\r\n offsetCus.push(...this.HandleShape(s, knifRadius, false));\r\n }\r\n break;\r\n }\r\n }\r\n let vailHoles: Contour[] = [];\r\n\r\n for (let i = 0; i < holes.length; i++)\r\n {\r\n let h = holes[i];\r\n //如果加工洞外圈和最外轮廓相交,则去掉\r\n if (h.Curve.IntersectWith(outline, 0).length > 0)\r\n continue;\r\n let isVail = true;\r\n //若最外轮廓内偏移一个刀半径的曲线 和最内轮廓相交或者被包含,则去掉.且不与洞曲线相等\r\n if (isOut)\r\n {\r\n let outlineOffsetCus = outline.GetOffsetCurves(dir * knifRadius).filter(c => c.IsClose) as Curve[];\r\n let outlineCus = GetOffsetCurves(outline, dir * knifRadius).filter(c => c.IsClose) as Curve[];;\r\n let ho = holeOffsetCus[i];\r\n let maxArea = Math.max(...(outlineOffsetCus.map(c => c.Area)));\r\n for (let j = 0; j < outlineOffsetCus.length; j++)\r\n {\r\n let c = outlineOffsetCus[j];\r\n if (h.Curve.IntersectWith(outlineCus[j], 0).length > 0)\r\n {\r\n if (!(equalCurve(ho, c) || isTargetCurInOrOnSourceCur(c as Polyline, h.Curve)))\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n else if (isTargetCurInOrOnSourceCur(h.Curve, c as Polyline))\r\n {\r\n offsetCus.push(c);\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n else if (ho.Area > maxArea)\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n }\r\n if (isVail)\r\n vailHoles.push(h);\r\n }\r\n\r\n offsetCus.push(...vailHoles.map(h => h.Curve));\r\n return offsetCus;\r\n }\r\n /**用于测试走刀路径 */\r\n TestCalcPath(br: Board, isCd = false)\r\n {\r\n let modelings = br.BoardModeling;\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n modelings.push(...allModeling.modeling);\r\n if (isCd && userConfig.chaidanOption.useDefaultRad)\r\n modelings.forEach(m => m.knifeRadius = userConfig.chaidanOption.radius);\r\n if (isCd)\r\n arrayRemoveIf(modelings, m =>\r\n {\r\n let c = m.shape.Outline.Curve;\r\n if (c instanceof Circle && c.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n return true;\r\n return false;\r\n });\r\n\r\n return this.CalcPath(modelings, br);\r\n }\r\n /**\r\n * 计算走刀路径\r\n */\r\n CalcPath(modelings: IModeling[], br: Board): Curve[]\r\n {\r\n let cus: Curve[] = [];\r\n for (let m of modelings)\r\n {\r\n cus.push(...this.GetModelFeedPath(br, m));\r\n }\r\n return cus;\r\n }\r\n GetModelFeedPath(br: { Thickness: number, ContourCurve: ExtureContourCurve; }, m: IModeling): Curve[]\r\n {\r\n const brThickness = br.Thickness;\r\n let cus: Curve[] = [];\r\n let { shape, thickness, knifeRadius, addLen, addWidth, addDepth } = m;\r\n if (!knifeRadius) knifeRadius = 3;\r\n if (addDepth)\r\n thickness += addDepth;\r\n if (thickness < 1e-5) return cus;\r\n shape = shape.Clone();\r\n shape.Z0();\r\n this.GrooveAddSize(shape, addLen, addWidth);\r\n this.HandleThoughGroove(br.ContourCurve, shape, knifeRadius);\r\n\r\n //造型半径和刀半径相等,返回重合点的线\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle && equaln(outline.Radius, m.knifeRadius))\r\n return [new Polyline([{ pt: AsVector2(outline.Center), bul: 0 }, { pt: AsVector2(outline.Center), bul: 0 }])];\r\n\r\n if (thickness >= brThickness)\r\n {\r\n //通孔只切一刀\r\n let dir = GetCurveToInDir(outline);\r\n let paths: Curve[];\r\n if (outline instanceof Circle)\r\n outline = ConverCircleToPolyline(outline);\r\n\r\n paths = outline.GetFeedingToolPath(dir * knifeRadius);\r\n for (let path of paths)\r\n {\r\n if (dir < 0)\r\n path.Reverse();\r\n\r\n // 有些走刀会变成一条线,或者某些地方退化成线,这个时候这个判断是错误的\r\n // if (!path.IsClockWise)\r\n // throw \"程序错误:全深网洞加工数据并不为逆时针!\";\r\n }\r\n cus.push(...paths);\r\n }\r\n else\r\n {\r\n let offsetCus = this.HandleShape(shape, knifeRadius);\r\n if (offsetCus.length > 1)\r\n cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius));\r\n }\r\n return cus;\r\n }\r\n private GrooveAddSize(shape: Shape, addLen: number, addWidth: number)\r\n {\r\n shape.Outline.Curve.Position = shape.Outline.Curve.Position.setZ(0);\r\n //若是矩形,应用槽加长\r\n if (addLen > 0 || addWidth > 0)\r\n {\r\n let curveData = IsRect(shape.Outline.Curve);\r\n if (curveData.isRect)\r\n {\r\n let box = curveData.box;\r\n let size = curveData.size;\r\n if (size.x > size.y)\r\n {\r\n box.max.add(new Vector3(addLen / 2, addWidth / 2));\r\n box.min.add(new Vector3(-addLen / 2, -addWidth / 2));\r\n }\r\n else\r\n {\r\n box.max.add(new Vector3(addWidth / 2, addLen / 2));\r\n box.min.add(new Vector3(-addWidth / 2, -addLen / 2));\r\n }\r\n let pl = new Polyline().RectangleFrom2Pt(box.min, box.max).ApplyMatrix(curveData.OCS);\r\n shape.Outline = Contour.CreateContour(pl);\r\n }\r\n }\r\n }\r\n private GetContours(cus: (Polyline | Circle)[], retCus: Curve[])\r\n {\r\n let cons: Contour[] = [];\r\n for (let c of cus)\r\n {\r\n if (c.IsClose)\r\n {\r\n cons.push(Contour.CreateContour(c));\r\n }\r\n else\r\n {\r\n let expCus = c.Explode() as Curve[];\r\n let regParse = new RegionParse(expCus);\r\n\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array[]) =>\r\n {\r\n for (let routes of routeSet)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false);\r\n if (c && c.Area > 1e-3)\r\n cons.push(c);\r\n }\r\n };\r\n parseRoute(regParse.RegionsOutline);\r\n parseRoute(regParse.RegionsInternal);\r\n for (let c of expCus)\r\n {\r\n if (!regParse.GetCueveUsed(c))\r\n {\r\n retCus.push(c);\r\n }\r\n }\r\n\r\n }\r\n }\r\n return cons;\r\n }\r\n CheckModeling(br: Board)\r\n {\r\n let errorIndexs: number[] = [];\r\n let modelings = br.BoardModeling;\r\n for (let i = 0; i < modelings.length; i++)\r\n {\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n modelings[i].knifeRadius = userConfig.chaidanOption.radius;\r\n let cus = this.GetModelFeedPath(br, modelings[i]);\r\n if (cus.length === 0)\r\n errorIndexs.push(i);\r\n }\r\n return errorIndexs;\r\n }\r\n CheckCustomHole(br: Board)\r\n {\r\n let { modeling, sideModeling } = GetModelingFromCustomDrill(br);\r\n\r\n let errHoles: ExtrudeHole[] = [];\r\n\r\n for (let m of [...modeling, ...sideModeling])\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < userConfig.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (userConfig.chaidanOption.useDefaultRad)\r\n m.knifeRadius = userConfig.chaidanOption.radius;\r\n let cus = this.GetModelFeedPath(br, m);\r\n if (cus.length === 0)\r\n errHoles.push(m.originEn);\r\n }\r\n\r\n return errHoles;\r\n }\r\n HandleThoughGroove(brCon: ExtureContourCurve, shape: Shape, knifeRadius: number)\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle) return;\r\n\r\n let cus = outline.Explode();\r\n MergeCurvelist(cus);\r\n let hasChange = false;\r\n let curveBak: Curve;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n if (c instanceof Line)\r\n {\r\n let mp = (curveBak ?? c).Midpoint;\r\n curveBak = undefined;\r\n if (brCon.PtOnCurve(mp))\r\n {\r\n hasChange = true;\r\n let cs = c.GetOffsetCurves(knifeRadius);\r\n cus[i] = cs[0];\r\n let fline = cus[FixIndex(i - 1, cus.length)];\r\n\r\n let isAddLine = false;\r\n\r\n if (fline instanceof Line)\r\n {\r\n let intPts = fline.IntersectWith2(cs[0], 3);\r\n if (intPts.length === 0)\r\n {\r\n console.error(\"未知错误情况\");\r\n return;\r\n }\r\n\r\n if (intPts[0].thisParam >= 0 && intPts[0].argParam <= 1)\r\n {\r\n fline.EndPoint = intPts[0].pt;\r\n cs[0].StartPoint = intPts[0].pt;\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n\r\n if (isAddLine)\r\n {\r\n let newLine = new Line(fline.EndPoint, cs[0].StartPoint);\r\n if (i === 0)\r\n {\r\n cus.push(newLine);\r\n }\r\n else\r\n {\r\n cus.splice(i, 0, newLine);\r\n i++;\r\n }\r\n }\r\n\r\n let backLine = cus[FixIndex(i + 1, cus.length)];\r\n\r\n isAddLine = false;\r\n\r\n if (backLine instanceof Line)\r\n {\r\n let intPts = backLine.IntersectWith2(cs[0], 3);\r\n if (intPts.length === 0)\r\n {\r\n if (LogEnable.Display)\r\n console.error(\"未知错误情况\");\r\n return;\r\n }\r\n\r\n if (intPts[0].thisParam <= 1 && intPts[0].argParam >= 0)\r\n {\r\n curveBak = backLine.Clone();\r\n backLine.StartPoint = intPts[0].pt;\r\n cs[0].EndPoint = intPts[0].pt;\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n if (isAddLine)\r\n {\r\n let newLine = new Line(cs[0].EndPoint, backLine.StartPoint);\r\n if (i + 1 === cus.length)\r\n {\r\n cus.unshift(newLine);\r\n }\r\n else\r\n {\r\n cus.splice(i + 1, 0, newLine);\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (hasChange)\r\n {\r\n let con = Contour.CreateContour(Polyline.Combine(cus));\r\n if (con)\r\n shape.Outline = con;\r\n else\r\n console.error(\"错误\");\r\n }\r\n }\r\n}\r\nexport function GetModelingFromCustomDrill(br: Board)\r\n{\r\n let normal = br.Normal;\r\n let outline = GetSealedBoardContour(br, true) as Polyline;\r\n\r\n let modeling: (IModeling & { originEn: ExtrudeHole; })[] = [];\r\n let sideModeling: (IModeling & { originEn: ExtrudeHole; })[] = [];\r\n\r\n const holes: ExtrudeHole[] = [];\r\n let bbox = br.BoundingBoxInOCS;\r\n\r\n let holeBoxMap = new WeakMap();\r\n\r\n for (let [, idss] of br.DrillList)\r\n {\r\n for (let ids of idss)\r\n {\r\n for (let id of ids)\r\n {\r\n if (id?.Object && !id.Object.IsErase && id.Object instanceof ExtrudeHole && id.Object.isHole)\r\n {\r\n if (!(id.Object.ContourCurve instanceof Circle))\r\n {\r\n let en = id.Object as ExtrudeHole;\r\n let enBox = en.GetBoundingBoxInMtx(br.OCSInv);\r\n holeBoxMap.set(en, enBox);\r\n if (enBox.clone().intersect(bbox).isSolid(0.1))\r\n holes.push(id.Object);\r\n }\r\n }\r\n else break;\r\n }\r\n }\r\n }\r\n\r\n\r\n for (let en of holes)\r\n {\r\n let box = holeBoxMap.get(en);\r\n let max = box.max;\r\n let min = box.min;\r\n let dir: FaceDirection;\r\n let shape = en.Shape;\r\n let diff = br.OCSInv.multiply(en.OCS);\r\n shape.ApplyMatrix(diff);\r\n let thickness: number;\r\n if (isParallelTo(normal, en.Normal))\r\n {\r\n if (min.z > br.Thickness - 1e-6) continue;\r\n\r\n //在板件的世界,0.01的误差应该不能被看出来,所以我们允许0.01的容差(这样应该是没问题的)\r\n //也避免了一些二维转三维出现的缝隙排钻不能被拆解的问题\r\n if (max.z >= br.Thickness - 1e-2)//较大的容差(0.01)\r\n {\r\n dir = FaceDirection.Front;\r\n shape.Position = shape.Position.setZ(min.z);\r\n thickness = br.Thickness - min.z;\r\n }\r\n else if (min.z < 1e-2)//较大的容差\r\n {\r\n dir = FaceDirection.Back;\r\n thickness = max.z;\r\n }\r\n else\r\n continue;\r\n\r\n if (thickness > +1e-6 && isTargetCurInOrOnSourceCur(outline, shape.Outline.Curve.Clone().Z0()))\r\n {\r\n modeling.push({\r\n shape,\r\n thickness,\r\n dir,\r\n knifeRadius: en.KnifeRadius,\r\n addLen: 0,\r\n originEn: en,\r\n });\r\n }\r\n }\r\n else\r\n {\r\n if (min.z <= 0 || max.z >= br.Thickness) continue;\r\n let spt = en.Position.applyMatrix4(br.OCSInv).setZ(0);\r\n\r\n if (outline.PtOnCurve(spt)) continue;\r\n let line = new Line(spt, en.Position.add(en.Normal.multiplyScalar(en.Height)).applyMatrix4(br.OCSInv).setZ(0));\r\n let pt = outline.IntersectWith(line, 0)[0];\r\n if (!pt) continue;\r\n\r\n let index = Math.floor(outline.GetParamAtPoint(pt));\r\n let thickness = line.StartPoint.distanceTo(pt);\r\n\r\n let shape = en.Shape.ApplyMatrix(en.OCS).ApplyMatrix(br.OCSInv);\r\n let vec = line.GetFistDeriv(0).normalize().multiplyScalar(thickness);\r\n shape.Position = shape.Position.add(vec);\r\n\r\n let cu = outline.GetCurveAtIndex(index);\r\n\r\n shape.ApplyMatrix(new Matrix4().getInverse(GetSideFaceMtx(cu)));\r\n sideModeling.push({\r\n shape,\r\n thickness,\r\n dir: index,\r\n knifeRadius: en.KnifeRadius,\r\n addLen: 0,\r\n originEn: en,\r\n });\r\n }\r\n }\r\n\r\n return { modeling, sideModeling };\r\n}\r\n"],"names":["Shape","Plane","TLine","TShape","BufferGeometryUtils2","cache","FixIndex","Line"],"mappings":"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AAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAA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"} \ No newline at end of file diff --git a/package.json b/package.json index ac780e8..52dd7cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cadapi", - "version": "0.0.17", + "version": "0.0.18", "description": "", "main": "api.esm.js", "module": "api.esm.js", diff --git a/types/Add-on/Area.d.ts b/types/Add-on/Area.d.ts new file mode 100644 index 0000000..b1553f7 --- /dev/null +++ b/types/Add-on/Area.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../Editor/CommandMachine"; +export declare class Command_Area implements Command { + exec(): Promise; +} +//# sourceMappingURL=Area.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Area.d.ts.map b/types/Add-on/Area.d.ts.map new file mode 100644 index 0000000..9317029 --- /dev/null +++ b/types/Add-on/Area.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Area.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Area.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,qBAAa,YAAa,YAAW,OAAO;IAElC,IAAI;CA2Bb"} \ No newline at end of file diff --git a/types/Add-on/BoardBatchCurtail.d.ts.map b/types/Add-on/BoardBatchCurtail.d.ts.map index 27653e1..39d6bc7 100644 --- a/types/Add-on/BoardBatchCurtail.d.ts.map +++ b/types/Add-on/BoardBatchCurtail.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardBatchCurtail.d.ts","sourceRoot":"","sources":["../../../src/Add-on/BoardBatchCurtail.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AA0BnD,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAqJb"} \ No newline at end of file +{"version":3,"file":"BoardBatchCurtail.d.ts","sourceRoot":"","sources":["../../../src/Add-on/BoardBatchCurtail.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AA0BnD,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAsJb"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/CuttingByFace.d.ts.map b/types/Add-on/BoardCutting/CuttingByFace.d.ts.map index d6229e8..edb435d 100644 --- a/types/Add-on/BoardCutting/CuttingByFace.d.ts.map +++ b/types/Add-on/BoardCutting/CuttingByFace.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CuttingByFace.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/CuttingByFace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IAkJV,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;YAShD,cAAc;CAiB/B"} \ No newline at end of file +{"version":3,"file":"CuttingByFace.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/CuttingByFace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IAuJV,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;YAShD,cAAc;CAiB/B"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/ReferenceCutting.d.ts.map b/types/Add-on/BoardCutting/ReferenceCutting.d.ts.map index 84a718f..56c9211 100644 --- a/types/Add-on/BoardCutting/ReferenceCutting.d.ts.map +++ b/types/Add-on/BoardCutting/ReferenceCutting.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ReferenceCutting.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/ReferenceCutting.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAQtD,qBAAa,gBAAiB,YAAW,OAAO;IAEtC,IAAI;CAyJb"} \ No newline at end of file +{"version":3,"file":"ReferenceCutting.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/ReferenceCutting.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAStD,qBAAa,gBAAiB,YAAW,OAAO;IAEtC,IAAI;CA2Jb"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/ReferenceCuttingModal.d.ts b/types/Add-on/BoardCutting/ReferenceCuttingModal.d.ts index b6d0a6e..86f4aaf 100644 --- a/types/Add-on/BoardCutting/ReferenceCuttingModal.d.ts +++ b/types/Add-on/BoardCutting/ReferenceCuttingModal.d.ts @@ -19,7 +19,7 @@ export declare class ReferenceCuttingStore extends Singleton { Cancel(): void; OnOk(): void; _Return(state: number): void; - HasInvailValue(): boolean; + HasInvailValue(): string; } export declare class ReferenceCuttingModal extends React.Component<{ store: ReferenceCuttingStore; diff --git a/types/Add-on/BoardEditor/SerializeBoardData.d.ts b/types/Add-on/BoardEditor/SerializeBoardData.d.ts index f2d0bd5..9e4bca9 100644 --- a/types/Add-on/BoardEditor/SerializeBoardData.d.ts +++ b/types/Add-on/BoardEditor/SerializeBoardData.d.ts @@ -1,6 +1,11 @@ import { BoardProcessOption } from "../../UI/Store/BoardInterface"; import { CADFiler } from "../../DatabaseServices/CADFiler"; +import { I2DModeling, I3DModeling } from "../../DatabaseServices/Entity/Board"; /**序列化板件数据 */ export declare function serializeBoardData(file: CADFiler, processData: BoardProcessOption): void; export declare function deserializationBoardData(file: CADFiler, processData: BoardProcessOption, ver: number): void; +export declare function SerializeBoard2DModeingData(file: CADFiler, modelList: I2DModeling[]): void; +export declare function SerializeBoard3DModeingData(file: CADFiler, modelList: I3DModeling[]): void; +export declare function DeserializationBoard2DModeingData(file: CADFiler, data: I2DModeling[], ver: number): void; +export declare function DeserializationBoard3DModeingData(file: CADFiler, data: I3DModeling[], ver: number): void; //# sourceMappingURL=SerializeBoardData.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardEditor/SerializeBoardData.d.ts.map b/types/Add-on/BoardEditor/SerializeBoardData.d.ts.map index dec88f8..5668a22 100644 --- a/types/Add-on/BoardEditor/SerializeBoardData.d.ts.map +++ b/types/Add-on/BoardEditor/SerializeBoardData.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SerializeBoardData.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardEditor/SerializeBoardData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,aAAa;AACb,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,QAoCjF;AAGD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,QAkDpG"} \ No newline at end of file +{"version":3,"file":"SerializeBoardData.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardEditor/SerializeBoardData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAa,MAAM,qCAAqC,CAAC;AAI1F,aAAa;AACb,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,QAoCjF;AAGD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,QAkDpG;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAkBnF;AACD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAiBnF;AAGD,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,QA8BjG;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,QAwBjG"} \ No newline at end of file diff --git a/types/Add-on/BoardFindModify.d.ts b/types/Add-on/BoardFindModify.d.ts index 319ab61..fe4163b 100644 --- a/types/Add-on/BoardFindModify.d.ts +++ b/types/Add-on/BoardFindModify.d.ts @@ -1,5 +1,6 @@ import { Command } from "../Editor/CommandMachine"; export declare class BoardFindModify implements Command { + private isModifyHwMatrial; exec(): Promise; private GetBoards; private PutSelectList; diff --git a/types/Add-on/BoardFindModify.d.ts.map b/types/Add-on/BoardFindModify.d.ts.map index a147b18..4fdc50b 100644 --- a/types/Add-on/BoardFindModify.d.ts.map +++ b/types/Add-on/BoardFindModify.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardFindModify.d.ts","sourceRoot":"","sources":["../../../src/Add-on/BoardFindModify.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAWnD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;YAqCI,SAAS;IAYvB,OAAO,CAAC,aAAa;YAQP,OAAO;IA4CrB,OAAO,CAAC,QAAQ;IAwJhB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,cAAc;YAOR,SAAS;IAYvB,OAAO,CAAC,QAAQ;YAoJF,cAAc;YAKd,cAAc;YAKd,iBAAiB;YASjB,cAAc;YAiDd,iCAAiC;YAkBjC,cAAc;IA2B5B,OAAO,CAAC,cAAc;CAqCzB"} \ No newline at end of file +{"version":3,"file":"BoardFindModify.d.ts","sourceRoot":"","sources":["../../../src/Add-on/BoardFindModify.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAWnD,qBAAa,eAAgB,YAAW,OAAO;IAE3C,OAAO,CAAC,iBAAiB,CAAS;IAC5B,IAAI;YAqCI,SAAS;IAmBvB,OAAO,CAAC,aAAa;YAQP,OAAO;IA4CrB,OAAO,CAAC,QAAQ;IAwJhB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,cAAc;YAOR,SAAS;IAYvB,OAAO,CAAC,QAAQ;YA0JF,cAAc;YAKd,cAAc;YAKd,iBAAiB;YASjB,cAAc;YAiDd,iCAAiC;YAkBjC,cAAc;IA2B5B,OAAO,CAAC,cAAc;CAqCzB"} \ No newline at end of file diff --git a/types/Add-on/CommandFeeding.d.ts b/types/Add-on/CommandFeeding.d.ts index ae04a16..ce87b8f 100644 --- a/types/Add-on/CommandFeeding.d.ts +++ b/types/Add-on/CommandFeeding.d.ts @@ -4,5 +4,6 @@ export declare class FeedingCommand implements Command { private DrawHole; private TestModeling; private DrawOriginModeling; + private DateText; } //# sourceMappingURL=CommandFeeding.d.ts.map \ No newline at end of file diff --git a/types/Add-on/CommandFeeding.d.ts.map b/types/Add-on/CommandFeeding.d.ts.map index d6f14e1..85d717c 100644 --- a/types/Add-on/CommandFeeding.d.ts.map +++ b/types/Add-on/CommandFeeding.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandFeeding.d.ts","sourceRoot":"","sources":["../../../src/Add-on/CommandFeeding.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,qBAAa,cAAe,YAAW,OAAO;IAEpC,IAAI;IAsEV,OAAO,CAAC,QAAQ;IA0BhB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,kBAAkB;CAqB7B"} \ No newline at end of file +{"version":3,"file":"CommandFeeding.d.ts","sourceRoot":"","sources":["../../../src/Add-on/CommandFeeding.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,qBAAa,cAAe,YAAW,OAAO;IAEpC,IAAI;IA0EV,OAAO,CAAC,QAAQ;IA0BhB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,QAAQ;CAOnB"} \ No newline at end of file diff --git a/types/Add-on/DXFLoad.d.ts b/types/Add-on/DXFLoad.d.ts index 8a31417..d9ee3fc 100644 --- a/types/Add-on/DXFLoad.d.ts +++ b/types/Add-on/DXFLoad.d.ts @@ -1,4 +1,6 @@ export declare class Command_DXFImport { exec(): Promise; + private drawAlignPoint; + private DrawRadDiaDim; } //# sourceMappingURL=DXFLoad.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DXFLoad.d.ts.map b/types/Add-on/DXFLoad.d.ts.map index e920015..f0e94e0 100644 --- a/types/Add-on/DXFLoad.d.ts.map +++ b/types/Add-on/DXFLoad.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DXFLoad.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DXFLoad.ts"],"names":[],"mappings":"AAWA,qBAAa,iBAAiB;IAEpB,IAAI;CAyDb"} \ No newline at end of file +{"version":3,"file":"DXFLoad.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DXFLoad.ts"],"names":[],"mappings":"AAoBA,qBAAa,iBAAiB;IAEpB,IAAI;IAuHV,OAAO,CAAC,cAAc;IA4CtB,OAAO,CAAC,aAAa;CAaxB"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorDrawerTool.d.ts.map b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorDrawerTool.d.ts.map index bef7fa0..35fdd28 100644 --- a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorDrawerTool.d.ts.map +++ b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorDrawerTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawDoorDrawerTool.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorDrawerTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAsC,MAAM,kCAAkC,CAAC;AAC1G,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAgE,MAAM,iCAAiC,CAAC;AAK7I,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAOnE,qBAAa,YAAY;IAcjB,SAAS,CAAC,MAAM,EAAE,iBAAiB;IACnC,SAAS,CAAC,UAAU,EAAE,WAAW;IACjC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE;IAdpC,YAAY;IACZ,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IAE9D,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAM;IAC9C,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAM;IAC9C,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAM;IACvC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAM;IACvC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC7C,gBAAgB;IAChB,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAa;IAC1D,OAAO,CAAC,QAAQ,CAA4B;gBAE9B,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,WAAW,EACvB,SAAS,EAAE,SAAS,EAAE;IAIpC,OAAO,CAAC,aAAa;cAIL,IAAI;IA0Fd,IAAI;IAGV,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,MAAM;IAU3G,SAAS,CAAC,eAAe;IAiDzB,OAAO,CAAC,gBAAgB;IAUxB,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc;IA0DjE,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc;IA+H5D,SAAS,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE;IAgEpD,OAAO,CAAC,YAAY;IAapB,iBAAiB;IAgBjB,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS;IAsDrC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS;IAkB/D,OAAO,CAAC,eAAe;CA+B1B"} \ No newline at end of file +{"version":3,"file":"DrawDoorDrawerTool.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorDrawerTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAsC,MAAM,kCAAkC,CAAC;AAC1G,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAgE,MAAM,iCAAiC,CAAC;AAK7I,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,qBAAa,YAAY;IAcjB,SAAS,CAAC,MAAM,EAAE,iBAAiB;IACnC,SAAS,CAAC,UAAU,EAAE,WAAW;IACjC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE;IAdpC,YAAY;IACZ,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAa;IAE9D,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAM;IAC9C,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAM;IAC9C,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAM;IACvC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAM;IACvC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC7C,gBAAgB;IAChB,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAa;IAC1D,OAAO,CAAC,QAAQ,CAA4B;gBAE9B,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,WAAW,EACvB,SAAS,EAAE,SAAS,EAAE;IAIpC,OAAO,CAAC,aAAa;cAIL,IAAI;IA0Fd,IAAI;IAGV,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,MAAM;IAU3G,SAAS,CAAC,eAAe;IAiDzB,OAAO,CAAC,gBAAgB;IAUxB,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc;IA0DjE,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc;IA+H5D,SAAS,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE;IAgFpD,OAAO,CAAC,YAAY;IAapB,iBAAiB;IAgBjB,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS;IAsDrC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS;IAkB/D,OAAO,CAAC,eAAe;CA+B1B"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts b/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts index bd6be83..8e7b37f 100644 --- a/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts +++ b/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts @@ -1,6 +1,7 @@ import { Matrix4 } from "three"; import { Board } from "../../DatabaseServices/Entity/Board"; import { Curve } from "../../DatabaseServices/Entity/Curve"; +import { Entity } from "../../DatabaseServices/Entity/Entity"; import { ExtrudeSolid, ExtureContour } from "../../DatabaseServices/Entity/Extrude"; import { Region } from "../../DatabaseServices/Entity/Region"; /** @@ -16,7 +17,7 @@ export declare function BoardApplyContour(contour: ExtureContour, brs: Board[], */ export declare function SelectExtrudeContour(selectInside?: boolean, useExtrude?: boolean): Promise<{ contour?: ExtureContour; - gourp?: Curve[][]; + group?: Curve[][]; useCurves?: (Curve | Region)[]; }>; /** @@ -24,4 +25,7 @@ export declare function SelectExtrudeContour(selectInside?: boolean, useExtrude? * @returns 如果轮廓是曲线,那么将返回曲线转换到WCS的矩阵 */ export declare function ExtrudeApplyContour(ext: ExtrudeSolid, contour: ExtureContour): Matrix4 | undefined; +export declare function SelectExtrudeContours(): Promise<{ + useCurvesMap?: Map; +}>; //# sourceMappingURL=DrawSpecialShapeBoardTool.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts.map b/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts.map index 5fcd3ea..99172ed 100644 --- a/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts.map +++ b/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawSpecialShapeBoardTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawSpecialShapeBoardTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAKzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEpF,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAS9D;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,oBAuB/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,QAe1F;AAGD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,UAAQ,EAAE,UAAU,UAAQ,GAC7E,OAAO,CAAC;IACN,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;CAClC,CAAC,CAwFL;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,GAAG,SAAS,CAkDlG"} \ No newline at end of file +{"version":3,"file":"DrawSpecialShapeBoardTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawSpecialShapeBoardTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAU9D;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,oBAuB/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,QAe1F;AAkCD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,UAAQ,EAAE,UAAU,UAAQ,GAC7E,OAAO,CAAC;IACN,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;CAClC,CAAC,CAgEL;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,GAAG,SAAS,CAkDlG;AAGD,wBAAsB,qBAAqB,IACrC,OAAO,CAAC;IACN,YAAY,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;CAC/C,CAAC,CAsEL"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawSpecialShapedBoard.d.ts.map b/types/Add-on/DrawBoard/DrawSpecialShapedBoard.d.ts.map index 1543563..39904a8 100644 --- a/types/Add-on/DrawBoard/DrawSpecialShapedBoard.d.ts.map +++ b/types/Add-on/DrawBoard/DrawSpecialShapedBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawSpecialShapedBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawSpecialShapedBoard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAQtD,qBAAa,sBAAuB,YAAW,OAAO;IAElD,GAAG,eAAsB;IACnB,IAAI;CAmEb"} \ No newline at end of file +{"version":3,"file":"DrawSpecialShapedBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawSpecialShapedBoard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAStD,qBAAa,sBAAuB,YAAW,OAAO;IAElD,GAAG,eAAsB;IACnB,IAAI;CA0Eb"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/FixIntersectSelfContour.d.ts b/types/Add-on/DrawBoard/FixIntersectSelfContour.d.ts new file mode 100644 index 0000000..fdafadd --- /dev/null +++ b/types/Add-on/DrawBoard/FixIntersectSelfContour.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../../Editor/CommandMachine"; +export declare class FixIntersectSelfContour implements Command { + exec(): Promise; +} +//# sourceMappingURL=FixIntersectSelfContour.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawBoard/FixIntersectSelfContour.d.ts.map b/types/Add-on/DrawBoard/FixIntersectSelfContour.d.ts.map new file mode 100644 index 0000000..e0df5a8 --- /dev/null +++ b/types/Add-on/DrawBoard/FixIntersectSelfContour.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"FixIntersectSelfContour.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/FixIntersectSelfContour.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAItD,qBAAa,uBAAwB,YAAW,OAAO;IAE7C,IAAI;CA2Bb"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/ParseHinge.d.ts b/types/Add-on/DrawBoard/ParseHinge.d.ts new file mode 100644 index 0000000..69ecc1d --- /dev/null +++ b/types/Add-on/DrawBoard/ParseHinge.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../../Editor/CommandMachine"; +export declare class ParseHinge implements Command { + exec(): Promise; +} +//# sourceMappingURL=ParseHinge.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawBoard/ParseHinge.d.ts.map b/types/Add-on/DrawBoard/ParseHinge.d.ts.map new file mode 100644 index 0000000..b854969 --- /dev/null +++ b/types/Add-on/DrawBoard/ParseHinge.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ParseHinge.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/ParseHinge.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAItD,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;CAsCb"} \ No newline at end of file diff --git a/types/Add-on/DrawDrilling/DrawDrillingTool.d.ts.map b/types/Add-on/DrawDrilling/DrawDrillingTool.d.ts.map index a96ce93..de50bf5 100644 --- a/types/Add-on/DrawDrilling/DrawDrillingTool.d.ts.map +++ b/types/Add-on/DrawDrilling/DrawDrillingTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawDrillingTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/DrawDrillingTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAW,MAAM,OAAO,CAAC;AAQ/C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAQnD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAK5D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAO7C,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAK5E,qBAAa,gBAAiB,SAAQ,SAAS;IAE3C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,MAAM,CAAO;IACrB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,SAAS,CAAc;IAE/B,OAAO,CAAC,YAAY,CAA4C;IAEhE,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,cAAc,CAA0C;IACpD,OAAO,CAAC,cAAc,CAAc;;IAWhD,iBAAiB;IACjB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,YAAY;IA2DpB,IAAI,QAAQ,WAMX;IACD,IAAI,SAAS,YAGZ;IACD,IAAI,SAAS;;;;MAOZ;IAED,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,UAAU;IAsElB,aAAa,CAAC,cAAc,EAAE,cAAc;IAyC5C,OAAO,CAAC,aAAa;IA4CrB,OAAO,CAAC,UAAU;IAyDlB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,QAAQ;IAkChB,OAAO,CAAC,UAAU;IA2GlB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,cAAc;IA0CtB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,iBAAiB;IAwDzB,OAAO,CAAC,mBAAmB;IA4E3B,OAAO,CAAC,aAAa;IAoBrB,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE;IAInB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO;IAa7C,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;IAsCxF,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,iBAAiB;IAczB,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE;YAehB,cAAc;IA8E5B,WAAW;IACL,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YA8BxD,eAAe;IAwB7B,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO;IA4BlC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE;IAsGxB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;CAmBlC"} \ No newline at end of file +{"version":3,"file":"DrawDrillingTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/DrawDrillingTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAW,MAAM,OAAO,CAAC;AAQ/C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAQnD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAK5D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAO7C,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAK5E,qBAAa,gBAAiB,SAAQ,SAAS;IAE3C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,MAAM,CAAO;IACrB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,SAAS,CAAc;IAE/B,OAAO,CAAC,YAAY,CAA4C;IAEhE,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,cAAc,CAA0C;IACpD,OAAO,CAAC,cAAc,CAAc;;IAWhD,iBAAiB;IACjB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,YAAY;IA2DpB,IAAI,QAAQ,WAMX;IACD,IAAI,SAAS,YAGZ;IACD,IAAI,SAAS;;;;MAOZ;IAED,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,UAAU;IA4ElB,aAAa,CAAC,cAAc,EAAE,cAAc;IAyC5C,OAAO,CAAC,aAAa;IA4CrB,OAAO,CAAC,UAAU;IAyDlB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,QAAQ;IAkChB,OAAO,CAAC,UAAU;IA2GlB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,cAAc;IA0CtB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,iBAAiB;IAwDzB,OAAO,CAAC,mBAAmB;IA4E3B,OAAO,CAAC,aAAa;IAoBrB,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE;IAInB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO;IAa7C,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;IAsCxF,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,iBAAiB;IAczB,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE;YAehB,cAAc;IA8E5B,WAAW;IACL,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YA8BxD,eAAe;IAwB7B,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO;IA4BlC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE;IAsGxB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;CAmBlC"} \ No newline at end of file diff --git a/types/Add-on/DrawDrilling/HoleUtils.d.ts b/types/Add-on/DrawDrilling/HoleUtils.d.ts index 55ad855..9deb8db 100644 --- a/types/Add-on/DrawDrilling/HoleUtils.d.ts +++ b/types/Add-on/DrawDrilling/HoleUtils.d.ts @@ -3,6 +3,7 @@ import { CylinderHole } from "../../DatabaseServices/3DSolid/CylinderHole"; import { Board } from "../../DatabaseServices/Entity/Board"; import { Hole } from "../../DatabaseServices/3DSolid/Hole"; import { ExtrudeHole } from "../../DatabaseServices/3DSolid/ExtrudeHole"; +export declare const SCALAR = 0.1; export declare function CyHoleInBoard(cys: CylinderHole[], br: Board, ocs: Matrix4): boolean; export interface IRectHoleOption { up: string; diff --git a/types/Add-on/DrawDrilling/HoleUtils.d.ts.map b/types/Add-on/DrawDrilling/HoleUtils.d.ts.map index c6862f1..13ceaf9 100644 --- a/types/Add-on/DrawDrilling/HoleUtils.d.ts.map +++ b/types/Add-on/DrawDrilling/HoleUtils.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HoleUtils.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/HoleUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAW,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAiB,MAAM,6CAA6C,CAAC;AAI1F,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAI5D,OAAO,EAAE,IAAI,EAAE,MAAM,qCAAqC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAKzE,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,WA4HzE;AAED,MAAM,WAAW,eAAe;IAE5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAKhC,CAAC;AAEF,cAAc;AACd,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,QAmBzE;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,WAIjF;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,WAYlE;AAED,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,QAuBjE"} \ No newline at end of file +{"version":3,"file":"HoleUtils.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/HoleUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAW,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAiB,MAAM,6CAA6C,CAAC;AAI1F,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAI5D,OAAO,EAAE,IAAI,EAAE,MAAM,qCAAqC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAGzE,eAAO,MAAM,MAAM,MAAM,CAAC;AAE1B,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,WA4HzE;AAED,MAAM,WAAW,eAAe;IAE5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAKhC,CAAC;AAEF,cAAc;AACd,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,QAmBzE;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,WAIjF;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,WAYlE;AAED,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,QAyBjE"} \ No newline at end of file diff --git a/types/Add-on/Erp/ErpCommands.d.ts.map b/types/Add-on/Erp/ErpCommands.d.ts.map index f776b4d..957e4ce 100644 --- a/types/Add-on/Erp/ErpCommands.d.ts.map +++ b/types/Add-on/Erp/ErpCommands.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ErpCommands.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ErpCommands.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AActD,qBAAa,OAAQ,YAAW,OAAO;IAE7B,IAAI;CAIb;AACD,qBAAa,SAAU,YAAW,OAAO;IAE/B,IAAI;CAIb;AACD,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;CAYb;AACD,qBAAa,SAAU,YAAW,OAAO;IAE/B,IAAI;CAIb;AAyKD,wBAAsB,kBAAkB;;;GAoCvC"} \ No newline at end of file +{"version":3,"file":"ErpCommands.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ErpCommands.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAiBtD,qBAAa,OAAQ,YAAW,OAAO;IAE7B,IAAI;CAIb;AACD,qBAAa,SAAU,YAAW,OAAO;IAE/B,IAAI;CAIb;AACD,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;CAYb;AACD,qBAAa,SAAU,YAAW,OAAO;IAE/B,IAAI;CAIb;AAsMD,wBAAsB,kBAAkB;;;GA8CvC"} \ No newline at end of file diff --git a/types/Add-on/Erp/Models/CadBlock.d.ts b/types/Add-on/Erp/Models/CadBlock.d.ts index b8e2730..f8affb4 100644 --- a/types/Add-on/Erp/Models/CadBlock.d.ts +++ b/types/Add-on/Erp/Models/CadBlock.d.ts @@ -51,6 +51,7 @@ export declare class OrderDataBlock { ObjIDs: BlockObjIds; KaiLiaoWidth: number; KaiLiaoHeight: number; + RemarkExtra: string; } export declare enum CadType { Cad = 1, diff --git a/types/Add-on/Erp/Models/CadBlock.d.ts.map b/types/Add-on/Erp/Models/CadBlock.d.ts.map index ec7a4e8..635a26c 100644 --- a/types/Add-on/Erp/Models/CadBlock.d.ts.map +++ b/types/Add-on/Erp/Models/CadBlock.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CadBlock.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/Models/CadBlock.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IAEvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAK;IACvB,WAAW,EAAE,MAAM,CAAK;IACxB,QAAQ,EAAE,MAAM,CAAK;IACrB,UAAU,EAAE,MAAM,CAAK;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,cAAc,EAAE,MAAM,CAAC;IAGvB,UAAU,EAAE,MAAM,CAAC;IAGnB,QAAQ,EAAE,MAAM,CAAC;IAGjB,OAAO,EAAE,MAAM,CAAC;IAGhB,WAAW,EAAE,MAAM,CAAC;IAGpB,YAAY,EAAE,MAAM,CAAC;IAGrB,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,MAAM,CAAC;IAGjB,SAAS,EAAE,MAAM,CAAC;IAGlB,QAAQ,EAAE,MAAM,CAAC;IAEjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACzB;AACD,oBAAY,OAAO;IAEf,GAAG,IAAI;IACP,MAAM,IAAI;CACb;AACD,qBAAa,WAAW;IAEpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,oBAAY,SAAS;IAEjB,KAAK,IAAI;IACT,QAAQ,IAAI;IACZ,MAAM,IAAI;CACb;AACD,oBAAY,QAAQ;IAEhB,EAAE,IAAI;IACN,GAAG,IAAI;IACP,EAAE,IAAI;CACT;AACD,oBAAY,QAAQ;IAEhB,EAAE,IAAI;IACN,EAAE,IAAI;IACN,EAAE,IAAI;CACT;AACD,oBAAY,YAAY;IAEpB,EAAE,IAAI;IACN,EAAE,IAAI;IACN,EAAE,IAAI;CACT;AACD,oBAAY,WAAW;IAEnB,EAAE,IAAI;IACN,EAAE,IAAI;IACN,GAAG,IAAI;CACV"} \ No newline at end of file +{"version":3,"file":"CadBlock.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/Models/CadBlock.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IAEvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAK;IACvB,WAAW,EAAE,MAAM,CAAK;IACxB,QAAQ,EAAE,MAAM,CAAK;IACrB,UAAU,EAAE,MAAM,CAAK;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,cAAc,EAAE,MAAM,CAAC;IAGvB,UAAU,EAAE,MAAM,CAAC;IAGnB,QAAQ,EAAE,MAAM,CAAC;IAGjB,OAAO,EAAE,MAAM,CAAC;IAGhB,WAAW,EAAE,MAAM,CAAC;IAGpB,YAAY,EAAE,MAAM,CAAC;IAGrB,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,MAAM,CAAC;IAGjB,SAAS,EAAE,MAAM,CAAC;IAGlB,QAAQ,EAAE,MAAM,CAAC;IAEjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACvB;AACD,oBAAY,OAAO;IAEf,GAAG,IAAI;IACP,MAAM,IAAI;CACb;AACD,qBAAa,WAAW;IAEpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,oBAAY,SAAS;IAEjB,KAAK,IAAI;IACT,QAAQ,IAAI;IACZ,MAAM,IAAI;CACb;AACD,oBAAY,QAAQ;IAEhB,EAAE,IAAI;IACN,GAAG,IAAI;IACP,EAAE,IAAI;CACT;AACD,oBAAY,QAAQ;IAEhB,EAAE,IAAI;IACN,EAAE,IAAI;IACN,EAAE,IAAI;CACT;AACD,oBAAY,YAAY;IAEpB,EAAE,IAAI;IACN,EAAE,IAAI;IACN,EAAE,IAAI;CACT;AACD,oBAAY,WAAW;IAEnB,EAAE,IAAI;IACN,EAAE,IAAI;IACN,GAAG,IAAI;CACV"} \ No newline at end of file diff --git a/types/Add-on/Erp/Models/CadBlockInfo.d.ts b/types/Add-on/Erp/Models/CadBlockInfo.d.ts index f986f03..947d01f 100644 --- a/types/Add-on/Erp/Models/CadBlockInfo.d.ts +++ b/types/Add-on/Erp/Models/CadBlockInfo.d.ts @@ -42,6 +42,15 @@ export declare class CadBlockModel { KnifeRadius: number; Depth: number; PointList: CadBlockModelPoint[]; + OffSetList: ModelOffSetData[]; +} +export declare class ModelOffSetData { + Name: string; + Face: FaceType; + Value: number; + Radius: number; + Deep: number; + Angle: number; } export declare class CadBlockModelPoint { LineID: number; diff --git a/types/Add-on/Erp/Models/CadBlockInfo.d.ts.map b/types/Add-on/Erp/Models/CadBlockInfo.d.ts.map index ee31fb0..1e95d80 100644 --- a/types/Add-on/Erp/Models/CadBlockInfo.d.ts.map +++ b/types/Add-on/Erp/Models/CadBlockInfo.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CadBlockInfo.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/Models/CadBlockInfo.ts"],"names":[],"mappings":"AAEA,qBAAa,aAAa;IAEtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AACD,qBAAa,aAAa;IAEtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,oBAAY,QAAQ;IAAG,EAAE,IAAI;IAAE,EAAE,KAAK;IAAE,EAAE,KAAK;IAAE,IAAI,KAAK;IAAE,GAAG,KAAK;IAAE,EAAE,KAAK;IAAE,GAAG,KAAK;IAAE,GAAG,MAAM;CAAE;AACpG,oBAAY,QAAQ;IAAG,EAAE,IAAI;IAAE,EAAE,IAAI;IAAE,EAAE,IAAI;CAAE;AAG/C,qBAAa,aAAa;IAEtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,kBAAkB,EAAE,CAAC;CACnC;AAED,qBAAa,kBAAkB;IAE3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB;AACD,qBAAa,YAAY;IAErB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AACD,qBAAa,YAAY;IAErB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,cAAc,EAAE,aAAa,EAAE,CAAC;CACnC"} \ No newline at end of file +{"version":3,"file":"CadBlockInfo.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/Models/CadBlockInfo.ts"],"names":[],"mappings":"AAEA,qBAAa,aAAa;IAEtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AACD,qBAAa,aAAa;IAEtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,oBAAY,QAAQ;IAAG,EAAE,IAAI;IAAE,EAAE,KAAK;IAAE,EAAE,KAAK;IAAE,IAAI,KAAK;IAAE,GAAG,KAAK;IAAE,EAAE,KAAK;IAAE,GAAG,KAAK;IAAE,GAAG,MAAM;CAAE;AACpG,oBAAY,QAAQ;IAAG,EAAE,IAAI;IAAE,EAAE,IAAI;IAAE,EAAE,IAAI;CAAE;AAG/C,qBAAa,aAAa;IAEtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,UAAU,EAAE,eAAe,EAAE,CAAC;CACjC;AACD,qBAAa,eAAe;IAExB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,kBAAkB;IAE3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB;AACD,qBAAa,YAAY;IAErB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AACD,qBAAa,YAAY;IAErB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,cAAc,EAAE,aAAa,EAAE,CAAC;CACnC"} \ No newline at end of file diff --git a/types/Add-on/Erp/ParseData.d.ts b/types/Add-on/Erp/ParseData.d.ts index 3a0b445..cdb3adf 100644 --- a/types/Add-on/Erp/ParseData.d.ts +++ b/types/Add-on/Erp/ParseData.d.ts @@ -1,10 +1,10 @@ import { GangDrillType } from "../../DatabaseServices/3DSolid/CylinderHole"; import { Board } from "../../DatabaseServices/Entity/Board"; import { ExtrudeSolid } from "../../DatabaseServices/Entity/Extrude"; -import { IContourData, IDrillingOption, IModelingData, ISpliteOrderData, IHardwareType, ISealingData } from '../../Production/Product'; -import { LinesType } from "../../UI/Store/BoardInterface"; +import { IContourData, IDrillingOption, IModelingData, ISpliteOrderData, IHardwareType, ISealingData, I2DModeling, I3DModeling, I3DContourData } from '../../Production/Product'; +import { FaceDirection, LinesType } from "../../UI/Store/BoardInterface"; import { OrderDataBlock, WaveType } from "./Models/CadBlock"; -import { BasePosition, CadBlockHoles, CadBlockInfo, CadBlockModel, CadBlockModelPoint, CadBlockPoint, FaceType, HoleType } from "./Models/CadBlockInfo"; +import { BasePosition, CadBlockHoles, CadBlockInfo, CadBlockModel, CadBlockModelPoint, CadBlockPoint, FaceType, HoleType, ModelOffSetData } from "./Models/CadBlockInfo"; import { CadBlockBasePosition, CadBlockDrillings, CADDbBoard } from "./Models/CadModel"; import { OrderDataObject, ProcessGroupObject } from "./Models/CadObject"; import { Vec2 } from "three"; @@ -25,25 +25,30 @@ export declare class ErpParseData { GetPointDetail(points: IContourData, seals: ISealingData[]): CadBlockPoint[]; GetModelDetail(DataArray: IModelingData[], frontOrSide: FrontOrSide, isRect?: Boolean, add?: number): CadBlockModel[]; GetModelPointDetail(feeding: IContourData, lineID: number, deep: number): CadBlockModelPoint[]; + GetOffSetModelDetail(modeling: I2DModeling[], modelID: number): CadBlockModel[]; + GetModelOffSetData(md: I2DModeling): ModelOffSetData[]; + Get3DModelDetail(modeling: I3DModeling[], modelID: number): CadBlockModel[]; + Get3DModelPointDetail(paths: I3DContourData, lineID: number): CadBlockModelPoint[]; GetHolesDetail(holes: IDrillingOption[], frontOrSide: FrontOrSide, isRect?: Boolean, add?: number): CadBlockHoles[]; GetHoleType(hole: GangDrillType): HoleType; GetHoleFaceType(frontOrSide: FrontOrSide, hole: IDrillingOption): FaceType | number; - GetModelFaceType(frontOrSide: FrontOrSide, model: IModelingData): FaceType | number; + GetModelFaceType(frontOrSide: FrontOrSide, dir: FaceDirection | number): FaceType | number; GetBlockPointInfo(board: ISpliteOrderData): CadBlockInfo; /** * 板件的模型信息,用于CADViewer显示板件 */ GetModelData(br: ExtrudeSolid): CADDbBoard; GetFaceAdd(point: Vec2): number; - GetRemark(remarks: [string, string][]): string[]; + GetRemark(remarks: [string, string][], filter: (block: [string, string]) => boolean): [string, string][]; GetAllDrillsObjects(boardList: Board[]): OrderDataObject[]; GetDrillObjects(drills: ICountType[], RoomName: string, BoxName: string): OrderDataObject[]; GetOrderTopLines(hardWares: IHardwareType[]): OrderDataObject[]; GetOrderSealing(boardList: Board[]): OrderDataObject[]; GetPointsArray(points: CadBlockPoint[]): number[][]; GetHolesArray(holes: CadBlockHoles[]): (string | number)[][]; - GetModelsArray(models: CadBlockModel[]): (string | number | number[][])[][]; + GetModelsArray(models: CadBlockModel[]): (string | number | (string | number)[][])[][]; GetModelPointsArray(points: CadBlockModelPoint[]): number[][]; + GetModelOffSetsArray(offsets: ModelOffSetData[]): (string | number)[][]; GetBasePointArray(info: BasePosition): [string, string, string, string]; GetPointInfoArray(info: CadBlockInfo): [object, object, object, object, object, object]; GetBasePositionArray(basePosition: CadBlockBasePosition): [number, number, number]; diff --git a/types/Add-on/Erp/ParseData.d.ts.map b/types/Add-on/Erp/ParseData.d.ts.map index e882e95..33a0547 100644 --- a/types/Add-on/Erp/ParseData.d.ts.map +++ b/types/Add-on/Erp/ParseData.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseData.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ParseData.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ParseData.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ParseData.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Add-on/Export2View.d.ts.map b/types/Add-on/Export2View.d.ts.map index f515106..e63fd3b 100644 --- a/types/Add-on/Export2View.d.ts.map +++ b/types/Add-on/Export2View.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Export2View.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Export2View.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CA2Bb"} \ No newline at end of file +{"version":3,"file":"Export2View.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Export2View.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CA8Bb"} \ No newline at end of file diff --git a/types/Add-on/ExportData.d.ts.map b/types/Add-on/ExportData.d.ts.map index 9146221..866a260 100644 --- a/types/Add-on/ExportData.d.ts.map +++ b/types/Add-on/ExportData.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ExportData.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ExportData.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAS3D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AASnD,qBAAa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;CAAE,EAAE,EAAE,CAAC;IACtE,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,KAAK;IAIb,iBAAiB;IAajB,MAAM;CAiBT;AAED,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CA8Bb;AAED,aAAK,IAAI,GAAG;IACR,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA6CjD"} \ No newline at end of file +{"version":3,"file":"ExportData.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ExportData.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAS3D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AASnD,qBAAa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;CAAE,EAAE,EAAE,CAAC;IACtE,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,KAAK;IAIb,iBAAiB;IAajB,MAAM;CAiBT;AAED,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CA6Bb;AAED,aAAK,IAAI,GAAG;IACR,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA6CjD"} \ No newline at end of file diff --git a/types/Add-on/HideSelected.d.ts.map b/types/Add-on/HideSelected.d.ts.map index 190e4c5..d5be194 100644 --- a/types/Add-on/HideSelected.d.ts.map +++ b/types/Add-on/HideSelected.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HideSelected.d.ts","sourceRoot":"","sources":["../../../src/Add-on/HideSelected.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,qBAAa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAkBb;AAED,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CAWb;AAED,qBAAa,sBAAuB,YAAW,OAAO;IAE5C,IAAI;CAyBb;AAED,qBAAa,kBAAmB,YAAW,OAAO;IAElC,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAC9B,IAAI;CA2Gb;AAED,qBAAa,SAAU,YAAW,OAAO;IAE/B,IAAI;CA4Bb"} \ No newline at end of file +{"version":3,"file":"HideSelected.d.ts","sourceRoot":"","sources":["../../../src/Add-on/HideSelected.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,qBAAa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAkBb;AAED,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CAWb;AAED,qBAAa,sBAAuB,YAAW,OAAO;IAE5C,IAAI;CAyBb;AAED,qBAAa,kBAAmB,YAAW,OAAO;IAElC,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAC9B,IAAI;CA4Gb;AAED,qBAAa,SAAU,YAAW,OAAO;IAE/B,IAAI;CA4Bb"} \ No newline at end of file diff --git a/types/Add-on/KJL/KjlExport.d.ts.map b/types/Add-on/KJL/KjlExport.d.ts.map index 7553a85..8e1f30a 100644 --- a/types/Add-on/KJL/KjlExport.d.ts.map +++ b/types/Add-on/KJL/KjlExport.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KjlExport.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/KJL/KjlExport.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAgHtD,qBACa,SAAU,YAAW,OAAO;IAE/B,IAAI;IA8KV,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,mBAAmB;IA4G3B,OAAO,CAAC,mBAAmB;CAoE9B;AAGD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAIb"} \ No newline at end of file +{"version":3,"file":"KjlExport.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/KJL/KjlExport.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAoHtD,qBACa,SAAU,YAAW,OAAO;IAE/B,IAAI;IA0NV,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,mBAAmB;IA4G3B,OAAO,CAAC,mBAAmB;CAoE9B;AAGD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAIb"} \ No newline at end of file diff --git a/types/Add-on/KJLImport.d.ts.map b/types/Add-on/KJLImport.d.ts.map index 7f62a41..0b2ca6e 100644 --- a/types/Add-on/KJLImport.d.ts.map +++ b/types/Add-on/KJLImport.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KJLImport.d.ts","sourceRoot":"","sources":["../../../src/Add-on/KJLImport.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,OAAO,EAAe,MAAM,0BAA0B,CAAC;AAiHhE,qBACa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CA0Db"} \ No newline at end of file +{"version":3,"file":"KJLImport.d.ts","sourceRoot":"","sources":["../../../src/Add-on/KJLImport.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAe,MAAM,0BAA0B,CAAC;AAkHhE,qBACa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAmEb"} \ No newline at end of file diff --git a/types/Add-on/Length.d.ts.map b/types/Add-on/Length.d.ts.map index 84ef3e9..36894a3 100644 --- a/types/Add-on/Length.d.ts.map +++ b/types/Add-on/Length.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Length.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Length.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,cAAe,YAAW,OAAO;IAEpC,IAAI;CAgBb"} \ No newline at end of file +{"version":3,"file":"Length.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Length.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,qBAAa,cAAe,YAAW,OAAO;IAEpC,IAAI;CAoBb"} \ No newline at end of file diff --git a/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts.map b/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts.map index b39d9cd..9803f0e 100644 --- a/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts.map +++ b/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LookOverBoardInfosTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQhC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAElF,OAAO,EAAE,aAAa,EAAc,MAAM,0BAA0B,CAAC;AAErE,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,aAAa;IAEzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AACD,oBAAY,cAAc,GAAG;IAAE,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;CAAE,CAAC;AACzE,cAAM,sBAAsB;IAExB,OAAO,CAAC,YAAY,CAAoD;IACxE,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAA8B;IAC9C,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,GAAE,cAAqB;;;;;;IA2CvE,OAAO,CAAC,MAAM;IA+Hd,SAAS,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IAKjE,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;IA6C7E,OAAO,CAAC,cAAc;IAmBtB,iBAAiB,CAAC,EAAE,EAAE,KAAK;IAQ3B,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE;CAc7B;AAED,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"} \ No newline at end of file +{"version":3,"file":"LookOverBoardInfosTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQhC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAElF,OAAO,EAAE,aAAa,EAAc,MAAM,0BAA0B,CAAC;AAErE,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,aAAa;IAEzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AACD,oBAAY,cAAc,GAAG;IAAE,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;CAAE,CAAC;AACzE,cAAM,sBAAsB;IAExB,OAAO,CAAC,YAAY,CAAoD;IACxE,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAA8B;IAC9C,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,GAAE,cAAqB;;;;;;IA2CvE,OAAO,CAAC,MAAM;IAqId,SAAS,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IAKjE,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;IA6C7E,OAAO,CAAC,cAAc;IAmBtB,iBAAiB,CAAC,EAAE,EAAE,KAAK;IAQ3B,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE;CAc7B;AAED,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"} \ No newline at end of file diff --git a/types/Add-on/Purge.d.ts.map b/types/Add-on/Purge.d.ts.map index 963c54a..aaff786 100644 --- a/types/Add-on/Purge.d.ts.map +++ b/types/Add-on/Purge.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Purge.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Purge.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,qBAAa,aAAa;IAEhB,IAAI;CAoBb;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,QAAQ,QA+BjC"} \ No newline at end of file +{"version":3,"file":"Purge.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Purge.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAIxD,qBAAa,aAAa;IAEhB,IAAI;CA8Bb;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,QAAQ,QAgCjC"} \ No newline at end of file diff --git a/types/Add-on/RotateLayerBoard.d.ts.map b/types/Add-on/RotateLayerBoard.d.ts.map index 0512134..4d1b214 100644 --- a/types/Add-on/RotateLayerBoard.d.ts.map +++ b/types/Add-on/RotateLayerBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RotateLayerBoard.d.ts","sourceRoot":"","sources":["../../../src/Add-on/RotateLayerBoard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAiBnD,qBAAa,gBAAiB,YAAW,OAAO;IAE5C,OAAO,CAAC,IAAI,CAMV;IACF,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,KAAK,CAAa;IACpB,IAAI;IA0CV,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,qBAAqB;IAwB7B,WAAW;IACX,OAAO,CAAC,gBAAgB;IAKxB;;;MAGE;IACF,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,gBAAgB;IAaxB;;;SAGK;IACL,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,oBAAoB;IA8C5B;;OAEG;IACH,OAAO,CAAC,UAAU;CAoCrB"} \ No newline at end of file +{"version":3,"file":"RotateLayerBoard.d.ts","sourceRoot":"","sources":["../../../src/Add-on/RotateLayerBoard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAiBnD,qBAAa,gBAAiB,YAAW,OAAO;IAE5C,OAAO,CAAC,IAAI,CAMV;IACF,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,KAAK,CAAa;IACpB,IAAI;IA0CV,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,qBAAqB;IAwB7B,WAAW;IACX,OAAO,CAAC,gBAAgB;IAKxB;;;MAGE;IACF,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,gBAAgB;IAaxB;;;SAGK;IACL,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,oBAAoB;IA8C5B;;OAEG;IACH,OAAO,CAAC,UAAU;CAoCrB"} \ No newline at end of file diff --git a/types/Add-on/Save.d.ts.map b/types/Add-on/Save.d.ts.map index ca4305c..f009a89 100644 --- a/types/Add-on/Save.d.ts.map +++ b/types/Add-on/Save.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Save.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Save.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAQnD,qBAAa,IAAK,YAAW,OAAO;IAEhC,SAAS,UAAQ;IACX,IAAI;CAuIb;AAED,qBAAa,GAAI,YAAW,OAAO;IAE/B,SAAS,UAAQ;IACX,IAAI;CAKb;AAED,qBAAa,MAAO,YAAW,OAAO;IAElC,SAAS,UAAQ;IACX,IAAI;CAoCb;AAED,qBAAa,YAAa,YAAW,OAAO;IAExC,SAAS,UAAQ;IACX,IAAI;CAOb"} \ No newline at end of file +{"version":3,"file":"Save.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Save.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAQnD,qBAAa,IAAK,YAAW,OAAO;IAEhC,SAAS,UAAQ;IACX,IAAI;CAuIb;AAED,qBAAa,GAAI,YAAW,OAAO;IAE/B,SAAS,UAAQ;IACX,IAAI;CAKb;AAED,qBAAa,MAAO,YAAW,OAAO;IAElC,SAAS,UAAQ;IACX,IAAI;CA8Cb;AAED,qBAAa,YAAa,YAAW,OAAO;IAExC,SAAS,UAAQ;IACX,IAAI;CAOb"} \ No newline at end of file diff --git a/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts.map b/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts.map index 25c901d..8e8b0f0 100644 --- a/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts.map +++ b/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SetSmoothEdge.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/SetSmoothEdge/SetSmoothEdge.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAYnE,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAWb"} \ No newline at end of file +{"version":3,"file":"SetSmoothEdge.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/SetSmoothEdge/SetSmoothEdge.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAanE,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAWb"} \ No newline at end of file diff --git a/types/Add-on/SetSmoothEdge/SetSmoothEdgeFace.d.ts.map b/types/Add-on/SetSmoothEdge/SetSmoothEdgeFace.d.ts.map index f1b9373..8ff2835 100644 --- a/types/Add-on/SetSmoothEdge/SetSmoothEdgeFace.d.ts.map +++ b/types/Add-on/SetSmoothEdge/SetSmoothEdgeFace.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SetSmoothEdgeFace.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/SetSmoothEdge/SetSmoothEdgeFace.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAmB,MAAM,+BAA+B,CAAC;AAiJnF,wBAAgB,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,iBAAiB,QAqCrE"} \ No newline at end of file +{"version":3,"file":"SetSmoothEdgeFace.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/SetSmoothEdge/SetSmoothEdgeFace.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAmB,MAAM,+BAA+B,CAAC;AAgLnF,wBAAgB,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,iBAAiB,QAqCrE"} \ No newline at end of file diff --git a/types/Add-on/SwitchVisualStyles.d.ts b/types/Add-on/SwitchVisualStyles.d.ts index c2ef9b0..36905a9 100644 --- a/types/Add-on/SwitchVisualStyles.d.ts +++ b/types/Add-on/SwitchVisualStyles.d.ts @@ -4,6 +4,8 @@ import { ViewportEntity } from "../DatabaseServices/ViewportEntity"; export declare class ChangeRenderType implements Command { private _type; constructor(_type: RenderType); + get NoHistory(): boolean; + get Transparency(): boolean; exec(): Promise; ChangeViewport(vs: ViewportEntity[]): void; } diff --git a/types/Add-on/SwitchVisualStyles.d.ts.map b/types/Add-on/SwitchVisualStyles.d.ts.map index b55d23b..fcd2379 100644 --- a/types/Add-on/SwitchVisualStyles.d.ts.map +++ b/types/Add-on/SwitchVisualStyles.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SwitchVisualStyles.d.ts","sourceRoot":"","sources":["../../../src/Add-on/SwitchVisualStyles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,qBAAa,gBAAiB,YAAW,OAAO;IAEhC,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,UAAU;IAI/B,IAAI;IA2BV,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE;CAOtC"} \ No newline at end of file +{"version":3,"file":"SwitchVisualStyles.d.ts","sourceRoot":"","sources":["../../../src/Add-on/SwitchVisualStyles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,qBAAa,gBAAiB,YAAW,OAAO;IAEhC,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,UAAU;IAMrC,IAAI,SAAS,YAGZ;IAGD,IAAI,YAAY,YAGf;IAEK,IAAI;IA0BV,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE;CAOtC"} \ No newline at end of file diff --git a/types/Add-on/ViewChange.d.ts b/types/Add-on/ViewChange.d.ts index 4bebcb4..0e8003d 100644 --- a/types/Add-on/ViewChange.d.ts +++ b/types/Add-on/ViewChange.d.ts @@ -3,9 +3,9 @@ import { Command } from "../Editor/CommandMachine"; export declare class ViewChange implements Command { private viewDir; private useWCS; - NoHistory: boolean; - Transparency: boolean; constructor(viewDir: Vector3, useWCS?: boolean); + get NoHistory(): boolean; + get Transparency(): boolean; exec(): Promise; UcsLookAt(viewDir: Vector3): void; private ChangeViewport; diff --git a/types/Add-on/ViewChange.d.ts.map b/types/Add-on/ViewChange.d.ts.map index 55a0e43..7ac715e 100644 --- a/types/Add-on/ViewChange.d.ts.map +++ b/types/Add-on/ViewChange.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ViewChange.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ViewChange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,qBAAa,UAAW,YAAW,OAAO;IAI1B,OAAO,CAAC,OAAO;IAAW,OAAO,CAAC,MAAM;IAFpD,SAAS,UAAQ;IACjB,YAAY,UAAQ;gBACA,OAAO,EAAE,OAAO,EAAU,MAAM,UAAQ;IAItD,IAAI;IAkCV,SAAS,CAAC,OAAO,EAAE,OAAO;IAW1B,OAAO,CAAC,cAAc;CAQzB"} \ No newline at end of file +{"version":3,"file":"ViewChange.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ViewChange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,qBAAa,UAAW,YAAW,OAAO;IAE1B,OAAO,CAAC,OAAO;IAAW,OAAO,CAAC,MAAM;gBAAhC,OAAO,EAAE,OAAO,EAAU,MAAM,UAAQ;IAM5D,IAAI,SAAS,YAGZ;IAGD,IAAI,YAAY,YAGf;IAEK,IAAI;IAkCV,SAAS,CAAC,OAAO,EAAE,OAAO;IAW1B,OAAO,CAAC,cAAc;CAQzB"} \ No newline at end of file diff --git a/types/Add-on/Viewport/OneKeyPrint.d.ts.map b/types/Add-on/Viewport/OneKeyPrint.d.ts.map index af65505..c036507 100644 --- a/types/Add-on/Viewport/OneKeyPrint.d.ts.map +++ b/types/Add-on/Viewport/OneKeyPrint.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OneKeyPrint.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Viewport/OneKeyPrint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAUtD,qBAAa,WAAY,YAAW,OAAO;IAEjC,IAAI;CAmGb"} \ No newline at end of file +{"version":3,"file":"OneKeyPrint.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Viewport/OneKeyPrint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAYtD,qBAAa,WAAY,YAAW,OAAO;IAEjC,IAAI;CA4Gb"} \ No newline at end of file diff --git a/types/Add-on/ZoomE.d.ts.map b/types/Add-on/ZoomE.d.ts.map index 4dfdd58..4f050b1 100644 --- a/types/Add-on/ZoomE.d.ts.map +++ b/types/Add-on/ZoomE.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ZoomE.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ZoomE.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,qBAAa,KAAM,YAAW,OAAO;IAE3B,IAAI;CAKb"} \ No newline at end of file +{"version":3,"file":"ZoomE.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ZoomE.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,qBAAa,KAAM,YAAW,OAAO;IAE3B,IAAI;CAIb"} \ No newline at end of file diff --git a/types/Add-on/testEntity/ParseMaterialImage.d.ts b/types/Add-on/testEntity/ParseMaterialImage.d.ts new file mode 100644 index 0000000..83c13fb --- /dev/null +++ b/types/Add-on/testEntity/ParseMaterialImage.d.ts @@ -0,0 +1,9 @@ +import { MeshPhongMaterial, Texture, MeshPhysicalMaterial } from "three"; +import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader"; +import 'three/examples/jsm/libs/inflate.module.min.js'; +export declare const UE_RES_URL = "https://cf.qcad.cc:25111/ue/"; +export declare const UE_FBX_LOADER: FBXLoader; +export declare function ParseMaterialImages(url: string): Promise>; +export declare function ParseFBXUrl(url: string): string; +export declare function ConverMaterial(m: MeshPhongMaterial, exr: Texture, imgMap: Map): MeshPhysicalMaterial; +//# sourceMappingURL=ParseMaterialImage.d.ts.map \ No newline at end of file diff --git a/types/Add-on/testEntity/ParseMaterialImage.d.ts.map b/types/Add-on/testEntity/ParseMaterialImage.d.ts.map new file mode 100644 index 0000000..c86d608 --- /dev/null +++ b/types/Add-on/testEntity/ParseMaterialImage.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ParseMaterialImage.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/ParseMaterialImage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,oBAAoB,EAAgD,MAAM,OAAO,CAAC;AACvH,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAEjE,OAAO,+CAA+C,CAAC;AACvD,eAAO,MAAM,UAAU,iCAAiC,CAAC;AACzD,eAAO,MAAM,aAAa,WAAsC,CAAC;AAEjE,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,0CAcpD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,iBAAiB,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,wBAuBvG"} \ No newline at end of file diff --git a/types/Add-on/testEntity/TestBoundaryBox.d.ts.map b/types/Add-on/testEntity/TestBoundaryBox.d.ts.map index f4abf95..98a8b6e 100644 --- a/types/Add-on/testEntity/TestBoundaryBox.d.ts.map +++ b/types/Add-on/testEntity/TestBoundaryBox.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TestBoundaryBox.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/TestBoundaryBox.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAItD,qBAAa,uBAAwB,YAAW,OAAO;IAE7C,IAAI;CAkBb"} \ No newline at end of file +{"version":3,"file":"TestBoundaryBox.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/TestBoundaryBox.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAItD,qBAAa,uBAAwB,YAAW,OAAO;IAE7C,IAAI;CAab"} \ No newline at end of file diff --git a/types/Add-on/testEntity/test.d.ts b/types/Add-on/testEntity/test.d.ts index 536d3d7..d8e3135 100644 --- a/types/Add-on/testEntity/test.d.ts +++ b/types/Add-on/testEntity/test.d.ts @@ -1,6 +1,5 @@ import { Command } from "../../Editor/CommandMachine"; export declare class Test implements Command { exec(): Promise; - private AllM0; } //# sourceMappingURL=test.d.ts.map \ No newline at end of file diff --git a/types/Add-on/testEntity/test.d.ts.map b/types/Add-on/testEntity/test.d.ts.map index 9774406..b11cb1c 100644 --- a/types/Add-on/testEntity/test.d.ts.map +++ b/types/Add-on/testEntity/test.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAMtD,qBACa,IAAK,YAAW,OAAO;IAE1B,IAAI;YAaI,KAAK;CAatB"} \ No newline at end of file +{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/test.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAQtD,qBACa,IAAK,YAAW,OAAO;IAE1B,IAAI;CA6Bb"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/Command_Curve2Polyline.d.ts.map b/types/Add-on/twoD2threeD/Command_Curve2Polyline.d.ts.map index e66cfe4..cc6bc57 100644 --- a/types/Add-on/twoD2threeD/Command_Curve2Polyline.d.ts.map +++ b/types/Add-on/twoD2threeD/Command_Curve2Polyline.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Command_Curve2Polyline.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/Command_Curve2Polyline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAQzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAG5D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAGtD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAahD,qBAAa,sBAAuB,YAAW,OAAO;IAElD,SAAS,EAAE,OAAO,CAAC;IAEnB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IAEnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IAEjB,IAAI;IA4BV,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE;IAgH1B,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM;CA2D/E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CA4B/E;AAGD,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,KAAK,EAAE,CAAC;CAAE,EAAE,CAqC5E;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,KAAK,EAAE,cAcnD"} \ No newline at end of file +{"version":3,"file":"Command_Curve2Polyline.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/Command_Curve2Polyline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAQzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAG5D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAGtD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAahD,qBAAa,sBAAuB,YAAW,OAAO;IAElD,SAAS,EAAE,OAAO,CAAC;IAEnB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IAEnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IAEjB,IAAI;IAwBV,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE;IAgH1B,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM;CA2D/E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CA4B/E;AAGD,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,KAAK,EAAE,CAAC;CAAE,EAAE,CAqC5E;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,KAAK,EAAE,cAcnD"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/Modals/Curve2RecModal.d.ts b/types/Add-on/twoD2threeD/Modals/Curve2RecModal.d.ts index 5520692..8e85dc5 100644 --- a/types/Add-on/twoD2threeD/Modals/Curve2RecModal.d.ts +++ b/types/Add-on/twoD2threeD/Modals/Curve2RecModal.d.ts @@ -17,10 +17,10 @@ export declare class Curve2RecModalStore extends Singleton implements IConfigSto option: Curve2RecOption; protected uiOption: IUiOption; get UIOption(): IUiOption; - InitOption: () => void; - SaveConfig: () => IConfigOption; - UpdateOption: (cof: IConfigOption) => void; - HasInvailValue: () => boolean; + InitOption(): void; + SaveConfig(): IConfigOption; + UpdateOption(cof: IConfigOption): void; + HasInvailValue(): string; Cancel(): void; OnOk(): void; } diff --git a/types/Add-on/twoD2threeD/Modals/Curve2RecModal.d.ts.map b/types/Add-on/twoD2threeD/Modals/Curve2RecModal.d.ts.map index e3f858d..1523c2b 100644 --- a/types/Add-on/twoD2threeD/Modals/Curve2RecModal.d.ts.map +++ b/types/Add-on/twoD2threeD/Modals/Curve2RecModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Curve2RecModal.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/twoD2threeD/Modals/Curve2RecModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAc,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAK5D,OAAO,0BAA0B,CAAC;AAIlC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAG1E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGtD,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAEhD,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACf;AACD,qBAAa,mBAAoB,SAAQ,SAAU,YAAW,YAAY;IAE1D,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,MAAM,EAAE,eAAe,CAAiC;IACpE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,QAAQ,+BAKX;IACD,UAAU,aAWR;IACF,UAAU,4EAKR;IACF,YAAY,QAAS,aAAa,UAKhC;IACF,cAAc,gBAIZ;IACF,MAAM;IAIN,IAAI;CAQP;AACD,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,mBAAmB,CAAC;CAAE,EAAE,EAAE,CAAC;IACpF,OAAO,CAAC,WAAW,CAAkB;IACrC,iBAAiB;IAcjB,oBAAoB;IAOpB,MAAM;CAiFT"} \ No newline at end of file +{"version":3,"file":"Curve2RecModal.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/twoD2threeD/Modals/Curve2RecModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAc,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAK5D,OAAO,0BAA0B,CAAC;AAIlC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAG1E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGtD,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAEhD,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACf;AACD,qBAAa,mBAAoB,SAAQ,SAAU,YAAW,YAAY;IAE1D,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,MAAM,EAAE,eAAe,CAAiC;IACpE,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,QAAQ,+BAKX;IACD,UAAU;IAYV,UAAU;IAMV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,CAAC;IAMhD,cAAc;IAOd,MAAM;IAIN,IAAI;CAMP;AACD,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,mBAAmB,CAAC;CAAE,EAAE,EAAE,CAAC;IACpF,OAAO,CAAC,WAAW,CAAkB;IACrC,iBAAiB;IAcjB,oBAAoB;IAOpB,MAAM;CAiFT"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/Modals/R2b2.d.ts b/types/Add-on/twoD2threeD/Modals/R2b2.d.ts new file mode 100644 index 0000000..6be3db5 --- /dev/null +++ b/types/Add-on/twoD2threeD/Modals/R2b2.d.ts @@ -0,0 +1,10 @@ +import { Component } from 'react'; +import { R2B2Store } from '../R2B2Store'; +export declare class R2b2Panel extends Component<{ + store: R2B2Store; +}> { + render(): JSX.Element; + private close; + private confirm; +} +//# sourceMappingURL=R2b2.d.ts.map \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/Modals/R2b2.d.ts.map b/types/Add-on/twoD2threeD/Modals/R2b2.d.ts.map new file mode 100644 index 0000000..54444d7 --- /dev/null +++ b/types/Add-on/twoD2threeD/Modals/R2b2.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"R2b2.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/twoD2threeD/Modals/R2b2.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAUzC,qBACa,SAAU,SAAQ,SAAS,CAAC;IAAE,KAAK,EAAE,SAAS,CAAC;CAAE,CAAC;IAE3D,MAAM;IA0EN,OAAO,CAAC,KAAK,CAGX;IACF,OAAO,CAAC,OAAO,CAkBb;CACL"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2B2Store.d.ts b/types/Add-on/twoD2threeD/R2B2Store.d.ts new file mode 100644 index 0000000..7581cce --- /dev/null +++ b/types/Add-on/twoD2threeD/R2B2Store.d.ts @@ -0,0 +1,21 @@ +import { IConfigOption } from "../../UI/Components/Board/UserConfig"; +import { IUiOption } from "../../UI/Store/BoardInterface"; +import { IConfigStore } from "../../UI/Store/BoardStore"; +import { IRect2Br2Option } from "./R2bInterface"; +export declare class R2B2Store implements IConfigStore { + configName: string; + configsNames: string[]; + option: IRect2Br2Option; + uiOption: IUiOption; + constructor(); + get UIOption(): IUiOption; + protected InitDrillType(): void; + InitOption(): void; + SaveConfig(): { + option: IRect2Br2Option; + }; + UpdateOption(conf: IConfigOption): void; + HasInvailValue(): string; +} +export declare const r2b2Store: R2B2Store; +//# sourceMappingURL=R2B2Store.d.ts.map \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2B2Store.d.ts.map b/types/Add-on/twoD2threeD/R2B2Store.d.ts.map new file mode 100644 index 0000000..f1cfe3a --- /dev/null +++ b/types/Add-on/twoD2threeD/R2B2Store.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"R2B2Store.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2B2Store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,qBAAa,SAAU,YAAW,YAAY;IAE9B,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,MAAM,EAAE,eAAe,CAAiF;IACxG,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;;IAQjD,IAAI,QAAQ,IAAI,SAAS,CAAC,eAAe,CAAC,CAKzC;IACD,SAAS,CAAC,aAAa;IASvB,UAAU;IAMV,UAAU;;;IAMV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC;IAOjD,cAAc;CAIjB;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2BCommon.d.ts b/types/Add-on/twoD2threeD/R2BCommon.d.ts index 9d3a893..3e16eec 100644 --- a/types/Add-on/twoD2threeD/R2BCommon.d.ts +++ b/types/Add-on/twoD2threeD/R2BCommon.d.ts @@ -9,4 +9,16 @@ export declare class SelectBrConfigName extends React.Component void; + style?: React.CSSProperties; +} +export declare class SelectDrillType extends React.Component { + render(): JSX.Element; + private handleChange; +} +export {}; //# sourceMappingURL=R2BCommon.d.ts.map \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2BCommon.d.ts.map b/types/Add-on/twoD2threeD/R2BCommon.d.ts.map index 1cd09a1..c456005 100644 --- a/types/Add-on/twoD2threeD/R2BCommon.d.ts.map +++ b/types/Add-on/twoD2threeD/R2BCommon.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"R2BCommon.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2BCommon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM5C,MAAM,WAAW,wBAAwB;IAErC,KAAK,EAAE,WAAW,CAAC;CACtB;AAED,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,wBAAwB,CAAC;IACjE,OAAO,CAAC,WAAW,CAAgB;IACzC,iBAAiB;IAYhB,MAAM;IA2Bb,OAAO,CAAC,YAAY,CAMlB;CACL"} \ No newline at end of file +{"version":3,"file":"R2BCommon.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2BCommon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5C,MAAM,WAAW,wBAAwB;IAErC,KAAK,EAAE,WAAW,CAAC;CACtB;AAED,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,wBAAwB,CAAC;IACjE,OAAO,CAAC,WAAW,CAAgB;IACzC,iBAAiB;IAYhB,MAAM;IA2Bb,OAAO,CAAC,YAAY,CAMlB;CACL;AAGD,UAAU,qBAAqB;IAE3B,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;KAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC/B;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,qBAAqB,CAAC;IAEvE,MAAM;IAeN,OAAO,CAAC,YAAY,CAMlB;CACL"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2bInterface.d.ts b/types/Add-on/twoD2threeD/R2bInterface.d.ts index 3c62503..bcfc6bb 100644 --- a/types/Add-on/twoD2threeD/R2bInterface.d.ts +++ b/types/Add-on/twoD2threeD/R2bInterface.d.ts @@ -1,4 +1,4 @@ -import { IBaseOption, IGrooveOption } from "../../UI/Store/BoardInterface"; +import { DrillType, IBaseOption, IGrooveOption } from "../../UI/Store/BoardInterface"; import { TemplateRecord } from "../../DatabaseServices/Template/TemplateRecord"; import { EBoardKeyList } from "../../Common/BoardKeyList"; export interface IRec2BrOption extends IBaseOption { @@ -53,4 +53,16 @@ export interface IRec2BrOption extends IBaseOption { behindIsRelative: boolean; footerThickness: number; } +export interface IRect2Br2Option extends IBaseOption { + depthExpr: string; + maxThickness: number; + layerShrink: number; + vertialShrink: number; + [EBoardKeyList.DrillType]: DrillType | string; + [EBoardKeyList.UpSealed]: string; + [EBoardKeyList.DownSealed]: string; + [EBoardKeyList.LeftSealed]: string; + [EBoardKeyList.RightSealed]: string; + remarks: [string, string][]; +} //# sourceMappingURL=R2bInterface.d.ts.map \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2bInterface.d.ts.map b/types/Add-on/twoD2threeD/R2bInterface.d.ts.map index fc86ca9..b0c9b2c 100644 --- a/types/Add-on/twoD2threeD/R2bInterface.d.ts.map +++ b/types/Add-on/twoD2threeD/R2bInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"R2bInterface.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2bInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,aAAc,SAAQ,WAAW;IAG9C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IAEvB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IAEzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAE3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IAEpB,uBAAuB,EAAE,OAAO,CAAC;IACjC,wBAAwB,EAAE,OAAO,CAAC;IAClC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,uBAAuB,EAAE,OAAO,CAAC;IACjC,sBAAsB,EAAE,OAAO,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAM/B,YAAY,EAAE,aAAa,CAAC;IAC5B,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CAC3B"} \ No newline at end of file +{"version":3,"file":"R2bInterface.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2bInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,aAAc,SAAQ,WAAW;IAG9C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IAEvB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IAEzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAE3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IAEpB,uBAAuB,EAAE,OAAO,CAAC;IACjC,wBAAwB,EAAE,OAAO,CAAC;IAClC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,uBAAuB,EAAE,OAAO,CAAC;IACjC,sBAAsB,EAAE,OAAO,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAM/B,YAAY,EAAE,aAAa,CAAC;IAC5B,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAEhD,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC9C,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACjC,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IACnC,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IACnC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CAC/B"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/Rec2BrStore.d.ts b/types/Add-on/twoD2threeD/Rec2BrStore.d.ts index b0d8d73..752a23e 100644 --- a/types/Add-on/twoD2threeD/Rec2BrStore.d.ts +++ b/types/Add-on/twoD2threeD/Rec2BrStore.d.ts @@ -4,7 +4,7 @@ import { IRec2BrOption } from "./R2bInterface"; export declare class Rec2BrStore extends BoardStore { m_Option: IRec2BrOption; InitOption(): void; - HasInvailValue(): boolean; + HasInvailValue(): string; SaveConfig(): IConfigOption; UpdateRemarks(cof: IConfigOption): void; UpdateOption(cof: IConfigOption): void; diff --git a/types/Add-on/twoD2threeD/Rect2Board.d.ts b/types/Add-on/twoD2threeD/Rect2Board.d.ts new file mode 100644 index 0000000..38eddb5 --- /dev/null +++ b/types/Add-on/twoD2threeD/Rect2Board.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../../Editor/CommandMachine"; +export declare class Rect2Board implements Command { + exec(): Promise; +} +//# sourceMappingURL=Rect2Board.d.ts.map \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/Rect2Board.d.ts.map b/types/Add-on/twoD2threeD/Rect2Board.d.ts.map new file mode 100644 index 0000000..887c002 --- /dev/null +++ b/types/Add-on/twoD2threeD/Rect2Board.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Rect2Board.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/Rect2Board.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAetD,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;CA8Bb"} \ No newline at end of file diff --git a/types/ApplicationServices/WebSocketClientServer.d.ts b/types/ApplicationServices/WebSocketClientServer.d.ts index 68e030a..cc6b257 100644 --- a/types/ApplicationServices/WebSocketClientServer.d.ts +++ b/types/ApplicationServices/WebSocketClientServer.d.ts @@ -7,7 +7,7 @@ export declare class WebSocketClientServer { mode: string; constructor(url?: string); _ConnectionPromise: Promise; - Connect(): Promise; + Connect(): Promise | true; Send(msg: string): Promise; /** * 接收到消息. AOP可接入此函数 diff --git a/types/ApplicationServices/WebSocketClientServer.d.ts.map b/types/ApplicationServices/WebSocketClientServer.d.ts.map index 9b3f893..11c3658 100644 --- a/types/ApplicationServices/WebSocketClientServer.d.ts.map +++ b/types/ApplicationServices/WebSocketClientServer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"WebSocketClientServer.d.ts","sourceRoot":"","sources":["../../../src/ApplicationServices/WebSocketClientServer.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,qBAAa,qBAAqB;IAMX,GAAG;IAJtB,OAAO,CAAC,EAAE,CAAY;IAEtB,IAAI,EAAE,MAAM,CAAC;gBAEM,GAAG,SAAK;IAI3B,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAoC3B,IAAI,CAAC,GAAG,EAAE,MAAM;IAOtB;;;OAGG;IACH,SAAS,UAAW,YAAY,UAG9B;IACF,WAAW,CAAC,MAAM,EAAE,OAAO;IAKrB,KAAK;CAOd"} \ No newline at end of file +{"version":3,"file":"WebSocketClientServer.d.ts","sourceRoot":"","sources":["../../../src/ApplicationServices/WebSocketClientServer.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,qBAAa,qBAAqB;IAMX,GAAG;IAJtB,OAAO,CAAC,EAAE,CAAY;IAEtB,IAAI,EAAE,MAAM,CAAC;gBAEM,GAAG,SAAK;IAI3B,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAqC5B,IAAI,CAAC,GAAG,EAAE,MAAM;IAOtB;;;OAGG;IACH,SAAS,UAAW,YAAY,UAG9B;IACF,WAAW,CAAC,MAAM,EAAE,OAAO;IAKrB,KAAK;CAOd"} \ No newline at end of file diff --git a/types/Common/CheckoutVaildValue.d.ts b/types/Common/CheckoutVaildValue.d.ts index 1fb6a74..febcafd 100644 --- a/types/Common/CheckoutVaildValue.d.ts +++ b/types/Common/CheckoutVaildValue.d.ts @@ -17,7 +17,7 @@ export declare enum CheckObjectType { GT0Num = "gt0num" } export declare namespace CheckoutValid { - function HasInvailValue(obj: Object, objType: CheckObjectType): boolean; + function HasInvailValue(obj: Object, objType: CheckObjectType): string; function CheckOption(type: CheckObjectType, k: string, v: string): string; function CheckoutBoardOption(k: string, v: string): string; function CheckoutDrillOption(k: string, v: string | boolean): string; diff --git a/types/Common/CheckoutVaildValue.d.ts.map b/types/Common/CheckoutVaildValue.d.ts.map index f8477ea..bf41f54 100644 --- a/types/Common/CheckoutVaildValue.d.ts.map +++ b/types/Common/CheckoutVaildValue.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CheckoutVaildValue.d.ts","sourceRoot":"","sources":["../../../src/Common/CheckoutVaildValue.ts"],"names":[],"mappings":"AAIA,oBAAY,eAAe;IAEvB,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,SAAS;IACX,EAAE,qBAAqB;IACvB,EAAE,aAAa;IACf,GAAG,YAAY;IACf,GAAG,qBAAqB;IACxB,GAAG,sBAAsB;IACzB,GAAG,uBAAuB;IAC1B,GAAG,WAAW;IACd,UAAU,YAAY;IACtB,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,YAAY;IACZ,MAAM,WAAW;CACpB;AAED,yBAAiB,aAAa,CAC9B;IACI,SAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,WAmDnE;IACD,SAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UA6CtE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAmFhE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAkE1E;IACD,SAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA8CjE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAsChE;IACD,SAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA2D/D;IACD,SAAgB,8BAA8B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3E;IACD,SAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAanE;IACD,SAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBpE;IACD,SAAgB,8BAA8B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAU3E;IACD,SAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA+BnE;IACD,SAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA4BlE;CACJ"} \ No newline at end of file +{"version":3,"file":"CheckoutVaildValue.d.ts","sourceRoot":"","sources":["../../../src/Common/CheckoutVaildValue.ts"],"names":[],"mappings":"AAIA,oBAAY,eAAe;IAEvB,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,SAAS;IACX,EAAE,qBAAqB;IACvB,EAAE,aAAa;IACf,GAAG,YAAY;IACf,GAAG,qBAAqB;IACxB,GAAG,sBAAsB;IACzB,GAAG,uBAAuB;IAC1B,GAAG,WAAW;IACd,UAAU,YAAY;IACtB,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,YAAY;IACZ,MAAM,WAAW;CACpB;AAED,yBAAiB,aAAa,CAC9B;IACI,SAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAkD5E;IACD,SAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UA6CtE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAqFhE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAmE1E;IACD,SAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoDjE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAsChE;IACD,SAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA4D/D;IACD,SAAgB,8BAA8B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3E;IACD,SAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAanE;IACD,SAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBpE;IACD,SAAgB,8BAA8B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAU3E;IACD,SAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA+BnE;IACD,SAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA4BlE;CACJ"} \ No newline at end of file diff --git a/types/Common/ColorPalette.d.ts.map b/types/Common/ColorPalette.d.ts.map index b5b66fb..c8d9d6f 100644 --- a/types/Common/ColorPalette.d.ts.map +++ b/types/Common/ColorPalette.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ColorPalette.d.ts","sourceRoot":"","sources":["../../../src/Common/ColorPalette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAoB,MAAM,OAAO,CAAC;AAEtI,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AA2QrE,eAAO,MAAM,UAAU,IAAI,CAAC;AAG5B,qBAAa,aAAa;IAEtB,OAAO;IACP,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAwC;IACvE,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAwC;IACxE,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IASxD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IASzD,OAAO,CAAC,MAAM,CAAC,2BAA2B,CAAwC;IAClF,MAAM,CAAC,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IASnE,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAA0C;IAC5E,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM;IAY1C,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAiB;IACxD,MAAM,CAAC,0BAA0B;IAkBjC,OAAO,CAAC,MAAM,CAAC,4BAA4B,CAA6C;IACxF,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAUjE,OAAO,CAAC,MAAM,CAAC,6BAA6B,CAA6C;IACzF,MAAM,CAAC,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAUlE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAW7B,MAAM,CAAC,kBAAkB,qBAItB;IAGH,MAAM,CAAC,gBAAgB,qBAIpB;IACH,MAAM,CAAC,gBAAgB,eAKpB;IACH,MAAM,CAAC,2BAA2B,oBAI/B;IACH,MAAM,CAAC,uBAAuB,oBAG3B;IACH,MAAM,CAAC,uBAAuB,oBAG3B;CACN"} \ No newline at end of file +{"version":3,"file":"ColorPalette.d.ts","sourceRoot":"","sources":["../../../src/Common/ColorPalette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAoB,MAAM,OAAO,CAAC;AAEtI,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AA2QrE,eAAO,MAAM,UAAU,IAAI,CAAC;AAG5B,qBAAa,aAAa;IAEtB,OAAO;IACP,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAwC;IACvE,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAwC;IACxE,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IASxD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IASzD,OAAO,CAAC,MAAM,CAAC,2BAA2B,CAAwC;IAClF,MAAM,CAAC,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IASnE,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAA0C;IAC5E,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM;IAY1C,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAiB;IACxD,MAAM,CAAC,0BAA0B;IAkBjC,OAAO,CAAC,MAAM,CAAC,4BAA4B,CAA6C;IACxF,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAUjE,OAAO,CAAC,MAAM,CAAC,6BAA6B,CAA6C;IACzF,MAAM,CAAC,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAUlE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAW7B,MAAM,CAAC,kBAAkB,qBAItB;IAGH,MAAM,CAAC,gBAAgB,qBAIpB;IACH,MAAM,CAAC,gBAAgB,eAMpB;IACH,MAAM,CAAC,2BAA2B,oBAI/B;IACH,MAAM,CAAC,uBAAuB,oBAG3B;IACH,MAAM,CAAC,uBAAuB,oBAG3B;CACN"} \ No newline at end of file diff --git a/types/Common/CommandNames.d.ts b/types/Common/CommandNames.d.ts index 098339c..2cd3d57 100644 --- a/types/Common/CommandNames.d.ts +++ b/types/Common/CommandNames.d.ts @@ -186,6 +186,11 @@ export declare enum CommandNames { FindModelKnifeRadius = "FINDMODELKNIFERADIUS", EditorBBS = "EDITORBBS", CuttingFace = "CUTTINGFACE", - DrawTempByImport = "DRAWTEMPBYIMPORT" + DrawTempByImport = "DRAWTEMPBYIMPORT", + CheckEdge = "CHECKEDGE", + Knife = "KNIFES", + R2B2 = "RECT2BOARD2", + FixIntSelfContour = "FIXINTSELFCONTOUR", + ParseHinge = "PARSEHINGE" } //# sourceMappingURL=CommandNames.d.ts.map \ No newline at end of file diff --git a/types/Common/CommandNames.d.ts.map b/types/Common/CommandNames.d.ts.map index 6bdb669..475e337 100644 --- a/types/Common/CommandNames.d.ts.map +++ b/types/Common/CommandNames.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandNames.d.ts","sourceRoot":"","sources":["../../../src/Common/CommandNames.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"CommandNames.d.ts","sourceRoot":"","sources":["../../../src/Common/CommandNames.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Common/Deving.d.ts b/types/Common/Deving.d.ts index 75d047c..aa913ef 100644 --- a/types/Common/Deving.d.ts +++ b/types/Common/Deving.d.ts @@ -1,2 +1,3 @@ export declare function IsDev(): boolean; +export declare function IsTest(): boolean; //# sourceMappingURL=Deving.d.ts.map \ No newline at end of file diff --git a/types/Common/Deving.d.ts.map b/types/Common/Deving.d.ts.map index ce8e7a3..c6e648b 100644 --- a/types/Common/Deving.d.ts.map +++ b/types/Common/Deving.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Deving.d.ts","sourceRoot":"","sources":["../../../src/Common/Deving.ts"],"names":[],"mappings":"AACA,wBAAgB,KAAK,YAGpB"} \ No newline at end of file +{"version":3,"file":"Deving.d.ts","sourceRoot":"","sources":["../../../src/Common/Deving.ts"],"names":[],"mappings":"AACA,wBAAgB,KAAK,YAGpB;AAED,wBAAgB,MAAM,YAGrB"} \ No newline at end of file diff --git a/types/Common/Dispose.d.ts.map b/types/Common/Dispose.d.ts.map index 0c2a542..7a73b64 100644 --- a/types/Common/Dispose.d.ts.map +++ b/types/Common/Dispose.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Dispose.d.ts","sourceRoot":"","sources":["../../../src/Common/Dispose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,YAqB5C;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,YAS9C"} \ No newline at end of file +{"version":3,"file":"Dispose.d.ts","sourceRoot":"","sources":["../../../src/Common/Dispose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,YA6B5C;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,YAS9C"} \ No newline at end of file diff --git a/types/Common/FileSystem.d.ts b/types/Common/FileSystem.d.ts index c2e9582..763ffdd 100644 --- a/types/Common/FileSystem.d.ts +++ b/types/Common/FileSystem.d.ts @@ -1,3 +1,4 @@ +export declare function ReadFileAsArrayBuffer(file: File): Promise; /** * FileSystem is used to read and write files using nunuStudio. * @@ -41,7 +42,6 @@ export declare class FileSystem { static ReadFileAsText(file: File): Promise; /** * Write text file. - * * When running without NWJS it writes file as a blob and auto downloads it. * * @method writeFile diff --git a/types/Common/FileSystem.d.ts.map b/types/Common/FileSystem.d.ts.map index 4134a6e..60ed0be 100644 --- a/types/Common/FileSystem.d.ts.map +++ b/types/Common/FileSystem.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FileSystem.d.ts","sourceRoot":"","sources":["../../../src/Common/FileSystem.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,qBAAa,UAAU;IAEnB,MAAM,CAAC,EAAE,MAAC;IACV;;;;;;;;;MASE;IACF,MAAM,CAAC,QAAQ,+DA6Db;IAEF;;;;;;;;;OASG;IACH,MAAM,CAAC,mBAAmB,0EAyExB;IAEF;;;;;;;;;OASG;IACH,MAAM,CAAC,cAAc,qEAuDnB;WAEW,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAWxD;;;;;;;;OAQG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ;IA0B9C;;;;;;OAMG;IACH,MAAM,CAAC,eAAe,kCA2BpB;IAEF;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CAAC,KAAK,KAAA,EAAE,IAAI,KAAA;IA2BvC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACtC;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAgB,EAAE,QAAQ,EAAE,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;KAAE;IAoB1I;;;;;;;;OAQG;IACH,MAAM,CAAC,cAAc,gDAgBnB;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,+BASb;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,aAAa,qBAOlB;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,iBAAiB,oBAiBtB;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,UAAU,+BAiCf;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,UAAU,qBAUf;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,qBAWhB;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,uBAAuB,qBAQ5B;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,qBAWhB;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,gBAAgB,qBAQrB;CAEL"} \ No newline at end of file +{"version":3,"file":"FileSystem.d.ts","sourceRoot":"","sources":["../../../src/Common/FileSystem.ts"],"names":[],"mappings":"AAIA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CASxF;AAED;;;;GAIG;AACH,qBAAa,UAAU;IAEnB,MAAM,CAAC,EAAE,MAAC;IACV;;;;;;;;;MASE;IACF,MAAM,CAAC,QAAQ,+DA6Db;IAEF;;;;;;;;;OASG;IACH,MAAM,CAAC,mBAAmB,0EAyExB;IAEF;;;;;;;;;OASG;IACH,MAAM,CAAC,cAAc,qEAuDnB;WAEW,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAWxD;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ;IA0B9C;;;;;;OAMG;IACH,MAAM,CAAC,eAAe,kCA2BpB;IAEF;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CAAC,KAAK,KAAA,EAAE,IAAI,KAAA;IA2BvC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACtC;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAgB,EAAE,QAAQ,EAAE,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;KAAE;IAoB1I;;;;;;;;OAQG;IACH,MAAM,CAAC,cAAc,gDAgBnB;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,+BASb;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,aAAa,qBAOlB;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,iBAAiB,oBAiBtB;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,UAAU,+BAiCf;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,UAAU,qBAUf;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,qBAWhB;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,uBAAuB,qBAQ5B;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,qBAWhB;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,gBAAgB,qBAQrB;CAEL"} \ No newline at end of file diff --git a/types/Common/InterfereUtil.d.ts.map b/types/Common/InterfereUtil.d.ts.map index f3cf07a..6116df7 100644 --- a/types/Common/InterfereUtil.d.ts.map +++ b/types/Common/InterfereUtil.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"InterfereUtil.d.ts","sourceRoot":"","sources":["../../../src/Common/InterfereUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAS,QAAQ,EAAE,IAAI,EAAW,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEpE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAO/F,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAO1C,oBAAY,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,CAAC;AAE9D,qBAAa,kBAAkB;IAE3B,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAa;IACpC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAa;IAClD,UAAU,CAAC,UAAU,EAAE,CAAC,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC,EAAE;IAkB9E,YAAY,CAAC,EAAE,EAAE,MAAM;IAQjB,KAAK,CAAC,UAAU,EAAE,CAAC,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI;IA8KxI,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAa;IACvC,OAAO,CAAC,MAAM;IAkBd,QAAQ,mBAA0B;IAClC,OAAO,CAAC,MAAM;IASd,QAAQ,oBAA2B;IACnC,OAAO,CAAC,MAAM;CAQjB;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"} \ No newline at end of file +{"version":3,"file":"InterfereUtil.d.ts","sourceRoot":"","sources":["../../../src/Common/InterfereUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAS,QAAQ,EAAE,IAAI,EAAW,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEpE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAO/F,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAO1C,oBAAY,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,CAAC;AAE9D,qBAAa,kBAAkB;IAE3B,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAa;IACpC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAa;IAClD,UAAU,CAAC,UAAU,EAAE,CAAC,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC,EAAE;IAkB9E,YAAY,CAAC,EAAE,EAAE,MAAM;IAQjB,KAAK,CAAC,UAAU,EAAE,CAAC,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI;IAsLxI,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAa;IACvC,OAAO,CAAC,MAAM;IAkBd,QAAQ,mBAA0B;IAClC,OAAO,CAAC,MAAM;IASd,QAAQ,oBAA2B;IACnC,OAAO,CAAC,MAAM;CAQjB;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"} \ No newline at end of file diff --git a/types/Common/Matrix4Utils.d.ts b/types/Common/Matrix4Utils.d.ts index 3cba5f4..1986405 100644 --- a/types/Common/Matrix4Utils.d.ts +++ b/types/Common/Matrix4Utils.d.ts @@ -45,4 +45,5 @@ export declare function ApplyMatrix4IgnorePosition(vec: { */ export declare function MatrixPlanarizere(mtx: Matrix4, z0?: boolean): Matrix4; export declare const tempMatrix1: Matrix4; +export declare const ZMirrorMatrix: Matrix4; //# sourceMappingURL=Matrix4Utils.d.ts.map \ No newline at end of file diff --git a/types/Common/Matrix4Utils.d.ts.map b/types/Common/Matrix4Utils.d.ts.map index 433d967..424787d 100644 --- a/types/Common/Matrix4Utils.d.ts.map +++ b/types/Common/Matrix4Utils.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Matrix4Utils.d.ts","sourceRoot":"","sources":["../../../src/Common/Matrix4Utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAIlD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,QAMpE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAGnF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,SAAO,GAAG,OAAO,CAe5F;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,WAM1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,WAMxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAMxD;AAGD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,QAW7D;AACD,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,WAQtC;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;CAAE,EAAE,CAAC,EAAE,OAAO;OAA3C,MAAM;OAAK,MAAM;OAAK,MAAM;EAQhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,UAAO,WAYxD;AAED,eAAO,MAAM,WAAW,SAAc,CAAC"} \ No newline at end of file +{"version":3,"file":"Matrix4Utils.d.ts","sourceRoot":"","sources":["../../../src/Common/Matrix4Utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAIlD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,QAMpE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAGnF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,SAAO,GAAG,OAAO,CAe5F;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,WAM1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,WAMxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAMxD;AAGD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,QAW7D;AACD,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,WAQtC;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;CAAE,EAAE,CAAC,EAAE,OAAO;OAA3C,MAAM;OAAK,MAAM;OAAK,MAAM;EAQhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,UAAO,WAYxD;AAED,eAAO,MAAM,WAAW,SAAc,CAAC;AAEvC,eAAO,MAAM,aAAa,SAAqC,CAAC"} \ No newline at end of file diff --git a/types/Common/Request.d.ts.map b/types/Common/Request.d.ts.map index 9b1741f..01f1d60 100644 --- a/types/Common/Request.d.ts.map +++ b/types/Common/Request.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../../src/Common/Request.ts"],"names":[],"mappings":"AAOA,oBAAY,WAAW;IAEnB,IAAI,KAAK;IACT,OAAO,MAAM;IACb,WAAW,MAAM;IACjB,MAAM,MAAM;IACZ,UAAU,MAAM;IAChB,WAAW,MAAM;IACjB,WAAW,MAAM;IACjB,YAAY,MAAM;IAClB,KAAK,MAAM;CACd;AAED,oBAAY,aAAa;IAErB,OAAO,QAAQ;IACf,EAAE,IAAI;IACN,YAAY,MAAM;IAClB,WAAW,MAAM;IACjB,WAAW,MAAM;IACjB,KAAK,OAAO;IACZ,MAAM,OAAO;IACb,MAAM,OAAO;IACb,MAAM,OAAO;IACb,MAAM,OAAO;IACb,IAAI,KAAK;IACT,OAAO,QAAQ;IACf,OAAO,OAAO;CACjB;AACD,MAAM,WAAW,aAAa;IAE1B,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,wBAAsB,QAAQ,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,YAAY,UAAO,0BAGtG;AAED,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAsDpG;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,gBAYzC;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,mBAc1C"} \ No newline at end of file +{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../../src/Common/Request.ts"],"names":[],"mappings":"AAMA,oBAAY,WAAW;IAEnB,IAAI,KAAK;IACT,OAAO,MAAM;IACb,WAAW,MAAM;IACjB,MAAM,MAAM;IACZ,UAAU,MAAM;IAChB,WAAW,MAAM;IACjB,WAAW,MAAM;IACjB,YAAY,MAAM;IAClB,KAAK,MAAM;CACd;AAED,oBAAY,aAAa;IAErB,OAAO,QAAQ;IACf,EAAE,IAAI;IACN,YAAY,MAAM;IAClB,WAAW,MAAM;IACjB,WAAW,MAAM;IACjB,KAAK,OAAO;IACZ,MAAM,OAAO;IACb,MAAM,OAAO;IACb,MAAM,OAAO;IACb,MAAM,OAAO;IACb,IAAI,KAAK;IACT,OAAO,QAAQ;IACf,OAAO,OAAO;CACjB;AACD,MAAM,WAAW,aAAa;IAE1B,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,wBAAsB,QAAQ,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,YAAY,UAAO,0BAGtG;AAED,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAsDpG;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,gBAYzC;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,mBAc1C"} \ No newline at end of file diff --git a/types/Common/SerializeMaterial.d.ts b/types/Common/SerializeMaterial.d.ts index cc2d622..a8652e2 100644 --- a/types/Common/SerializeMaterial.d.ts +++ b/types/Common/SerializeMaterial.d.ts @@ -22,9 +22,9 @@ export declare function getPolylineSVG(en: Polyline): string; /** * 获取当前图纸的缩略图(预览图) */ -export declare function GetCurrentViewPreViewImage(restore?: boolean): Blob; +export declare function GetCurrentViewPreViewImage(restore?: boolean, isBase64?: boolean): Blob | string; export declare function ExtrudeDrillFileIn(data: any[]): ExtrudeHole; -export declare function GetEntitysLogo(ens: Entity[], isConceptual?: boolean, dir?: Vector3): Promise; +export declare function GetEntitysLogo(ens: Entity[], isConceptual?: boolean, dir?: Vector3, isBase64?: boolean): Promise; export declare function GroupOut(ens: Entity[]): string; export declare function GroupFileIn(fileData: Object[]): Entity[]; //# sourceMappingURL=SerializeMaterial.d.ts.map \ No newline at end of file diff --git a/types/Common/SerializeMaterial.d.ts.map b/types/Common/SerializeMaterial.d.ts.map index 853cb31..585288a 100644 --- a/types/Common/SerializeMaterial.d.ts.map +++ b/types/Common/SerializeMaterial.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SerializeMaterial.d.ts","sourceRoot":"","sources":["../../../src/Common/SerializeMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,OAAO,EAAsB,MAAM,OAAO,CAAC;AAGtE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAI/D,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAKtE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,CAUpE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAKrE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,WAAmC,UAa9F;AACD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,CAK7D;AACD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,UAUxD;AACD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,mBAWtD;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAWpG;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,UAKnC;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,UAKrC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,QAyB5C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,YAOzC;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,UA0B1C;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,UAAO,GAAG,IAAI,CAY/D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,eAM7C;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,YAAY,UAAQ,EAAE,GAAG,UAAwB,mBAgDpG;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAUrC;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAWxD"} \ No newline at end of file +{"version":3,"file":"SerializeMaterial.d.ts","sourceRoot":"","sources":["../../../src/Common/SerializeMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,OAAO,EAAsB,MAAM,OAAO,CAAC;AAGtE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAI/D,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAKtE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,CAUpE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAKrE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,WAAmC,UAa9F;AACD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,CAK7D;AACD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,UAUxD;AACD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,mBAWtD;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAWpG;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,UAKnC;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,UAKrC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,QAyB5C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,YAOzC;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,UA0B1C;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,UAAO,EAAE,QAAQ,UAAQ,GAAG,IAAI,GAAG,MAAM,CAc1F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,eAM7C;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,YAAY,UAAQ,EAAE,GAAG,UAAwB,EAAE,QAAQ,UAAQ,0BAkDtH;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAUrC;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAWxD"} \ No newline at end of file diff --git a/types/DatabaseServices/Dimension/2LineAngularDimension.d.ts.map b/types/DatabaseServices/Dimension/2LineAngularDimension.d.ts.map index fecb526..5846323 100644 --- a/types/DatabaseServices/Dimension/2LineAngularDimension.d.ts.map +++ b/types/DatabaseServices/Dimension/2LineAngularDimension.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"2LineAngularDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/2LineAngularDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,IAAI,IAAI,KAAK,EAAa,OAAO,EAAQ,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAInG,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAc,MAAM,cAAc,CAAC;AAGhD;;GAEG;AACH,qBACa,oBAAqB,SAAQ,MAAM;IAMxC,SAAS,CAAC,cAAc;IACxB,SAAS,CAAC,YAAY;IACtB,SAAS,CAAC,cAAc;IACxB,SAAS,CAAC,YAAY;IACtB,SAAS,CAAC,UAAU;IARxB,cAAc,UAAQ;IACtB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,KAAK,CAAa;gBAEZ,cAAc,UAAgB,EAAE,UAAU;IAC1C,YAAY,UAAgB,EAAI,UAAU;IAC1C,cAAc,UAAgB,EAAE,UAAU;IAC1C,YAAY,UAAgB,EAC5B,UAAU,UAAgB;IASxC,aAAa,CACT,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO;IAmB7E,IAAI,IAAI,SAGP;IACD,IAAI,YAAY,YAGf;IACD,IAAI,YAAY,YAGf;IACD,IAAI,UAAU,YAGb;IACD,IAAI,UAAU,YAGb;IACD,IAAI,QAAQ,YAGX;IACD,IAAI,GAAG,QAGN;IAED,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAa/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAiBhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAIlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IASxD,KAAK,IAAI,IAAI;IAeb,OAAO;IASP,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAWZ,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAsBvE,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK;IA4CtE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAgEtD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAWlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAY3B"} \ No newline at end of file +{"version":3,"file":"2LineAngularDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/2LineAngularDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,IAAI,IAAI,KAAK,EAAa,OAAO,EAAQ,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAMnG,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAc,MAAM,cAAc,CAAC;AAGhD;;GAEG;AACH,qBACa,oBAAqB,SAAQ,MAAM;IAMxC,SAAS,CAAC,cAAc;IACxB,SAAS,CAAC,YAAY;IACtB,SAAS,CAAC,cAAc;IACxB,SAAS,CAAC,YAAY;IACtB,SAAS,CAAC,UAAU;IARxB,cAAc,UAAQ;IACtB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,KAAK,CAAa;gBAEZ,cAAc,UAAgB,EAAE,UAAU;IAC1C,YAAY,UAAgB,EAAI,UAAU;IAC1C,cAAc,UAAgB,EAAE,UAAU;IAC1C,YAAY,UAAgB,EAC5B,UAAU,UAAgB;IASxC,aAAa,CACT,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO;IAmB7E,IAAI,IAAI,SAGP;IACD,IAAI,YAAY,YAGf;IACD,IAAI,YAAY,YAGf;IACD,IAAI,UAAU,YAGb;IACD,IAAI,UAAU,YAGb;IACD,IAAI,QAAQ,YAGX;IACD,IAAI,GAAG,QAGN;IAED,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAa/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAiBhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAIlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IASxD,KAAK,IAAI,IAAI;IAcb,OAAO;IASP,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAWZ,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAmCvE,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK;IA6DtE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAgEtD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAWlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAY3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Dimension/AlignedDimension.d.ts.map b/types/DatabaseServices/Dimension/AlignedDimension.d.ts.map index 93a198a..f2b02b3 100644 --- a/types/DatabaseServices/Dimension/AlignedDimension.d.ts.map +++ b/types/DatabaseServices/Dimension/AlignedDimension.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AlignedDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/AlignedDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAiC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAK1H,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAUhD,UAAU,YAAY;IAElB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACtB;AACD;;;;GAIG;AACH,qBACa,gBAAiB,SAAQ,MAAM;IAkBpC,SAAS,CAAC,QAAQ,EAAE,OAAO;IAC3B,SAAS,CAAC,QAAQ,EAAE,OAAO;IAE3B,SAAS,CAAC,OAAO,EAAE,OAAO;IAC1B,SAAS,CAAC,OAAO,EAAE,OAAO;IAC1B,SAAS,CAAC,cAAc,EAAE,MAAM;IAEhC,SAAS,CAAC,gBAAgB,EAAE,OAAO;IAvBvC,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAO;IAE/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,WAAW,CAAmE;IAEtF,OAAO,CAAC,WAAW,CAA0F;IAE7G,OAAO,CAAC,iBAAiB,CAAkB;IAE3C,OAAO,CAAC,eAAe,CAAkB;gBAG3B,QAAQ,GAAE,OAAuB,EACjC,QAAQ,GAAE,OAAuB,EAEjC,OAAO,GAAE,OAAuB,EAChC,OAAO,GAAE,OAAuB,EAChC,cAAc,GAAE,MAAkB,EAElC,gBAAgB,GAAE,OAAc;IAO9C,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAIpB;IACD,IAAI,MAAM,IALI,OAAO,CAQpB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAIpB;IACD,IAAI,MAAM,IALI,OAAO,CAQpB;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,EAInB;IACD,IAAI,KAAK,IALI,OAAO,CAQnB;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,EAInB;IACD,IAAI,KAAK,IALI,OAAO,CAQnB;IAED,IAAI,YAAY,IAII,OAAO,CAD1B;IACD,IAAI,YAAY,CAAC,CAAC,EAAE,OAAO,EAY1B;IAGD,IAAI,MAAM,YAkBT;IAED,YAAY,CAAC,GAAG,EAAE,MAAM;IAiBxB,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAI7B;IAED,IAAI,UAAU,CAAC,EAAE,EAAE,UAAU,EAO5B;IACD,IAAI,IAAI,SAGP;IACD,IAAI,UAAU,CAAC,GAAG,EAAE,MAAM,EAWzB;IAED,IAAI,eAAe,IAMM,IAAI,CAF5B;IAED,IAAI,eAAe,CAAC,GAAG,EAAE,IAAI,EAG5B;IAED,IAAI,cAAc,CAAC,OAAO,EAAE,OAAO,EAKlC;IAGD,IAAI,cAAc,CAAC,SAAS,EAAE,OAAO,EAKpC;IAED,IAAI,cAAc,IAPY,OAAO,CAUpC;IAED,oBAAoB;IAKpB,oBAAoB;IAKpB,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAI9B;IAED,IAAI,cAAc,IANO,MAAM,CAS9B;IAED,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAI9B;IAED,IAAI,cAAc,IANO,MAAM,CAS9B;IAED,IAAI,YAAY,CAAC,GAAG,EAAE,YAAY,EAMjC;IAED,IAAI,YAAY,IARM,YAAY,CAWjC;IAED,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAKxB;IAED,IAAI,QAAQ,IAPO,MAAM,CAUxB;IAED,OAAO;IAkBP,KAAK,IAAI,IAAI;IAab,eAAe,CAAC,IAAI,EAAE,IAAI;IAI1B,SAAS,CAAC,cAAc,UAAQ;IAChC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAmBvE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAwCtD;;;;OAIG;IACH,iBAAiB,IAAI,OAAO;IAqD5B,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO;IA0BxB,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAYZ,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAYnF,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAO/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAwChD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAIlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAiBxD,SAAS,CAAC,YAAY;IAetB,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAuBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAoB3B"} \ No newline at end of file +{"version":3,"file":"AlignedDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/AlignedDimension.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Dimension/DimDiameter.d.ts.map b/types/DatabaseServices/Dimension/DimDiameter.d.ts.map index e03c509..1a3e886 100644 --- a/types/DatabaseServices/Dimension/DimDiameter.d.ts.map +++ b/types/DatabaseServices/Dimension/DimDiameter.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DimDiameter.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/DimDiameter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,QAAQ,EAAQ,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAOzF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,qBACa,iBAAkB,SAAQ,eAAe;IAElD,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAuBvE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA8BtD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAmBnF,UAAU;IAMV,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;CAoCnD"} \ No newline at end of file +{"version":3,"file":"DimDiameter.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/DimDiameter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,QAAQ,EAAQ,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AASzF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,qBACa,iBAAkB,SAAQ,eAAe;IAElD,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA6BvE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAwCtD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAmBnF,UAAU;IAMV,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;CAoCnD"} \ No newline at end of file diff --git a/types/DatabaseServices/Dimension/RadiusDimension.d.ts.map b/types/DatabaseServices/Dimension/RadiusDimension.d.ts.map index 33edfc6..f8a62c3 100644 --- a/types/DatabaseServices/Dimension/RadiusDimension.d.ts.map +++ b/types/DatabaseServices/Dimension/RadiusDimension.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RadiusDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/RadiusDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,QAAQ,EAAE,OAAO,EAAQ,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKlG,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,qBACa,eAAgB,SAAQ,MAAM;IAOnC,SAAS,CAAC,OAAO;IACjB,SAAS,CAAC,MAAM;IAChB,SAAS,CAAC,KAAK;IANnB,cAAc,UAAQ;IACtB,SAAS,CAAC,KAAK,OAAc;gBAGf,OAAO,UAAgB,EACvB,MAAM,UAAgB,EACtB,KAAK,UAAgB;IAMnC,IAAI,OAAO,IAII,OAAO,CADrB;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,EAKrB;IACD,IAAI,MAAM,IAII,OAAO,CADpB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAKpB;IACD,IAAI,KAAK,IAII,OAAO,CADnB;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,EAKnB;IACD,OAAO;IAUP,KAAK,IAAI,IAAI;IAab,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAsBvE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAuBtD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAiBnF,UAAU;IAOV,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAWZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAI/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IA8BhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAIlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAQxD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAQlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAQ3B"} \ No newline at end of file +{"version":3,"file":"RadiusDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/RadiusDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,QAAQ,EAAE,OAAO,EAAQ,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAMlG,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,qBACa,eAAgB,SAAQ,MAAM;IAOnC,SAAS,CAAC,OAAO;IACjB,SAAS,CAAC,MAAM;IAChB,SAAS,CAAC,KAAK;IANnB,cAAc,UAAQ;IACtB,SAAS,CAAC,KAAK,OAAc;gBAGf,OAAO,UAAgB,EACvB,MAAM,UAAgB,EACtB,KAAK,UAAgB;IAMnC,IAAI,OAAO,IAII,OAAO,CADrB;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,EAKrB;IACD,IAAI,MAAM,IAII,OAAO,CADpB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAKpB;IACD,IAAI,KAAK,IAII,OAAO,CADnB;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,EAKnB;IACD,OAAO;IAUP,KAAK,IAAI,IAAI;IAab,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA2BvE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAgCtD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAmBnF,UAAU;IAOV,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAWZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAI/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IA8BhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAIlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAQxD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAQlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAQ3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Arc.d.ts.map b/types/DatabaseServices/Entity/Arc.d.ts.map index 3a9812f..8304cdc 100644 --- a/types/DatabaseServices/Entity/Arc.d.ts.map +++ b/types/DatabaseServices/Entity/Arc.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Arc.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Arc.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Arc.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Arc.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Board.d.ts b/types/DatabaseServices/Entity/Board.d.ts new file mode 100644 index 0000000..11e0515 --- /dev/null +++ b/types/DatabaseServices/Entity/Board.d.ts @@ -0,0 +1,152 @@ +import { Matrix4, Vector3, Object3D, Geometry, Matrix3, UVGenerator } from 'three'; +import { BoardOpenDir, BoardProcessOption, BoardType, FaceDirection } from '../../UI/Store/BoardInterface'; +import { CADFiler } from '../CADFiler'; +import { ObjectId } from '../ObjectId'; +import { Shape } from '../Shape'; +import { ExtrudeSolid, ExtureContourCurve } from './Extrude'; +import { RenderType } from '../../GraphicsSystem/RenderType'; +import { Polyline } from './Polyline'; +import { ObjectSnapMode } from '../../Editor/ObjectSnapMode'; +export declare function ConverBoardTypeToSpaceType(type: BoardType): number; +export interface IModeling { + shape: Shape; + thickness: number; + dir: FaceDirection; + knifeRadius: number; + addLen: number; + addWidth?: number; + addDepth?: number; +} +export interface IKnifeInfo { + angle: number; + radius: number; + id: string; + name: string; +} +export interface I2DModeingItem { + depth: number; + offset: number; + knife: IKnifeInfo; +} +export interface I2DModeling { + path: Polyline; + dir: FaceDirection; + items: I2DModeingItem[]; +} +export interface IPathItem { + pt: Vector3; + bul: number; +} +export interface I3DModeling { + path: IPathItem[]; + dir: FaceDirection; + knife: IKnifeInfo; +} +/** + * 板件实体 + */ +export declare class Board extends ExtrudeSolid { + private _Rotation; + private _BoardType; + private _Name; + private _BoardProcessOption; + private _DrillList; + private _LayerNails; + RelativeHardware: ObjectId[]; + OpenDir: BoardOpenDir; + private _IsChaiDan; + private _2DModelingList; + private _3DModelingList; + constructor(); + /** + * 创建一个代理数组,数组改变时被监听 + */ + private CreateArray; + private InitBoardData; + InitBoard(length: number, width: number, thickness: number, boardType?: BoardType): void; + static CreateBoard(length: number, width: number, thickness: number, boardType?: BoardType): Board; + get DrillList(): Map; + get LayerNails(): ObjectId[]; + AppendNails(ids: ObjectId[]): void; + ClearLayerNails(): void; + /** + * 你可以安心的修改它,这样会直接影响到板件,因为板件对这个对象添加了代理. + */ + get BoardProcessOption(): BoardProcessOption; + set BoardProcessOption(obj: BoardProcessOption); + get NeedUpdateRelevanceGroove(): boolean; + protected GetRelevanceKnifes(knifs: ExtrudeSolid[]): void; + ClearRelevance(en?: ExtrudeSolid): void; + get SplitBoards(): this[]; + get BoardModeling(): IModeling[]; + set BoardModeling(models: IModeling[]); + get Modeling2D(): I2DModeling[]; + set Modeling2D(ms: I2DModeling[]); + get Modeling3D(): I3DModeling[]; + set Modeling3D(ms: I3DModeling[]); + ClearModeling2DList(): void; + ClearModeling3DList(): void; + get IsChaiDan(): boolean; + set IsChaiDan(v: boolean); + ClearBoardModeling(): void; + /** + * 注意传入的排钻列表,避免指针被引用 + */ + AppendDrillList(k: ObjectId, drs: ObjectId[][]): void; + ClearDrillList(k: ObjectId): void; + ClearAllDrillList(): void; + Erase(isErase?: boolean): void; + get RotateMat(): Matrix4; + get Height(): number; + set Height(v: number); + get Width(): number; + set Width(v: number); + get BoardType(): BoardType; + set BoardType(type: BoardType); + SetBoardType(type: BoardType): void; + get MinPoint(): Vector3; + get MaxPoint(): Vector3; + get IsRect(): boolean; + get IsSpecialShape(): boolean; + get HasGroove(): boolean; + get Name(): string; + set Name(n: string); + /** + * 板件的轮廓,在板件坐标系中的表现方式. + */ + get ContourCurve(): ExtureContourCurve; + set ContourCurve(cu: ExtureContourCurve); + Explode(): import("./Region").Region[]; + RotateBoard(rox: number, roy: number, roz: number): void; + get Rotation(): { + x: number; + y: number; + z: number; + }; + protected ApplyMirrorMatrix(m: Matrix4): this; + get UCGenerator(): UVGenerator; + UpdateUV(geo: Geometry, ocs: Matrix4, isRev?: boolean): void; + CopyFrom(obj: Board): void; + Clone(): this; + Join(target: this): import("../../Common/Status").Status; + private GetLinesDir; + private _2D3DPathObject; + private Get2DAnd3DPaths; + HandleSpliteEntitys(splitEntitys: this[]): void; + InitDrawObject(renderType?: RenderType): Object3D; + UpdateDrawObject(renderType: RenderType, obj: Object3D): Object3D; + OffsetPathCache: Map; + private GetOffsetPath; + private HandleBoardMaterial; + UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D): void; + CheckSealing(obj: Object3D): void; + GetStretchPoints(): Vector3[]; + MoveStretchPoints(indexList: Array, vec: Vector3): void; + GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3): Vector3[]; + DeferUpdate(): void; + protected _ReadFile(file: CADFiler): void; + WriteFile(file: CADFiler): void; +} +//# sourceMappingURL=Board.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Board.d.ts.map b/types/DatabaseServices/Entity/Board.d.ts.map new file mode 100644 index 0000000..4c8ec0f --- /dev/null +++ b/types/DatabaseServices/Entity/Board.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Board.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAgB,QAAQ,EAAQ,QAAQ,EAAiB,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAStH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAiB,aAAa,EAAa,MAAM,+BAA+B,CAAC;AAIrI,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAQ7D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAKtC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAWlE;AAED,MAAM,WAAW,SAAS;IAEtB,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,aAAa,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAEvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAE3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAExB,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IAAG,EAAE,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;CAAE;AAExD,MAAM,WAAW,WAAW;IAExB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED;;GAEG;AACH,qBACa,KAAM,SAAQ,YAAY;IAEnC,OAAO,CAAC,SAAS,CAIf;IACF,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,mBAAmB,CAAqB;IAEhD,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,WAAW,CAAkB;IACzB,gBAAgB,EAAE,QAAQ,EAAE,CAAM;IAClC,OAAO,EAAE,YAAY,CAAqB;IACtD,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,eAAe,CAAqB;;IAO5C;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,aAAa;IAyDrB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,SAA2B;IA2BlG,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,SAA2B;IAQ3G,IAAI,SAAS,gCAGZ;IAED,IAAI,UAAU,eAGb;IAED,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE;IAK3B,eAAe;IAWf;;OAEG;IACH,IAAI,kBAAkB,IAKM,kBAAkB,CAF7C;IAED,IAAI,kBAAkB,CAAC,GAAG,EAAE,kBAAkB,EAG7C;IACD,IAAI,yBAAyB,YAY5B;IAED,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE;IAyBlD,cAAc,CAAC,EAAE,CAAC,EAAE,YAAY;IAchC,IAAI,WAAW,WAkBd;IAED,IAAI,aAAa,IA6BS,SAAS,EAAE,CADpC;IACD,IAAI,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EA8BpC;IACD,IAAI,UAAU,IAIK,WAAW,EAAE,CAD/B;IACD,IAAI,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,EAO/B;IACD,IAAI,UAAU,IAIK,WAAW,EAAE,CAD/B;IACD,IAAI,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,EAM/B;IACD,mBAAmB;IAMnB,mBAAmB;IAMnB,IAAI,SAAS,IAII,OAAO,CADvB;IACD,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,EAQvB;IACD,kBAAkB;IAOlB;;OAEG;IACH,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;IAS9C,cAAc,CAAC,CAAC,EAAE,QAAQ;IAyB1B,iBAAiB;IAOjB,KAAK,CAAC,OAAO,GAAE,OAAc;IAmB7B,IAAI,SAAS,YA4BZ;IACD,IAAI,MAAM,IAII,MAAM,CADnB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAqBnB;IACD,IAAI,KAAK,IAII,MAAM,CADlB;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAmBlB;IACD,IAAI,SAAS,IAAI,SAAS,CAGzB;IACD,IAAI,SAAS,CAAC,IAAI,EAAE,SAAS,EAiB5B;IAGD,YAAY,CAAC,IAAI,EAAE,SAAS;IAO5B,IAAI,QAAQ,IAAI,OAAO,CAWtB;IACD,IAAI,QAAQ,IAAI,OAAO,CAKtB;IAED,IAAI,MAAM,YAGT;IAED,IAAI,cAAc,YAGjB;IAED,IAAI,SAAS,YAGZ;IAED,IAAI,IAAI,IAII,MAAM,CADjB;IACD,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,EAIjB;IAED;;OAEG;IACH,IAAI,YAAY,IAIK,kBAAkB,CADtC;IACD,IAAI,YAAY,CAAC,EAAE,EAAE,kBAAkB,EAyBtC;IAED,OAAO;IAKP,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAuBjD,IAAI,QAAQ;;;;MAGX;IACD,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAK7C,IAAI,WAAW,IAAI,WAAW,CAM7B;IAED,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,UAAQ;IAMnD,QAAQ,CAAC,GAAG,EAAE,KAAK;IAenB,KAAK,IAAI,IAAI;IAQb,IAAI,CAAC,MAAM,EAAE,IAAI;IAcjB,OAAO,CAAC,WAAW;IAqCnB,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,eAAe;IAoEvB,mBAAmB,CAAC,YAAY,EAAE,IAAI,EAAE;IA2FxC,cAAc,CAAC,UAAU,aAAuB;IAgBhD,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAYtD,eAAe;;OAAqD;IACpE,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,mBAAmB;IA4B3B,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAe9D,YAAY,CAAC,GAAG,EAAE,QAAQ;IAmB1B,gBAAgB;IAShB,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IA+CxD,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IA4BZ,WAAW;IASX,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAgGlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAwC3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/CompositeEntity.d.ts.map b/types/DatabaseServices/Entity/CompositeEntity.d.ts.map index 6969811..887cf6d 100644 --- a/types/DatabaseServices/Entity/CompositeEntity.d.ts.map +++ b/types/DatabaseServices/Entity/CompositeEntity.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CompositeEntity.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/CompositeEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,qBACa,eAAgB,SAAQ,MAAM;;IAO3B,OAAO,EAAE,MAAM,EAAE,CAAM;IAInC;;MAEE;IACF,OAAO;IASP,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAWzC,IAAI,WAAW,YAMd;IACD,SAAS,CAAC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAYjF,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAgBtD,IAAI,UAAU,IAAI,MAAM,CAGvB;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAgB3B;IACD,IAAI,QAAQ,mCAGX;IACD,IAAI,QAAQ,CAAC,EAAE,gCAAA,EAKd;IAED,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAK9D,kBAAkB;IASlB;;;;;;;MAOE;IACF,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAUZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAK/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAMhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAKlC;;;;;;OAMG;IACH,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAMxD,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,yBAAyB;IASjC,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa;IA4ClF,eAAe,CAAC,IAAI,EAAE,IAAI;IAqB1B,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAclC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAS3B"} \ No newline at end of file +{"version":3,"file":"CompositeEntity.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/CompositeEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,qBACa,eAAgB,SAAQ,MAAM;;IAO3B,OAAO,EAAE,MAAM,EAAE,CAAM;IAInC;;MAEE;IACF,OAAO;IASP,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAWzC,IAAI,WAAW,YAMd;IACD,SAAS,CAAC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAYjF,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAmBtD,IAAI,UAAU,IAAI,MAAM,CAGvB;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAgB3B;IACD,IAAI,QAAQ,mCAGX;IACD,IAAI,QAAQ,CAAC,EAAE,gCAAA,EAKd;IAED,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAK9D,kBAAkB;IASlB;;;;;;;MAOE;IACF,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAUZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAK/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAMhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAKlC;;;;;;OAMG;IACH,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAMxD,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,yBAAyB;IASjC,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa;IA4ClF,eAAe,CAAC,IAAI,EAAE,IAAI;IAqB1B,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAclC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAS3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/EntityRef.d.ts b/types/DatabaseServices/Entity/EntityRef.d.ts new file mode 100644 index 0000000..5698687 --- /dev/null +++ b/types/DatabaseServices/Entity/EntityRef.d.ts @@ -0,0 +1,17 @@ +import { Object3D } from "three"; +import { RenderType } from "../../GraphicsSystem/RenderType"; +import { CADFiler } from "../CADFiler"; +import { Entity } from "./Entity"; +/** + * 外部引用的实体,比如glTF + */ +export declare class EntityRef extends Entity { + private _url?; + OnlyRenderType: boolean; + constructor(_url?: string); + InitDrawObject(renderType?: RenderType): Object3D; + UpdateDrawObject(type: RenderType, obj: Object3D): void; + protected _ReadFile(file: CADFiler): void; + WriteFile(file: CADFiler): void; +} +//# sourceMappingURL=EntityRef.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Entity/EntityRef.d.ts.map b/types/DatabaseServices/Entity/EntityRef.d.ts.map new file mode 100644 index 0000000..98b9166 --- /dev/null +++ b/types/DatabaseServices/Entity/EntityRef.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"EntityRef.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/EntityRef.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;GAEG;AACH,qBACa,SAAU,SAAQ,MAAM;IAGrB,OAAO,CAAC,IAAI,CAAC;IADzB,cAAc,UAAQ;gBACF,IAAI,CAAC,EAAE,MAAM;IAMjC,cAAc,CAAC,UAAU,GAAE,UAAiC;IAgC5D,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAQhD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAOlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAO3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Extrude.d.ts b/types/DatabaseServices/Entity/Extrude.d.ts new file mode 100644 index 0000000..a543b28 --- /dev/null +++ b/types/DatabaseServices/Entity/Extrude.d.ts @@ -0,0 +1,234 @@ +import { BoxGeometry, BufferGeometry, Geometry, Matrix3, Matrix4, Mesh, Object3D, UVGenerator, Vector3 } from "three"; +import { Line2 } from "three/examples/jsm/lines/Line2"; +import { Status } from "../../Common/Status"; +import { CSG } from "../../csg/core/CSG"; +import { ObjectSnapMode } from "../../Editor/ObjectSnapMode"; +import { Box3Ext } from "../../Geometry/Box"; +import { OBB } from "../../Geometry/OBB/obb"; +import { RenderType } from "../../GraphicsSystem/RenderType"; +import { CADFiler } from "../CADFiler"; +import { ObjectId } from "../ObjectId"; +import { Shape } from "../Shape"; +import { Circle } from "./Circle"; +import { DragPointType } from "./DragPointType"; +import { Entity } from "./Entity"; +import { Polyline } from "./Polyline"; +import { Region } from "./Region"; +export declare type ExtureContourCurve = Polyline | Circle; +export declare type ExtureContour = Polyline | Circle | ExtrudeSolid | Region; +export declare class ExtrudeSolid extends Entity { + protected height: number; + protected width: number; + /** + * 拉伸实体的厚度 + * 我们允许它是一个负数,但是这个时候这个实体已经是一个无效的拉伸实体了. + * 允许负数,用来校验凹槽的合理性. + */ + protected thickness: number; + protected isRect: boolean; + IsKnife: boolean; + RelevanceMeats: ObjectId[]; + RelevanceKnifs: ObjectId[]; + __OriginalId__: ObjectId; + __OriginalEnt__: this; + /** + * 拉伸形状 + * 出于优化考虑,可能未初始化 + * 形状位于WCS 0点位置,不随OCS变化而变化 + */ + protected contourCurve: ExtureContourCurve; + /** + * 正面和反面的凹槽造型 + */ + protected grooves: ExtrudeSolid[]; + protected knifeRadius: number; + protected groovesAddLength: number; + protected groovesAddWidth: number; + protected groovesAddDepth: number; + __TempIndexVersion__: { + Index: number; + Version: number; + }; + constructor(); + get KnifeRadius(): number; + set KnifeRadius(v: number); + get BoundingBox(): Box3Ext; + get BoundingBoxInOCS(): Box3Ext; + get OBB(): OBB; + get GroovesAddLength(): number; + set GroovesAddLength(v: number); + get GroovesAddWidth(): number; + set GroovesAddWidth(v: number); + get GroovesAddDepth(): number; + set GroovesAddDepth(v: number); + Clone(): this; + ApplyMatrix(m: Matrix4): this; + protected ApplyScaleMatrix(m: Matrix4): this; + get Position(): Vector3; + set Position(p: Vector3); + get Width(): number; + get Height(): number; + get Thickness(): number; + set Thickness(thickness: number); + get Grooves(): ExtrudeSolid[]; + /** + * 返回未拷贝的轮廓曲线 + */ + get ContourCurve(): ExtureContourCurve; + set ContourCurve(cu: ExtureContourCurve); + /** + * 生成矩形轮廓(强制) + */ + GeneralRectContour(): void; + /** + * 转换成矩形拉伸实体 + */ + ConverToRectSolid(width?: number, height?: number, thickness?: number): this; + /** + * 更新拉伸实体的轮廓 + * @param curve 曲线已经存在WCS坐标系 + */ + SetContourCurve(curve: ExtureContourCurve): void; + /** + * 在不改变Normal和实体显示的情况下,修改X轴的指向 + * @param xAxis + */ + SetXAxis(xAxis: Vector3): this; + /** + * 检验轮廓曲线,通常当轮廓曲线被修改时,都需要检验轮廓曲线,并更新实体大小和轮廓位置. + * >计算轮廓大小 + * >判断是否矩形 + * >修正轮廓基点 + */ + CheckContourCurve(): void; + get IsRect(): boolean; + /** + * 这个拉伸实体的面域形状 + */ + get Shape(): Shape; + /** + * 实体合并(不会删除target) + */ + Join(target: this): Status; + get Volume(): number; + /** + * 被切割 + * @param extrudes 切割刀 + * @param [output=undefined] 如果实体被分裂,那么输出分裂的其他实体(如果为空,则尝试入当前实体的容器中) + * @param [checkIntersect=true] 检查相交,性能优化 + * @returns 切割是否成功 + */ + Subtract(extrudes: ExtrudeSolid[], output?: ExtrudeSolid[], checkIntersect?: boolean): boolean; + RelevanceSubtract(knif: ExtrudeSolid, check?: boolean): void; + /** + * 当实体被分裂后,加入新图纸时,需要修复关联拉槽 + */ + RepairRelevance(): void; + AppendGroove(groove: ExtrudeSolid): void; + /** 添加槽进板件,并且自动分裂. + * 通常槽已经校验过准确性,所以不在校验 + */ + AppendGrooves(grooves: ExtrudeSolid[], output?: ExtrudeSolid[]): void; + GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3): Vector3[]; + protected GetStrectchPointCountList(dragType: DragPointType): number[]; + GetGripOrStretchPoints(dragType: DragPointType): Vector3[]; + MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType): void; + GetGripPoints(): Array; + MoveGripPoints(indexList: number[], vec: Vector3): void; + GetStretchPoints(): Vector3[]; + MoveStretchPoints(indexList: Array, vec: Vector3): void; + /** + * 只对自身的轮廓和厚度进行拉伸,忽略子实体 + */ + MoveGripOrStretchPointsOnly(indexList: Array, vec: Vector3, dragType: DragPointType): void; + IsStretchThickness(indexs: number[]): boolean; + /** + * 当调用Draw时,可以生成bsp信息 + */ + private csg; + get CSG(): CSG; + /** + * (步骤1.2.) + * 将目标拉伸实体转换成在板件内部可用的凹槽实体 + * @param target 该对象可能被修改(内部不拷贝该实体) + * @param useClone 转换后的实体是目标实体拷贝后修改的 + */ + ConverToLocalGroove(target: ExtrudeSolid): ExtrudeSolid[]; + /** + * (步骤2) + * 更新凹槽位置和厚度(校验凹槽的Z轴位置是否存在交集) + */ + GrooveCheckPosition(target: ExtrudeSolid): Status; + /** + * (步骤3) + * 计算凹槽合并 + */ + GrooveCheckMerge(): void; + /** + * (步骤4.1) + * 计算凹槽轮廓(可能分裂) + * @param target 不拷贝修改 + * @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个) + */ + GrooveCheckContour(target: ExtrudeSolid): ExtrudeSolid[]; + /** + * (步骤4.2) + * 计算本实体被全身度的凹槽差集后正确的实体轮廓,和有可能的分裂实体 + * @param splitEntitys 分裂出来的实体 + * @returns [Status] Status : 消失不见 + */ + ContourCheckSubtract(splitEntitys: this[]): boolean; + IsLazyGrooveCheck: boolean; + IsNeedGrooveCheck: boolean; + /** + * 无法知道修改了轮廓是否为更新到内部凹槽. + * 无法知道修改了内部凹槽之后是否会更新到轮廓. + * 所以默认全部校验内部的凹槽 + */ + GrooveCheckAll(splitEntitys: this[]): void; + /** 校验内部槽并且自动分裂 */ + GrooveCheckAllAutoSplit(output?: ExtrudeSolid[]): void; + HandleSpliteEntitys(splitEntitys: this[]): void; + LazyGrooveCheckAll(): void; + GetPrintObject3D(): (Line2 | Mesh)[]; + InitDrawObject(renderType?: RenderType): Object3D; + get UCGenerator(): UVGenerator; + __CacheKnifVersion__: { + [key: number]: number; + }; + get NeedUpdateRelevanceGroove(): boolean; + __CacheVolume__: number; + __CacheSplitExtrudes: this[]; + /** + * 计算关联拉槽,更新绘制对象(MeshGeometry和EdgeGeometry) + */ + private CalcRelevanceGroove; + /** + * 如果实体被切割,那么将返回分裂的实体数组,否则返回自身 + */ + get SplitExtrudes(): this[]; + protected GetRelevanceKnifes(knifs: ExtrudeSolid[]): void; + ClearRelevance(en?: ExtrudeSolid): void; + private _MeshGeometry; + get MeshGeometry(): BufferGeometry; + private _EdgeGeometry; + protected get EdgeGeometry(): BufferGeometry; + UpdateUV(geo: Geometry, ocs: Matrix4, isRev?: boolean): void; + UpdateBufferGeometryUvs(isRev: boolean): void; + DeferUpdate(): void; + UpdateDrawGeometry(): void; + UpdateDrawObject(renderType: RenderType, obj: Object3D): Object3D; + UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D): void; + UpdateJigMaterial(color?: number): void; + /** + * 简化的文件读取和写入,只写入必要的数据,没有id,没有其他版本号 + */ + ReadFileLite(file: CADFiler): void; + WriteFileLite(file: CADFiler): void; + private ReadFileOnly; + private WriteFileOnly; + protected _ReadFile(file: CADFiler): void; + WriteFile(file: CADFiler): void; +} +export declare function FastMeshGeometry(width: number, height: number, thickness: number): BoxGeometry; +//# sourceMappingURL=Extrude.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Extrude.d.ts.map b/types/DatabaseServices/Entity/Extrude.d.ts.map new file mode 100644 index 0000000..34a9852 --- /dev/null +++ b/types/DatabaseServices/Entity/Extrude.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Extrude.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Extrude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAA2C,QAAQ,EAAuF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAQ,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC1P,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAQvD,OAAO,EAAE,MAAM,EAAc,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAQ7C,OAAO,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAIjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,oBAAY,kBAAkB,GAAG,QAAQ,GAAG,MAAM,CAAC;AACnD,oBAAY,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;AAEtE,qBACa,YAAa,SAAQ,MAAM;IAYpC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAK;IAC7B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAK;IAE5B;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,CAAK;IAEhC,SAAS,CAAC,MAAM,UAAQ;IAExB,OAAO,UAAS;IAEhB,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC3B,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC3B,cAAc,EAAE,QAAQ,CAAC;IACzB,eAAe,EAAE,IAAI,CAAC;IACtB;;;;OAIG;IACH,SAAS,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAE3C;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,CAAM;IAEvC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAK;IAClC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAK;IACvC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAK;IACtC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAK;IACtC,oBAAoB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;KAAE,CAAC;;IAc1D,IAAI,WAAW,IAII,MAAM,CADxB;IACD,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,EAOxB;IACD,IAAI,WAAW,YAGd;IACD,IAAI,gBAAgB,IAAI,OAAO,CAG9B;IAED,IAAI,GAAG,IAAI,GAAG,CAGb;IAED,IAAI,gBAAgB,IAKI,MAAM,CAF7B;IAED,IAAI,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAU7B;IACD,IAAI,eAAe,IAKI,MAAM,CAF5B;IAED,IAAI,eAAe,CAAC,CAAC,EAAE,MAAM,EAU5B;IACD,IAAI,eAAe,IAKI,MAAM,CAF5B;IAED,IAAI,eAAe,CAAC,CAAC,EAAE,MAAM,EAU5B;IAED,KAAK;IAML,WAAW,CAAC,CAAC,EAAE,OAAO;IAkBtB,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAU5C,IAAI,QAAQ,IAAI,OAAO,CAGtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAYtB;IAED,IAAI,KAAK,WAGR;IACD,IAAI,MAAM,WAGT;IAED,IAAI,SAAS,IAIY,MAAM,CAD9B;IACD,IAAI,SAAS,CAAC,SAAS,EAAE,MAAM,EA0B9B;IAED,IAAI,OAAO,mBAGV;IAED;;OAEG;IACH,IAAI,YAAY,IAOK,kBAAkB,CAFtC;IAED,IAAI,YAAY,CAAC,EAAE,EAAE,kBAAkB,EAGtC;IAED;;OAEG;IACH,kBAAkB;IAUlB;;OAEG;IACH,iBAAiB,CAAC,KAAK,SAAa,EAAE,MAAM,SAAc,EAAE,SAAS,SAAiB;IActF;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,kBAAkB;IA4CzC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAgC9B;;;;;OAKG;IACH,iBAAiB;IAoBjB,IAAI,MAAM,YAGT;IAED;;OAEG;IACH,IAAI,KAAK,UAYR;IAED;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM;IAuG1B,IAAI,MAAM,WAMT;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,MAAM,GAAE,YAAY,EAAc,EAAE,cAAc,UAAO,GAAG,OAAO;IAgDtG,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,UAAQ;IAenD;;MAEE;IACF,eAAe;IA0Bf,YAAY,CAAC,MAAM,EAAE,YAAY;IAMjC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,MAAM,GAAE,YAAY,EAAc;IAQzE,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IA2CZ,SAAS,CAAC,yBAAyB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,EAAE;IAatE,sBAAsB,CAAC,QAAQ,EAAE,aAAa;IAgB9C,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa;IAmElF,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAK/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAMhD,gBAAgB;IAIhB,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAKxD;;OAEG;IACH,2BAA2B,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa;IAgF3F,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE;IAuCnC;;OAEG;IACH,OAAO,CAAC,GAAG,CAAM;IACjB,IAAI,GAAG,QAON;IAED;;;;;MAKE;IACF,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,EAAE;IA4IzD;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IA4BjD;;;OAGG;IACH,gBAAgB;IA+BhB;;;;;MAKE;IACF,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,EAAE;IA8BxD;;;;;OAKG;IACH,oBAAoB,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,OAAO;IA6EnD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE;IA0FnC,kBAAkB;IAClB,uBAAuB,CAAC,MAAM,GAAE,YAAY,EAAc;IAkB1D,mBAAmB,CAAC,YAAY,EAAE,IAAI,EAAE;IACxC,kBAAkB;IAUlB,gBAAgB;IAWhB,cAAc,CAAC,UAAU,GAAE,UAAiC;IAyC5D,IAAI,WAAW,IAAI,WAAW,CAG7B;IAED,oBAAoB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KAAE,CAAC;IACjD,IAAI,yBAAyB,YAY5B;IAGD,eAAe,EAAE,MAAM,CAAC;IAExB,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAE7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwF3B;;OAEG;IACH,IAAI,aAAa,IAAI,IAAI,EAAE,CAQ1B;IAED,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE;IAWlD,cAAc,CAAC,EAAE,CAAC,EAAE,YAAY;IAsChC,OAAO,CAAC,aAAa,CAAiB;IACtC,IAAI,YAAY,IAAI,cAAc,CAqDjC;IAED,OAAO,CAAC,aAAa,CAAiC;IACtD,SAAS,KAAK,YAAY,mBA8CzB;IAED,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,UAAQ;IAqBnD,uBAAuB,CAAC,KAAK,EAAE,OAAO;IAatC,WAAW;IAWX,kBAAkB;IAWlB,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA6CtD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAwB9D,iBAAiB,CAAC,KAAK,SAAI;IAQ3B;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ;IAK3B,aAAa,CAAC,IAAI,EAAE,QAAQ;IAM5B,OAAO,CAAC,YAAY;IAiDpB,OAAO,CAAC,aAAa;IA6BrB,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAMlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAM3B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAKhF"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Polyline.d.ts b/types/DatabaseServices/Entity/Polyline.d.ts index 759fecd..bfb61bb 100644 --- a/types/DatabaseServices/Entity/Polyline.d.ts +++ b/types/DatabaseServices/Entity/Polyline.d.ts @@ -159,6 +159,7 @@ export declare class Polyline extends Curve { GetCurveAtIndex(i: number): Curve; IntersectWith2(curve: Curve, intType: IntersectOption, tolerance?: number): import("../../GraphicsSystem/IntersectWith").IntersectResult[]; IntersectSelf(): number[]; + IsIntersectSelf(): boolean; get BoundingBox(): Box3Ext; /** * 得到曲线有用的点表和凸度(闭合曲线首尾重复) @@ -176,14 +177,13 @@ export declare class Polyline extends Curve { GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3): Vector3[]; GetGripPoints(): Array; MoveGripPoints(indexList: number[], moveVec: Vector3): void; - GetStretchPoints(): Array; + GetStretchPoints(): Vector3[]; /** * 范围拉伸(stretch),对夹点进行拉伸. * 如果对圆弧的一侧进行拉伸,那么修改bul * * @param {Array} indexList * @param {Vector3} vec - * @memberof Polyline */ MoveStretchPoints(indexList: Array, vec: Vector3): void; protected _ReadFile(file: CADFiler): void; diff --git a/types/DatabaseServices/Entity/Polyline.d.ts.map b/types/DatabaseServices/Entity/Polyline.d.ts.map index d282920..ba39387 100644 --- a/types/DatabaseServices/Entity/Polyline.d.ts.map +++ b/types/DatabaseServices/Entity/Polyline.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Polyline.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Polyline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,cAAc,EAAE,IAAI,IAAI,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC1G,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAOvD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,EAAE,eAAe,EAA6B,MAAM,oCAAoC,CAAC;AAEhG,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,WAAW,aAAa;IAE1B,EAAE,EAAE,OAAO,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACf;AACD,qBACa,QAAS,SAAQ,KAAK;IAGnB,OAAO,CAAC,SAAS;IAD7B,OAAO,CAAC,WAAW,CAAkB;gBACjB,SAAS,GAAE,aAAa,EAAO;IAKnD,cAAc,CAAC,CAAC,EAAE,OAAO;IAuBzB;;OAEG;IACH,IAAI;IAsBJ,OAAO,IAAI,IAAI;IAmCf,IAAI,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,EAKjC;IACD,IAAI,QAAQ,IANO,aAAa,EAAE,CASjC;IAED,IAAI,gBAAgB,IAAI,MAAM,CAG7B;IAED;;;;;;;;;OASG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI;IAqBzD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAUnC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAW9C;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM;IAc7B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAKhD;;;;;;OAMG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI;IAW5C,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAY5C,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAe7C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAW5C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAU/C,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI;IAoBhD,IAAI,UAAU,IAMI,OAAO,CADxB;IACD,IAAI,UAAU,CAAC,CAAC,EAAE,OAAO,EAqBxB;IACD,IAAI,QAAQ,IAOI,OAAO,CADtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAkBtB;IAED,IAAI,UAAU,IAAI,MAAM,CAGvB;IAED,IAAI,UAAU,WAGb;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAUrB;IACD,IAAI,KAAK,WA0BR;IACD,IAAI,IAAI,WAGP;IAED,IAAI,SAAS,IAAI,OAAO,CAGvB;IAED,IAAI,OAAO,IAAI,OAAO,CAGrB;IACD,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,EAKvB;IAED,kBAAkB;IAYlB,IAAI,MAAM,WAGT;IAED;;;;;;;;OAQG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAUvC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IA8BrC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAMzC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IAyCpC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAkBpC,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IAOnC;;;;;;;;OAQG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO;IAc9C,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;IA8GzD,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;IA+DxE,MAAM,CAAC,QAAQ,EAAE,MAAM;IAgCvB,cAAc,CAAC,QAAQ,EAAE,OAAO;;;;IAsBhC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,UAAQ,EAAE,SAAS,SAAO;IA+KlD;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,SAAO,GAAG,QAAQ,GAAG,SAAS;IAoBvE,iBAAiB;IACjB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,SAAO,GAAG,QAAQ,GAAG,SAAS;IAyC3E,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IAY/B,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,SAAO,GAAG,OAAO;IAW5C,SAAS,CAAC,EAAE,EAAE,OAAO;IAIrB,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAIxD,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO;IAwD7D,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,EAAE;IAS/C,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,SAA0B,GAAG,QAAQ,EAAE;IAM1F;;OAEG;IACH,OAAO,IAAI,KAAK,EAAE;IAUlB;;;;;;;;OAQG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK;IAYrC;;;;;;OAMG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQ3C;;;OAGG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK;IAqBjC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,SAAO;IAMvE,aAAa,IAAI,MAAM,EAAE;IAuBzB,eAAe;IA6Df,IAAI,WAAW,YASd;IAED;;OAEG;IACH,IAAI,OAAO,IAAI;QAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;KAAE,CAsBjD;IACD,IAAI,OAAO,YAiDV;IACD,IAAI,KAAK,0BAKR;IACD,IAAI,GAAG,WAiBN;IACD,cAAc,CAAC,UAAU,GAAE,UAAiC;IAa5D,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ;IAY/C,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;IAc9C,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IA4EZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAe/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO;IA8DpD,gBAAgB,IAAI,OAAO,EAAE;IAa7B;;;;;;OAMG;IACH,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IA+DxD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAiBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAa3B;AAED,eAAO,MAAM,YAAY,UAAiB,CAAC"} \ No newline at end of file diff --git a/types/DatabaseServices/FileServer.d.ts.map b/types/DatabaseServices/FileServer.d.ts.map index 84976fc..c560b04 100644 --- a/types/DatabaseServices/FileServer.d.ts.map +++ b/types/DatabaseServices/FileServer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FileServer.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/FileServer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAS5E,MAAM,WAAW,SAAS;IAEtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,SAAS;IAErC,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,eAAe,CAAC;KAAE,CAAC;IAEzD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;;IAoBjB,UAAU;IAwBV,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAOpD,QAAQ,CAAC,GAAG,EAAE,MAAM;IA4DpB,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAWpC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;IA+BhG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAW1C,UAAU,CAAC,QAAQ,EAAE,SAAS;IAwB9B,UAAU,CAAC,QAAQ,EAAE,SAAS;IAuBpC,OAAO,CAAC,mBAAmB;IAM3B,KAAK;CAMR"} \ No newline at end of file +{"version":3,"file":"FileServer.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/FileServer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOhD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAI5E,MAAM,WAAW,SAAS;IAEtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,SAAS;IAErC,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,eAAe,CAAC;KAAE,CAAC;IAEzD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;;IAoBjB,UAAU;IAwBV,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAOpD,QAAQ,CAAC,GAAG,EAAE,MAAM;IAkEpB,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAWpC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;IA+BhG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAW1C,UAAU,CAAC,QAAQ,EAAE,SAAS;IAwB9B,UAAU,CAAC,QAAQ,EAAE,SAAS;IAuBpC,OAAO,CAAC,mBAAmB;IAM3B,KAAK;CAMR"} \ No newline at end of file diff --git a/types/DatabaseServices/Hardware/HardwareTopline.d.ts b/types/DatabaseServices/Hardware/HardwareTopline.d.ts new file mode 100644 index 0000000..1bdee07 --- /dev/null +++ b/types/DatabaseServices/Hardware/HardwareTopline.d.ts @@ -0,0 +1,22 @@ +import { IToplineOption } from "../../UI/Components/RightPanel/RightPanelInterface"; +import { SweepSolid } from '../3DSolid/SweepSolid'; +import { CADFiler } from "../CADFiler"; +import { Curve } from "../Entity/Curve"; +export declare class HardwareTopline extends SweepSolid { + HardwareOption: IToplineOption; + DataList: [string, string][]; + private _contourRotation; + get ContourRotation(): number; + private _ContourWidth; + private get Contours(); + /** + *延伸取最大最小轮廓每段首尾到前面线段,取最长线段作为分段长 + * + */ + get Segmentations(): Curve[]; + get MaxLength(): number; + set ContourRotation(ro: number); + protected _ReadFile(file: CADFiler): void; + WriteFile(file: CADFiler): void; +} +//# sourceMappingURL=HardwareTopline.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Hardware/HardwareTopline.d.ts.map b/types/DatabaseServices/Hardware/HardwareTopline.d.ts.map new file mode 100644 index 0000000..2530d55 --- /dev/null +++ b/types/DatabaseServices/Hardware/HardwareTopline.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"HardwareTopline.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Hardware/HardwareTopline.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,qBACa,eAAgB,SAAQ,UAAU;IAE/B,cAAc,EAAE,cAAc,CAAqC;IACnE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAM;IAC9C,OAAO,CAAC,gBAAgB,CAAK;IAC7B,IAAI,eAAe,IAmMK,MAAM,CAhM7B;IACD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,KAAK,QAAQ,GAiCnB;IACD;;;OAGG;IACH,IAAI,aAAa,YAmJhB;IACD,IAAI,SAAS,WAGZ;IACD,IAAI,eAAe,CAAC,EAAE,EAAE,MAAM,EAS7B;IACD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IA8BlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CA0B3B"} \ No newline at end of file diff --git a/types/DatabaseServices/HistoricManage.d.ts.map b/types/DatabaseServices/HistoricManage.d.ts.map index ef432f1..8fe7383 100644 --- a/types/DatabaseServices/HistoricManage.d.ts.map +++ b/types/DatabaseServices/HistoricManage.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HistoricManage.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/HistoricManage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;;GAKG;AACH,qBACa,cAAe,SAAQ,SAAS;IAUtB,aAAa;IARhC,QAAQ,EAAE,MAAM,CAAM;IACtB,SAAS,SAAM;IACf,aAAa,EAAE,oBAAoB,EAAE,CAAM;IAC3C,KAAK,EAAE,OAAO,CAAS;IACvB,MAAM,EAAE,OAAO,CAAQ;IAEvB,qBAAqB,EAAE,cAAc,CAAC;gBAEnB,aAAa,UAAO;IAKvC,KAAK;IAOL,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAYvB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAYxB,IAAI,KAAK,IAAI,OAAO,CAGnB;IAED,IAAI,QAAQ,IAAI,oBAAoB,CAenC;IAGD,SAAS,CAAC,cAAc,SAAK;IAY7B;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM;IAUxB,iBAAiB,IAAI,OAAO;IAS5B,MAAM,IAAI,OAAO;IAyBjB;;OAEG;IACH,IAAI,aAAa,IAAI,GAAG,CAAC,SAAS,CAAC,CAclC;IACD,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC;IAS1E;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB,IAAI,IAAI,OAAO;IA6Bf,IAAI;IA2BJ,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB;IAI3D,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB;CAI9D"} \ No newline at end of file +{"version":3,"file":"HistoricManage.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/HistoricManage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;;GAKG;AACH,qBACa,cAAe,SAAQ,SAAS;IAUtB,aAAa;IARhC,QAAQ,EAAE,MAAM,CAAM;IACtB,SAAS,SAAM;IACf,aAAa,EAAE,oBAAoB,EAAE,CAAM;IAC3C,KAAK,EAAE,OAAO,CAAS;IACvB,MAAM,EAAE,OAAO,CAAQ;IAEvB,qBAAqB,EAAE,cAAc,CAAC;gBAEnB,aAAa,UAAO;IAKvC,KAAK;IAOL,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAYvB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAYxB,IAAI,KAAK,IAAI,OAAO,CAGnB;IAED,IAAI,QAAQ,IAAI,oBAAoB,CAenC;IAGD,SAAS,CAAC,cAAc,SAAK;IAY7B;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM;IAUxB,iBAAiB,IAAI,OAAO;IAS5B,MAAM,IAAI,OAAO;IA+BjB;;OAEG;IACH,IAAI,aAAa,IAAI,GAAG,CAAC,SAAS,CAAC,CAclC;IACD,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC;IAS1E;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB,IAAI,IAAI,OAAO;IA6Bf,IAAI;IA2BJ,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB;IAI3D,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB;CAI9D"} \ No newline at end of file diff --git a/types/DatabaseServices/Shape.d.ts b/types/DatabaseServices/Shape.d.ts index 203b5ab..f9b952d 100644 --- a/types/DatabaseServices/Shape.d.ts +++ b/types/DatabaseServices/Shape.d.ts @@ -51,7 +51,7 @@ export declare class Shape { static pairHoleAndOutline(contours: Contour[]): Shape[]; /** * 合并洞,本质是使用(并集算法)将可以并集的洞合并在一起,减少洞的数量. - * canSidewipe 用于走刀,擦边的是否合并 + * canSidewipe 用于走刀,擦边的,包含的,是否合并 */ static mergeContours(holes: Contour[], canSidewipe?: boolean): Contour[]; /** diff --git a/types/DatabaseServices/Shape.d.ts.map b/types/DatabaseServices/Shape.d.ts.map index 236ec94..8c35f9d 100644 --- a/types/DatabaseServices/Shape.d.ts.map +++ b/types/DatabaseServices/Shape.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Shape.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAQ,KAAK,IAAI,MAAM,EAAE,OAAO,EAAQ,MAAM,OAAO,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKvC,qBAAa,KAAK;IAEd,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAwB;gBAC1B,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE;IAM3C,IAAI,OAAO,IAkBM,OAAO,CAfvB;IACD,IAAI,KAAK,IAmBM,OAAO,EAAE,CAhBvB;IACD,IAAI,IAAI,WAKP;IACD,IAAI,WAAW,sCAGd;IACD,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,EAIvB;IACD,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,EAIvB;IACD,IAAI,KAAK,WAIR;IACD,IAAI,QAAQ,IAII,OAAO,CADtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAMtB;IACD,EAAE;IAQF,iBAAiB;IAOjB,WAAW,CAAC,CAAC,EAAE,OAAO;IAMtB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAelC,OAAO;IAaP,KAAK;IAOL,QAAQ,CAAC,KAAK,EAAE,MAAM;IAKtB,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IA8BZ,aAAa;IASb,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAuBrD,gBAAgB;IAShB,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAwBxD,yBAAyB,CAAC,WAAW,EAAE,KAAK,GAAG,KAAK,EAAE;IAQtD,kBAAkB,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,UAAQ,GAAG,KAAK,EAAE;IA0CvE;;;OAGG;IACH,qBAAqB,CAAC,YAAY,EAAE,KAAK,EAAE;IAoD3C,KAAK,CAAC,WAAW,EAAE,KAAK;IAWxB,OAAO,CAAC,sBAAsB;IAW9B;;;;;;;;OAQG;IACH,OAAO,CAAC,2BAA2B;IA6BnC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE;IAsBvD;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,WAAW,UAAO,GAAG,OAAO,EAAE;IAiErE;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAevC,WAAW;IAoBX,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAevB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAO3B"} \ No newline at end of file +{"version":3,"file":"Shape.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAQ,KAAK,IAAI,MAAM,EAAE,OAAO,EAAQ,MAAM,OAAO,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKvC,qBAAa,KAAK;IAEd,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAwB;gBAC1B,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE;IAM3C,IAAI,OAAO,IAkBM,OAAO,CAfvB;IACD,IAAI,KAAK,IAmBM,OAAO,EAAE,CAhBvB;IACD,IAAI,IAAI,WAKP;IACD,IAAI,WAAW,sCAGd;IACD,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,EAIvB;IACD,IAAI,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,EAIvB;IACD,IAAI,KAAK,WAIR;IACD,IAAI,QAAQ,IAII,OAAO,CADtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAMtB;IACD,EAAE;IAQF,iBAAiB;IAOjB,WAAW,CAAC,CAAC,EAAE,OAAO;IAMtB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAelC,OAAO;IAaP,KAAK;IAOL,QAAQ,CAAC,KAAK,EAAE,MAAM;IAKtB,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IA8BZ,aAAa;IASb,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAuBrD,gBAAgB;IAShB,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAwBxD,yBAAyB,CAAC,WAAW,EAAE,KAAK,GAAG,KAAK,EAAE;IAQtD,kBAAkB,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,UAAQ,GAAG,KAAK,EAAE;IA0CvE;;;OAGG;IACH,qBAAqB,CAAC,YAAY,EAAE,KAAK,EAAE;IAoD3C,KAAK,CAAC,WAAW,EAAE,KAAK;IAWxB,OAAO,CAAC,sBAAsB;IAW9B;;;;;;;;OAQG;IACH,OAAO,CAAC,2BAA2B;IA6BnC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE;IAsBvD;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,WAAW,UAAO,GAAG,OAAO,EAAE;IAmErE;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAevC,WAAW;IAoBX,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAevB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAO3B"} \ No newline at end of file diff --git a/types/DatabaseServices/SymbolTable.d.ts.map b/types/DatabaseServices/SymbolTable.d.ts.map index 8707837..4956a3c 100644 --- a/types/DatabaseServices/SymbolTable.d.ts.map +++ b/types/DatabaseServices/SymbolTable.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SymbolTable.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/SymbolTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBACa,WAAY,SAAQ,SAAS;IAEtC;;OAEG;IACS,OAAO,mBAA0B;IAE7C,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,oBAAoB,UAAO,GAAG,MAAM;IAenE,MAAM,CAAC,MAAM,EAAE,iBAAiB;IAOhC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAKlD,GAAG,CAAC,IAAI,EAAE,MAAM;IAKhB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAUlC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IASrE,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAcvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAU3B"} \ No newline at end of file +{"version":3,"file":"SymbolTable.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/SymbolTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBACa,WAAY,SAAQ,SAAS;IAEtC;;OAEG;IACS,OAAO,mBAA0B;IAE7C,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,oBAAoB,UAAO,GAAG,MAAM;IAenE,MAAM,CAAC,MAAM,EAAE,iBAAiB;IAOhC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAKlD,GAAG,CAAC,IAAI,EAAE,MAAM;IAKhB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAUlC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IASrE,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAevB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAU3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/TemplateRecord.d.ts b/types/DatabaseServices/Template/TemplateRecord.d.ts index b86d05a..acf30b6 100644 --- a/types/DatabaseServices/Template/TemplateRecord.d.ts +++ b/types/DatabaseServices/Template/TemplateRecord.d.ts @@ -41,6 +41,7 @@ export declare class TemplateRecord extends SymbolTableRecord { get Root(): TemplateRecord; get Entitys(): Entity[]; get AllEntitys(): Entity[]; + Purge(): void; Traverse(callback: (arg0: this) => void): void; TraverseAsync(callback: (arg0: this) => Promise): Promise; private _NodeDepthCache; diff --git a/types/DatabaseServices/Template/TemplateRecord.d.ts.map b/types/DatabaseServices/Template/TemplateRecord.d.ts.map index 0b99ff9..71b4305 100644 --- a/types/DatabaseServices/Template/TemplateRecord.d.ts.map +++ b/types/DatabaseServices/Template/TemplateRecord.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateRecord.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Template/TemplateRecord.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"TemplateRecord.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Template/TemplateRecord.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Editor/BufferGeometry2GeometryCacheMap.d.ts b/types/Editor/BufferGeometry2GeometryCacheMap.d.ts new file mode 100644 index 0000000..df932d1 --- /dev/null +++ b/types/Editor/BufferGeometry2GeometryCacheMap.d.ts @@ -0,0 +1,3 @@ +import { BufferGeometry, Geometry } from "three"; +export declare const BufferGeometry2GeometryCacheMap: WeakMap; +//# sourceMappingURL=BufferGeometry2GeometryCacheMap.d.ts.map \ No newline at end of file diff --git a/types/Editor/BufferGeometry2GeometryCacheMap.d.ts.map b/types/Editor/BufferGeometry2GeometryCacheMap.d.ts.map new file mode 100644 index 0000000..60c0f6c --- /dev/null +++ b/types/Editor/BufferGeometry2GeometryCacheMap.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"BufferGeometry2GeometryCacheMap.d.ts","sourceRoot":"","sources":["../../../src/Editor/BufferGeometry2GeometryCacheMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjD,eAAO,MAAM,+BAA+B,mCAA0C,CAAC"} \ No newline at end of file diff --git a/types/Editor/CommandMachine.d.ts.map b/types/Editor/CommandMachine.d.ts.map index d531cba..385750a 100644 --- a/types/Editor/CommandMachine.d.ts.map +++ b/types/Editor/CommandMachine.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandMachine.d.ts","sourceRoot":"","sources":["../../../src/Editor/CommandMachine.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,OAAO;IAEpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;CAClB;AAGD,cAAM,cAAc;IAGhB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAA8B;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,gBAAgB,CAAqB;IACvC,WAAW,CAAC,OAAO,EAAE,MAAM;IA+CjC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;IAM7C,aAAa,CAAC,OAAO,EAAE,MAAM;IAO7B,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAStD;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO;IAezD;;;OAGG;IACG,UAAU,CAAC,KAAK,GAAE,OAAe,EAAE,SAAS,UAAQ;IA4C1D,IAAI,eAAe,IAAI,GAAG,CAAC,MAAM,CAAC,CAGjC;CACJ;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAEnD,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAE,MAAW,iBAiBrE"} \ No newline at end of file +{"version":3,"file":"CommandMachine.d.ts","sourceRoot":"","sources":["../../../src/Editor/CommandMachine.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,OAAO;IAEpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;CAClB;AAGD,cAAM,cAAc;IAGhB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAA8B;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,gBAAgB,CAAqB;IACvC,WAAW,CAAC,OAAO,EAAE,MAAM;IAgDjC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;IAM7C,aAAa,CAAC,OAAO,EAAE,MAAM;IAO7B,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAStD;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO;IAezD;;;OAGG;IACG,UAAU,CAAC,KAAK,GAAE,OAAe,EAAE,SAAS,UAAQ;IA4C1D,IAAI,eAAe,IAAI,GAAG,CAAC,MAAM,CAAC,CAGjC;CACJ;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAEnD,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAE,MAAW,iBAiBrE"} \ No newline at end of file diff --git a/types/Editor/CommandRegister.d.ts.map b/types/Editor/CommandRegister.d.ts.map index 45f2e5e..7c1628f 100644 --- a/types/Editor/CommandRegister.d.ts.map +++ b/types/Editor/CommandRegister.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandRegister.d.ts","sourceRoot":"","sources":["../../../src/Editor/CommandRegister.ts"],"names":[],"mappings":"AAoNA,wBAAgB,eAAe,SAoX9B;AAED,wBAAsB,mBAAmB,kBAexC;AAED,wBAAgB,mBAAmB,SAWlC"} \ No newline at end of file +{"version":3,"file":"CommandRegister.d.ts","sourceRoot":"","sources":["../../../src/Editor/CommandRegister.ts"],"names":[],"mappings":"AA4NA,wBAAgB,eAAe,SAgY9B;AAED,wBAAsB,mBAAmB,kBAexC;AAED,wBAAgB,mBAAmB,SAWlC"} \ No newline at end of file diff --git a/types/Editor/DbClick/DbClick.d.ts.map b/types/Editor/DbClick/DbClick.d.ts.map index 9ff56f9..f6f1f8c 100644 --- a/types/Editor/DbClick/DbClick.d.ts.map +++ b/types/Editor/DbClick/DbClick.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DbClick.d.ts","sourceRoot":"","sources":["../../../../src/Editor/DbClick/DbClick.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAiCnD,qBAAa,cAAe,SAAQ,SAAS;IAEzC,SAAS,sBAsNP;CACL"} \ No newline at end of file +{"version":3,"file":"DbClick.d.ts","sourceRoot":"","sources":["../../../../src/Editor/DbClick/DbClick.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAiCnD,qBAAa,cAAe,SAAQ,SAAS;IAEzC,SAAS,sBAuNP;CACL"} \ No newline at end of file diff --git a/types/Editor/DefaultConfig.d.ts b/types/Editor/DefaultConfig.d.ts index 6e22c2d..c2a8d33 100644 --- a/types/Editor/DefaultConfig.d.ts +++ b/types/Editor/DefaultConfig.d.ts @@ -6,7 +6,7 @@ import { IDrawerConfigOption, IDoorConfigOption } from "../UI/Store/DoorInterfac import { ICylMetalsOption, IExtMetalsOption, ICompHardwareOption, IToplineOption } from "../UI/Components/RightPanel/RightPanelInterface"; import { Curve2RecOption } from "../Add-on/twoD2threeD/Modals/Curve2RecModal"; import { IUpdateBoardInfosOption } from "../UI/Components/Board/UpdateBoardInfointerface"; -import { IRec2BrOption } from "../Add-on/twoD2threeD/R2bInterface"; +import { IRec2BrOption, IRect2Br2Option } from "../Add-on/twoD2threeD/R2bInterface"; export declare const DefaultLayerBoardConfig: LayerBoardOption; export declare const DefaultVerticalBoardConfig: VerticalBoardOption; export declare const DefaultBehindBoardConfig: BehindBoardOption; @@ -39,4 +39,5 @@ export declare const DefaultKuGanOption: { rightDist: number; }; export declare const DefaultR2bOption: IRec2BrOption; +export declare const DefaultR2b2Option: IRect2Br2Option; //# sourceMappingURL=DefaultConfig.d.ts.map \ No newline at end of file diff --git a/types/Editor/DefaultConfig.d.ts.map b/types/Editor/DefaultConfig.d.ts.map index b5bde73..c173c92 100644 --- a/types/Editor/DefaultConfig.d.ts.map +++ b/types/Editor/DefaultConfig.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DefaultConfig.d.ts","sourceRoot":"","sources":["../../../src/Editor/DefaultConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAiB,mBAAmB,EAAE,iBAAiB,EAAuB,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAsD,wBAAwB,EAAe,kBAAkB,EAAE,eAAe,EAAa,MAAM,4BAA4B,CAAC;AAC5V,OAAO,EAAE,eAAe,EAAuD,MAAM,+BAA+B,CAAC;AACrH,OAAO,EAAE,gBAAgB,EAAgB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAqB,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAA0C,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE3H,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAe,cAAc,EAAE,MAAM,iDAAiD,CAAC;AACvJ,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAEnE,eAAO,MAAM,uBAAuB,EAAE,gBAkBrC,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,mBAiBxC,CAAC;AAGF,eAAO,MAAM,wBAAwB,EAAE,iBAiBtC,CAAC;AAGF,eAAO,MAAM,qBAAqB,EAAE,eA4BnC,CAAC;AAGF,eAAO,MAAM,qBAAqB,EAAE,aAanC,CAAC;AAGF,eAAO,MAAM,wBAAwB,EAAE,aAoBtC,CAAC;AAGF,eAAO,MAAM,sBAAsB,EAAE,eAUpC,CAAC;AAGF,eAAO,MAAM,wBAAwB,EAAE,iBAUtC,CAAC;AAGF,eAAO,MAAM,yBAAyB,EAAE,kBAYvC,CAAC;AAGF,eAAO,MAAM,sBAAsB,EAAE,gBAkFpC,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,cAsBjC,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,iBAyC/B,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,mBAkCjC,CAAC;AAGF,eAAO,MAAM,8BAA8B,EAAE,wBAQ5C,CAAC;AAGF,eAAO,MAAM,oBAAoB,EAAE,cAqBlC,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,eAa/B,CAAC;AAGF,eAAO,MAAM,4BAA4B,EAAE,gBAiB1C,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,gBAkBzC,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,mBAoB1C,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,cAexC,CAAC;AAGF,eAAO,MAAM,yBAAyB,EAAE,kBAwBvC,CAAC;AAGF,eAAO,MAAM,sBAAsB,EAAE,eAOpC,CAAC;AAGF,eAAO,MAAM,uBAAuB,EAAE,uBA4CrC,CAAC;AAIF,eAAO,MAAM,kBAAkB;;;;;;;CAO9B,CAAC;AAGF,eAAO,MAAM,gBAAgB,EAAE,aAyD9B,CAAC"} \ No newline at end of file +{"version":3,"file":"DefaultConfig.d.ts","sourceRoot":"","sources":["../../../src/Editor/DefaultConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAiB,mBAAmB,EAAE,iBAAiB,EAAuB,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAsD,wBAAwB,EAAe,kBAAkB,EAAE,eAAe,EAAa,MAAM,4BAA4B,CAAC;AAC5V,OAAO,EAAE,eAAe,EAAuD,MAAM,+BAA+B,CAAC;AACrH,OAAO,EAAE,gBAAgB,EAAgB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAqB,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAA0C,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE3H,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAe,cAAc,EAAE,MAAM,iDAAiD,CAAC;AACvJ,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAEpF,eAAO,MAAM,uBAAuB,EAAE,gBAkBrC,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,mBAiBxC,CAAC;AAGF,eAAO,MAAM,wBAAwB,EAAE,iBAiBtC,CAAC;AAGF,eAAO,MAAM,qBAAqB,EAAE,eA4BnC,CAAC;AAGF,eAAO,MAAM,qBAAqB,EAAE,aAanC,CAAC;AAGF,eAAO,MAAM,wBAAwB,EAAE,aAoBtC,CAAC;AAGF,eAAO,MAAM,sBAAsB,EAAE,eAUpC,CAAC;AAGF,eAAO,MAAM,wBAAwB,EAAE,iBAUtC,CAAC;AAGF,eAAO,MAAM,yBAAyB,EAAE,kBAYvC,CAAC;AAGF,eAAO,MAAM,sBAAsB,EAAE,gBAkFpC,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,cAsBjC,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,iBAyC/B,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,mBAkCjC,CAAC;AAGF,eAAO,MAAM,8BAA8B,EAAE,wBAQ5C,CAAC;AAGF,eAAO,MAAM,oBAAoB,EAAE,cAqBlC,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,eAa/B,CAAC;AAGF,eAAO,MAAM,4BAA4B,EAAE,gBAiB1C,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,gBAkBzC,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,mBAoB1C,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,cAexC,CAAC;AAGF,eAAO,MAAM,yBAAyB,EAAE,kBAwBvC,CAAC;AAGF,eAAO,MAAM,sBAAsB,EAAE,eAOpC,CAAC;AAGF,eAAO,MAAM,uBAAuB,EAAE,uBA4CrC,CAAC;AAIF,eAAO,MAAM,kBAAkB;;;;;;;CAO9B,CAAC;AAGF,eAAO,MAAM,gBAAgB,EAAE,aAyD9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,eAY/B,CAAC"} \ No newline at end of file diff --git a/types/Editor/LayoutTool.d.ts b/types/Editor/LayoutTool.d.ts index 7aefc95..f339d2b 100644 --- a/types/Editor/LayoutTool.d.ts +++ b/types/Editor/LayoutTool.d.ts @@ -1,7 +1,6 @@ import { Entity } from "../DatabaseServices/Entity/Entity"; export declare const VP_TOATER_KEY = "vp"; export declare class LayoutTool { - private colorBak; constructor(); CacheCamera(): void; Switch(): void; diff --git a/types/Editor/LayoutTool.d.ts.map b/types/Editor/LayoutTool.d.ts.map index b1d47ab..3cf68e5 100644 --- a/types/Editor/LayoutTool.d.ts.map +++ b/types/Editor/LayoutTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LayoutTool.d.ts","sourceRoot":"","sources":["../../../src/Editor/LayoutTool.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAa3D,eAAO,MAAM,aAAa,OAAO,CAAC;AA6ClC,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAS;;IAiDzB,WAAW;IAKX,MAAM;IAMN,KAAK;IAyBL,IAAI,YAAY,oEAUf;IACD,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,UAAO;IAalD,mBAAmB,CAAC,EAAE,EAAE,MAAM;IAW9B,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,UAAQ;IA8BjD,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE;IAsBrC,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE;CAetC"} \ No newline at end of file +{"version":3,"file":"LayoutTool.d.ts","sourceRoot":"","sources":["../../../src/Editor/LayoutTool.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAc3D,eAAO,MAAM,aAAa,OAAO,CAAC;AA6ClC,qBAAa,UAAU;;IAkDnB,WAAW;IAKX,MAAM;IAMN,KAAK;IAuBL,IAAI,YAAY,oEAUf;IACD,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,UAAO;IAalD,mBAAmB,CAAC,EAAE,EAAE,MAAM;IAW9B,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,UAAQ;IA8BjD,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE;IAsBrC,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE;CAetC"} \ No newline at end of file diff --git a/types/Editor/SelectBase.d.ts.map b/types/Editor/SelectBase.d.ts.map index 48d3219..b9ccfbd 100644 --- a/types/Editor/SelectBase.d.ts.map +++ b/types/Editor/SelectBase.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SelectBase.d.ts","sourceRoot":"","sources":["../../../src/Editor/SelectBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,EAAE,OAAO,EAAiC,OAAO,EAAQ,QAAQ,EAAqB,OAAO,EAA8B,MAAM,OAAO,CAAC;AAGvK,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,OAAO,EAAe,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAErD;;GAEG;AACH,qBAAa,aAAa;IAGtB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IAEtB,iBAAiB,UAAiB;IAClC,WAAW,gBAAuB;IAClC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAiB;gBAEhC,IAAI,EAAE,OAAO;IAczB;;MAEE;IACF,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM;IAa/C,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAgCpC,sBAAsB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAO9C,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAO/B;IAED,mBAAmB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAsB3C;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAK7C,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IASxC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,GAAG;QAAE,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;KAAE;IAO/E,OAAO,CAAC,0BAA0B;IA6DlC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO;IAgB/G,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO;IAItE,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAyCvC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAEtC;;;;;;;;;MASE;IACF,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;CAoBjH"} \ No newline at end of file +{"version":3,"file":"SelectBase.d.ts","sourceRoot":"","sources":["../../../src/Editor/SelectBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,EAAE,OAAO,EAA6D,OAAO,EAAQ,QAAQ,EAAqB,OAAO,EAAE,MAAM,OAAO,CAAC;AAI7K,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGlD,OAAO,EAAe,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAErD;;GAEG;AACH,qBAAa,aAAa;IAGtB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IAEtB,iBAAiB,UAAiB;IAClC,WAAW,gBAAuB;IAClC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAiB;gBAEhC,IAAI,EAAE,OAAO;IAczB;;MAEE;IACF,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM;IAa/C,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAgCpC,sBAAsB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAiB9C,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAO/B;IAED,mBAAmB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAsB3C;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAK7C,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IASxC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,GAAG;QAAE,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;KAAE;IAO/E,OAAO,CAAC,0BAA0B;IA6DlC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO;IAgB/G,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO;IAItE,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAyCvC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAEtC;;;;;;;;;MASE;IACF,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;CAoBjH"} \ No newline at end of file diff --git a/types/Editor/SnapServices.d.ts.map b/types/Editor/SnapServices.d.ts.map index d064536..2ca3fd6 100644 --- a/types/Editor/SnapServices.d.ts.map +++ b/types/Editor/SnapServices.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SnapServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/SnapServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuE,OAAO,EAAE,MAAM,OAAO,CAAC;AAkBrG,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD;;GAEG;AACH,oBAAY,YAAY;IAEpB,KAAK,IAAI;IACT,KAAK,IAAI;CACZ;AAqCD,qBAAa,YAAY;IAErB,QAAQ,EAAE,OAAO,CAAS;IAC1B,WAAW,UAAQ;IACnB,QAAQ,SAAM;IACd,YAAY,eAAsB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAsB;IACpD,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,KAAK,CAAU;IAEvB,iBAAiB;IACjB,YAAY,EAAE,OAAO,CAAC;IAEtB,KAAK,CAAC,MAAM,EAAE,cAAc;IA+C5B,IAAI;IAmBJ,IAAI,QAAQ,mBAGX;IAED,IAAI,QAAQ,CAAC,IAAI,gBAAA,EAOhB;IAED,OAAO,CAAC,aAAa;IAYrB;;;OAGG;IACH,YAAY,IAAI,OAAO,GAAG,SAAS;IASnC,OAAO,CAAC,oBAAoB,CAAC;IAE7B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,kBAAkB;IA8J1B,OAAO,CAAC,oBAAoB;IAgD5B,OAAO,CAAC,gBAAgB;IAqBxB;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ;IAgHhB,OAAO,CAAC,gBAAgB;IAyJxB;;OAEG;IACH,OAAO,CAAC,aAAa,CAAkB;IACvC;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,oBAAoB,CAAO;IAEnC,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,gBAAgB,CAAO;IAE/B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,gBAAgB,CAAO;IAC/B,mBAAmB,EAAE,OAAO,EAAE,CAAM;IACpC,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,UAAU;IAqClB,aAAa;IAQb,eAAe;CA+DlB"} \ No newline at end of file +{"version":3,"file":"SnapServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/SnapServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuE,OAAO,EAAE,MAAM,OAAO,CAAC;AAsBrG,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD;;GAEG;AACH,oBAAY,YAAY;IAEpB,KAAK,IAAI;IACT,KAAK,IAAI;CACZ;AAqCD,qBAAa,YAAY;IAErB,QAAQ,EAAE,OAAO,CAAS;IAC1B,WAAW,UAAQ;IACnB,QAAQ,SAAM;IACd,YAAY,eAAsB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAsB;IACpD,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,KAAK,CAAU;IAEvB,iBAAiB;IACjB,YAAY,EAAE,OAAO,CAAC;IAEtB,KAAK,CAAC,MAAM,EAAE,cAAc;IA+C5B,IAAI;IAmBJ,IAAI,QAAQ,mBAGX;IAED,IAAI,QAAQ,CAAC,IAAI,gBAAA,EAOhB;IAED,OAAO,CAAC,aAAa;IAYrB;;;OAGG;IACH,YAAY,IAAI,OAAO,GAAG,SAAS;IASnC,OAAO,CAAC,oBAAoB,CAAC;IAE7B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,kBAAkB;IA+K1B,OAAO,CAAC,oBAAoB;IAgD5B,OAAO,CAAC,gBAAgB;IAqBxB;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ;IAgHhB,OAAO,CAAC,gBAAgB;IAyJxB;;OAEG;IACH,OAAO,CAAC,aAAa,CAAkB;IACvC;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,oBAAoB,CAAO;IAEnC,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,gBAAgB,CAAO;IAE/B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,gBAAgB,CAAO;IAC/B,mBAAmB,EAAE,OAAO,EAAE,CAAM;IACpC,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,UAAU;IAqClB,aAAa;IAQb,eAAe;CA+DlB"} \ No newline at end of file diff --git a/types/Editor/UserConfig.d.ts b/types/Editor/UserConfig.d.ts index 6ec3ba3..776a742 100644 --- a/types/Editor/UserConfig.d.ts +++ b/types/Editor/UserConfig.d.ts @@ -14,10 +14,13 @@ export interface ISystemConfig extends IBaseOption { aaType: AAType; maxHightightCount: number; snapSize: number; + background: string; + layoutBackground: string; } export interface ICursorConfig extends IBaseOption { D2: number; D3: number; + SquareSize: number; } export declare class UserConfig implements IConfigStore { private readonly _version; @@ -66,6 +69,8 @@ export declare class UserConfig implements IConfigStore { }; lineWidth: number; forceFilterPxl: boolean; + checkSealing: boolean; + sealingColorMap: [string, string][]; constructor(); Init(): void; set RenderType(t: RenderType); @@ -108,6 +113,8 @@ export declare class UserConfig implements IConfigStore { dimTextHeight: number; lineWidth: number; forceFilterPxl: boolean; + checkSealing: boolean; + sealingColorMap: [string, string][]; }; }; UpdateOption(config: IConfigOption): void; diff --git a/types/Editor/UserConfig.d.ts.map b/types/Editor/UserConfig.d.ts.map index 03741a7..7592a33 100644 --- a/types/Editor/UserConfig.d.ts.map +++ b/types/Editor/UserConfig.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"UserConfig.d.ts","sourceRoot":"","sources":["../../../src/Editor/UserConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,aAAc,SAAQ,WAAW;IAE9C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAE9C,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAE9C,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,UAAW,YAAW,YAAY;IAE3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;IAC/B,WAAW,EAAE,UAAU,CAAwB;IACnC,OAAO,EAAE,aAAa,CAIhC;IACU,OAAO,CAAC,aAAa,CAA4C;IACjE,mBAAmB,UAAQ;IAC3B,sBAAsB,UAAQ;IAC1C,kBAAkB;IACN,cAAc,UAAQ;IAClC,cAAc,EAAE,eAAe,CAAC;IAChC,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KAAE,CAAM;IAChD,OAAO,CAAC,gBAAgB,CAAM;IAClB,OAAO,UAAS;IAC5B,QAAQ,UAAS;IACjB,MAAM,QAAM;IACA,SAAS,EAAE,aAAa,CAIlC;IACU,YAAY,EAAE,aAAa,CAIrC;IACU,WAAW,EAAE,WAAW,CAAkB;IAC1C,aAAa,UAAQ;IACrB,UAAU,EAAE,aAAa,CAGnC;IACU,cAAc;;;MAGxB;IACU,SAAS,UAAS;IAClB,UAAU,UAAS;IACnB,gBAAgB,UAAQ;IACxB,aAAa;;;;;;;;MAQvB;IACU,SAAS,UAAS;IAC9B,aAAa,SAAM;IAEP,iBAAiB;;;;MAI3B;IACF,SAAS,SAAK;IACF,cAAc,UAAQ;;IAKlC,IAAI;IAMJ,IAAI,UAAU,CAAC,CAAC,EAAE,UAAU,EAS3B;IAED,IAAI,UAAU,IAXI,UAAU,CAWiB;IAE7C,kBAAkB;IAClB,IAAI,YAAY,IAIS,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CADrD;IACD,IAAI,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,EAIrD;IACD,oBAAoB;IACpB,UAAU,SAAa;IACvB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,UAAU;IAuBV,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyBV,YAAY,CAAC,MAAM,EAAE,aAAa;CAuDrC;AAED,eAAO,MAAM,UAAU,YAAmB,CAAC"} \ No newline at end of file +{"version":3,"file":"UserConfig.d.ts","sourceRoot":"","sources":["../../../src/Editor/UserConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,aAAc,SAAQ,WAAW;IAE9C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAE9C,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAE9C,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,UAAW,YAAW,YAAY;IAE3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;IAC/B,WAAW,EAAE,UAAU,CAAwB;IACnC,OAAO,EAAE,aAAa,CAIhC;IACU,OAAO,CAAC,aAAa,CAA4C;IACjE,mBAAmB,UAAQ;IAC3B,sBAAsB,UAAQ;IAC1C,kBAAkB;IACN,cAAc,UAAQ;IAClC,cAAc,EAAE,eAAe,CAAC;IAChC,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KAAE,CAAM;IAChD,OAAO,CAAC,gBAAgB,CAAM;IAClB,OAAO,UAAS;IAC5B,QAAQ,UAAS;IACjB,MAAM,QAAM;IACA,SAAS,EAAE,aAAa,CAIlC;IACU,YAAY,EAAE,aAAa,CAMrC;IACU,WAAW,EAAE,WAAW,CAAkB;IAC1C,aAAa,UAAQ;IACrB,UAAU,EAAE,aAAa,CAInC;IACU,cAAc;;;MAGxB;IACU,SAAS,UAAS;IAClB,UAAU,UAAS;IACnB,gBAAgB,UAAQ;IACxB,aAAa;;;;;;;;MAQvB;IACU,SAAS,UAAS;IAC9B,aAAa,SAAM;IAEP,iBAAiB;;;;MAI3B;IACF,SAAS,SAAK;IACF,cAAc,UAAQ;IAClC,YAAY,UAAS;IACrB,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAM;;IAKzC,IAAI;IAMJ,IAAI,UAAU,CAAC,CAAC,EAAE,UAAU,EAU3B;IAED,IAAI,UAAU,IAZI,UAAU,CAYiB;IAE7C,kBAAkB;IAClB,IAAI,YAAY,IAIS,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CADrD;IACD,IAAI,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,EAIrD;IACD,oBAAoB;IACpB,UAAU,SAAa;IACvB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,UAAU;IAuBV,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BV,YAAY,CAAC,MAAM,EAAE,aAAa;CA6DrC;AAED,eAAO,MAAM,UAAU,YAAmB,CAAC"} \ No newline at end of file diff --git a/types/Geometry/BufferGeometryUtils.d.ts.map b/types/Geometry/BufferGeometryUtils.d.ts.map index eb153e3..e314b50 100644 --- a/types/Geometry/BufferGeometryUtils.d.ts.map +++ b/types/Geometry/BufferGeometryUtils.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BufferGeometryUtils.d.ts","sourceRoot":"","sources":["../../../src/Geometry/BufferGeometryUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAS,MAAM,OAAO,CAAC;AAEvF,yBAAiB,mBAAmB,CACpC;IACI,SAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,cAAc,CAG5D;IAED;;;;;OAKG;IACH,SAAgB,SAAS,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAetE;IAGD,SAAgB,aAAa,kBAa5B;IAED,SAAgB,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,SAAS,GAAE,OAAe,GAAG,cAAc,CAuK9G;IAED,SAAgB,qBAAqB,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,eAAe,CAuCpF;CAEJ"} \ No newline at end of file +{"version":3,"file":"BufferGeometryUtils.d.ts","sourceRoot":"","sources":["../../../src/Geometry/BufferGeometryUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAS,MAAM,OAAO,CAAC;AAGvF,yBAAiB,mBAAmB,CACpC;IACI,SAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,cAAc,CAG5D;IAED;;;;;OAKG;IACH,SAAgB,SAAS,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAgBtE;IAGD,SAAgB,aAAa,kBAa5B;IAED,SAAgB,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,SAAS,GAAE,OAAe,GAAG,cAAc,CAuK9G;IAED,SAAgB,qBAAqB,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,eAAe,CAuCpF;CAEJ"} \ No newline at end of file diff --git a/types/Geometry/CreateContour2.d.ts.map b/types/Geometry/CreateContour2.d.ts.map index 5d43d6d..9cf9621 100644 --- a/types/Geometry/CreateContour2.d.ts.map +++ b/types/Geometry/CreateContour2.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CreateContour2.d.ts","sourceRoot":"","sources":["../../../src/Geometry/CreateContour2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAKzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,SAAO,GAAG,OAAO,GAAG,SAAS,CAuFhF"} \ No newline at end of file +{"version":3,"file":"CreateContour2.d.ts","sourceRoot":"","sources":["../../../src/Geometry/CreateContour2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAKzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,SAAO,GAAG,OAAO,GAAG,SAAS,CA2FhF"} \ No newline at end of file diff --git a/types/Geometry/DrillParse/Face.d.ts b/types/Geometry/DrillParse/Face.d.ts index 5b0fa31..0a1686d 100644 --- a/types/Geometry/DrillParse/Face.d.ts +++ b/types/Geometry/DrillParse/Face.d.ts @@ -1,4 +1,4 @@ -import { Matrix4, Vector3 } from "three"; +import { Box3, Matrix4, Vector3 } from "three"; import { Board } from "../../DatabaseServices/Entity/Board"; import { Region } from "../../DatabaseServices/Entity/Region"; import { BoardFaceType } from "./BoardGetFace"; @@ -28,6 +28,9 @@ export declare class Face { get OCSInv(): Matrix4; get Normal(): Vector3; Intersect(f: Face): Face[]; - IsIntersect(f: Face, fuzz?: number): boolean; + IsIntersect(f: Face, fuzz?: number, currentCoverBoxes?: Box3[]): { + isInt: boolean; + coverBoxesList?: Box3[]; + }; } //# sourceMappingURL=Face.d.ts.map \ No newline at end of file diff --git a/types/Geometry/DrillParse/Face.d.ts.map b/types/Geometry/DrillParse/Face.d.ts.map index 18f44ef..2fa5d4d 100644 --- a/types/Geometry/DrillParse/Face.d.ts.map +++ b/types/Geometry/DrillParse/Face.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Face.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/DrillParse/Face.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAI9D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAI/C,MAAM,WAAW,eAAe;IAE5B,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,qBAAa,IAAI;IAEb,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,OAAO,CAAS;IACxB,UAAU,EAAE,KAAK,CAAC;IAClB,UAAU,EAAE,KAAK,CAAC;IAClB,WAAW,EAAE,OAAO,CAAS;IAC7B,GAAG,EAAE,OAAO,CAAiB;IAC7B,MAAM,EAAE,OAAO,CAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;gBACN,UAAU,CAAC,EAAE,eAAe;IAkBxC,IAAI,MAAM,WAKT;IACD,IAAI,MAAM,YAGT;IACD,IAAI,MAAM,YAGT;IACD,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE;IAiF1B,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAO,GAAG,OAAO;CAwD7C"} \ No newline at end of file +{"version":3,"file":"Face.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/DrillParse/Face.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAI9D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAI/C,MAAM,WAAW,eAAe;IAE5B,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,qBAAa,IAAI;IAEb,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,OAAO,CAAS;IACxB,UAAU,EAAE,KAAK,CAAC;IAClB,UAAU,EAAE,KAAK,CAAC;IAClB,WAAW,EAAE,OAAO,CAAS;IAC7B,GAAG,EAAE,OAAO,CAAiB;IAC7B,MAAM,EAAE,OAAO,CAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;gBACN,UAAU,CAAC,EAAE,eAAe;IAkBxC,IAAI,MAAM,WAKT;IACD,IAAI,MAAM,YAGT;IACD,IAAI,MAAM,YAGT;IACD,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE;IAiF1B,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAO,EAAE,iBAAiB,GAAE,IAAI,EAAO,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;KAAE;CAwHlH"} \ No newline at end of file diff --git a/types/Geometry/ExtrudeEdgeGeometry2.d.ts b/types/Geometry/ExtrudeEdgeGeometry2.d.ts index e81013e..8e1f3ac 100644 --- a/types/Geometry/ExtrudeEdgeGeometry2.d.ts +++ b/types/Geometry/ExtrudeEdgeGeometry2.d.ts @@ -8,6 +8,9 @@ export declare enum DepthType { Back = 2, All = 3 } +export declare const ExtrudeBuildConfig: { + bevel: boolean; +}; /** * 槽的几何数据,包括槽的墙面和槽的盖子 */ @@ -38,7 +41,7 @@ export declare class ContourTreeNode { parent: ContourTreeNode; constructor(contour: Contour, children?: ContourTreeNode[]); SetParent(node: ContourTreeNode): void; - Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean): void; + Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean, allDepth: number): void; static ParseContourTree(contourNodes: ContourTreeNode[]): void; } declare class EdgeGeometryBuild { @@ -69,7 +72,7 @@ export declare class CurveTapeShape { */ private ReverseClipTo; ChildrenClip(): void; - Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean): void; + Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean, allDepth: number): void; } /** * 曲线胶带(一维) @@ -137,9 +140,10 @@ export declare class ExtrudeGeometryBuilder { uvArray: number[]; edgeAndLidBuilder: EdgeGeometryBuild; constructor(br: ExtrudeSolid); + protected GenerateMeshData(br: ExtrudeSolid): void; get MeshGeometry(): BufferGeometry; get EdgeGeometry(): BufferGeometry; - private ParseGrooves; + protected ParseGrooves(): Groove[]; } export {}; //# sourceMappingURL=ExtrudeEdgeGeometry2.d.ts.map \ No newline at end of file diff --git a/types/Geometry/ExtrudeEdgeGeometry2.d.ts.map b/types/Geometry/ExtrudeEdgeGeometry2.d.ts.map index 8d4c7c0..073a4e1 100644 --- a/types/Geometry/ExtrudeEdgeGeometry2.d.ts.map +++ b/types/Geometry/ExtrudeEdgeGeometry2.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ExtrudeEdgeGeometry2.d.ts","sourceRoot":"","sources":["../../../src/Geometry/ExtrudeEdgeGeometry2.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ExtrudeEdgeGeometry2.d.ts","sourceRoot":"","sources":["../../../src/Geometry/ExtrudeEdgeGeometry2.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Geometry/FastOffset.d.ts b/types/Geometry/FastOffset.d.ts new file mode 100644 index 0000000..6cfb728 --- /dev/null +++ b/types/Geometry/FastOffset.d.ts @@ -0,0 +1,10 @@ +import { Vector3 } from "three"; +/** + * 快速的对点表进行偏移 + * @param contour + * @param [offsetDist=1] + * @param [ignoreSpike=true] 忽略尖角优化(如果不忽略,那么尖角将会变钝(有点奇怪)) + * @returns 偏移后的点表 + */ +export declare function FastOffset(contour: Vector3[], offsetDist?: number, ignoreSpike?: boolean): Vector3[]; +//# sourceMappingURL=FastOffset.d.ts.map \ No newline at end of file diff --git a/types/Geometry/FastOffset.d.ts.map b/types/Geometry/FastOffset.d.ts.map new file mode 100644 index 0000000..6210df3 --- /dev/null +++ b/types/Geometry/FastOffset.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"FastOffset.d.ts","sourceRoot":"","sources":["../../../src/Geometry/FastOffset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,OAAO,EAAE,MAAM,OAAO,CAAC;AAI/C;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,UAAU,SAAI,EAAE,WAAW,UAAO,GAAG,OAAO,EAAE,CAY5F"} \ No newline at end of file diff --git a/types/Geometry/GeUtils.d.ts b/types/Geometry/GeUtils.d.ts index d1974a2..90d1f17 100644 --- a/types/Geometry/GeUtils.d.ts +++ b/types/Geometry/GeUtils.d.ts @@ -125,5 +125,7 @@ export declare function SnapPoint(sqCenter: Vector3, snapPt: Vector3, size: numb export declare function SelectNearP(pts: Vector3[], refPt: Vector3): Vector3; /**n是否在AB之间,fuzz 若为负的,允许相等 */ export declare function IsBetweenA2B(n: number, A: number, B: number, fuzz?: number): boolean; +/** 矩阵是世界坐标系 */ +export declare function MatrixIsIdentityCS(mtx: Matrix4): boolean; export {}; //# sourceMappingURL=GeUtils.d.ts.map \ No newline at end of file diff --git a/types/Geometry/GeUtils.d.ts.map b/types/Geometry/GeUtils.d.ts.map index f760c8e..0c0ded9 100644 --- a/types/Geometry/GeUtils.d.ts.map +++ b/types/Geometry/GeUtils.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GeUtils.d.ts","sourceRoot":"","sources":["../../../src/Geometry/GeUtils.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"GeUtils.d.ts","sourceRoot":"","sources":["../../../src/Geometry/GeUtils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Geometry/SpaceParse/ClampSpaceParseKey.d.ts.map b/types/Geometry/SpaceParse/ClampSpaceParseKey.d.ts.map index 3242e5a..58f1019 100644 --- a/types/Geometry/SpaceParse/ClampSpaceParseKey.d.ts.map +++ b/types/Geometry/SpaceParse/ClampSpaceParseKey.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ClampSpaceParseKey.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/ClampSpaceParseKey.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,mBAAmB;IAEvD;;;;;MAKE;IACI,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;CAsBhF"} \ No newline at end of file +{"version":3,"file":"ClampSpaceParseKey.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/ClampSpaceParseKey.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,mBAAmB;IAEvD;;;;;MAKE;IACI,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;CAyBhF"} \ No newline at end of file diff --git a/types/GraphicsSystem/GripScene.d.ts.map b/types/GraphicsSystem/GripScene.d.ts.map index ee52359..53b8175 100644 --- a/types/GraphicsSystem/GripScene.d.ts.map +++ b/types/GraphicsSystem/GripScene.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GripScene.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/GripScene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAKzE,qBAAa,SAAU,SAAQ,QAAQ;IAGnC,aAAa,EAAE,cAAc,CAAC;IAE9B,QAAQ,0HAA+B;;IAWvC,MAAM,CAAC,GAAG,EAAE,QAAQ;IAgBpB,MAAM,CAAC,GAAG,EAAE,QAAQ;IAYpB,KAAK;IASL,MAAM,CAAC,MAAM,EAAE,QAAQ;IAKvB,SAAS;CAqBZ"} \ No newline at end of file +{"version":3,"file":"GripScene.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/GripScene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAKzE,qBAAa,SAAU,SAAQ,QAAQ;IAGnC,aAAa,EAAE,cAAc,CAAC;IAE9B,QAAQ,0HAA+B;;IAWvC,MAAM,CAAC,GAAG,EAAE,QAAQ;IAiBpB,MAAM,CAAC,GAAG,EAAE,QAAQ;IAYpB,KAAK;IASL,MAAM,CAAC,MAAM,EAAE,QAAQ;IAKvB,SAAS;CAqBZ"} \ No newline at end of file diff --git a/types/GraphicsSystem/OffsetPolyline.d.ts.map b/types/GraphicsSystem/OffsetPolyline.d.ts.map index d77bdb4..3515ebe 100644 --- a/types/GraphicsSystem/OffsetPolyline.d.ts.map +++ b/types/GraphicsSystem/OffsetPolyline.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OffsetPolyline.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/OffsetPolyline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAM/C,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAO/D,UAAU,aAAa;IAEnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC;CAC1B;AAED,cAAM,aAAa;IAKI,KAAK,EAAE,KAAK;IAH/B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,GAAG,EAAE,IAAI,CAAC;IACV,IAAI,EAAE,OAAO,CAAC;gBACK,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI;IAK3C,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI;IAiDlC,IAAI,KAAK,oBAUR;CACJ;AAED,qBAAa,cAAc;IA0BJ,SAAS,EAAE,QAAQ;IAAS,WAAW,EAAE,MAAM;IAAS,SAAS;IAChF,OAAO,CAAC,aAAa;IAxBzB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,KAAK,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IAGnB,kBAAkB,EAAE,aAAa,EAAE,CAAC;IAEpC,eAAe,EAAE,aAAa,EAAE,CAAC;IAEjC,qBAAqB,EAAE,aAAa,EAAE,CAAC;IAGvC,qBAAqB,EAAE,OAAO,EAAE,CAAC;IACjC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAG5B,UAAU,EAAE,QAAQ,EAAE,CAAC;IAEvB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;gBAEL,SAAS,EAAE,QAAQ,EAAS,WAAW,EAAE,MAAM,EAAS,SAAS,UAAQ,EAChF,aAAa,SAA2B;IAKpD,EAAE,IAAI,QAAQ,EAAE;IAoChB,aAAa;IAUb,SAAS,CAAC,wBAAwB;IAWlC,SAAS,CAAC,eAAe;IAkBzB,SAAS,CAAC,aAAa;IA8JvB,OAAO,CAAC,aAAa;IAUrB,SAAS,CAAC,mBAAmB;IAoK7B,SAAS,CAAC,cAAc;IAuBxB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,aAAa;IAoCrB,OAAO,CAAC,kBAAkB;IAwE1B,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IAKnC,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IA0FvC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO;CAOvE"} \ No newline at end of file +{"version":3,"file":"OffsetPolyline.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/OffsetPolyline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAK/C,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAM/D,UAAU,aAAa;IAEnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC;CAC1B;AAED,cAAM,aAAa;IAKI,KAAK,EAAE,KAAK;IAH/B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,GAAG,EAAE,IAAI,CAAC;IACV,IAAI,EAAE,OAAO,CAAC;gBACK,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI;IAK3C,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI;IAiDlC,IAAI,KAAK,oBAUR;CACJ;AAED,qBAAa,cAAc;IA0BJ,SAAS,EAAE,QAAQ;IAAS,WAAW,EAAE,MAAM;IAAS,SAAS;IAChF,OAAO,CAAC,aAAa;IAxBzB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,KAAK,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IAGnB,kBAAkB,EAAE,aAAa,EAAE,CAAC;IAEpC,eAAe,EAAE,aAAa,EAAE,CAAC;IAEjC,qBAAqB,EAAE,aAAa,EAAE,CAAC;IAGvC,qBAAqB,EAAE,OAAO,EAAE,CAAC;IACjC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAG5B,UAAU,EAAE,QAAQ,EAAE,CAAC;IAEvB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;gBAEL,SAAS,EAAE,QAAQ,EAAS,WAAW,EAAE,MAAM,EAAS,SAAS,UAAQ,EAChF,aAAa,SAA2B;IAKpD,EAAE,IAAI,QAAQ,EAAE;IAoChB,aAAa;IAUb,SAAS,CAAC,wBAAwB;IAWlC,SAAS,CAAC,eAAe;IAkBzB,SAAS,CAAC,aAAa;IA8JvB,OAAO,CAAC,aAAa;IAUrB,SAAS,CAAC,mBAAmB;IAoK7B,SAAS,CAAC,cAAc;IAqBxB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,aAAa;IAoCrB,OAAO,CAAC,kBAAkB;IAwE1B,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IAKnC,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IA0FvC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO;CAOvE"} \ No newline at end of file diff --git a/types/GraphicsSystem/RenderType.d.ts b/types/GraphicsSystem/RenderType.d.ts index b72d2ba..88be43f 100644 --- a/types/GraphicsSystem/RenderType.d.ts +++ b/types/GraphicsSystem/RenderType.d.ts @@ -18,6 +18,7 @@ export declare enum RenderType { Print = 5, /**物理带线框 */ Physical2 = 6, + Edge = 7, /******************************************** 在视口时的渲染模式 */ /** * 线框模式 diff --git a/types/GraphicsSystem/RenderType.d.ts.map b/types/GraphicsSystem/RenderType.d.ts.map index 6772d23..52af22f 100644 --- a/types/GraphicsSystem/RenderType.d.ts.map +++ b/types/GraphicsSystem/RenderType.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RenderType.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/RenderType.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,oBAAY,UAAU;IAElB;;OAEG;IACH,SAAS,IAAI;IAEb;;OAEG;IACH,UAAU,IAAI;IAGd;;OAEG;IACH,QAAQ,IAAI;IAEZ,GAAG,IAAI;IACP,KAAK,IAAI;IACT,WAAW;IACX,SAAS,IAAI;IAEb,0DAA0D;IAC1D;;MAEE;IACF,cAAc,MAAM;IAEpB;;OAEG;IACH,eAAe,MAAM;IAGrB;;OAEG;IACH,aAAa,MAAM;IAEnB,QAAQ,MAAM;IACd,UAAU,MAAM;IAChB,WAAW;IACX,cAAc,MAAM;CACvB"} \ No newline at end of file +{"version":3,"file":"RenderType.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/RenderType.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,oBAAY,UAAU;IAElB;;OAEG;IACH,SAAS,IAAI;IAEb;;OAEG;IACH,UAAU,IAAI;IAGd;;OAEG;IACH,QAAQ,IAAI;IAEZ,GAAG,IAAI;IACP,KAAK,IAAI;IACT,WAAW;IACX,SAAS,IAAI;IACb,IAAI,IAAI;IAER,0DAA0D;IAC1D;;MAEE;IACF,cAAc,MAAM;IAEpB;;OAEG;IACH,eAAe,MAAM;IAGrB;;OAEG;IACH,aAAa,MAAM;IAEnB,QAAQ,MAAM;IACd,UAAU,MAAM;IAChB,WAAW;IACX,cAAc,MAAM;CACvB"} \ No newline at end of file diff --git a/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts b/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts index e5b4740..35e40ad 100644 --- a/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts +++ b/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts @@ -2,6 +2,7 @@ import { Singleton } from "../../Common/Singleton"; import { ExtrudeHole } from "../../DatabaseServices/3DSolid/ExtrudeHole"; import { Board, IModeling } from "../../DatabaseServices/Entity/Board"; import { Curve } from "../../DatabaseServices/Entity/Curve"; +import { ExtureContourCurve } from "../../DatabaseServices/Entity/Extrude"; import { Shape } from "../../DatabaseServices/Shape"; /** *计算走刀工具类 @@ -20,12 +21,15 @@ export declare class FeedingToolPath extends Singleton { * 计算走刀路径 */ CalcPath(modelings: IModeling[], br: Board): Curve[]; - GetModelFeedPath(br: Board, m: IModeling): Curve[]; + GetModelFeedPath(br: { + Thickness: number; + ContourCurve: ExtureContourCurve; + }, m: IModeling): Curve[]; private GrooveAddSize; private GetContours; CheckModeling(br: Board): number[]; CheckCustomHole(br: Board): ExtrudeHole[]; - HandleThoughGroove(br: Board, shape: Shape, knifeRadius: number): void; + HandleThoughGroove(brCon: ExtureContourCurve, shape: Shape, knifeRadius: number): void; } export declare function GetModelingFromCustomDrill(br: Board): { modeling: (IModeling & { diff --git a/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts.map b/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts.map index 0ed1a9e..3b08738 100644 --- a/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts.map +++ b/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FeedingToolPath.d.ts","sourceRoot":"","sources":["../../../../src/GraphicsSystem/ToolPath/FeedingToolPath.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAEzE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEvE,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAG5D,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAcrD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAE1C;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IA0InB,cAAc;IACd,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,UAAQ;IAiEpC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE;IASpD,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,GAAG,KAAK,EAAE;IA8ClD,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,WAAW;IAuCnB,aAAa,CAAC,EAAE,EAAE,KAAK;IAcvB,eAAe,CAAC,EAAE,EAAE,KAAK;IAoBzB,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM;CAuHlE;AACD,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,KAAK;;kBAKT,WAAW;;;kBACP,WAAW;;EAwGzD"} \ No newline at end of file +{"version":3,"file":"FeedingToolPath.d.ts","sourceRoot":"","sources":["../../../../src/GraphicsSystem/ToolPath/FeedingToolPath.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAEzE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEvE,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG3E,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAcrD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAE1C;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IA0InB,cAAc;IACd,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,UAAQ;IAkBpC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE;IASpD,gBAAgB,CAAC,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,kBAAkB,CAAC;KAAE,EAAE,CAAC,EAAE,SAAS,GAAG,KAAK,EAAE;IA+CrG,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,WAAW;IAuCnB,aAAa,CAAC,EAAE,EAAE,KAAK;IAcvB,eAAe,CAAC,EAAE,EAAE,KAAK;IAoBzB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM;CAsHlF;AACD,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,KAAK;;kBAKT,WAAW;;;kBACP,WAAW;;EAwGzD"} \ No newline at end of file diff --git a/types/GraphicsSystem/ToolPath/VKnifToolPath.d.ts b/types/GraphicsSystem/ToolPath/VKnifToolPath.d.ts index 1795214..73b4616 100644 --- a/types/GraphicsSystem/ToolPath/VKnifToolPath.d.ts +++ b/types/GraphicsSystem/ToolPath/VKnifToolPath.d.ts @@ -1,3 +1,4 @@ +import { Curve } from "../../DatabaseServices/Entity/Curve"; import { Polyline } from "../../DatabaseServices/Entity/Polyline"; import { Vec3 } from "../../Geometry/IVec3"; /** @@ -10,4 +11,8 @@ export declare function VKnifToolPath(polyline: Polyline, feedingDepth: number, pt: Vec3; bul: number; }[]; +export declare function VData2Curve(data: { + pt: Vec3; + bul: number; +}[]): Curve[]; //# sourceMappingURL=VKnifToolPath.d.ts.map \ No newline at end of file diff --git a/types/GraphicsSystem/ToolPath/VKnifToolPath.d.ts.map b/types/GraphicsSystem/ToolPath/VKnifToolPath.d.ts.map index e144721..95925df 100644 --- a/types/GraphicsSystem/ToolPath/VKnifToolPath.d.ts.map +++ b/types/GraphicsSystem/ToolPath/VKnifToolPath.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"VKnifToolPath.d.ts","sourceRoot":"","sources":["../../../../src/GraphicsSystem/ToolPath/VKnifToolPath.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAElE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG5C;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;CAAE,EAAE,CAmEvH"} \ No newline at end of file +{"version":3,"file":"VKnifToolPath.d.ts","sourceRoot":"","sources":["../../../../src/GraphicsSystem/ToolPath/VKnifToolPath.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAElE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG5C;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;CAAE,EAAE,CAmEvH;AAGD,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;CAAE,EAAE,WAiB7D"} \ No newline at end of file diff --git a/types/Loader/ExrLoader.d.ts b/types/Loader/ExrLoader.d.ts new file mode 100644 index 0000000..5087ec6 --- /dev/null +++ b/types/Loader/ExrLoader.d.ts @@ -0,0 +1,3 @@ +import { Texture } from "three"; +export declare function LoadDefaultExr(): Promise; +//# sourceMappingURL=ExrLoader.d.ts.map \ No newline at end of file diff --git a/types/Loader/ExrLoader.d.ts.map b/types/Loader/ExrLoader.d.ts.map new file mode 100644 index 0000000..b267a45 --- /dev/null +++ b/types/Loader/ExrLoader.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ExrLoader.d.ts","sourceRoot":"","sources":["../../../src/Loader/ExrLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA6B,MAAM,OAAO,CAAC;AAM3D,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAmBvD"} \ No newline at end of file diff --git a/types/Loader/ImageLoader.d.ts.map b/types/Loader/ImageLoader.d.ts.map index 3ab629e..709396c 100644 --- a/types/Loader/ImageLoader.d.ts.map +++ b/types/Loader/ImageLoader.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ImageLoader.d.ts","sourceRoot":"","sources":["../../../src/Loader/ImageLoader.ts"],"names":[],"mappings":"AAMA,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,iBAItD;AAGD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAc7E;AAGD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAS7E;AAGD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAc7E"} \ No newline at end of file +{"version":3,"file":"ImageLoader.d.ts","sourceRoot":"","sources":["../../../src/Loader/ImageLoader.ts"],"names":[],"mappings":"AAMA,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,iBAItD;AAGD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAc7E;AAGD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAW7E;AAGD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAc7E"} \ No newline at end of file diff --git a/types/Nest/Converter/ConverBoard2Part.d.ts.map b/types/Nest/Converter/ConverBoard2Part.d.ts.map index 2c80d4a..838e81d 100644 --- a/types/Nest/Converter/ConverBoard2Part.d.ts.map +++ b/types/Nest/Converter/ConverBoard2Part.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ConverBoard2Part.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Converter/ConverBoard2Part.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAGlE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAUpC;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAMzH;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAiDtG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,SAAM,GAAG,IAAI,CAkErE"} \ No newline at end of file +{"version":3,"file":"ConverBoard2Part.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Converter/ConverBoard2Part.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAGlE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAUpC;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAMzH;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAiDtG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,SAAM,GAAG,IAAI,CAoFrE"} \ No newline at end of file diff --git a/types/Nest/Core/Individual.d.ts b/types/Nest/Core/Individual.d.ts index 9cfdaad..89d7016 100644 --- a/types/Nest/Core/Individual.d.ts +++ b/types/Nest/Core/Individual.d.ts @@ -18,11 +18,12 @@ export declare class Individual { Parts?: Part[]; mutationRate: number; private bin?; - private remBins; - constructor(Parts?: Part[], mutationRate?: number, bin?: Path, remBins?: Path[]); + private OddmentsBins; + constructor(Parts?: Part[], mutationRate?: number, bin?: Path, OddmentsBins?: Path[]); Fitness: number; Containers: Container[]; HoleContainers: Container[]; + OddmentsContainers: Container[]; /** * 评估健康程度 */ diff --git a/types/Nest/Core/Individual.d.ts.map b/types/Nest/Core/Individual.d.ts.map index d3cd4ac..597fab9 100644 --- a/types/Nest/Core/Individual.d.ts.map +++ b/types/Nest/Core/Individual.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Individual.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/Individual.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC;;;;;;;;;;GAUG;AACH,qBAAa,UAAU;IAEA,KAAK,CAAC,EAAE,IAAI,EAAE;IAAS,YAAY;IAAQ,OAAO,CAAC,GAAG,CAAC;IAAQ,OAAO,CAAC,OAAO;gBAA9E,KAAK,CAAC,EAAE,IAAI,EAAE,EAAS,YAAY,SAAM,EAAU,GAAG,CAAC,EAAE,IAAI,EAAU,OAAO,GAAE,IAAI,EAAO;IAE9G,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,cAAc,EAAE,SAAS,EAAE,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,UAAQ,EAAE,IAAI,CAAC,EAAE,SAAS;IAwD5D;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAgE/B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,kBAAkB;IAiB1B,KAAK;IAOL;;MAEE;IACF,MAAM;IAgDN,QAAQ,CAAC,IAAI,EAAE,SAAS;IAexB,SAAS,CAAC,CAAC,EAAE,SAAS;CAYzB"} \ No newline at end of file +{"version":3,"file":"Individual.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/Individual.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC;;;;;;;;;;GAUG;AACH,qBAAa,UAAU;IAEA,KAAK,CAAC,EAAE,IAAI,EAAE;IAAS,YAAY;IAAQ,OAAO,CAAC,GAAG,CAAC;IAAQ,OAAO,CAAC,YAAY;gBAAnF,KAAK,CAAC,EAAE,IAAI,EAAE,EAAS,YAAY,SAAM,EAAU,GAAG,CAAC,EAAE,IAAI,EAAU,YAAY,GAAE,IAAI,EAAO;IAEnH,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,cAAc,EAAE,SAAS,EAAE,CAAC;IAC5B,kBAAkB,EAAE,SAAS,EAAE,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,UAAQ,EAAE,IAAI,CAAC,EAAE,SAAS;IA6D5D;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IA2E/B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,kBAAkB;IAiB1B,KAAK;IAOL;;MAEE;IACF,MAAM;IAgDN,QAAQ,CAAC,IAAI,EAAE,SAAS;IAsBxB,SAAS,CAAC,CAAC,EAAE,SAAS;CAiBzB"} \ No newline at end of file diff --git a/types/Nest/Core/NestDatabase.d.ts b/types/Nest/Core/NestDatabase.d.ts index 401dc3d..84e3c1a 100644 --- a/types/Nest/Core/NestDatabase.d.ts +++ b/types/Nest/Core/NestDatabase.d.ts @@ -6,11 +6,12 @@ import { NestFiler } from "../Common/Filer"; * 用于在Work间传输 */ export declare class NestDatabase { - Paths: Path[]; Bin: Path; + OddmentsBins: Path[]; + Paths: Path[]; Parts: Part[]; - ReadFile(file: NestFiler): void; - WriteFile(file: NestFiler): void; + ReadFile(file: NestFiler): this; + WriteFile(file: NestFiler): this; get File(): NestFiler; } //# sourceMappingURL=NestDatabase.d.ts.map \ No newline at end of file diff --git a/types/Nest/Core/NestDatabase.d.ts.map b/types/Nest/Core/NestDatabase.d.ts.map index 466e10f..d52a0d4 100644 --- a/types/Nest/Core/NestDatabase.d.ts.map +++ b/types/Nest/Core/NestDatabase.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"NestDatabase.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/NestDatabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;;GAGG;AACH,qBAAa,YAAY;IAErB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,GAAG,EAAE,IAAI,CAAC;IACV,KAAK,EAAE,IAAI,EAAE,CAAC;IAId,QAAQ,CAAC,IAAI,EAAE,SAAS;IAuBxB,SAAS,CAAC,IAAI,EAAE,SAAS;IAczB,IAAI,IAAI,cAKP;CACJ"} \ No newline at end of file +{"version":3,"file":"NestDatabase.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/NestDatabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;;GAGG;AACH,qBAAa,YAAY;IAErB,GAAG,EAAE,IAAI,CAAC;IACV,YAAY,EAAE,IAAI,EAAE,CAAC;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IAId,QAAQ,CAAC,IAAI,EAAE,SAAS;IAkCxB,SAAS,CAAC,IAAI,EAAE,SAAS;IAqBzB,IAAI,IAAI,cAKP;CACJ"} \ No newline at end of file diff --git a/types/Nest/Core/OptimizeMachine.d.ts b/types/Nest/Core/OptimizeMachine.d.ts index 6a7c63c..ef046d1 100644 --- a/types/Nest/Core/OptimizeMachine.d.ts +++ b/types/Nest/Core/OptimizeMachine.d.ts @@ -14,8 +14,8 @@ export declare class OptimizeMachine { PopulationCount: number; }; Bin: Path; + OddmentsBins: Path[]; Parts: Part[]; - PartCount: number[]; private _IsSuspend; protected _Individuals: Individual[]; constructor(); diff --git a/types/Nest/Core/OptimizeMachine.d.ts.map b/types/Nest/Core/OptimizeMachine.d.ts.map index 4f53765..54ff289 100644 --- a/types/Nest/Core/OptimizeMachine.d.ts.map +++ b/types/Nest/Core/OptimizeMachine.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OptimizeMachine.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/OptimizeMachine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;;;;;;GAOG;AACH,qBAAa,eAAe;IAGxB,MAAM,EAAE;QACJ,eAAe,EAAE,MAAM,CAAC;KAC3B,CAAC;IAEF,GAAG,EAAE,IAAI,CAAC;IAEV,KAAK,EAAE,IAAI,EAAE,CAAC;IAEd,SAAS,EAAE,MAAM,EAAE,CAAM;IACzB,OAAO,CAAC,UAAU,CAAS;IAE3B,SAAS,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC;;IAQrC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE;IAatB,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAGrC,KAAK;IA0BX,SAAS,SAAK;IACd,IAAI,SAAY;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,SAAK;YACA,GAAG;IAmEjB,OAAO;IAQP,QAAQ;IAMR,KAAK;CAGR"} \ No newline at end of file +{"version":3,"file":"OptimizeMachine.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/OptimizeMachine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;;;;;;GAOG;AACH,qBAAa,eAAe;IAGxB,MAAM,EAAE;QACJ,eAAe,EAAE,MAAM,CAAC;KAC3B,CAAC;IAEF,GAAG,EAAE,IAAI,CAAC;IACV,YAAY,EAAE,IAAI,EAAE,CAAC;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;IAKd,OAAO,CAAC,UAAU,CAAS;IAE3B,SAAS,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC;;IAQrC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE;IActB,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAGrC,KAAK;IA0BX,SAAS,SAAK;IACd,IAAI,SAAY;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,SAAK;YACA,GAAG;IAmEjB,OAAO;IAQP,QAAQ;IAMR,KAAK;CAGR"} \ No newline at end of file diff --git a/types/Nest/Core/OptimizeWorker.worker.d.ts.map b/types/Nest/Core/OptimizeWorker.worker.d.ts.map index bc6c6f6..7038ac2 100644 --- a/types/Nest/Core/OptimizeWorker.worker.d.ts.map +++ b/types/Nest/Core/OptimizeWorker.worker.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OptimizeWorker.worker.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/OptimizeWorker.worker.ts"],"names":[],"mappings":";;;eA0BgD,MAAM;AAAtD,wBAAwD"} \ No newline at end of file +{"version":3,"file":"OptimizeWorker.worker.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/OptimizeWorker.worker.ts"],"names":[],"mappings":";;;eA2BgD,MAAM;AAAtD,wBAAwD"} \ No newline at end of file diff --git a/types/Nest/Core/ParseOddments.d.ts b/types/Nest/Core/ParseOddments.d.ts new file mode 100644 index 0000000..d30757f --- /dev/null +++ b/types/Nest/Core/ParseOddments.d.ts @@ -0,0 +1,13 @@ +import { Container } from "./Container"; +import { Path } from "./Path"; +/** + * 分析排料结果的余料 + * @param container 排料结果的容器 + * @param binPath 容器的bin + * @param [knifeRadius=3.5] 刀半径(以便我们再次偏移) + * @param squarePath 使用一个正方形路径来简化余料轮廓 + * @param canPutPaths 使用可以放置的路径列表来测试余料是否可用,如果可用,则保留 + * @returns Path[] 轮廓的位置存储在OrigionMinPoint中 + */ +export declare function ParseOddments(container: Container, binPath: Path, knifeRadius?: number, squarePath?: Path, canPutPaths?: Path[]): Path[]; +//# sourceMappingURL=ParseOddments.d.ts.map \ No newline at end of file diff --git a/types/Nest/Core/ParseOddments.d.ts.map b/types/Nest/Core/ParseOddments.d.ts.map new file mode 100644 index 0000000..e56c388 --- /dev/null +++ b/types/Nest/Core/ParseOddments.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ParseOddments.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/ParseOddments.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,IAAI,EAA4B,MAAM,QAAQ,CAAC;AASxD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAE,MAAY,EAAE,UAAU,GAAE,IAAiB,EAAE,WAAW,GAAE,IAAI,EAAgB,GAAG,IAAI,EAAE,CA2DtK"} \ No newline at end of file diff --git a/types/Nest/Core/Path.d.ts.map b/types/Nest/Core/Path.d.ts.map index 38dc2b5..f61c921 100644 --- a/types/Nest/Core/Path.d.ts.map +++ b/types/Nest/Core/Path.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Path.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/Path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,IAAI;IAOM,aAAa,CAAC,EAAE,KAAK,EAAE;IAL1C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,eAAe,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,CAAC;KAAE,CAAM;IACpD,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,CAAC;KAAE,CAAM;gBAEhC,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,GAAE,MAAU;IAMhE,OAAO,EAAE,IAAI,CAAC;IAEd,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,IAAI;IAyCZ,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE;IA2ChD,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,EAAE;IA6BpC,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,EAAE;IAuCnC,OAAO,CAAC,QAAQ,CAAQ;IAExB;;OAEG;IACH,OAAO,KAAK,OAAO,GAalB;IAED,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;IACjC,IAAI,YAAY,YAWf;IAED,OAAO,CAAC,QAAQ,CAAU;IAC1B,IAAI,OAAO,YAKV;IAED,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;IACjC,IAAI,YAAY,YASf;IAED,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC;IAC7B,IAAI,WAAW,SAKd;IAED,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,IAAI,IAAI,IAMI,MAAM,CADjB;IACD,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,EAGjB;IAED,OAAO,CAAC,OAAO,CAAU;IACzB,IAAI,MAAM,YAQT;IAED,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAsB/B,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;CAuBnC;AAID,wBAAgB,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,MAAM,CAYzC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,CAM7D;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAQ9D"} \ No newline at end of file +{"version":3,"file":"Path.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/Path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,IAAI;IAOM,aAAa,CAAC,EAAE,KAAK,EAAE;IAL1C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,eAAe,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,CAAC;KAAE,CAAM;IACpD,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,CAAC;KAAE,CAAM;gBAEhC,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,GAAE,MAAU;IAMhE,OAAO,EAAE,IAAI,CAAC;IAEd,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,IAAI;IAyCZ,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,EAAE,EAAE;IA8ChD,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,EAAE;IA6BpC,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,EAAE;IAuCnC,OAAO,CAAC,QAAQ,CAAQ;IAExB;;OAEG;IACH,OAAO,KAAK,OAAO,GAalB;IAED,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;IACjC,IAAI,YAAY,YAWf;IAED,OAAO,CAAC,QAAQ,CAAU;IAC1B,IAAI,OAAO,YAKV;IAED,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;IACjC,IAAI,YAAY,YASf;IAED,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC;IAC7B,IAAI,WAAW,SAKd;IAED,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,IAAI,IAAI,IAMI,MAAM,CADjB;IACD,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,EAGjB;IAED,OAAO,CAAC,OAAO,CAAU;IACzB,IAAI,MAAM,YAQT;IAED,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAsB/B,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;CAuBnC;AAID,wBAAgB,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,MAAM,CAYzC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,CAM7D;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAQ9D"} \ No newline at end of file diff --git a/types/Nest/Test/PlaceUtil.d.ts b/types/Nest/Test/PlaceUtil.d.ts index 45bacb8..cfa8b8e 100644 --- a/types/Nest/Test/PlaceUtil.d.ts +++ b/types/Nest/Test/PlaceUtil.d.ts @@ -1,10 +1,9 @@ -import { Matrix4 } from "three"; -import { Vec3 } from "../../Geometry/IVec3"; +import { Matrix4, Vec2 } from "three"; import { Individual } from "../Core/Individual"; import { NestDatabase } from "../Core/NestDatabase"; import { Part } from "../Core/Part"; import { Path } from "../Core/Path"; -export declare function PlaceCS(part: Part, move?: Vec3): Matrix4; +export declare function PlaceCS(part: Part, move?: Vec2): Matrix4; export declare function DrawBin(count: number, binPath: Path): void; export declare function Place(inv: Individual, parts: Part[], binPath: Path): void; export declare function InitParts(binPath?: Path): Promise; diff --git a/types/Nest/Test/PlaceUtil.d.ts.map b/types/Nest/Test/PlaceUtil.d.ts.map index d007551..ce6fa1e 100644 --- a/types/Nest/Test/PlaceUtil.d.ts.map +++ b/types/Nest/Test/PlaceUtil.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"PlaceUtil.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/PlaceUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAWzC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAO5C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAa,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAUpC,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAsBxD;AAWD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,QAenD;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,QA2JlE;AAED,wBAAsB,SAAS,CAAC,OAAO,OAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA8D3E"} \ No newline at end of file +{"version":3,"file":"PlaceUtil.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/PlaceUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAW,MAAM,OAAO,CAAC;AAiB/C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAa,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAUpC,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAsBxD;AAaD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,QAenD;AAID,wBAAgB,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,QAiLlE;AAED,wBAAsB,SAAS,CAAC,OAAO,OAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAyF3E"} \ No newline at end of file diff --git a/types/Nest/Test/TestDrawYHData.d.ts b/types/Nest/Test/TestDrawYHData.d.ts new file mode 100644 index 0000000..6d694b3 --- /dev/null +++ b/types/Nest/Test/TestDrawYHData.d.ts @@ -0,0 +1,9 @@ +import { Command } from "../../Editor/CommandMachine"; +/** + * 如果有优化结果,则调试最后一次的优化结果(并且不绘制新的曲线 + * 如果没有优化结果,则调试localStore保存的优化结果(绘制新的曲线) + */ +export declare class Command_TestDrawYHData implements Command { + exec(): Promise; +} +//# sourceMappingURL=TestDrawYHData.d.ts.map \ No newline at end of file diff --git a/types/Nest/Test/TestDrawYHData.d.ts.map b/types/Nest/Test/TestDrawYHData.d.ts.map new file mode 100644 index 0000000..4d7e98a --- /dev/null +++ b/types/Nest/Test/TestDrawYHData.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"TestDrawYHData.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestDrawYHData.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAWtD;;;GAGG;AACH,qBACa,sBAAuB,YAAW,OAAO;IAE5C,IAAI;CAuFb"} \ No newline at end of file diff --git a/types/Nest/Test/TestNFP.d.ts.map b/types/Nest/Test/TestNFP.d.ts.map index b228712..6acbe7c 100644 --- a/types/Nest/Test/TestNFP.d.ts.map +++ b/types/Nest/Test/TestNFP.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TestNFP.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestNFP.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAStD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CAsEb"} \ No newline at end of file +{"version":3,"file":"TestNFP.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestNFP.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAUtD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CA2Fb"} \ No newline at end of file diff --git a/types/Nest/Test/TestSaveYHData.d.ts b/types/Nest/Test/TestSaveYHData.d.ts new file mode 100644 index 0000000..e9f9101 --- /dev/null +++ b/types/Nest/Test/TestSaveYHData.d.ts @@ -0,0 +1,8 @@ +import { Command } from "../../Editor/CommandMachine"; +/** + * 保存优化结果的数据 + */ +export declare class Command_TestSaveYHData implements Command { + exec(): Promise; +} +//# sourceMappingURL=TestSaveYHData.d.ts.map \ No newline at end of file diff --git a/types/Nest/Test/TestSaveYHData.d.ts.map b/types/Nest/Test/TestSaveYHData.d.ts.map new file mode 100644 index 0000000..24b307e --- /dev/null +++ b/types/Nest/Test/TestSaveYHData.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"TestSaveYHData.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestSaveYHData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD;;GAEG;AACH,qBAAa,sBAAuB,YAAW,OAAO;IAE5C,IAAI;CAKb"} \ No newline at end of file diff --git a/types/Nest/Test/TestSimply.d.ts.map b/types/Nest/Test/TestSimply.d.ts.map index 1b2f238..1ef7d51 100644 --- a/types/Nest/Test/TestSimply.d.ts.map +++ b/types/Nest/Test/TestSimply.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TestSimply.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestSimply.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAMtD,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CA+Bb"} \ No newline at end of file +{"version":3,"file":"TestSimply.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestSimply.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,qBACa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CAiCb"} \ No newline at end of file diff --git a/types/Nest/Test/TestSimplyOddments.d.ts b/types/Nest/Test/TestSimplyOddments.d.ts new file mode 100644 index 0000000..4e73038 --- /dev/null +++ b/types/Nest/Test/TestSimplyOddments.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../../Editor/CommandMachine"; +export declare class Command_TestSimplyOddments implements Command { + exec(): Promise; +} +//# sourceMappingURL=TestSimplyOddments.d.ts.map \ No newline at end of file diff --git a/types/Nest/Test/TestSimplyOddments.d.ts.map b/types/Nest/Test/TestSimplyOddments.d.ts.map new file mode 100644 index 0000000..1418bc1 --- /dev/null +++ b/types/Nest/Test/TestSimplyOddments.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"TestSimplyOddments.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestSimplyOddments.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAiBtD,qBAAa,0BAA2B,YAAW,OAAO;IAEhD,IAAI;CAkDb"} \ No newline at end of file diff --git a/types/Nest/Test/TestSum.d.ts b/types/Nest/Test/TestSum.d.ts new file mode 100644 index 0000000..9adefcf --- /dev/null +++ b/types/Nest/Test/TestSum.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../../Editor/CommandMachine"; +export declare class Command_TestSum implements Command { + exec(): Promise; +} +//# sourceMappingURL=TestSum.d.ts.map \ No newline at end of file diff --git a/types/Nest/Test/TestSum.d.ts.map b/types/Nest/Test/TestSum.d.ts.map new file mode 100644 index 0000000..445026d --- /dev/null +++ b/types/Nest/Test/TestSum.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"TestSum.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestSum.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAStD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CAyDb"} \ No newline at end of file diff --git a/types/Nest/Test/TestVariant.d.ts b/types/Nest/Test/TestVariant.d.ts index e2d2388..b8cdc6c 100644 --- a/types/Nest/Test/TestVariant.d.ts +++ b/types/Nest/Test/TestVariant.d.ts @@ -3,6 +3,6 @@ import { Curve } from "../../DatabaseServices/Entity/Curve"; import { Matrix4 } from "three"; export declare let NestVariant: { best?: Individual; - curveMap?: Map; + curveMap: Map; }; //# sourceMappingURL=TestVariant.d.ts.map \ No newline at end of file diff --git a/types/Nest/Test/TestVariant.d.ts.map b/types/Nest/Test/TestVariant.d.ts.map index b15fe84..efd5b72 100644 --- a/types/Nest/Test/TestVariant.d.ts.map +++ b/types/Nest/Test/TestVariant.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TestVariant.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestVariant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,eAAO,IAAI,WAAW,EAAE;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;CACR,CAAC"} \ No newline at end of file +{"version":3,"file":"TestVariant.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestVariant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,eAAO,IAAI,WAAW,EAAE;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;CACP,CAAC"} \ No newline at end of file diff --git a/types/Nest/Test/TestYH2.d.ts.map b/types/Nest/Test/TestYH2.d.ts.map index 1a47625..89b164b 100644 --- a/types/Nest/Test/TestYH2.d.ts.map +++ b/types/Nest/Test/TestYH2.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TestYH2.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestYH2.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKtD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CA2Bb"} \ No newline at end of file +{"version":3,"file":"TestYH2.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestYH2.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKtD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CA4Bb"} \ No newline at end of file diff --git a/types/Nest/Test/TestYHWorker.d.ts b/types/Nest/Test/TestYHWorker.d.ts index 1d3a00e..7c67e61 100644 --- a/types/Nest/Test/TestYHWorker.d.ts +++ b/types/Nest/Test/TestYHWorker.d.ts @@ -1,4 +1,13 @@ import { Command } from "../../Editor/CommandMachine"; +import { NestDatabase } from "../Core/NestDatabase"; +export declare const CacheYHData: { + OriginalData: any; + PlaceData: any[]; + DiscardPlaceData: any[]; +}; +export declare const CacheYHDatabase: { + Db: NestDatabase; +}; export declare class Command_TestYHWorker implements Command { exec(): Promise; } diff --git a/types/Nest/Test/TestYHWorker.d.ts.map b/types/Nest/Test/TestYHWorker.d.ts.map index 14a0e04..d82a670 100644 --- a/types/Nest/Test/TestYHWorker.d.ts.map +++ b/types/Nest/Test/TestYHWorker.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TestYHWorker.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestYHWorker.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAQnE,qBACa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAwCb"} \ No newline at end of file +{"version":3,"file":"TestYHWorker.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestYHWorker.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAKnE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKpD,eAAO,MAAM,WAAW;;;;CAAmE,CAAC;AAC5F,eAAO,MAAM,eAAe,EAAE;IAAE,EAAE,EAAE,YAAY,CAAC;CAAiB,CAAC;AAEnE,qBACa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAoDb"} \ No newline at end of file diff --git a/types/Production/Product.d.ts b/types/Production/Product.d.ts index 2a4c120..f44b127 100644 --- a/types/Production/Product.d.ts +++ b/types/Production/Product.d.ts @@ -1,7 +1,8 @@ import { Vector2, Vector3 } from "three"; import { EBoardKeyList } from "../Common/BoardKeyList"; import { GangDrillType } from "../DatabaseServices/3DSolid/CylinderHole"; -import { Board } from "../DatabaseServices/Entity/Board"; +import { Arc } from "../DatabaseServices/Entity/Arc"; +import { Board, I2DModeingItem, IKnifeInfo } from "../DatabaseServices/Entity/Board"; import { Circle } from "../DatabaseServices/Entity/Circle"; import { ExtureContourCurve } from "../DatabaseServices/Entity/Extrude"; import { Polyline } from "../DatabaseServices/Entity/Polyline"; @@ -11,11 +12,15 @@ import { Vec2 } from "../Geometry/CheckIntersect"; import { IHardwareOption } from "../UI/Components/RightPanel/RightPanelInterface"; import { BoardOpenDir, FaceDirection, IHighSealedItem } from "../UI/Store/BoardInterface"; import { Entity } from './../DatabaseServices/Entity/Entity'; -/**板件轮廓数据 */ +/**轮廓数据 */ export interface IContourData { pts: Vec2[]; buls: number[]; } +export interface I3DContourData { + pts: Vector3[]; + buls: number[]; +} export declare type IHardwareType = HardwareTopline | HardwareCompositeEntity; export interface ISealingData extends IHighSealedItem { length: number; @@ -27,6 +32,7 @@ export interface IModelingData { thickness: number; dir: FaceDirection | number; knifeRadius: number; + origin: IOriginModelingData; } export declare enum DrillingFace { Front = 0, @@ -64,6 +70,16 @@ interface IBoardProdInfo { kaiLiaoHeight: number; openDir: BoardOpenDir; } +export interface I2DModeling { + path: IContourData; + dir: FaceDirection; + items: I2DModeingItem[]; +} +export interface I3DModeling { + path: I3DContourData; + dir: FaceDirection; + knife: IKnifeInfo; +} /**拆单数据 */ export interface ISpliteOrderData { info: IBoardProdInfo; @@ -79,10 +95,8 @@ export interface ISpliteOrderData { comp: number; }; boardContour: IContourData; - originModelingData: { - sideModeling: IOriginModelingData[]; - modeling: IOriginModelingData[]; - }; + modeling2D: I2DModeling[]; + modeling3D: I3DModeling[]; } export interface IBoardMetalsData { metals: ISpliteHardwareData[]; @@ -98,9 +112,15 @@ export interface ISpliteHardwareData { export interface IOriginModelingData { outline: IContourData; holes: IContourData[]; - thickness: number; - dir: FaceDirection | number; - knifeRadius: number; + thickness?: number; + dir?: FaceDirection | number; + knifeRadius?: number; + addLen?: number; + addWidth?: number; + addDepth?: number; +} +interface IChaiDanFeedingData extends IOriginModelingData { + boardContour: IContourData; } export declare namespace Production { /**获取板件拆单数据 */ @@ -116,6 +136,10 @@ export declare namespace Production { pts: Vector2[]; buls: number[]; }; + function SplitetArc(arc: Arc, hasEnd?: boolean): { + pts: Vector3[]; + buls: number[]; + }; /** * 获取封边数据 * 封边数据未统一逆时针顺序,用于拆单 @@ -154,6 +178,9 @@ export declare namespace Production { function GetCabSize(brList: Board[]): Map; function Data2Polyline(data: IContourData, isClose?: boolean): Polyline; function Report(ens: Entity[], msg: string): void; + function Get2DModeing(br: Board, offset: Vector3): I2DModeling[]; + function Get3DModeing(br: Board, offset: Vector3): I3DModeling[]; + function GetChaiDanFeedingPath(data: IChaiDanFeedingData): IContourData[]; } export {}; //# sourceMappingURL=Product.d.ts.map \ No newline at end of file diff --git a/types/Production/Product.d.ts.map b/types/Production/Product.d.ts.map index d30bfba..1f162fa 100644 --- a/types/Production/Product.d.ts.map +++ b/types/Production/Product.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Product.d.ts","sourceRoot":"","sources":["../../../src/Production/Product.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Product.d.ts","sourceRoot":"","sources":["../../../src/Production/Product.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/BBS/BoardInfosList.d.ts b/types/UI/Components/BBS/BoardInfosList.d.ts index f0230e0..ef7e848 100644 --- a/types/UI/Components/BBS/BoardInfosList.d.ts +++ b/types/UI/Components/BBS/BoardInfosList.d.ts @@ -41,6 +41,7 @@ export declare class BoardInfoList extends React.Component void; HandleOnClick: (findSameTypeBrDataKey?: string) => void; diff --git a/types/UI/Components/BBS/BoardInfosList.d.ts.map b/types/UI/Components/BBS/BoardInfosList.d.ts.map index da86012..3b0add1 100644 --- a/types/UI/Components/BBS/BoardInfosList.d.ts.map +++ b/types/UI/Components/BBS/BoardInfosList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardInfosList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BoardInfosList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAKhC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AAExG,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAa,MAAM,4BAA4B,CAAC;AAWtF,MAAM,WAAW,mBAAmB;IAEhC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;IACd,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,EAAE,KAAK,IAAI,CAAC;IACjI,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,aAAK,mBAAmB,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,aAAa,CAAC,YAAY,GAAG,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CAC3F,CAAC;AAEF,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB,CAAC,kBAAkB,CAAC;IAE9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;IAEvE,KAAK,EAAE,cAAc,CAAC;IACV,UAAU,EAAE,OAAO,CAAS;IACxC,OAAO,CAAC,WAAW,CAAkB;IACzB,OAAO,CAAC,MAAM,CAAoB;gBAClC,KAAK,KAAA;IAKjB,iBAAiB;IAUjB,oBAAoB;IAMpB,gCAAgC,CAAC,SAAS,EAAE,mBAAmB;IAK/D,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,UAAQ;IAgBrC,MAAM;IA2Ib,SAAS,UAAW,KAAK,UA0DvB;IACF,aAAa,2BAA4B,MAAM,UAK7C;IACF,UAAU,eASR;IACF,aAAa,aAIX;CACL"} \ No newline at end of file +{"version":3,"file":"BoardInfosList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BoardInfosList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAKhC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AAExG,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAa,MAAM,4BAA4B,CAAC;AAWtF,MAAM,WAAW,mBAAmB;IAEhC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;IACd,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,EAAE,KAAK,IAAI,CAAC;IACjI,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,aAAK,mBAAmB,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,aAAa,CAAC,YAAY,GAAG,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CAC3F,CAAC;AAEF,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB,CAAC,kBAAkB,CAAC;IAE9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;IAEvE,KAAK,EAAE,cAAc,CAAC;IACV,UAAU,EAAE,OAAO,CAAS;IACxC,OAAO,CAAC,WAAW,CAAkB;IACzB,OAAO,CAAC,MAAM,CAAoB;gBAClC,KAAK,KAAA;IAKjB,iBAAiB;IAUjB,oBAAoB;IAMpB,gCAAgC,CAAC,SAAS,EAAE,mBAAmB;IAK/D,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,UAAQ;IAgB5C,OAAO,CAAC,WAAW;IAcZ,MAAM;IA4Ib,SAAS,UAAW,KAAK,UA0DvB;IACF,aAAa,2BAA4B,MAAM,UAK7C;IACF,UAAU,eASR;IACF,aAAa,aAIX;CACL"} \ No newline at end of file diff --git a/types/UI/Components/BBS/BoardLIst.d.ts.map b/types/UI/Components/BBS/BoardLIst.d.ts.map index 4b0b760..bbfd75e 100644 --- a/types/UI/Components/BBS/BoardLIst.d.ts.map +++ b/types/UI/Components/BBS/BoardLIst.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardLIst.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BoardLIst.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAe,WAAW,EAAE,MAAM,aAAa,CAAC;AAKvD,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAiB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AACxG,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAI9D,UAAU,SAAS;IAEf,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,KAAK,EAAE,CAAC;CACnB;AAED,UAAU,eAAe;IAErB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,iBAAiB,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC/C,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,WAAW,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC7D;AAED,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAG/C,WAAW,EAAE,WAAW,EAAE,CAUpC;IACF,OAAO,CAAC,OAAO,CAAS;IACxB,MAAM;IA2CN,QAAQ,MAAO,MAAM,GAAG,MAAM,KAAK,MAAM,GAAG,MAAM,OAAO,OAAO,YAM9D;IAEF,UAAU,YAAa,MAAM,UAoD3B;IAEF,aAAa,UAAW,MAAM,UAAU,KAAK,aAAa,MAAM,SAAS,MAAM,GAAG,SAAS,GAAG,qBAAqB,EAAE,UA4BnH;IACF,OAAO,CAAC,YAAY,CAelB;CACL"} \ No newline at end of file +{"version":3,"file":"BoardLIst.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BoardLIst.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAe,WAAW,EAAE,MAAM,aAAa,CAAC;AAKvD,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAiB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AACxG,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAI9D,UAAU,SAAS;IAEf,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,KAAK,EAAE,CAAC;CACnB;AAED,UAAU,eAAe;IAErB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,iBAAiB,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC/C,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,WAAW,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC7D;AAED,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAG/C,WAAW,EAAE,WAAW,EAAE,CAUpC;IACF,OAAO,CAAC,OAAO,CAAS;IACxB,MAAM;IAkDN,QAAQ,MAAO,MAAM,GAAG,MAAM,KAAK,MAAM,GAAG,MAAM,OAAO,OAAO,YAM9D;IAEF,UAAU,YAAa,MAAM,UAoD3B;IAEF,aAAa,UAAW,MAAM,UAAU,KAAK,aAAa,MAAM,SAAS,MAAM,GAAG,SAAS,GAAG,qBAAqB,EAAE,UA4BnH;IACF,OAAO,CAAC,YAAY,CAelB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/BehindBoardModal.d.ts.map b/types/UI/Components/Board/BehindBoardModal.d.ts.map index b949dc8..f0cf312 100644 --- a/types/UI/Components/Board/BehindBoardModal.d.ts.map +++ b/types/UI/Components/Board/BehindBoardModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BehindBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BehindBoardModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAAE,EAAE,EAAE,CAAC;IAEpF,OAAO,CAAC,gBAAgB,CAGtB;IACU,OAAO,CAAC,OAAO,CAAQ;IACnC,yBAAyB;IAUzB,MAAM;CAkHT"} \ No newline at end of file +{"version":3,"file":"BehindBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BehindBoardModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAAE,EAAE,EAAE,CAAC;IAEpF,OAAO,CAAC,gBAAgB,CAGtB;IACU,OAAO,CAAC,OAAO,CAAQ;IACnC,yBAAyB;IAUzB,MAAM;CAmHT"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardCommon.d.ts.map b/types/UI/Components/Board/BoardCommon.d.ts.map index a34b124..1d07603 100644 --- a/types/UI/Components/Board/BoardCommon.d.ts.map +++ b/types/UI/Components/Board/BoardCommon.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardCommon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardCommon.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAa,iBAAiB,EAAa,SAAS,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAUtN,MAAM,WAAW,cAAc;IAE3B,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAA,EAAE,GAAG,GAAG,OAAA,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,CAAC,CAAC,CAAC,KAAA,OAAE,CAAC,eAAe;IAC5B,OAAO,CAAC,CAAC,CAAC,CAAC,KAAA,OAAE,CAAC,eAAe;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAA,KAAK,IAAI,CAAC;IACxB,MAAM,CAAC,QAAG;IACV,OAAO,CAAC,QAAG,CAAC,cAAc;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACpC;AACD,UAAU,eAAe;IAErB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAA,EAAE,GAAG,GAAG,OAAA,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AACD,UAAU,OAAO;IAEb,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAClB;AAGD,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;IAErE,iBAAiB;IAKjB,kBAAkB;IAKlB,MAAM;CAiBT;AAED,eAAO,MAAM,iBAAiB,UAClB,eAAe,gBAkB1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,UACjB,OAAO,gBAgDlB,CAAC;AAGF,eAAO,MAAM,kBAAkB,mBAKnB,CAAC;AAGb,aAAK,WAAW,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,aAAa,CAAC;CAAE,CAAC;AACrI,UAAU,aAAa;IAEnB,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC;CACtC;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC;IAC/D,OAAO,CAAC,IAAI,CACwD;IACpE,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,WAAW,CAejB;IACF,OAAO,CAAC,eAAe,CAmBrB;IACF,iBAAiB;IAQjB,MAAM;CA2CT;AAED,qBACa,KAAM,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CAAE,CAAC;IACxE,MAAM;CAkBT;AAED,eAAO,MAAM,QAAQ;WACoB,MAAM;SAAO;QAAE,MAAM,MAAM,CAAC;KAAE;gBAAc,MAAM;iBAY1F,CAAC;AACF,eAAO,MAAM,kBAAkB,SAAmB;IAAE,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAAE,gBA4BjG,CAAC;AAGF,UAAU,gBAAiB,SAAQ,cAAc;IAE7C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED;;GAEG;AACH,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC;IAEzE,MAAM;CAiHT;AAED,UAAU,gBAAgB;IAEtB,GAAG,EAAE,kBAAkB,CAAC;IACxB,EAAE,EAAE,KAAK,CAAC;IACV,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,iBAAiB,CAAC;CAClC;AAED,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAC;CAAE,CAAC;gBACjF,KAAK,KAAA;IAOjB,IAAI,OAAO,aAaV;IACD,OAAO,CAAC,cAAc;IAyCtB,OAAO,CAAC,YAAY,CAUlB;IACF,yBAAyB;IAezB,MAAM;CA0CT;AAGD,UAAU,qBAAqB;IAE3B,aAAa,EAAE,uBAAuB,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,qBAAqB,EAAE,EAAE,CAAC;IAE3E,MAAM,CAAC,YAAY;;MAEjB;IACF,WAAW,SAAU,MAAM,UAMzB;IACF,MAAM;CAoBT"} \ No newline at end of file +{"version":3,"file":"BoardCommon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardCommon.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardConfigModal.d.ts b/types/UI/Components/Board/BoardConfigModal.d.ts index b4a0b12..a1107c5 100644 --- a/types/UI/Components/Board/BoardConfigModal.d.ts +++ b/types/UI/Components/Board/BoardConfigModal.d.ts @@ -16,8 +16,8 @@ export declare class BoardConfigModal extends React.Component Promise; PickUpModelingOutline3: () => Promise; - private ApplyModeing; private ChangeModeling; + private ChangeModeling2; private AddModeling; private AddModeling2; private ChangeModeling3; diff --git a/types/UI/Components/Board/BoardConfigModal.d.ts.map b/types/UI/Components/Board/BoardConfigModal.d.ts.map index 96b8e3a..3e91c18 100644 --- a/types/UI/Components/Board/BoardConfigModal.d.ts.map +++ b/types/UI/Components/Board/BoardConfigModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardConfigModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardConfigModal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAU/D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAiB,aAAa,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAO5H,UAAU,gBAAgB;IAEtB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,YAAY,EAAE,kBAAkB,CAAC;IACjC,EAAE,EAAE,KAAK,CAAC;IACV,cAAc,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACvC,YAAY,EAAE,aAAa,CAAC;IAC5B,aAAa,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;CAC/C;AASD,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC;IACvE,OAAO,CAAC,IAAI,CACV;IACF,OAAO,CAAC,UAAU,CAEhB;IACF,OAAO,CAAC,WAAW,CAEjB;IACF,OAAO,CAAC,UAAU,CAEhB;IACF,OAAO,CAAC,WAAW,CAAoB;gBAC3B,KAAK,KAAA;IAIjB,MAAM;IAsFN;;GAED;IACC,OAAO,CAAC,qBAAqB,CAuE3B;IACF,sBAAsB,sBAIpB;IACF,sBAAsB,sBAWpB;IACF,OAAO,CAAC,YAAY,CAalB;IACF,OAAO,CAAC,cAAc,CAgGpB;IACF,OAAO,CAAC,WAAW,CA2CjB;IACF,OAAO,CAAC,YAAY,CAQlB;IACF,OAAO,CAAC,eAAe,CAKrB;CACL"} \ No newline at end of file +{"version":3,"file":"BoardConfigModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardConfigModal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,KAAK,EAAuC,MAAM,wCAAwC,CAAC;AAUpG,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAiB,aAAa,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAiB5H,UAAU,gBAAgB;IAEtB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,YAAY,EAAE,kBAAkB,CAAC;IACjC,EAAE,EAAE,KAAK,CAAC;IACV,cAAc,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACvC,YAAY,EAAE,aAAa,CAAC;IAC5B,aAAa,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;CAC/C;AAID,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC;IACvE,OAAO,CAAC,IAAI,CACV;IACF,OAAO,CAAC,UAAU,CAEhB;IACF,OAAO,CAAC,WAAW,CAEjB;IACF,OAAO,CAAC,UAAU,CAEhB;gBACU,KAAK,KAAA;IAIjB,oBAAoB;IAIpB,MAAM;IAmGN;;GAED;IACC,OAAO,CAAC,qBAAqB,CAkE3B;IACF,sBAAsB,sBA4CpB;IACF,sBAAsB,sBAsFpB;IACF,OAAO,CAAC,cAAc,CA6FpB;IACF,OAAO,CAAC,eAAe,CA8ErB;IACF,OAAO,CAAC,WAAW,CA2CjB;IACF,OAAO,CAAC,YAAY,CA4ClB;IACF,OAAO,CAAC,eAAe,CAsErB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardModal.d.ts b/types/UI/Components/Board/BoardModal.d.ts index f247deb..016dda1 100644 --- a/types/UI/Components/Board/BoardModal.d.ts +++ b/types/UI/Components/Board/BoardModal.d.ts @@ -26,7 +26,10 @@ export declare enum BoardModalType { SmoothEdge = "smoothEdge", UpdateBoardInfo = "updateboardinfo", YX = "yixing", - R2WR = "R2WR" + R2WR = "R2WR", + ZX2 = "vmodeling", + ZX3 = "3dmodeling", + R2B2 = "R2B2" } export interface BoardModalProps { type: BoardModalType; diff --git a/types/UI/Components/Board/BoardModal.d.ts.map b/types/UI/Components/Board/BoardModal.d.ts.map index 5c2b935..05dbcf5 100644 --- a/types/UI/Components/Board/BoardModal.d.ts.map +++ b/types/UI/Components/Board/BoardModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAoB,UAAU,EAAiH,MAAM,wBAAwB,CAAC;AAerL,oBAAY,cAAc;IAEtB,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,IAAI,WAAW;IACf,EAAE,OAAO;IACT,GAAG,YAAY;IACf,OAAO,mBAAmB;IAC1B,oBAAoB,yBAAyB;IAC7C,EAAE,WAAW;IACb,KAAK,aAAa;IAClB,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,EAAE,WAAW;IACb,IAAI,SAAS;CAChB;AACD,MAAM,WAAW,eAAe;IAE5B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED;;EAEE;AACF,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IAEhE,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,gBAAgB,CAAU;gBACtB,KAAK,EAAE,eAAe;IAIlC,gBAAgB,oBAsBd;IACF,aAAa;IAyBb,yBAAyB;IAMzB,oBAAoB;IAKpB,MAAM;IAiEN,OAAO,CAAC,OAAO,CAcb;CACL"} \ No newline at end of file +{"version":3,"file":"BoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAoB,UAAU,EAAiH,MAAM,wBAAwB,CAAC;AAerL,oBAAY,cAAc;IAEtB,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,IAAI,WAAW;IACf,EAAE,OAAO;IACT,GAAG,YAAY;IACf,OAAO,mBAAmB;IAC1B,oBAAoB,yBAAyB;IAC7C,EAAE,WAAW;IACb,KAAK,aAAa;IAClB,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,EAAE,WAAW;IACb,IAAI,SAAS;IACb,GAAG,cAAc;IACjB,GAAG,eAAe;IAClB,IAAI,SAAS;CAChB;AACD,MAAM,WAAW,eAAe;IAE5B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED;;EAEE;AACF,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IAEhE,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,gBAAgB,CAAU;gBACtB,KAAK,EAAE,eAAe;IAIlC,gBAAgB,oBAsBd;IACF,aAAa;IAyBb,yBAAyB;IAMzB,oBAAoB;IAKpB,MAAM;IAiEN,OAAO,CAAC,OAAO,CAcb;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardOptionModal.d.ts b/types/UI/Components/Board/BoardOptionModal.d.ts new file mode 100644 index 0000000..aa5ee10 --- /dev/null +++ b/types/UI/Components/Board/BoardOptionModal.d.ts @@ -0,0 +1,69 @@ +import * as React from 'react'; +import { Board } from '../../../DatabaseServices/Entity/Board'; +export declare const BoardOptionModal: { + new (props: any): { + _ConfigOption: import("../../Store/BoardInterface").SingleBoardOption; + _ProcessOption: import("../../Store/BoardInterface").BoardProcessOption; + _GrooveOption: import("../../Store/BoardInterface").IGrooveOption; + drillsOption: import("../../../Add-on/DrawDrilling/HoleUtils").IRectHoleOption; + _CurrentBoard: import("mobx").IObservableValue; + _IsSpecialBoard: import("mobx").IObservableValue; + canDrawSpecial: import("mobx").IObservableValue; + canModeling: import("mobx").IObservableValue; + remarks: [string, string][]; + otherBoardData: { + isChaiDan: boolean; + } & import("mobx").IObservableObject; + _UIConfigOPtion: import("../../Store/BoardInterface").IUiOption; + readonly CurrentBoard: Board; + render(): JSX.Element; + setBrConfig: (() => void) & import("mobx").IAction; + InitRectBoardDrillOption: (() => void) & import("mobx").IAction; + SetRectHighDrill: () => void; + handleComfirmOption: () => void; + handleChangeCurrentBoard: (br: Board) => void; + context: any; + setState(state: {} | ((prevState: Readonly<{}>, props: Readonly<{ + board: Board; + }>) => {} | Pick<{}, K>) | Pick<{}, K>, callback?: () => void): void; + forceUpdate(callback?: () => void): void; + readonly props: Readonly<{ + board: Board; + }> & Readonly<{ + children?: React.ReactNode; + }>; + state: Readonly<{}>; + refs: { + [key: string]: React.ReactInstance; + }; + componentDidMount?(): void; + shouldComponentUpdate?(nextProps: Readonly<{ + board: Board; + }>, nextState: Readonly<{}>, nextContext: any): boolean; + componentWillUnmount?(): void; + componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void; + getSnapshotBeforeUpdate?(prevProps: Readonly<{ + board: Board; + }>, prevState: Readonly<{}>): any; + componentDidUpdate?(prevProps: Readonly<{ + board: Board; + }>, prevState: Readonly<{}>, snapshot?: any): void; + componentWillMount?(): void; + UNSAFE_componentWillMount?(): void; + componentWillReceiveProps?(nextProps: Readonly<{ + board: Board; + }>, nextContext: any): void; + UNSAFE_componentWillReceiveProps?(nextProps: Readonly<{ + board: Board; + }>, nextContext: any): void; + componentWillUpdate?(nextProps: Readonly<{ + board: Board; + }>, nextState: Readonly<{}>, nextContext: any): void; + UNSAFE_componentWillUpdate?(nextProps: Readonly<{ + board: Board; + }>, nextState: Readonly<{}>, nextContext: any): void; + }; + displayName: string; + contextType?: React.Context; +}; +//# sourceMappingURL=BoardOptionModal.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/BoardOptionModal.d.ts.map b/types/UI/Components/Board/BoardOptionModal.d.ts.map new file mode 100644 index 0000000..b83e062 --- /dev/null +++ b/types/UI/Components/Board/BoardOptionModal.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"BoardOptionModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardOptionModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAgI/D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAsC,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/Board/CommonBoardOption.d.ts b/types/UI/Components/Board/CommonBoardOption.d.ts new file mode 100644 index 0000000..65c33b8 --- /dev/null +++ b/types/UI/Components/Board/CommonBoardOption.d.ts @@ -0,0 +1,92 @@ +import * as React from 'react'; +import { Board } from '../../../DatabaseServices/Entity/Board'; +import { BoardProcessOption, IGrooveOption, SingleBoardOption, IUiOption } from '../../Store/BoardInterface'; +import { IObservableValue } from 'mobx'; +import { IRectHoleOption } from '../../../Add-on/DrawDrilling/HoleUtils'; +export interface ICommonOptionProps { + _CurrentBoard: IObservableValue; + setBrConfig?: () => void; + handleComfirmOption?: () => void; + _ConfigOption?: SingleBoardOption; + _ProcessOption?: BoardProcessOption; + _GrooveOption?: IGrooveOption; + drillsOption?: IRectHoleOption; + canDrawSpecial?: IObservableValue; + canModeling?: IObservableValue; + _IsSpecialBoard?: IObservableValue; + otherBoardData: { + [key: string]: any; + }; + handleChangeCurrentBoard?: (br: Board) => void; + uiConfigOption?: IUiOption; + remarks?: [string, string][]; +} +export declare function AddCommonBoardProps(Com: React.ComponentType): { + new (props: any): { + _ConfigOption: SingleBoardOption; + _ProcessOption: BoardProcessOption; + _GrooveOption: IGrooveOption; + drillsOption: IRectHoleOption; + _CurrentBoard: IObservableValue; + _IsSpecialBoard: IObservableValue; + canDrawSpecial: IObservableValue; + canModeling: IObservableValue; + remarks: [string, string][]; + otherBoardData: { + isChaiDan: boolean; + } & import("mobx").IObservableObject; + _UIConfigOPtion: IUiOption; + readonly CurrentBoard: Board; + render(): JSX.Element; + setBrConfig: (() => void) & import("mobx").IAction; + InitRectBoardDrillOption: (() => void) & import("mobx").IAction; + SetRectHighDrill: () => void; + handleComfirmOption: () => void; + handleChangeCurrentBoard: (br: Board) => void; + context: any; + setState(state: {} | ((prevState: Readonly<{}>, props: Readonly<{ + board: Board; + }>) => {} | Pick<{}, K>) | Pick<{}, K>, callback?: () => void): void; + forceUpdate(callback?: () => void): void; + readonly props: Readonly<{ + board: Board; + }> & Readonly<{ + children?: React.ReactNode; + }>; + state: Readonly<{}>; + refs: { + [key: string]: React.ReactInstance; + }; + componentDidMount?(): void; + shouldComponentUpdate?(nextProps: Readonly<{ + board: Board; + }>, nextState: Readonly<{}>, nextContext: any): boolean; + componentWillUnmount?(): void; + componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void; + getSnapshotBeforeUpdate?(prevProps: Readonly<{ + board: Board; + }>, prevState: Readonly<{}>): any; + componentDidUpdate?(prevProps: Readonly<{ + board: Board; + }>, prevState: Readonly<{}>, snapshot?: any): void; + componentWillMount?(): void; + UNSAFE_componentWillMount?(): void; + componentWillReceiveProps?(nextProps: Readonly<{ + board: Board; + }>, nextContext: any): void; + UNSAFE_componentWillReceiveProps?(nextProps: Readonly<{ + board: Board; + }>, nextContext: any): void; + componentWillUpdate?(nextProps: Readonly<{ + board: Board; + }>, nextState: Readonly<{}>, nextContext: any): void; + UNSAFE_componentWillUpdate?(nextProps: Readonly<{ + board: Board; + }>, nextState: Readonly<{}>, nextContext: any): void; + }; + displayName: string; + contextType?: React.Context; +}; +export declare function InitRectBoardDrillOption(br: Board, option: IRectHoleOption): void; +export declare function SetRectHighDrill(br: Board, option: IRectHoleOption): void; +//# sourceMappingURL=CommonBoardOption.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/CommonBoardOption.d.ts.map b/types/UI/Components/Board/CommonBoardOption.d.ts.map new file mode 100644 index 0000000..deb4a41 --- /dev/null +++ b/types/UI/Components/Board/CommonBoardOption.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"CommonBoardOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/CommonBoardOption.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAI/D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE7G,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAGxC,OAAO,EAA2B,eAAe,EAAmB,MAAM,wCAAwC,CAAC;AAEnH,MAAM,WAAW,kBAAkB;IAE/B,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,cAAc,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE,CAAC;IACxC,wBAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/C,cAAc,CAAC,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CAChC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC;;uBAKlD,iBAAiB;wBAGhB,kBAAkB;uBAGnB,aAAa;sBAMd,eAAe;uBAMd,iBAAiB,KAAK,CAAC;;;;iBAI7B,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;;;;yBAEV,UAAU,iBAAiB,CAAC;;;;;;;uCAsMb,KAAK;;;mBAjOF,KAAK;;;;mBAAL,KAAK;;;;;;;;;;mBAAL,KAAK;;;;;mBAAL,KAAK;;;mBAAL,KAAK;;;;;mBAAL,KAAK;;;mBAAL,KAAK;;;mBAAL,KAAK;;;mBAAL,KAAK;;;;;EAwOtD;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,QAG1E;AACD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,QAGlE"} \ No newline at end of file diff --git a/types/UI/Components/Board/Door/DoorCommon.d.ts b/types/UI/Components/Board/Door/DoorCommon.d.ts index fdb8e60..e13e498 100644 --- a/types/UI/Components/Board/Door/DoorCommon.d.ts +++ b/types/UI/Components/Board/Door/DoorCommon.d.ts @@ -11,7 +11,6 @@ export declare class UpDownSpaceComponent extends React.Component): void; } export declare class BoardBatchCurtailModal extends React.Component { constructor(props: any); - private CONFIG_CURTAIL; + static CONFIG_CURTAIL: string; private Ok; private Close; private CheckFunc; diff --git a/types/UI/Components/BoardBatchCurtailModal.d.ts.map b/types/UI/Components/BoardBatchCurtailModal.d.ts.map index 7a2ddb6..c98fc3a 100644 --- a/types/UI/Components/BoardBatchCurtailModal.d.ts.map +++ b/types/UI/Components/BoardBatchCurtailModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardBatchCurtailModal.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/BoardBatchCurtailModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAChC,OAAO,+BAA+B,CAAC;AAGvC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAUjD,OAAO,EAAE,wBAAwB,EAAe,MAAM,yBAAyB,CAAC;AAKhF,MAAM,WAAW,uBAAuB;IAEpC,KAAK,EAAE,sBAAsB,CAAC;CACjC;AAED,qBAAa,sBAAuB,SAAQ,UAAU;IAEtC,QAAQ,EAAE,wBAAwB,CAQ5C;IACF,UAAU,EAAE,wBAAwB,CAA6C;IACjF,cAAc;IASd,UAAU;CAKb;AACD,qBACa,sBAAuB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,EAAE,EAAE,CAAC;gBAExE,KAAK,KAAA;IAMjB,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,EAAE,CAiBR;IACF,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAWjB,oBAAoB;IAQb,MAAM;CA+FhB"} \ No newline at end of file +{"version":3,"file":"BoardBatchCurtailModal.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/BoardBatchCurtailModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAChC,OAAO,+BAA+B,CAAC;AAGvC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKjD,OAAO,EAAE,aAAa,EAAc,MAAM,oBAAoB,CAAC;AAK/D,OAAO,EAAE,wBAAwB,EAAe,MAAM,yBAAyB,CAAC;AAMhF,MAAM,WAAW,uBAAuB;IAEpC,KAAK,EAAE,sBAAsB,CAAC;CACjC;AAED,qBAAa,sBAAuB,SAAQ,UAAU;IAEtC,QAAQ,EAAE,wBAAwB,CAQ5C;IACF,UAAU,EAAE,wBAAwB,CAA6C;IACjF,cAAc;IASd,UAAU;IAMV,UAAU;;;IAMV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,wBAAwB,CAAC;CAM7D;AACD,qBACa,sBAAuB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,EAAE,EAAE,CAAC;gBAExE,KAAK,KAAA;IAMjB,MAAM,CAAC,cAAc,SAAa;IAClC,OAAO,CAAC,EAAE,CAkBR;IACF,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAWjB,oBAAoB;IAQb,MAAM;CA+FhB"} \ No newline at end of file diff --git a/types/UI/Components/CommandPanel/CommandList.d.ts.map b/types/UI/Components/CommandPanel/CommandList.d.ts.map index f5eebe8..f6d5c0f 100644 --- a/types/UI/Components/CommandPanel/CommandList.d.ts.map +++ b/types/UI/Components/CommandPanel/CommandList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CommandPanel/CommandList.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IAErB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,WAAW,EAAE,QAAQ,EAmsDjC,CAAC"} \ No newline at end of file +{"version":3,"file":"CommandList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CommandPanel/CommandList.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IAErB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,WAAW,EAAE,QAAQ,EAyuDjC,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/LatticeDrawer.d.ts.map b/types/UI/Components/LatticeDrawer.d.ts.map index d7cbf69..91ddbc5 100644 --- a/types/UI/Components/LatticeDrawer.d.ts.map +++ b/types/UI/Components/LatticeDrawer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LatticeDrawer.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/LatticeDrawer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAajE,qBAEa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAAE,EAAE,EAAE,CAAC;IACnF,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAmBjB,oBAAoB;IAQb,MAAM;IAkJb,OAAO,CAAC,EAAE,CAeR;IACF,OAAO,CAAC,MAAM,CAGZ;CACL"} \ No newline at end of file +{"version":3,"file":"LatticeDrawer.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/LatticeDrawer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAajE,qBAEa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAAE,EAAE,EAAE,CAAC;IACnF,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAmBjB,oBAAoB;IAQb,MAAM;IAkJb,OAAO,CAAC,EAAE,CAgBR;IACF,OAAO,CAAC,MAAM,CAGZ;CACL"} \ No newline at end of file diff --git a/types/UI/Components/MainContent/Content.d.ts.map b/types/UI/Components/MainContent/Content.d.ts.map index 6150458..150ec55 100644 --- a/types/UI/Components/MainContent/Content.d.ts.map +++ b/types/UI/Components/MainContent/Content.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/MainContent/Content.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,oBAAoB,CAAC;AAG5B,qBAEa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,CAAC;IAEjE,OAAO,CAAC,SAAS,CAA4D;IAEzF,gBAAgB,sBAKd;IACF,cAAc,QAAe,MAAM,mBAKjC;IACI,iBAAiB;IAoBvB,MAAM;CAqFT"} \ No newline at end of file +{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/MainContent/Content.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,oBAAoB,CAAC;AAG5B,qBAEa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,CAAC;IAEjE,OAAO,CAAC,SAAS,CAA4D;IAEzF,gBAAgB,sBAKd;IACF,cAAc,QAAe,MAAM,mBAKjC;IACI,iBAAiB;IAoBvB,MAAM;CAuFT"} \ No newline at end of file diff --git a/types/UI/Components/MainContent/Login.d.ts.map b/types/UI/Components/MainContent/Login.d.ts.map index 5e92ddc..07ac7fc 100644 --- a/types/UI/Components/MainContent/Login.d.ts.map +++ b/types/UI/Components/MainContent/Login.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Login.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/MainContent/Login.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAA2B,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAOjF,UAAU,WAAW;IAEjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAGD,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,QAYjD;AAKD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,WAAW,CAAC;IAE3E,UAAU,UAAS;gBAEnB,KAAK,KAAA;IASjB,WAAW,sBAqCT;IAEF,MAAM;CAiGT"} \ No newline at end of file +{"version":3,"file":"Login.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/MainContent/Login.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAA2B,aAAa,EAAE,MAAM,yBAAyB,CAAC;AASjF,UAAU,WAAW;IAEjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAGD,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,QAYjD;AAKD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,WAAW,CAAC;IAE3E,UAAU,UAAS;gBAEnB,KAAK,KAAA;IASjB,WAAW,sBA0DT;IAEF,MAAM;CAiGT"} \ No newline at end of file diff --git a/types/UI/Components/Modal/ActivityLayerBoard.d.ts.map b/types/UI/Components/Modal/ActivityLayerBoard.d.ts.map index a768921..c574037 100644 --- a/types/UI/Components/Modal/ActivityLayerBoard.d.ts.map +++ b/types/UI/Components/Modal/ActivityLayerBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ActivityLayerBoard.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/ActivityLayerBoard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAQ9E,UAAU,wBAAwB;IAE9B,KAAK,EAAE,uBAAuB,CAAC;CAClC;AAOD,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,wBAAwB,CAAC;IAC7E,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAWjB,oBAAoB;IAQb,MAAM;IAsMb,OAAO,CAAC,YAAY,CAiClB;IACF,OAAO,CAAC,EAAE,CAmBR;IACF,OAAO,CAAC,MAAM,CAGZ;CACL"} \ No newline at end of file +{"version":3,"file":"ActivityLayerBoard.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/ActivityLayerBoard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAQ9E,UAAU,wBAAwB;IAE9B,KAAK,EAAE,uBAAuB,CAAC;CAClC;AAOD,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,wBAAwB,CAAC;IAC7E,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAWjB,oBAAoB;IAQb,MAAM;IAsMb,OAAO,CAAC,YAAY,CAiClB;IACF,OAAO,CAAC,EAAE,CAoBR;IACF,OAAO,CAAC,MAAM,CAGZ;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Modal/CadModal.d.ts.map b/types/UI/Components/Modal/CadModal.d.ts.map index fafdab3..8e6d7d9 100644 --- a/types/UI/Components/Modal/CadModal.d.ts.map +++ b/types/UI/Components/Modal/CadModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CadModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/CadModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAO,MAAM,WAAW,CAAC;AAKhD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,eAAO,MAAM,QAAQ,kBAAkB,CAAC;AAExC,qBAAa,QAAQ;IAoBwB,OAAO,CAAC,UAAU,CAAC;IAlB5D,MAAM,CAAC,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;KAAE,CAA2B;IAClF,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,OAAO,CAAS;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC;IAC/C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,iBAAiB;IACjB,MAAM,UAAS;gBACH,cAAc,EAAE,WAAW,EAAU,UAAU,CAAC,EAAE,QAAQ;IAStE,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,OAAO,CA4Bb;IACF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAQpI,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAwFjG,wBAAwB,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc;IAkB1E,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IA+DjG,WAAW,CAAC,GAAG,EAAE,aAAa;IAsC9B,OAAO,CAAC,SAAS;IAuDX,OAAO,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE;IAY3D,QAAQ;IAwCR,cAAc;IAUd,iBAAiB,CAAC,WAAW,CAAC,EAAE,OAAO;IAIvC,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,WAAW;IAKnB,KAAK;IAKL,aAAa;IAIb,OAAO;IAQP,MAAM;CAIT"} \ No newline at end of file +{"version":3,"file":"CadModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/CadModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAO,MAAM,WAAW,CAAC;AAKhD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,eAAO,MAAM,QAAQ,kBAAkB,CAAC;AAExC,qBAAa,QAAQ;IAoBwB,OAAO,CAAC,UAAU,CAAC;IAlB5D,MAAM,CAAC,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;KAAE,CAA2B;IAClF,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,OAAO,CAAS;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC;IAC/C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,iBAAiB;IACjB,MAAM,UAAS;gBACH,cAAc,EAAE,WAAW,EAAU,UAAU,CAAC,EAAE,QAAQ;IAStE,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,OAAO,CA4Bb;IACF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAQpI,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAwFjG,wBAAwB,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc;IAkB1E,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAgEjG,WAAW,CAAC,GAAG,EAAE,aAAa;IAsC9B,OAAO,CAAC,SAAS;IAuDX,OAAO,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE;IAY3D,QAAQ;IAwCR,cAAc;IAUd,iBAAiB,CAAC,WAAW,CAAC,EAAE,OAAO;IAIvC,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,WAAW;IAKnB,KAAK;IAKL,aAAa;IAIb,OAAO;IAQP,MAAM;CAIT"} \ No newline at end of file diff --git a/types/UI/Components/Modal/HardwareModal.d.ts b/types/UI/Components/Modal/HardwareModal.d.ts new file mode 100644 index 0000000..135ac86 --- /dev/null +++ b/types/UI/Components/Modal/HardwareModal.d.ts @@ -0,0 +1,69 @@ +import * as React from 'react'; +import { BaseHardwareStore } from '../../Store/RightPanelStore/HardwareStore'; +import { BoardModalType } from '../Board/BoardModal'; +interface IMetalsModal { + store: BaseHardwareStore; + type: BoardModalType; + title: string; +} +export declare function GetHardwareModal(Com: any, props: IMetalsModal): { + new (props: {} | Readonly<{}>): { + render(): JSX.Element; + ok: () => Promise; + cancel: () => void; + getOption: () => Promise; + context: any; + setState(state: {} | ((prevState: Readonly<{}>, props: Readonly<{}>) => {} | Pick<{}, K>) | Pick<{}, K>, callback?: () => void): void; + forceUpdate(callback?: () => void): void; + readonly props: Readonly<{}> & Readonly<{ + children?: React.ReactNode; + }>; + state: Readonly<{}>; + refs: { + [key: string]: React.ReactInstance; + }; + componentDidMount?(): void; + shouldComponentUpdate?(nextProps: Readonly<{}>, nextState: Readonly<{}>, nextContext: any): boolean; + componentWillUnmount?(): void; + componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void; + getSnapshotBeforeUpdate?(prevProps: Readonly<{}>, prevState: Readonly<{}>): any; + componentDidUpdate?(prevProps: Readonly<{}>, prevState: Readonly<{}>, snapshot?: any): void; + componentWillMount?(): void; + UNSAFE_componentWillMount?(): void; + componentWillReceiveProps?(nextProps: Readonly<{}>, nextContext: any): void; + UNSAFE_componentWillReceiveProps?(nextProps: Readonly<{}>, nextContext: any): void; + componentWillUpdate?(nextProps: Readonly<{}>, nextState: Readonly<{}>, nextContext: any): void; + UNSAFE_componentWillUpdate?(nextProps: Readonly<{}>, nextState: Readonly<{}>, nextContext: any): void; + }; + new (props: {}, context: any): { + render(): JSX.Element; + ok: () => Promise; + cancel: () => void; + getOption: () => Promise; + context: any; + setState(state: {} | ((prevState: Readonly<{}>, props: Readonly<{}>) => {} | Pick<{}, K>) | Pick<{}, K>, callback?: () => void): void; + forceUpdate(callback?: () => void): void; + readonly props: Readonly<{}> & Readonly<{ + children?: React.ReactNode; + }>; + state: Readonly<{}>; + refs: { + [key: string]: React.ReactInstance; + }; + componentDidMount?(): void; + shouldComponentUpdate?(nextProps: Readonly<{}>, nextState: Readonly<{}>, nextContext: any): boolean; + componentWillUnmount?(): void; + componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void; + getSnapshotBeforeUpdate?(prevProps: Readonly<{}>, prevState: Readonly<{}>): any; + componentDidUpdate?(prevProps: Readonly<{}>, prevState: Readonly<{}>, snapshot?: any): void; + componentWillMount?(): void; + UNSAFE_componentWillMount?(): void; + componentWillReceiveProps?(nextProps: Readonly<{}>, nextContext: any): void; + UNSAFE_componentWillReceiveProps?(nextProps: Readonly<{}>, nextContext: any): void; + componentWillUpdate?(nextProps: Readonly<{}>, nextState: Readonly<{}>, nextContext: any): void; + UNSAFE_componentWillUpdate?(nextProps: Readonly<{}>, nextState: Readonly<{}>, nextContext: any): void; + }; + contextType?: React.Context; +}; +export {}; +//# sourceMappingURL=HardwareModal.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Modal/HardwareModal.d.ts.map b/types/UI/Components/Modal/HardwareModal.d.ts.map new file mode 100644 index 0000000..2738b87 --- /dev/null +++ b/types/UI/Components/Modal/HardwareModal.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"HardwareModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/HardwareModal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,UAAU,YAAY;IAElB,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACjB;AAGD,wBAAgB,gBAAgB,CAAC,GAAG,KAAA,EAAE,KAAK,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyGxD"} \ No newline at end of file diff --git a/types/UI/Components/Modal/ModalsManage.d.ts b/types/UI/Components/Modal/ModalsManage.d.ts index f797d7c..eb3fc96 100644 --- a/types/UI/Components/Modal/ModalsManage.d.ts +++ b/types/UI/Components/Modal/ModalsManage.d.ts @@ -53,6 +53,7 @@ export declare class ModalManage { Wait(): Promise; get Show(): boolean; set Show(isShow: boolean); + set Visible(v: boolean); ToggleShow(): void; MinAll(): void; ChangeFoucus(key?: string): void; diff --git a/types/UI/Components/Modal/ModalsManage.d.ts.map b/types/UI/Components/Modal/ModalsManage.d.ts.map index c7123c4..a91f188 100644 --- a/types/UI/Components/Modal/ModalsManage.d.ts.map +++ b/types/UI/Components/Modal/ModalsManage.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ModalsManage.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/ModalsManage.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAO7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAY,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,yBAAyB,CAAC;AAEjC,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IAEjC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,aAAa;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU;IACV,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,gBAAgB;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,WAAW;IAWR,OAAO,CAAC,EAAE;IATtB,WAAW,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,gBAAgB,CAAc;IACtC,gBAAgB,UAAS;IACzB,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,KAAK,CAAQ;IACrB,UAAU,UAAS;IACnB,SAAS,UAAS;gBAEE,EAAE,EAAE,MAAM;IAW9B,IAAI,OAAO,YAGV;IACD,IAAI,YAAY,aAGf;IACD,IAAI,eAAe,WAGlB;IAED,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,CAAC,EAAE,UAAU;IAgBrB,SAAS,CAAC,CAAC,EAAE,aAAa;IAmC1B,OAAO,CAAC,CAAC,EAAE,aAAa;IAcxB,cAAc,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IA0B1G,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAajG,aAAa;IAQnB,WAAW,CAAC,QAAQ,EAAE,QAAQ;IAIxB,OAAO,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE;IAW3D,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAI7B,IAAI,IAAI,IAIS,OAAO,CADvB;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAIvB;IACD,UAAU;IAQV,MAAM;IAQN,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM;IAezB,aAAa;IAKb,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,KAAK;IAUb,OAAO;IAOD,cAAc,CAAC,IAAI,GAAE,YAAwC,EAAE,OAAO,UAAO;IAgBnF,UAAU;CAYb"} \ No newline at end of file +{"version":3,"file":"ModalsManage.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/ModalsManage.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAO7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAY,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,yBAAyB,CAAC;AAEjC,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IAEjC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,aAAa;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU;IACV,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,gBAAgB;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,WAAW;IAWR,OAAO,CAAC,EAAE;IATtB,WAAW,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,gBAAgB,CAAc;IACtC,gBAAgB,UAAS;IACzB,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,KAAK,CAAQ;IACrB,UAAU,UAAS;IACnB,SAAS,UAAS;gBAEE,EAAE,EAAE,MAAM;IAW9B,IAAI,OAAO,YAGV;IACD,IAAI,YAAY,aAGf;IACD,IAAI,eAAe,WAGlB;IAED,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,CAAC,EAAE,UAAU;IAgBrB,SAAS,CAAC,CAAC,EAAE,aAAa;IAmC1B,OAAO,CAAC,CAAC,EAAE,aAAa;IAcxB,cAAc,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IA0B1G,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAgBjG,aAAa;IAQnB,WAAW,CAAC,QAAQ,EAAE,QAAQ;IAIxB,OAAO,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE;IAW3D,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAI7B,IAAI,IAAI,IAIS,OAAO,CADvB;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAIvB;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,EAGrB;IACD,UAAU;IAQV,MAAM;IAQN,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM;IAezB,aAAa;IAKb,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,KAAK;IAUb,OAAO;IAOD,cAAc,CAAC,IAAI,GAAE,YAAwC,EAAE,OAAO,UAAO;IAgBnF,UAAU;CAYb"} \ No newline at end of file diff --git a/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts b/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts index 84f84b2..be65b36 100644 --- a/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts +++ b/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts @@ -9,19 +9,24 @@ export declare enum EOptionTabId { Perf = "perf" } export declare class ConfigStore extends Singleton { - private oldBgcolor; - bgColor: string; + oldBgcolor: string; + oldLyBg: string; + checkSealing: boolean; + sealingArr: [string, string][]; OnCanel: () => void; OnOK: () => Promise; } /** * 选项配置对话框(右键O呼出) */ -export declare class ConfigDialog extends React.Component { +export declare class ConfigDialog extends React.Component<{ + store: ConfigStore; +}> { private selectedTabId; private curFileTitle; optionModal: HTMLElement; private event; + constructor(props: any); RegisterHandleKeyBoardEvent(): void; componentDidMount(): Promise; componentWillUnmount(): void; diff --git a/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts.map b/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts.map index 18c34d4..e989d6a 100644 --- a/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts.map +++ b/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ConfigDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/ConfigDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAQhC,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAczD,oBAAY,YAAY;IAEpB,IAAI,SAAS;IACb,IAAI,OAAO;IACX,GAAG,QAAQ;IACX,IAAI,OAAO;IACX,OAAO,YAAY;IACnB,IAAI,SAAS;CAChB;AAED,qBAAa,WAAY,SAAQ,SAAS;IAEtC,OAAO,CAAC,UAAU,CAAkD;IACxD,OAAO,SAAa;IAChC,OAAO,aAWL;IACF,IAAI,sBAwBF;CACL;AAED;;GAEG;AACH,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS;IAEjC,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,YAAY,CAAQ;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,CAAC,KAAK,CAAW;IACxB,2BAA2B;IAgBrB,iBAAiB;IAOvB,oBAAoB;IAKpB,WAAW,sBAOT;IACF,MAAM;CAuDT"} \ No newline at end of file +{"version":3,"file":"ConfigDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/ConfigDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAQhC,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAiBzD,oBAAY,YAAY;IAEpB,IAAI,SAAS;IACb,IAAI,OAAO;IACX,GAAG,QAAQ;IACX,IAAI,OAAO;IACX,OAAO,YAAY;IACnB,IAAI,SAAS;CAChB;AAED,qBAAa,WAAY,SAAQ,SAAS;IAEtC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IACJ,YAAY,UAAS;IACrB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAA8C;IACxF,OAAO,aAcL;IACF,IAAI,sBAwCF;CACL;AAED;;GAEG;AACH,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;CAAE,CAAC;IAE1D,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,YAAY,CAAQ;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,CAAC,KAAK,CAAW;gBACZ,KAAK,KAAA;IAQjB,2BAA2B;IAgBrB,iBAAiB;IAgBvB,oBAAoB;IAKpB,WAAW,sBAOT;IACF,MAAM;CAuDT"} \ No newline at end of file diff --git a/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts.map b/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts.map index c008b9b..aad73a0 100644 --- a/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts.map +++ b/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DisplayConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/DisplayConfigPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAIhC,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AAIxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;CAAE,CAAC;IAEhE,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,SAAQ;IAC3B,yBAAyB;IAIzB,iBAAiB,UAAW,WAAW,UAKrC;IACF,MAAM;IAuEN,WAAW,aAGT;CACL"} \ No newline at end of file +{"version":3,"file":"DisplayConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/DisplayConfigPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAIhC,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AAIxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAwB7C,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;CAAE,CAAC;IAEhE,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,SAAQ;IAC3B,yBAAyB;IAIzB,iBAAiB,UAAW,WAAW,UAQrC;IACF,MAAM;IAwDN,WAAW,aAGT;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts b/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts index 1761a79..afe5f79 100644 --- a/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts +++ b/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts @@ -1,8 +1,10 @@ import * as React from 'react'; import { UserConfig, IMaxSizeProps } from '../../../../Editor/UserConfig'; import { IUiOption } from '../../../Store/BoardInterface'; +import { ConfigStore } from './ConfigDialog'; interface IConfigProps { - store: UserConfig; + config: UserConfig; + store: ConfigStore; } export declare class DrawConfigPanel extends React.Component { maxSizeConfig: IUiOption; diff --git a/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts.map b/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts.map index 2b39889..60f158f 100644 --- a/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts.map +++ b/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/DrawConfigPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAc,MAAM,+BAA+B,CAAC;AAKtF,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAM1D,UAAU,YAAY;IAElB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;IACtD,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACpD,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,qBAAqB,CAK3B;IACF,yBAAyB;IAMzB,oBAAoB;IAiBb,MAAM;CAiFhB"} \ No newline at end of file +{"version":3,"file":"DrawConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/DrawConfigPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAc,MAAM,+BAA+B,CAAC;AAKtF,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAK1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,UAAU,YAAY;IAElB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;CACtB;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;IACtD,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACpD,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,qBAAqB,CAK3B;IACF,yBAAyB;IAMzB,oBAAoB;IAiBb,MAAM;CAwHhB"} \ No newline at end of file diff --git a/types/UI/Components/Modal/OptionModal/SystemConfig.d.ts.map b/types/UI/Components/Modal/OptionModal/SystemConfig.d.ts.map index 396cbf4..66aea80 100644 --- a/types/UI/Components/Modal/OptionModal/SystemConfig.d.ts.map +++ b/types/UI/Components/Modal/OptionModal/SystemConfig.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SystemConfig.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/SystemConfig.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,qBACa,iBAAkB,SAAQ,KAAK,CAAC,SAAS;IAElD,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,UAAU,CAAiB;IACnC,yBAAyB;IAMzB,MAAM;CAmFT"} \ No newline at end of file +{"version":3,"file":"SystemConfig.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/SystemConfig.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,qBACa,iBAAkB,SAAQ,KAAK,CAAC,SAAS;IAElD,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,UAAU,CAAiB;IACnC,yBAAyB;IAMzB,MAAM;CA4FT"} \ No newline at end of file diff --git a/types/UI/Components/Panel.d.ts.map b/types/UI/Components/Panel.d.ts.map index 4046ef0..17f9fd5 100644 --- a/types/UI/Components/Panel.d.ts.map +++ b/types/UI/Components/Panel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAUvD,UAAU,aAAa;IAEnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;CACxB;AACD,aAAK,aAAa;IAEd,KAAK,UAAU;IACf,IAAI,SAAS;CAChB;AAQD,qBAEa,QAAS,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAEzE,KAAK,EAAE,aAAa,CAAC;gBACT,KAAK,KAAA;IASjB,WAAW,qBAGT;IACF,YAAY,aAGV;IACF,iBAAiB,aAcf;IACF,cAAc,sBAWZ;IACF,MAAM;IAkEN,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,cAAc,CAMpB;CACL;AAGD,qBAEa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;CAAE,EAAE,EAAE,CAAC;IAE3E,OAAO,CAAC,YAAY,CAYlB;IACF,MAAM;CA2FT"} \ No newline at end of file +{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAWvD,UAAU,aAAa;IAEnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;CACxB;AACD,aAAK,aAAa;IAEd,KAAK,UAAU;IACf,IAAI,SAAS;CAChB;AAQD,qBAEa,QAAS,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAEzE,KAAK,EAAE,aAAa,CAAC;gBACT,KAAK,KAAA;IASjB,WAAW,qBAGT;IACF,YAAY,aAGV;IACF,iBAAiB,aAcf;IACF,cAAc,sBAcZ;IACF,MAAM;IAkEN,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,cAAc,CAMpB;CACL;AAGD,qBAEa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;CAAE,EAAE,EAAE,CAAC;IAE3E,OAAO,CAAC,YAAY,CAYlB;IACF,MAAM;CA2FT"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/BoardPropsComponent.d.ts b/types/UI/Components/RightPanel/BoardPropsComponent.d.ts new file mode 100644 index 0000000..3d59355 --- /dev/null +++ b/types/UI/Components/RightPanel/BoardPropsComponent.d.ts @@ -0,0 +1,69 @@ +import React = require("react"); +import { Board } from "../../../DatabaseServices/Entity/Board"; +export declare const BoardPropsComponent: { + new (props: any): { + _ConfigOption: import("../../Store/BoardInterface").SingleBoardOption; + _ProcessOption: import("../../Store/BoardInterface").BoardProcessOption; + _GrooveOption: import("../../Store/BoardInterface").IGrooveOption; + drillsOption: import("../../../Add-on/DrawDrilling/HoleUtils").IRectHoleOption; + _CurrentBoard: import("mobx").IObservableValue; + _IsSpecialBoard: import("mobx").IObservableValue; + canDrawSpecial: import("mobx").IObservableValue; + canModeling: import("mobx").IObservableValue; + remarks: [string, string][]; + otherBoardData: { + isChaiDan: boolean; + } & import("mobx").IObservableObject; + _UIConfigOPtion: import("../../Store/BoardInterface").IUiOption; + readonly CurrentBoard: Board; + render(): JSX.Element; + setBrConfig: (() => void) & import("mobx").IAction; + InitRectBoardDrillOption: (() => void) & import("mobx").IAction; + SetRectHighDrill: () => void; + handleComfirmOption: () => void; + handleChangeCurrentBoard: (br: Board) => void; + context: any; + setState(state: {} | ((prevState: Readonly<{}>, props: Readonly<{ + board: Board; + }>) => {} | Pick<{}, K>) | Pick<{}, K>, callback?: () => void): void; + forceUpdate(callback?: () => void): void; + readonly props: Readonly<{ + board: Board; + }> & Readonly<{ + children?: React.ReactNode; + }>; + state: Readonly<{}>; + refs: { + [key: string]: React.ReactInstance; + }; + componentDidMount?(): void; + shouldComponentUpdate?(nextProps: Readonly<{ + board: Board; + }>, nextState: Readonly<{}>, nextContext: any): boolean; + componentWillUnmount?(): void; + componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void; + getSnapshotBeforeUpdate?(prevProps: Readonly<{ + board: Board; + }>, prevState: Readonly<{}>): any; + componentDidUpdate?(prevProps: Readonly<{ + board: Board; + }>, prevState: Readonly<{}>, snapshot?: any): void; + componentWillMount?(): void; + UNSAFE_componentWillMount?(): void; + componentWillReceiveProps?(nextProps: Readonly<{ + board: Board; + }>, nextContext: any): void; + UNSAFE_componentWillReceiveProps?(nextProps: Readonly<{ + board: Board; + }>, nextContext: any): void; + componentWillUpdate?(nextProps: Readonly<{ + board: Board; + }>, nextState: Readonly<{}>, nextContext: any): void; + UNSAFE_componentWillUpdate?(nextProps: Readonly<{ + board: Board; + }>, nextState: Readonly<{}>, nextContext: any): void; + }; + displayName: string; + contextType?: React.Context; +}; +//# sourceMappingURL=BoardPropsComponent.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/RightPanel/BoardPropsComponent.d.ts.map b/types/UI/Components/RightPanel/BoardPropsComponent.d.ts.map new file mode 100644 index 0000000..97b2958 --- /dev/null +++ b/types/UI/Components/RightPanel/BoardPropsComponent.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"BoardPropsComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/BoardPropsComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAShC,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AA6G/D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAqC,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/CompositeMetalsPanel.d.ts.map b/types/UI/Components/RightPanel/CompositeMetalsPanel.d.ts.map index 1d7ef80..373a1af 100644 --- a/types/UI/Components/RightPanel/CompositeMetalsPanel.d.ts.map +++ b/types/UI/Components/RightPanel/CompositeMetalsPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CompositeMetalsPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/CompositeMetalsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAanF,UAAU,8BAA8B;IAEpC,KAAK,EAAE,sBAAsB,CAAC;CACjC;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,8BAA8B,CAAC;IAC7E,MAAM;IA0Cb,OAAO,CAAC,IAAI,CAgCV;IACF,OAAO,CAAC,UAAU,CAKhB;CACL"} \ No newline at end of file +{"version":3,"file":"CompositeMetalsPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/CompositeMetalsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAYnF,UAAU,8BAA8B;IAEpC,KAAK,EAAE,sBAAsB,CAAC;CACjC;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,8BAA8B,CAAC;IAC7E,MAAM;IA0Cb,OAAO,CAAC,IAAI,CA6BV;IACF,OAAO,CAAC,UAAU,CAKhB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/Modeling/KnifeList.d.ts b/types/UI/Components/RightPanel/Modeling/KnifeList.d.ts index 4b4a830..7d21146 100644 --- a/types/UI/Components/RightPanel/Modeling/KnifeList.d.ts +++ b/types/UI/Components/RightPanel/Modeling/KnifeList.d.ts @@ -1,6 +1,7 @@ import { IObservableValue } from 'mobx'; import * as React from 'react'; import { IDirectoryProps } from '../../SourceManage/CommonPanel'; +import { IKnifeProps, IUiOption } from '../../../Store/BoardInterface'; export interface IKnifeListProps { deleteFun?: (topline: { topline_id: any; @@ -14,20 +15,26 @@ export interface IKnifeListProps { info: { id: string; name: string; + props: IKnifeProps; }; + selectIds?: Set; + showInfos?: boolean; } export declare class KnifeList extends React.Component { private _cameraFiler; + uiData: IUiOption; + private originProps; constructor(props: any); private handleDbClick; private handleMounseDown; private exitEditor; private renderToasterMessage; private startEditorTopline; - private handleUpdateTopline; + private handleUpdateKnife; private showContextMenu; + componentDidMount(): void; render(): JSX.Element; } //# sourceMappingURL=KnifeList.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/RightPanel/Modeling/KnifeList.d.ts.map b/types/UI/Components/RightPanel/Modeling/KnifeList.d.ts.map index 6499190..22dc40b 100644 --- a/types/UI/Components/RightPanel/Modeling/KnifeList.d.ts.map +++ b/types/UI/Components/RightPanel/Modeling/KnifeList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KnifeList.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/RightPanel/Modeling/KnifeList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAIjE,MAAM,WAAW,eAAe;IAE5B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,UAAU,MAAC;KAAE,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACnE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;CACvC;AAED,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE;IAAE,iBAAiB,EAAE,OAAO,CAAC;CAAE,CAAC;IAC5F,OAAO,CAAC,YAAY,CAAW;gBACnB,KAAK,KAAA;IAOjB,OAAO,CAAC,aAAa,CAGnB;IACF,OAAO,CAAC,gBAAgB,CAQtB;IACF,OAAO,CAAC,UAAU,CAQhB;IACF,OAAO,CAAC,oBAAoB,CAc1B;IACF,OAAO,CAAC,kBAAkB,CAkCxB;IACF,OAAO,CAAC,mBAAmB,CAuCzB;IAEF,OAAO,CAAC,eAAe,CAsBrB;IACK,MAAM;CAuEhB"} \ No newline at end of file +{"version":3,"file":"KnifeList.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/RightPanel/Modeling/KnifeList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAc,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAKjE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAGvE,MAAM,WAAW,eAAe;IAE5B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,UAAU,MAAC;KAAE,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACnE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,CAAC;KAAE,CAAC;IACxD,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE;IAAE,iBAAiB,EAAE,OAAO,CAAC;CAAE,CAAC;IAC5F,OAAO,CAAC,YAAY,CAAW;IACnB,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAC3C,OAAO,CAAC,WAAW,CAAc;gBACrB,KAAK,KAAA;IAOjB,OAAO,CAAC,aAAa,CAGnB;IACF,OAAO,CAAC,gBAAgB,CAmBtB;IACF,OAAO,CAAC,UAAU,CAQhB;IACF,OAAO,CAAC,oBAAoB,CAc1B;IACF,OAAO,CAAC,kBAAkB,CAkCxB;IACF,OAAO,CAAC,iBAAiB,CAuCvB;IAEF,OAAO,CAAC,eAAe,CAsBrB;IACF,iBAAiB;IAKV,MAAM;CA4ChB"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/Modeling/KnifeManage.d.ts b/types/UI/Components/RightPanel/Modeling/KnifeManage.d.ts index b7f18d7..07914c8 100644 --- a/types/UI/Components/RightPanel/Modeling/KnifeManage.d.ts +++ b/types/UI/Components/RightPanel/Modeling/KnifeManage.d.ts @@ -1,21 +1,26 @@ import { Component } from 'react'; +import { IKnifeInfo2 } from '../../../Store/RightPanelStore/Modeling2Store'; interface IKnifeManageProps { + knifeInfo?: IKnifeInfo2; } interface IKnifeManageState { } export declare class KnifeManage extends Component { private canAddPath; + private isSelectKnife; private currentInfo; + constructor(props: any); renderNav: () => JSX.Element; renderMenuItems: () => any; render(): JSX.Element; handleKnifePath: (name: string, currentDir: any, callback: Function) => Promise; - private handleCreateTopline; + private handleCreateKnife; handleRenameKP: (name: string) => Promise; - private drawTopline; + private drawKnife; private startAddKinfePath; private show; private close; + private selectKnife; } export {}; //# sourceMappingURL=KnifeManage.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/RightPanel/Modeling/KnifeManage.d.ts.map b/types/UI/Components/RightPanel/Modeling/KnifeManage.d.ts.map index 0b74021..86ca4c9 100644 --- a/types/UI/Components/RightPanel/Modeling/KnifeManage.d.ts.map +++ b/types/UI/Components/RightPanel/Modeling/KnifeManage.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KnifeManage.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/RightPanel/Modeling/KnifeManage.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAyBzC,UAAU,iBAAiB;CAG1B;AACD,UAAU,iBAAiB;CAG1B;AAED,qBAEa,WAAY,SAAQ,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC5E,OAAO,CAAC,UAAU,CAAyB;IAC/B,OAAO,CAAC,WAAW,CAAwB;IACvD,SAAS,oBAaP;IACF,eAAe,YAGb;IACF,MAAM;IAqDN,eAAe,SAAgB,MAAM,6BAAwB,QAAQ,mBAgCnE;IACF,OAAO,CAAC,mBAAmB,CA+DzB;IAEF,cAAc,SAAgB,MAAM,mBAclC;IACF,OAAO,CAAC,WAAW,CAejB;IACF,OAAO,CAAC,iBAAiB,CAKvB;IACF,OAAO,CAAC,IAAI,CAeV;IACF,OAAO,CAAC,KAAK;CAIhB"} \ No newline at end of file +{"version":3,"file":"KnifeManage.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/RightPanel/Modeling/KnifeManage.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAuBzC,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAE5E,UAAU,iBAAiB;IAEvB,SAAS,CAAC,EAAE,WAAW,CAAC;CAC3B;AACD,UAAU,iBAAiB;CAG1B;AAED,qBACa,WAAY,SAAQ,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC5E,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,aAAa,CAAS;IAClB,OAAO,CAAC,WAAW,CAI7B;gBACU,KAAK,KAAA;IAKjB,SAAS,oBAeP;IACF,eAAe,YAGb;IACF,MAAM;IA8DN,eAAe,SAAgB,MAAM,6BAAwB,QAAQ,mBAgCnE;IACF,OAAO,CAAC,iBAAiB,CAoEvB;IAEF,cAAc,SAAgB,MAAM,mBAclC;IACF,OAAO,CAAC,SAAS,CAoBf;IACF,OAAO,CAAC,iBAAiB,CAKvB;IACF,OAAO,CAAC,IAAI,CAeV;IACF,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,WAAW,CAMjB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/Modeling/ModelingComponent2.d.ts b/types/UI/Components/RightPanel/Modeling/ModelingComponent2.d.ts index 7481529..b2f7f1d 100644 --- a/types/UI/Components/RightPanel/Modeling/ModelingComponent2.d.ts +++ b/types/UI/Components/RightPanel/Modeling/ModelingComponent2.d.ts @@ -2,10 +2,10 @@ import * as React from 'react'; import { Modeling2Store } from '../../../Store/RightPanelStore/Modeling2Store'; export declare class ModelingComponent2 extends React.Component<{ store?: Modeling2Store; + is3D: boolean; }> { - private knifeData; - UNSAFE_componentWillMount(): void; render(): JSX.Element; - private getKnifeList; + private handleItem; + private startSelectKnife; } //# sourceMappingURL=ModelingComponent2.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/RightPanel/Modeling/ModelingComponent2.d.ts.map b/types/UI/Components/RightPanel/Modeling/ModelingComponent2.d.ts.map index d66889d..319258b 100644 --- a/types/UI/Components/RightPanel/Modeling/ModelingComponent2.d.ts.map +++ b/types/UI/Components/RightPanel/Modeling/ModelingComponent2.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ModelingComponent2.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/RightPanel/Modeling/ModelingComponent2.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAE/E,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;CAAE,CAAC;IAEpE,OAAO,CAAC,SAAS,CAAsB;IACnD,yBAAyB;IAIzB,MAAM;IAwDN,OAAO,CAAC,YAAY,CAQlB;CACL"} \ No newline at end of file +{"version":3,"file":"ModelingComponent2.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/RightPanel/Modeling/ModelingComponent2.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAA4C,cAAc,EAAE,MAAM,+CAA+C,CAAC;AASzH,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;CAAE,CAAC;IAE/F,MAAM;IA6FN,OAAO,CAAC,UAAU,CAchB;IACF,OAAO,CAAC,gBAAgB,CAGtB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/Modeling/knifePropsModal.d.ts b/types/UI/Components/RightPanel/Modeling/knifePropsModal.d.ts new file mode 100644 index 0000000..9a33d9f --- /dev/null +++ b/types/UI/Components/RightPanel/Modeling/knifePropsModal.d.ts @@ -0,0 +1,12 @@ +/// +import { IKnifeProps, IUiOption } from '../../../Store/BoardInterface'; +interface IKnifeModalProps { + id: string; + currentProps: IKnifeProps; + uiOption: IUiOption; + originProps: IKnifeProps; + updateList(): any; +} +declare const _default: (props: IKnifeModalProps) => JSX.Element; +export default _default; +//# sourceMappingURL=knifePropsModal.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/RightPanel/Modeling/knifePropsModal.d.ts.map b/types/UI/Components/RightPanel/Modeling/knifePropsModal.d.ts.map new file mode 100644 index 0000000..eccd154 --- /dev/null +++ b/types/UI/Components/RightPanel/Modeling/knifePropsModal.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"knifePropsModal.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/RightPanel/Modeling/knifePropsModal.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAQvE,UAAU,gBAAgB;IAEtB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,QAAG;CAChB;;AAmED,wBAAyC"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/RightPanel.d.ts.map b/types/UI/Components/RightPanel/RightPanel.d.ts.map index a927ab2..0182362 100644 --- a/types/UI/Components/RightPanel/RightPanel.d.ts.map +++ b/types/UI/Components/RightPanel/RightPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RightPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/RightPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,iBAAiB,CAAC;AACzB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,sBAAsB,CAAC;AAY9B,oBAAY,UAAU;IAElB,UAAU,eAAe;IACzB,KAAK,YAAY;IACjB,IAAI,YAAY;IAChB,KAAK,aAAa;IAClB,KAAK,WAAW;IAChB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,aAAa,kBAAkB;IAC/B,MAAM,WAAW;IACjB,MAAM,aAAa;IACnB,MAAM,aAAa;CACtB;AAED,qBAEa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAEzE,OAAO,CAAC,WAAW,CAAkC;gBACzC,KAAK,KAAA;IAKjB,KAAK,aAIH;IACF,WAAW;IAIX,iBAAiB;IAUjB,MAAM;CAqCT"} \ No newline at end of file +{"version":3,"file":"RightPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/RightPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,iBAAiB,CAAC;AACzB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,sBAAsB,CAAC;AAa9B,oBAAY,UAAU;IAElB,UAAU,eAAe;IACzB,KAAK,YAAY;IACjB,IAAI,YAAY;IAChB,KAAK,aAAa;IAClB,KAAK,WAAW;IAChB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,aAAa,kBAAkB;IAC/B,MAAM,WAAW;IACjB,MAAM,aAAa;IACnB,MAAM,aAAa;CACtB;AAED,qBAEa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAEzE,OAAO,CAAC,WAAW,CAAkC;gBACzC,KAAK,KAAA;IAKjB,KAAK,aAIH;IACF,WAAW;IAIX,iBAAiB;IAUjB,MAAM;CAqCT"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/TemplateParamPanel.d.ts.map b/types/UI/Components/RightPanel/TemplateParamPanel.d.ts.map index 9f88e60..b5da898 100644 --- a/types/UI/Components/RightPanel/TemplateParamPanel.d.ts.map +++ b/types/UI/Components/RightPanel/TemplateParamPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateParamPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/TemplateParamPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,SAAS,EAAsC,MAAM,mBAAmB,CAAC;AAG5H,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAKnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,UAAU,kBAAkB;IAExB,KAAK,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,UAAU,kBAAkB;IAExB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,gBAAgB,EAAE,CAAC;CACjC;AACD,aAAK,WAAW;IAEZ,IAAI,IAAI;IACR,KAAK,IAAI;CACZ;AAKD,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAG3F,OAAO,CAAC,qBAAqB,CAAS;IAEtC,OAAO,CAAC,iBAAiB,CAAS;IAGtB,OAAO,CAAC,YAAY,CAA2B;IAE3D,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,gBAAgB,CAA0B;gBACtC,KAAK,EAAE,QAAQ,CAAC,kBAAkB,CAAC;IAQ/C,iBAAiB;IAkEjB,oBAAoB;IAOpB,kBAAkB,CAAC,SAAS,EAAE,kBAAkB;IAgChD,uBAAuB,QAAS,gBAAgB,UAI9C;IAGF,kBAAkB,IAAI,cAAc,GAAG,SAAS;IAoBhD,kBAAkB,CAAC,IAAI,CAAC,EAAE,cAAc;IAcxC,QAAQ;IAwBR,iBAAiB,aAAc,cAAc,KAAG,SAAS,CAYvD;IAGF,OAAO,CAAC,kBAAkB,CAIxB;IAEF,OAAO,CAAC,eAAe,CAiErB;IAKF,OAAO,CAAC,QAAQ,CAkBd;IAEF,OAAO,CAAC,WAAW,CAMjB;IAGF,OAAO,CAAC,kCAAkC,CAIxC;IAEF,iBAAiB,OAAQ,cAAc,eAAe,MAAM,UAa1D;IAEF,OAAO,CAAC,qCAAqC,CAW3C;IAGF,OAAO,CAAC,gBAAgB,CAetB;IAEF,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,2BAA2B,CAKjC;IAGF,OAAO,CAAC,cAAc,CAWpB;IAEF,YAAY,SAAU,SAAS,QAAQ,WAAW,UAkChD;IAGF,aAAa,aAAc,SAAS,UAelC;IACF,MAAM;CAsCT;AAKD,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAAC,mBAAmB,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,eAAe,EAAE,QAAQ,CAAC;CAAE,CAAC;IACpK,WAAW;;;;;;;;;;;;;MAA0F;IACrG,WAAW;;;;;;;;;;;;;MAA0F;IACjH,OAAO,CAAC,QAAQ,CAA2D;IAE3E,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,iBAAiB;IAIjB,kBAAkB,CAAC,SAAS,EAAE;QAAE,mBAAmB,EAAE,cAAc,CAAC;KAAE;IActE,OAAO,CAAC,SAAS,CAgBf;IAGF,4BAA4B;IAiB5B,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM;IAO9C,aAAa,OAAQ,cAAc,2BAajC;IAGF,kBAAkB,MAAO,gBAAgB,OAAO,iBAAiB,UAe/D;IAKF,cAAc,QAAS,iBAAiB,aAsBtC;IAGF,cAAc,sBAkBZ;IAEK,MAAM;CA0IhB"} \ No newline at end of file +{"version":3,"file":"TemplateParamPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/TemplateParamPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,SAAS,EAAsC,MAAM,mBAAmB,CAAC;AAG5H,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAKnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,UAAU,kBAAkB;IAExB,KAAK,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,UAAU,kBAAkB;IAExB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,gBAAgB,EAAE,CAAC;CACjC;AACD,aAAK,WAAW;IAEZ,IAAI,IAAI;IACR,KAAK,IAAI;CACZ;AAKD,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAG3F,OAAO,CAAC,qBAAqB,CAAS;IAEtC,OAAO,CAAC,iBAAiB,CAAS;IAGtB,OAAO,CAAC,YAAY,CAA2B;IAE3D,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,gBAAgB,CAA0B;gBACtC,KAAK,EAAE,QAAQ,CAAC,kBAAkB,CAAC;IAQ/C,iBAAiB;IAkEjB,oBAAoB;IAOpB,kBAAkB,CAAC,SAAS,EAAE,kBAAkB;IAgChD,uBAAuB,QAAS,gBAAgB,UAI9C;IAGF,kBAAkB,IAAI,cAAc,GAAG,SAAS;IAoBhD,kBAAkB,CAAC,IAAI,CAAC,EAAE,cAAc;IAcxC,QAAQ;IAwBR,iBAAiB,aAAc,cAAc,KAAG,SAAS,CAYvD;IAGF,OAAO,CAAC,kBAAkB,CAIxB;IAEF,OAAO,CAAC,eAAe,CAoErB;IAKF,OAAO,CAAC,QAAQ,CAkBd;IAEF,OAAO,CAAC,WAAW,CAMjB;IAGF,OAAO,CAAC,kCAAkC,CAIxC;IAEF,iBAAiB,OAAQ,cAAc,eAAe,MAAM,UAa1D;IAEF,OAAO,CAAC,qCAAqC,CAW3C;IAGF,OAAO,CAAC,gBAAgB,CAetB;IAEF,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,2BAA2B,CAKjC;IAGF,OAAO,CAAC,cAAc,CAWpB;IAEF,YAAY,SAAU,SAAS,QAAQ,WAAW,UAkChD;IAGF,aAAa,aAAc,SAAS,UAelC;IACF,MAAM;CAsCT;AAKD,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAAC,mBAAmB,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,eAAe,EAAE,QAAQ,CAAC;CAAE,CAAC;IACpK,WAAW;;;;;;;;;;;;;MAA0F;IACrG,WAAW;;;;;;;;;;;;;MAA0F;IACjH,OAAO,CAAC,QAAQ,CAA2D;IAE3E,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,iBAAiB;IAIjB,kBAAkB,CAAC,SAAS,EAAE;QAAE,mBAAmB,EAAE,cAAc,CAAC;KAAE;IActE,OAAO,CAAC,SAAS,CAgBf;IAGF,4BAA4B;IAiB5B,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM;IAO9C,aAAa,OAAQ,cAAc,2BAajC;IAGF,kBAAkB,MAAO,gBAAgB,OAAO,iBAAiB,UAe/D;IAKF,cAAc,QAAS,iBAAiB,aAsBtC;IAGF,cAAc,sBAkBZ;IAEK,MAAM;CA0IhB"} \ No newline at end of file diff --git a/types/UI/Components/RotateLayerBoard.d.ts b/types/UI/Components/RotateLayerBoard.d.ts index 724e51f..5c6bc64 100644 --- a/types/UI/Components/RotateLayerBoard.d.ts +++ b/types/UI/Components/RotateLayerBoard.d.ts @@ -13,7 +13,7 @@ interface IRotateLayerBoardOption extends IBaseOption { } export declare class RotateLayerBoardStore extends BoardStore { m_Option: IRotateLayerBoardOption; - HasInvailValue(): boolean; + HasInvailValue(): string; } export declare enum ERotateType { Angle = "angle", diff --git a/types/UI/Components/SourceManage/CommonPanel.d.ts b/types/UI/Components/SourceManage/CommonPanel.d.ts index 51af931..174a094 100644 --- a/types/UI/Components/SourceManage/CommonPanel.d.ts +++ b/types/UI/Components/SourceManage/CommonPanel.d.ts @@ -40,7 +40,7 @@ export declare class CommonPanel extends React.Component; selectIds: Set; private _orderType; - private currentDir; + currentDir: IDirectoryProps; pageData: { count: number; currentPage: number; @@ -83,7 +83,11 @@ export declare class CommonPanel extends React.Component Promise; private getSelectDataIds; private handDeleteData; private handleTreeMouseDown; diff --git a/types/UI/Components/SourceManage/CommonPanel.d.ts.map b/types/UI/Components/SourceManage/CommonPanel.d.ts.map index 3e2d0e7..c801738 100644 --- a/types/UI/Components/SourceManage/CommonPanel.d.ts.map +++ b/types/UI/Components/SourceManage/CommonPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommonPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/CommonPanel.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"CommonPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/CommonPanel.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/SourceManage/UploadCom.d.ts.map b/types/UI/Components/SourceManage/UploadCom.d.ts.map index dfcdb33..1c08ee3 100644 --- a/types/UI/Components/SourceManage/UploadCom.d.ts.map +++ b/types/UI/Components/SourceManage/UploadCom.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"UploadCom.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/UploadCom.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAc,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,UAAU,YAAY;IAElB,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;IAC3C,OAAO,CAAC,EAAE,QAAQ,CAAC;CACtB;AAED;;GAEG;AACH,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;IAClE,OAAO,CAAC,WAAW,CAAmB;IAC1B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,QAAQ,CAAK;IACjC,OAAO,CAAC,KAAK,CAAM;IACP,OAAO,CAAC,YAAY,CAAM;IACtC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAa;IACb,OAAO,CAAC,WAAW,CAAS;IACxC,iBAAiB,4BAIf;IACF,cAAc,aAAoB,QAAQ,mBAiBxC;IACF,OAAO,CAAC,IAAI;IAIZ,YAAY,sBA0CV;IACF,OAAO,CAAC,YAAY,CAKlB;IACF,OAAO,CAAC,WAAW,CAOjB;IACF,iBAAiB;IAejB,MAAM;CAwGT"} \ No newline at end of file +{"version":3,"file":"UploadCom.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/UploadCom.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAc,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,UAAU,YAAY;IAElB,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;IAC3C,OAAO,CAAC,EAAE,QAAQ,CAAC;CACtB;AAED;;GAEG;AACH,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;IAClE,OAAO,CAAC,WAAW,CAAmB;IAC1B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,QAAQ,CAAK;IACjC,OAAO,CAAC,KAAK,CAAM;IACP,OAAO,CAAC,YAAY,CAAM;IACtC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAa;IACb,OAAO,CAAC,WAAW,CAAS;IACxC,iBAAiB,4BAIf;IACF,cAAc,aAAoB,QAAQ,mBAiBxC;IAEF,OAAO,CAAC,IAAI;IAKZ,YAAY,sBA0CV;IACF,OAAO,CAAC,YAAY,CAKlB;IACF,OAAO,CAAC,WAAW,CAOjB;IACF,iBAAiB;IAejB,MAAM;CAwGT"} \ No newline at end of file diff --git a/types/UI/Components/Toaster.d.ts b/types/UI/Components/Toaster.d.ts index 23d4beb..78f059f 100644 --- a/types/UI/Components/Toaster.d.ts +++ b/types/UI/Components/Toaster.d.ts @@ -4,11 +4,13 @@ import { ISetItemOption } from "./Board/BoardCommon"; export declare const AppToaster: import("@blueprintjs/core").IToaster; /**展示多行提示 */ export declare function ShowLinesToaster(strArr: string[], props: Partial, key?: string): void; +export declare function ToasterValueError(msg: string): void; interface IToasterInputProps extends ISetItemOption { inputClassName?: string; onBlur?(e?: any, hasError?: boolean): any; onClick?(e?: any): any; callback?: Function; + selectAll?: boolean; } /** * 参数option为属性对象 @@ -24,6 +26,7 @@ export declare class ToasterInput extends React.Component) => void; handleClick: (e: any) => void; handleBlur: (e: any) => void; + handleFocus: (e: React.FocusEvent) => void; UNSAFE_componentWillMount(): void; componentDidMount(): void; UNSAFE_componentWillReceiveProps(nextProps: any): void; diff --git a/types/UI/Components/Toaster.d.ts.map b/types/UI/Components/Toaster.d.ts.map index 674ba98..7a1883e 100644 --- a/types/UI/Components/Toaster.d.ts.map +++ b/types/UI/Components/Toaster.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Toaster.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Toaster.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,eAAO,MAAM,UAAU,sCAIrB,CAAC;AACH,YAAY;AACZ,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,QAuB7F;AAED,UAAU,kBAAmB,SAAQ,cAAc;IAE/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,CAAC,CAAC,CAAC,KAAA,EAAE,QAAQ,CAAC,EAAE,OAAO,OAAE;IAChC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAA,OAAE;IACb,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACvB;AAED;;GAEG;AACH,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC;IAErE,OAAO,CAAC,QAAQ,CAAS;IACb,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,YAAY,CAAQ;IACxC,MAAM,CAAC,YAAY;;MAEjB;IACF,WAAW,MAAO,MAAM,UAWtB;IACF,YAAY,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAyCpD;IACF,WAAW,mBAKT;IACF,UAAU,mBAQR;IACF,yBAAyB;IAWzB,iBAAiB;IAIjB,gCAAgC,CAAC,SAAS,KAAA;IAO1C,MAAM;CA4BT"} \ No newline at end of file +{"version":3,"file":"Toaster.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Toaster.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,eAAO,MAAM,UAAU,sCAIrB,CAAC;AACH,YAAY;AACZ,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,QAuB7F;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,QAG5C;AAED,UAAU,kBAAmB,SAAQ,cAAc;IAE/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,CAAC,CAAC,CAAC,KAAA,EAAE,QAAQ,CAAC,EAAE,OAAO,OAAE;IAChC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAA,OAAE;IACb,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC;IAErE,OAAO,CAAC,QAAQ,CAAS;IACb,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,YAAY,CAAQ;IACxC,MAAM,CAAC,YAAY;;MAEjB;IACF,WAAW,MAAO,MAAM,UAWtB;IACF,YAAY,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAyCpD;IACF,WAAW,mBAKT;IACF,UAAU,mBAQR;IACF,WAAW,MAAO,gBAAgB,CAAC,gBAAgB,CAAC,UAIlD;IACF,yBAAyB;IAWzB,iBAAiB;IAIjB,gCAAgC,CAAC,SAAS,KAAA;IAO1C,MAAM;CA6BT"} \ No newline at end of file diff --git a/types/UI/Components/TopToolBar/ToolsBlock.d.ts.map b/types/UI/Components/TopToolBar/ToolsBlock.d.ts.map index db7d763..8216b8e 100644 --- a/types/UI/Components/TopToolBar/ToolsBlock.d.ts.map +++ b/types/UI/Components/TopToolBar/ToolsBlock.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ToolsBlock.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/ToolsBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAWhC,OAAO,EAAE,gBAAgB,EAAgD,MAAM,uBAAuB,CAAC;AAKvG,MAAM,WAAW,eAAe;IAE5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AACD,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IAEpD,YAAY,EAAE,OAAO,CAAS;IAC1C,KAAK,EAAE,cAAc,CAAC;IACV,QAAQ,EAAE,gBAAgB,EAAE,CAAgC;IAC5D,SAAS,EAAE,gBAAgB,EAAE,CAA6B;IACtE,iBAAiB;IAWjB,oBAAoB;IAIpB,kBAAkB;IAKlB,gBAAgB,aAmCd;IACF,aAAa,QAAe,MAAM,mBAUhC;IACF,cAAc,sBAkBZ;IACF,MAAM;CAkET"} \ No newline at end of file +{"version":3,"file":"ToolsBlock.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/ToolsBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAWhC,OAAO,EAAE,gBAAgB,EAAgD,MAAM,uBAAuB,CAAC;AAKvG,MAAM,WAAW,eAAe;IAE5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AACD,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IAEpD,YAAY,EAAE,OAAO,CAAS;IAC1C,KAAK,EAAE,cAAc,CAAC;IACV,QAAQ,EAAE,gBAAgB,EAAE,CAAgC;IAC5D,SAAS,EAAE,gBAAgB,EAAE,CAA6B;IACtE,iBAAiB;IAWjB,oBAAoB;IAIpB,kBAAkB;IAKlB,gBAAgB,aAmCd;IACF,aAAa,QAAe,MAAM,mBAmBhC;IACF,cAAc,sBAkBZ;IACF,MAAM;CAkET"} \ No newline at end of file diff --git a/types/UI/Components/TopToolBar/TopToolBar.d.ts.map b/types/UI/Components/TopToolBar/TopToolBar.d.ts.map index 9a3a8b6..7bc8261 100644 --- a/types/UI/Components/TopToolBar/TopToolBar.d.ts.map +++ b/types/UI/Components/TopToolBar/TopToolBar.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TopToolBar.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/TopToolBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAchC,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAEvC,OAAO,CAAC,aAAa,CAAiB;IAClD,MAAM;CAmLT"} \ No newline at end of file +{"version":3,"file":"TopToolBar.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/TopToolBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAchC,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAEvC,OAAO,CAAC,aAAa,CAAiB;IAClD,MAAM;CAqLT"} \ No newline at end of file diff --git a/types/UI/Editor/Asset/MaterialRenderer.d.ts.map b/types/UI/Editor/Asset/MaterialRenderer.d.ts.map index 8ca7203..56b138a 100644 --- a/types/UI/Editor/Asset/MaterialRenderer.d.ts.map +++ b/types/UI/Editor/Asset/MaterialRenderer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"MaterialRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Editor/Asset/MaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAAE,IAAI,EAAwD,KAAK,EAAkB,MAAM,EAAkB,aAAa,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjL,qBAAa,gBAAgB;IAEzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,aAAa,CAAC;;IAoCxB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAI5B,MAAM,CAAC,QAAQ,EAAE,QAAQ;IAyBzB,OAAO,CAAC,QAAQ,EAAE,QAAQ;IAkB1B,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAA;CAOtC;AAGD,wBAAgB,sBAAsB,qBAMrC"} \ No newline at end of file +{"version":3,"file":"MaterialRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Editor/Asset/MaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAAE,IAAI,EAAwD,KAAK,EAAkB,MAAM,EAAkB,aAAa,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjL,qBAAa,gBAAgB;IAEzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,aAAa,CAAC;;IAoCxB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAI5B,MAAM,CAAC,QAAQ,EAAE,QAAQ;IAyBzB,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1C,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAA;CAOtC;AAGD,wBAAgB,sBAAsB,qBAMrC"} \ No newline at end of file diff --git a/types/UI/IconEnum.d.ts b/types/UI/IconEnum.d.ts index a551c8a..d45809d 100644 --- a/types/UI/IconEnum.d.ts +++ b/types/UI/IconEnum.d.ts @@ -178,6 +178,8 @@ export declare enum IconEnum { OneKeyLayout = "ONEKEYLAYOUT.svg", OneKeyPrint = "ONEKEYPRINT.svg", CheckNoHoleBoard = "CHECKNOHOLEBOARD.svg", - CheckDrawHole = "CHECKDRAWHOLE.svg" + CheckDrawHole = "CHECKDRAWHOLE.svg", + EditorBBS = "EDITORBBS.svg", + R2b2 = "R2B2.svg" } //# sourceMappingURL=IconEnum.d.ts.map \ No newline at end of file diff --git a/types/UI/IconEnum.d.ts.map b/types/UI/IconEnum.d.ts.map index c35965e..3b7aeac 100644 --- a/types/UI/IconEnum.d.ts.map +++ b/types/UI/IconEnum.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"IconEnum.d.ts","sourceRoot":"","sources":["../../../src/UI/IconEnum.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"IconEnum.d.ts","sourceRoot":"","sources":["../../../src/UI/IconEnum.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Store/ActivityLayerBoardStore.d.ts b/types/UI/Store/ActivityLayerBoardStore.d.ts index 122d8ab..cf565f0 100644 --- a/types/UI/Store/ActivityLayerBoardStore.d.ts +++ b/types/UI/Store/ActivityLayerBoardStore.d.ts @@ -16,6 +16,6 @@ export declare class ActivityLayerBoardStore extends BoardStore { InitOption(): void; SaveConfig(): IConfigOption; UpdateOption(cof: IConfigOption): void; - HasInvailValue(): boolean; + HasInvailValue(): string; } //# sourceMappingURL=ActivityLayerBoardStore.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/BoardFindModifyStore.d.ts b/types/UI/Store/BoardFindModifyStore.d.ts index 00ab88b..73bb148 100644 --- a/types/UI/Store/BoardFindModifyStore.d.ts +++ b/types/UI/Store/BoardFindModifyStore.d.ts @@ -14,6 +14,6 @@ export declare class BoardFindStore extends BoardStore { SaveConfig(): IConfigOption; UpdateOption(cof: IConfigOption): void; CheckIsSelectAll(): void; - HasInvailValue(): boolean; + HasInvailValue(): string; } //# sourceMappingURL=BoardFindModifyStore.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/BoardInterface.d.ts b/types/UI/Store/BoardInterface.d.ts index 3cacdae..8237ffb 100644 --- a/types/UI/Store/BoardInterface.d.ts +++ b/types/UI/Store/BoardInterface.d.ts @@ -281,4 +281,8 @@ export interface IDrawBoardAutoCutOption { isAutoCut: boolean; isRelevance: boolean; } +export interface IKnifeProps { + radius: number; + angle: number; +} //# sourceMappingURL=BoardInterface.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/BoardInterface.d.ts.map b/types/UI/Store/BoardInterface.d.ts.map index 3df1961..e22400a 100644 --- a/types/UI/Store/BoardInterface.d.ts.map +++ b/types/UI/Store/BoardInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BoardInterface.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BoardInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BoardInterface.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Store/BoardStore.d.ts b/types/UI/Store/BoardStore.d.ts index 134e3c5..e837908 100644 --- a/types/UI/Store/BoardStore.d.ts +++ b/types/UI/Store/BoardStore.d.ts @@ -9,7 +9,7 @@ export interface IConfigStore { InitOption: () => void; SaveConfig: () => IConfigOption; UpdateOption: Function; - HasInvailValue?: () => boolean; + HasInvailValue?: () => string; EditorTemplate?: TemplateRecord; InitConfigs?: () => { [key: string]: IConfigOption; @@ -38,7 +38,7 @@ export declare class BoardStore extends Singleton implements IC SaveConfig(): IConfigOption; UpdateOption(cof: IConfigOption): void; protected UpdateRemarks(cof: IConfigOption): void; - HasInvailValue(): boolean; + HasInvailValue(): string; InitConfigs(): any; } export declare class SideBoardStore extends BoardStore { @@ -63,7 +63,7 @@ export declare class TopBottomBoardStore extends BoardStore { SaveConfig(): IConfigOption; UpdateOption(cof: IConfigOption): void; private UpdateConfigVersion; - HasInvailValue(): boolean; + HasInvailValue(): string; } export declare class BehindBoardStore extends BoardStore { title: string; @@ -73,7 +73,7 @@ export declare class BehindBoardStore extends BoardStore { InitOption(): void; SaveConfig(): IConfigOption; UpdateOption(cof: IConfigOption): void; - HasInvailValue(): boolean; + HasInvailValue(): string; InitConfigs(): { [key: string]: IConfigOption; }; @@ -89,7 +89,7 @@ export declare class LayerBoardStore extends BoardStore { InitConfigs(): {}; SaveConfig(): IConfigOption; UpdateOption(cof: IConfigOption): void; - HasInvailValue(): boolean; + HasInvailValue(): string; } export declare class VerticalBoardStore extends BoardStore { title: string; diff --git a/types/UI/Store/BoardStore.d.ts.map b/types/UI/Store/BoardStore.d.ts.map index 34834a2..8d2eda6 100644 --- a/types/UI/Store/BoardStore.d.ts.map +++ b/types/UI/Store/BoardStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BoardStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BoardStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BoardStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts b/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts index 4b689d7..3984d59 100644 --- a/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts +++ b/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts @@ -62,7 +62,7 @@ export declare class DoorDrawerStore extends BoardStore; UpdateOption(cof: IConfigOption): void; - HasInvailValue(): boolean; + HasInvailValue(): string; protected UpdateDoorDrawerVersionInfo(cof: IConfigOption): void; } export {}; diff --git a/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts.map b/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts.map index 33b41ea..41d4250 100644 --- a/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts.map +++ b/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DoorDrawerStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/DoorDrawerStore/DoorDrawerStore.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKvG,aAAK,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3C,qBAAa,eAAgB,SAAQ,UAAU,CAAC,0BAA0B,CAAC;IAEvE,QAAQ,EAAE,0BAA0B,CAAC;IACrC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC5D,WAAW,SAAK;IAChB,UAAU,SAAK;IACf,UAAU,SAAK;IACf,SAAS,SAAK;IACd,UAAU,SAAK;IACf,UAAU,SAAK;IACf,WAAW,SAAK;IAChB,WAAW,SAAK;IAChB,YAAY,SAAK;IACjB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IACd,eAAe,EAAE,WAAW,EAAE,CAAM;IAChD,iBAAiB;IACL,eAAe,EAAE,iBAAiB,EAAE,CAAM;IACtD,iBAAiB;IACL,iBAAiB,EAAE,iBAAiB,EAAE,CAAM;IAC5C,kBAAkB,EAAE,eAAe,CAAC;IAChD,OAAO,CAAC,SAAS,CAKf;IACF,IAAI,eAAe,YASlB;IACD,IAAI,aAAa,YAGhB;IACD,IAAI,eAAe,YAGlB;IACD,IAAI,eAAe;;;;;MAsDlB;IACD,SAAS;IACT,eAAe;IACf,SAAS,CAAC,oBAAoB;IAyB9B,WAAW;IACX,SAAS,CAAC,iBAAiB;IAkD3B,aAAa;IACb,SAAS;IAwCT,WAAW;IACX,IAAI,eAAe,WAGlB;IACD,IAAI,cAAc;;;MAwBjB;IACD,IAAI,aAAa;;;MAoBhB;IACD,OAAO,CAAC,iBAAiB;IAsDzB,SAAS,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM;IAkBjF;;;MAGE;IACF,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,UAAO,EAAE,WAAW,CAAC,EAAE,WAAW;IAuC5E,cAAc,CAAC,IAAI,EAAE,MAAM;IAI3B,UAAU;IAcV,YAAY,CAAC,GAAG,EAAE,aAAa;IA2C/B,cAAc;IAId,SAAS,CAAC,2BAA2B,CAAC,GAAG,EAAE,aAAa,CAAC,0BAA0B,CAAC;CAavF"} \ No newline at end of file +{"version":3,"file":"DoorDrawerStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/DoorDrawerStore/DoorDrawerStore.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKvG,aAAK,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3C,qBAAa,eAAgB,SAAQ,UAAU,CAAC,0BAA0B,CAAC;IAEvE,QAAQ,EAAE,0BAA0B,CAAC;IACrC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC5D,WAAW,SAAK;IAChB,UAAU,SAAK;IACf,UAAU,SAAK;IACf,SAAS,SAAK;IACd,UAAU,SAAK;IACf,UAAU,SAAK;IACf,WAAW,SAAK;IAChB,WAAW,SAAK;IAChB,YAAY,SAAK;IACjB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IACd,eAAe,EAAE,WAAW,EAAE,CAAM;IAChD,iBAAiB;IACL,eAAe,EAAE,iBAAiB,EAAE,CAAM;IACtD,iBAAiB;IACL,iBAAiB,EAAE,iBAAiB,EAAE,CAAM;IAC5C,kBAAkB,EAAE,eAAe,CAAC;IAChD,OAAO,CAAC,SAAS,CAKf;IACF,IAAI,eAAe,YASlB;IACD,IAAI,aAAa,YAGhB;IACD,IAAI,eAAe,YAGlB;IACD,IAAI,eAAe;;;;;MAsDlB;IACD,SAAS;IACT,eAAe;IACf,SAAS,CAAC,oBAAoB;IAyB9B,WAAW;IACX,SAAS,CAAC,iBAAiB;IAkD3B,aAAa;IACb,SAAS;IAwCT,WAAW;IACX,IAAI,eAAe,WAGlB;IACD,IAAI,cAAc;;;MAwBjB;IACD,IAAI,aAAa;;;MAoBhB;IACD,OAAO,CAAC,iBAAiB;IAsDzB,SAAS,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM;IAkBjF;;;MAGE;IACF,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,UAAO,EAAE,WAAW,CAAC,EAAE,WAAW;IAuC5E,cAAc,CAAC,IAAI,EAAE,MAAM;IAI3B,UAAU;IAcV,YAAY,CAAC,GAAG,EAAE,aAAa;IA2C/B,cAAc;IAWd,SAAS,CAAC,2BAA2B,CAAC,GAAG,EAAE,aAAa,CAAC,0BAA0B,CAAC;CAavF"} \ No newline at end of file diff --git a/types/UI/Store/DrillStore.d.ts b/types/UI/Store/DrillStore.d.ts index f1d85ac..e5f3f31 100644 --- a/types/UI/Store/DrillStore.d.ts +++ b/types/UI/Store/DrillStore.d.ts @@ -17,7 +17,7 @@ export declare class DrillStore extends BoardStore { UpdateOption(cof: IConfigOption): void; ChangeRules(i: number): void; DeleteRule: () => void; - HasInvailValue(): boolean; + HasInvailValue(): string; /**修正就版本排钻配置,缓存排钻模板 */ HandleDrillConfig(ruleMap: Map): void; CacheDrillTemp(tempId: string): Promise; diff --git a/types/UI/Store/DrillStore.d.ts.map b/types/UI/Store/DrillStore.d.ts.map index c190532..f9e0d44 100644 --- a/types/UI/Store/DrillStore.d.ts.map +++ b/types/UI/Store/DrillStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrillStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/DrillStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAW/D,qBAAa,UAAW,SAAQ,UAAU;IAE1B,kBAAkB,SAAK;IAEvB,IAAI,SAAS;IAEb,KAAK,EAAE,cAAc,EAAE,CAAM;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAa;IACnE,eAAe,eAAa;;IAM5B,OAAO,CAAC,gBAAgB;IAkFxB,UAAU;IAsBV,eAAe,CAAC,IAAI,EAAE,MAAM;IAO5B,cAAc;IA0Cd,UAAU;IAYV,YAAY,CAAC,GAAG,EAAE,aAAa;IAe/B,WAAW,CAAC,CAAC,EAAE,MAAM;IASrB,UAAU,aAKR;IACF,cAAc;IAId,sBAAsB;IACtB,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IA+BlD,cAAc,CAAC,MAAM,EAAE,MAAM;CAoBtC"} \ No newline at end of file +{"version":3,"file":"DrillStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/DrillStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAW/D,qBAAa,UAAW,SAAQ,UAAU;IAE1B,kBAAkB,SAAK;IAEvB,IAAI,SAAS;IAEb,KAAK,EAAE,cAAc,EAAE,CAAM;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAa;IACnE,eAAe,eAAa;;IAM5B,OAAO,CAAC,gBAAgB;IAmFxB,UAAU;IAsBV,eAAe,CAAC,IAAI,EAAE,MAAM;IAO5B,cAAc;IA0Cd,UAAU;IAYV,YAAY,CAAC,GAAG,EAAE,aAAa;IAe/B,WAAW,CAAC,CAAC,EAAE,MAAM;IASrB,UAAU,aAKR;IACF,cAAc;IAId,sBAAsB;IACtB,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAqClD,cAAc,CAAC,MAAM,EAAE,MAAM;CAoBtC"} \ No newline at end of file diff --git a/types/UI/Store/LatticeDrawerStore.d.ts b/types/UI/Store/LatticeDrawerStore.d.ts index 9700503..6d88e9f 100644 --- a/types/UI/Store/LatticeDrawerStore.d.ts +++ b/types/UI/Store/LatticeDrawerStore.d.ts @@ -6,6 +6,6 @@ export declare class LatticeDrawerStore extends BoardStore { InitOption(): void; SaveConfig(): IConfigOption; UpdateOption(cof: IConfigOption): void; - HasInvailValue(): boolean; + HasInvailValue(): string; } //# sourceMappingURL=LatticeDrawerStore.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/HardwareStore.d.ts b/types/UI/Store/RightPanelStore/HardwareStore.d.ts index a194919..9a7f799 100644 --- a/types/UI/Store/RightPanelStore/HardwareStore.d.ts +++ b/types/UI/Store/RightPanelStore/HardwareStore.d.ts @@ -16,7 +16,7 @@ export declare abstract class BaseHardwareStore implements IConfigStore { InitOption(): void; SaveConfig(): IConfigOption; UpdateOption(cof: IConfigOption): void; - HasInvailValue(): boolean; + HasInvailValue(): string; } export declare class CompositeHardwareStore extends BaseHardwareStore { option: ICompHardwareOption; diff --git a/types/UI/Store/RightPanelStore/Modeling2Store.d.ts b/types/UI/Store/RightPanelStore/Modeling2Store.d.ts index 2dd36c9..8824b27 100644 --- a/types/UI/Store/RightPanelStore/Modeling2Store.d.ts +++ b/types/UI/Store/RightPanelStore/Modeling2Store.d.ts @@ -1,23 +1,47 @@ -import { FaceDirection } from "../BoardInterface"; +import { FaceDirection, IUiOption, IKnifeProps } from "../BoardInterface"; import { IConfigOption } from "../../Components/Board/UserConfig"; import { IConfigStore } from "../BoardStore"; +import { I2DModeling, IKnifeInfo } from "../../../DatabaseServices/Entity/Board"; +export interface IKnifeInfo2 { + id: string; + name: string; + props: IKnifeProps; +} +export interface IVModelingInfo { + offset: number; + depth: number; + knife: IKnifeInfo2; +} +declare type IUIVModelingInfo = Pick, "offset" | "depth">[]; export interface IModeling2Item { readonly color: number; dir: FaceDirection; - knife: { - id: string; - name: string; - }; + items: IVModelingInfo[]; +} +export interface IUiVModeing { + readonly color: number; + dir: FaceDirection; + items: IUIVModelingInfo; } export declare class Modeling2Store implements IConfigStore { configName: string; configsNames: string[]; modelingItems: IModeling2Item[]; + uiModeingItems: IUiVModeing[]; isUpdate: boolean; constructor(); InitModelingItems(): void; + AddItems(index: number): void; + RemoveItem(index: number, itemIndex: number): void; + ChangeModelingValue(index: number, data: I2DModeling): void; + ChangeModelingValue3D(index: number, item: { + knife: IKnifeInfo; + dir: FaceDirection; + }): void; InitOption(): void; SaveConfig(): IConfigOption; + UpdateUIOption(): void; UpdateOption(cof: IConfigOption): void; } +export {}; //# sourceMappingURL=Modeling2Store.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/Modeling2Store.d.ts.map b/types/UI/Store/RightPanelStore/Modeling2Store.d.ts.map index 80def2e..0a0d8bd 100644 --- a/types/UI/Store/RightPanelStore/Modeling2Store.d.ts.map +++ b/types/UI/Store/RightPanelStore/Modeling2Store.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Modeling2Store.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/Modeling2Store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;CACxC;AAGD,qBAAa,cAAe,YAAW,YAAY;IAEnC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,aAAa,EAAE,cAAc,EAAE,CAAM;IACjD,QAAQ,UAAQ;;IAKhB,iBAAiB;IAYjB,UAAU;IAIV,UAAU;IAMV,YAAY,CAAC,GAAG,EAAE,aAAa;CAIlC"} \ No newline at end of file +{"version":3,"file":"Modeling2Store.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/Modeling2Store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAIjF,MAAM,WAAW,WAAW;IAExB,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC;CAChD;AAED,MAAM,WAAW,cAAc;IAE3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,CAAC;CACtB;AACD,aAAK,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;AAC9E,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,gBAAgB,CAAC;CAC3B;AAED,qBAAa,cAAe,YAAW,YAAY;IAEnC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,aAAa,EAAE,cAAc,EAAE,CAAM;IACrC,cAAc,EAAE,WAAW,EAAE,CAAM;IAC/C,QAAQ,UAAQ;;IAMhB,iBAAiB;IAgDjB,QAAQ,CAAC,KAAK,EAAE,MAAM;IAatB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAM3C,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW;IAmBpD,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,aAAa,CAAC;KAAE;IAoBrF,UAAU;IAIV,UAAU;IAOV,cAAc;IAyBd,YAAY,CAAC,GAAG,EAAE,aAAa;CAKlC"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/RightPanelStore.d.ts b/types/UI/Store/RightPanelStore/RightPanelStore.d.ts index 0241a6e..e6eb117 100644 --- a/types/UI/Store/RightPanelStore/RightPanelStore.d.ts +++ b/types/UI/Store/RightPanelStore/RightPanelStore.d.ts @@ -1,4 +1,4 @@ -import { TabId } from "@blueprintjs/core"; +import { IOptionProps, TabId } from "@blueprintjs/core"; import { Singleton } from "../../../Common/Singleton"; import { Board } from "../../../DatabaseServices/Entity/Board"; import { DrillingStore } from "./DrillingStore"; @@ -6,6 +6,7 @@ import { LightStore } from "./LightStore"; import { ModelingStore } from "./ModelingStore"; import { SealingStore } from "./SealingStore"; import { Modeling2Store } from "./Modeling2Store"; +import { IKnifeProps } from "../BoardInterface"; export declare class RightPanelStore extends Singleton { m_TabId: TabId; m_IsShow: boolean; @@ -18,6 +19,9 @@ export declare class RightPanelStore extends Singleton { drillingStore: DrillingStore; modeling2Store: Modeling2Store; modeling3Store: Modeling2Store; + knifeMap: Map; constructor(); templateParamInputFocus: (keyword: string) => void; } diff --git a/types/UI/Store/RightPanelStore/RightPanelStore.d.ts.map b/types/UI/Store/RightPanelStore/RightPanelStore.d.ts.map index c7e713b..6e7e078 100644 --- a/types/UI/Store/RightPanelStore/RightPanelStore.d.ts.map +++ b/types/UI/Store/RightPanelStore/RightPanelStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RightPanelStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/RightPanelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,qBAAa,eAAgB,SAAQ,SAAS;IAE9B,OAAO,EAAE,KAAK,CAAoB;IAClC,QAAQ,UAAS;IACjB,YAAY,EAAE,KAAK,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,gBAAgB,EAAE,CAAM;IAC5D,aAAa,gBAAuB;IACpC,UAAU,aAAoB;IAC9B,YAAY,eAAsB;IAClC,aAAa,gBAAuB;IACpC,cAAc,iBAAwB;IACtC,cAAc,iBAAwB;;IAkBtC,uBAAuB,YAAa,MAAM,UAOxC;CACL"} \ No newline at end of file +{"version":3,"file":"RightPanelStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/RightPanelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAIxD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,eAAgB,SAAQ,SAAS;IAE9B,OAAO,EAAE,KAAK,CAAoB;IAClC,QAAQ,UAAS;IACjB,YAAY,EAAE,KAAK,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,gBAAgB,EAAE,CAAM;IAC5D,aAAa,gBAAuB;IACpC,UAAU,aAAoB;IAC9B,YAAY,eAAsB;IAClC,aAAa,gBAAuB;IACpC,cAAc,iBAAwB;IACtC,cAAc,iBAAwB;IACtC,QAAQ;gBAA6C,WAAW;OAAQ;;IAkBxE,uBAAuB,YAAa,MAAM,UAOxC;CACL"} \ No newline at end of file diff --git a/types/UI/Store/UserConfigStore.d.ts.map b/types/UI/Store/UserConfigStore.d.ts.map index 2ec8e44..dd3d745 100644 --- a/types/UI/Store/UserConfigStore.d.ts.map +++ b/types/UI/Store/UserConfigStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"UserConfigStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/UserConfigStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,OAAO,EAAE,cAAc,EAAa,MAAM,gCAAgC,CAAC;AAqB3E,UAAU,WAAW;IAEjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AACD,oBAAY,aAAa;IAErB,MAAM,OAAO;IACb,SAAS,OAAO;IAChB,SAAS,OAAO;CACnB;AAED,qBAAa,eAAgB,SAAQ,SAAS;IAE1C,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC/B,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;IAiB5C,eAAe;IAYf,0BAA0B;IAY1B,kBAAkB;IAQlB,cAAc;IA6Bd,eAAe;IAQrB,gBAAgB;IACV,YAAY;IA0BZ,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgBpE,OAAO,CAAC,kBAAkB;IAapB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,eAAe,UAAO,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IA6BlH,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,GAAE,WAAgB;IA+E9E,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY;IA0D5D,iBAAiB,MAAa,MAAM,QAAQ,cAAc,SAAS,YAAY,mBAW7E;IACF,OAAO,CAAC,gBAAgB;IAOlB,eAAe;IA2Cf,iBAAiB;IAKjB,eAAe,CAAC,GAAG,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;KAAE,EAAE;IAwBpD,kBAAkB;IAclB,qBAAqB,CAAC,OAAO,EAAE,cAAc;IAS7C,aAAa;IAwBnB,aAAa;CAYhB;AAED,eAAO,MAAM,eAAe,iBAAmD,CAAC"} \ No newline at end of file +{"version":3,"file":"UserConfigStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/UserConfigStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,OAAO,EAAE,cAAc,EAAa,MAAM,gCAAgC,CAAC;AAwB3E,UAAU,WAAW;IAEjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AACD,oBAAY,aAAa;IAErB,MAAM,OAAO;IACb,SAAS,OAAO;IAChB,SAAS,OAAO;CACnB;AAED,qBAAa,eAAgB,SAAQ,SAAS;IAE1C,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC/B,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;IAiB5C,eAAe;IAYf,0BAA0B;IAY1B,kBAAkB;IAQlB,cAAc;IAoCd,eAAe;IAQrB,gBAAgB;IACV,YAAY;IA2BZ,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgBpE,OAAO,CAAC,kBAAkB;IAapB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,eAAe,UAAO,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IA6BlH,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,GAAE,WAAgB;IA4E9E,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY;IA0D5D,iBAAiB,MAAa,MAAM,QAAQ,cAAc,SAAS,YAAY,mBAW7E;IACF,OAAO,CAAC,gBAAgB;IAOlB,eAAe;IA2Cf,iBAAiB;IAKjB,eAAe,CAAC,GAAG,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;KAAE,EAAE;IAwBpD,kBAAkB;IAclB,qBAAqB,CAAC,OAAO,EAAE,cAAc;IAS7C,aAAa;IAwBnB,aAAa;CAahB;AAED,eAAO,MAAM,eAAe,iBAAmD,CAAC"} \ No newline at end of file diff --git a/types/UI/Store/WineRackStore.d.ts b/types/UI/Store/WineRackStore.d.ts index ccdd0b2..ef0b7e8 100644 --- a/types/UI/Store/WineRackStore.d.ts +++ b/types/UI/Store/WineRackStore.d.ts @@ -5,7 +5,7 @@ import { IWineRackOption } from "./WineRackInterface"; export declare class WineRackStore extends BoardStore { EditorTemplate: TemplateWineRackRecord; m_Option: IWineRackOption; - HasInvailValue(): boolean; + HasInvailValue(): string; InitOption(): void; SaveConfig(): IConfigOption; UpdateOption(cof: IConfigOption): void; diff --git a/types/UI/Store/drillInterface.d.ts b/types/UI/Store/drillInterface.d.ts index f8b1306..268675e 100644 --- a/types/UI/Store/drillInterface.d.ts +++ b/types/UI/Store/drillInterface.d.ts @@ -44,6 +44,7 @@ export interface DrillingOption extends IBaseOption { ymjDepthExpr: string; ljgPos: string; woodPinPos: string; + ymjPos: string; canSameType: boolean; useTemp: boolean; tempId: string; diff --git a/types/UI/Store/drillInterface.d.ts.map b/types/UI/Store/drillInterface.d.ts.map index fe95a70..ebbff69 100644 --- a/types/UI/Store/drillInterface.d.ts.map +++ b/types/UI/Store/drillInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"drillInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/drillInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oBAAY,WAAW;IAEnB,UAAU,OAAO;IACjB,SAAS,UAAU;CACtB;AACD;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,WAAW;IAE/C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACrB"} \ No newline at end of file +{"version":3,"file":"drillInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/drillInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oBAAY,WAAW;IAEnB,UAAU,OAAO;IACjB,SAAS,UAAU;CACtB;AACD;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,WAAW;IAE/C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACrB"} \ No newline at end of file diff --git a/types/ueapi.d.ts b/types/ueapi.d.ts new file mode 100644 index 0000000..45a42c4 --- /dev/null +++ b/types/ueapi.d.ts @@ -0,0 +1,5 @@ +export * from "./DatabaseServices/Entity/Circle"; +export * from "./DatabaseServices/Entity/Extrude"; +export * from "./DatabaseServices/Entity/Polyline"; +export * from "./Geometry/ExtrudeEdgeGeometry2"; +//# sourceMappingURL=ueapi.d.ts.map \ No newline at end of file diff --git a/types/ueapi.d.ts.map b/types/ueapi.d.ts.map new file mode 100644 index 0000000..054955a --- /dev/null +++ b/types/ueapi.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ueapi.d.ts","sourceRoot":"","sources":["../../src/ueapi.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC"} \ No newline at end of file